a1800_codec 1.0.0

A clean room implementation of the GeneralPlus A1800 audio codec
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
// Auto-generated from A1800.DLL -- do not edit by hand.
#![allow(clippy::unreadable_literal)]

pub const BIT_ALLOC_COST: [i16; 8] = [
        52,     47,     43,     37,     29,     22,     16,      0,
];

pub const SCALE_FACTOR_BITS: [i16; 128] = [
         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,
         0,      0,      0,      0,      0,      0,      1,      1,      1,      1,      2,      3,      4,      6,      8,     11,
        16,     23,     32,     45,     64,     91,    128,    181,    256,    362,    512,    724,   1024,   1448,   2048,   2896,
      4096,   5793,   8192,  11585,  16384,  23170,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,
     32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,
     32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,  32767,  23170,  16384,  11585,   8192,   5793,   4096,   2896,
      2048,   1448,   1024,    724,    512,    362,    256,    181,    128,     91,     64,     45,     32,     23,     16,     11,
         8,      6,      4,      3,      2,      1,      1,      1,      1,      0,      0,      0,      0,      0,      0,      0,
];

pub const QUANT_LEVELS_M1: [i16; 8] = [
         2,      2,      2,      4,      4,      5,      5,      1,
];

pub const QUANT_NUM_COEFF: [i16; 8] = [
        10,     10,     10,      5,      5,      4,      4,     20,
];

pub const QUANT_INV_STEP: [i16; 8] = [
        13,      9,      6,      4,      3,      2,      1,      1,
];

pub const QUANT_STEP_SIZE: [i16; 8] = [
      2341,   3277,   4682,   6554,   8193,  10923,  16385,  16385,
];

pub const QUANT_RECON_LEVELS: [[i16; 16]; 8] = [
    [     0,   1606,   3119,   4586,   6049,   7502,   8941,  10406,  11851,  13292,  14736,  16146,  17566,  19351,      0,      0],
    [     0,   2229,   4341,   6401,   8471,  10531,  12583,  14588,  16673,  18924,      0,      0,      0,      0,      0,      0],
    [     0,   3055,   5998,   8929,  11806,  14680,  17680,      0,      0,      0,      0,      0,      0,      0,      0,      0],
    [     0,   4121,   8192,  12259,  16322,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0],
    [     0,   5413,  11071,  16315,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0],
    [     0,   6785,  14300,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0],
    [     0,   8044,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0],
    [     0,   8019,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0],
];

/// Huffman tree for gain codes: 322 nodes (14 sections x 23), each (left, right).
/// Positive = child node index, negative = leaf value (negate to get symbol).
pub const GAIN_HUFFMAN_TREE: [[i16; 2]; 322] = [
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     0,      0],
    [     1,      2],
    [     3,      4],
    [     5,      6],
    [     7,      8],
    [     9,     10],
    [    11,    -12],
    [   -11,    -10],
    [    -8,     -9],
    [    -7,     -6],
    [   -13,     12],
    [    -5,     -4],
    [     0,     13],
    [    -3,    -14],
    [    -2,     14],
    [    -1,     15],
    [   -15,     16],
    [   -16,     17],
    [   -17,     18],
    [    19,     20],
    [    21,     22],
    [   -18,    -19],
    [   -20,    -21],
    [   -22,    -23],
    [     1,      2],
    [     3,      4],
    [     5,      6],
    [     7,      8],
    [   -10,     -9],
    [    -8,    -11],
    [    -7,     -6],
    [     9,     -5],
    [    10,    -12],
    [    -4,     11],
    [   -13,     -3],
    [    12,     -2],
    [    13,    -14],
    [    -1,     14],
    [    15,    -15],
    [     0,     16],
    [   -16,     17],
    [   -17,     18],
    [   -18,     19],
    [    20,     21],
    [    22,    -19],
    [   -20,    -21],
    [   -22,    -23],
    [     1,      2],
    [     3,      4],
    [     5,      6],
    [     7,      8],
    [     9,     10],
    [   -12,     11],
    [   -11,    -13],
    [   -10,     -9],
    [    12,    -14],
    [    -8,     -7],
    [   -15,     -6],
    [    13,     -5],
    [   -16,     -4],
    [    14,    -17],
    [    15,     -3],
    [    16,    -18],
    [    -2,     17],
    [    18,    -19],
    [    -1,     19],
    [   -20,     20],
    [     0,     21],
    [    22,    -21],
    [   -22,    -23],
    [     1,      2],
    [     3,      4],
    [     5,      6],
    [   -11,    -10],
    [     7,    -12],
    [     8,     -9],
    [     9,    -13],
    [   -14,     10],
    [    -8,    -15],
    [   -16,     11],
    [    -7,     12],
    [   -17,     -6],
    [    13,     14],
    [   -18,     15],
    [    -5,     -4],
    [    16,     17],
    [    -3,     -2],
    [   -19,     18],
    [    -1,     19],
    [   -20,     20],
    [    21,     22],
    [     0,    -21],
    [   -22,    -23],
    [     1,      2],
    [     3,      4],
    [     5,      6],
    [   -12,    -11],
    [   -13,      7],
    [     8,    -14],
    [   -10,      9],
    [    10,    -15],
    [    -9,     11],
    [    -8,     12],
    [   -16,     13],
    [    -7,     -6],
    [   -17,     14],
    [    -5,    -18],
    [    15,     -4],
    [    16,    -19],
    [    17,     -3],
    [   -20,     18],
    [    -2,     19],
    [   -21,     20],
    [     0,     21],
    [    22,     -1],
    [   -22,    -23],
    [     1,      2],
    [     3,      4],
    [     5,      6],
    [   -11,      7],
    [   -12,    -10],
    [   -13,     -9],
    [     8,      9],
    [   -14,     -8],
    [    10,    -15],
    [    -7,     11],
    [   -16,     12],
    [    -6,    -17],
    [    13,     14],
    [    -5,     15],
    [   -18,     16],
    [    -4,     17],
    [    -3,    -19],
    [    18,     -2],
    [   -20,     19],
    [    -1,     20],
    [     0,     21],
    [    22,    -21],
    [   -22,    -23],
    [     1,      2],
    [     3,      4],
    [     5,    -12],
    [     6,    -11],
    [   -10,    -13],
    [    -9,      7],
    [     8,    -14],
    [     9,     -8],
    [   -15,     10],
    [    -7,    -16],
    [    11,     -6],
    [    12,    -17],
    [    13,     -5],
    [   -18,     14],
    [    15,     -4],
    [   -19,     16],
    [    17,     -3],
    [   -20,     18],
    [    19,     20],
    [    21,     22],
    [     0,     -2],
    [    -1,    -21],
    [   -22,    -23],
    [     1,      2],
    [     3,      4],
    [     5,    -12],
    [     6,    -13],
    [   -11,    -10],
    [     7,    -14],
    [     8,     -9],
    [     9,    -15],
    [    -8,     10],
    [    -7,    -16],
    [    11,     12],
    [    -6,    -17],
    [    -5,     13],
    [    14,     15],
    [   -18,     -4],
    [   -19,     16],
    [    -3,     17],
    [    18,     -2],
    [   -20,     19],
    [    20,     21],
    [    22,      0],
    [    -1,    -21],
    [   -22,    -23],
    [     1,      2],
    [     3,      4],
    [     5,      6],
    [   -11,    -10],
    [   -12,     -9],
    [     7,      8],
    [   -13,     -8],
    [     9,    -14],
    [    -7,     10],
    [    -6,    -15],
    [    11,     12],
    [    -5,    -16],
    [    13,     14],
    [   -17,     15],
    [    -4,     16],
    [    17,    -18],
    [    18,     -3],
    [    -2,     19],
    [    -1,      0],
    [   -19,     20],
    [   -20,     21],
    [    22,    -21],
    [   -22,    -23],
    [     1,      2],
    [     3,      4],
    [     5,      6],
    [   -11,      7],
    [   -10,    -12],
    [    -9,      8],
    [    -8,    -13],
    [     9,     -7],
    [    10,    -14],
    [    -6,     11],
    [   -15,     12],
    [    -5,     13],
    [   -16,     -4],
    [    14,     15],
    [   -17,     -3],
    [   -18,     16],
    [    17,    -19],
    [    -2,     18],
    [   -20,     19],
    [    -1,     20],
    [    21,     22],
    [     0,    -21],
    [   -22,    -23],
    [     1,      2],
    [     3,      4],
    [     5,    -12],
    [     6,    -11],
    [     7,      8],
    [   -10,    -13],
    [    -9,      9],
    [    -8,    -14],
    [    10,     -7],
    [    11,    -15],
    [    -6,     12],
    [    -5,     13],
    [    -4,    -16],
    [    14,     15],
    [    -3,    -17],
    [    16,     17],
    [   -18,     -2],
    [    18,    -19],
    [    -1,     19],
    [   -20,     20],
    [   -21,     21],
    [    22,      0],
    [   -22,    -23],
    [     1,      2],
    [     3,      4],
    [     5,    -12],
    [   -13,      6],
    [   -11,      7],
    [   -14,      8],
    [   -10,      9],
    [   -15,     -9],
    [    -8,     10],
    [    -7,    -16],
    [    11,     -6],
    [    12,     -5],
    [   -17,     13],
    [    14,    -18],
    [    15,     -4],
    [    16,    -19],
    [    17,     -3],
    [    18,     -2],
    [    19,     -1],
    [   -20,     20],
    [    21,     22],
    [     0,    -21],
    [   -22,    -23],
    // Section 13 (subband 13), indices 299..321
    [     1,      2],
    [     3,      4],
    [   -12,      5],
    [   -11,    -13],
    [     6,    -14],
    [   -10,      7],
    [     8,    -15],
    [    -9,      9],
    [   -16,     10],
    [    -8,    -17],
    [    11,     12],
    [    -7,    -18],
    [    -6,     13],
    [    14,     -5],
    [    15,    -19],
    [    -4,     16],
    [   -20,     17],
    [    18,     19],
    [    20,     21],
    [    22,      0],
    [    -1,     -3],
    [    -2,    -21],
    [   -22,    -23],
];

pub const COSINE_MOD_MATRIX: [i16; 320] = [
     29400,  28676,  27246,  25145,  22425,  19153,  15409,  11286,   6885,   2314,  28676,  22425,  11286,  -2314, -15409, -25145,
    -29400, -27246, -19153,  -6885,  27246,  11286, -11286, -27246, -27246, -11286,  11286,  27246,  27246,  11286,  25145,  -2314,
    -27246, -22425,   6885,  28676,  19153, -11286, -29400, -15409,  22425, -15409, -27246,   6885,  29400,   2314, -28676, -11286,
     25145,  19153,  19153, -25145, -11286,  28676,   2314, -29400,   6885,  27246, -15409, -22425,  15409, -29400,  11286,  19153,
    -28676,   6885,  22425, -27246,   2314,  25145,  11286, -27246,  27246, -11286, -11286,  27246, -27246,  11286,  11286, -27246,
      6885, -19153,  27246, -29400,  25145, -15409,   2314,  11286, -22425,  28676,   2314,  -6885,  11286, -15409,  19153, -22425,
     25145, -27246,  28676, -29400,     -4,      4,     -5,     -2,      0,     -4,      6,      2,     -2,     -4,     -3,      3,
         0,      0,     -2,      4,      0,      0,      3,     -6,      8,      5,      4,      5,     -8,      0,     -2,      0,
         0,     -3,      3,      0,      0,      0,      1,     -1,     -2,      0,      0,      2,     -2,     -5,     -2,      3,
         2,     -1,     -1,     -6,      3,      1,     -7,      4,      4,      0,      1,      4,      1,      0,      1,     -5,
        -1,      1,     -6,      0,     -1,     -1,      3,      0,     -2,      1,      2,     -4,      0,      9,      0,     -3,
         1,      1,      1,      0,     -3,     -2,     -1,     -4,     -2,      0,      5,      2,     -3,      5,      0,     -2,
         4,      4,      0,     -6,     -4,      2,      0,      0,      0,     -1,     -1,     -2,      0,      6,      1,      0,
         0,     -1,      0,     -4,     -1,      0,     -4,      1,     -1,     -5,      0,      1,      2,      4,      0,     -8,
        -4,      0,     -2,     -2,      2,      5,     -3,     -1,      1,     -4,      0,      0,      0,     -1,     -3,      0,
        -5,     -4,      0,     -2,      0,      7,      1,      0,      5,     -2,     -1,      2,      2,     -2,      3,      7,
        -3,      4,      1,     -4,      0,      0,      3,     -7,     -5,      0,      0,      4,      0,     -2,     -1,      0,
        -5,      0,      2,      0,     11,      5,     -1,      0,      2,      2,     -2,     -2,      5,      4,     -3,      1,
         0,     -2,      1,      3,      2,      0,      1,      0,      0,      0,      5,      6,     -2,     -1,      0,      2,
         3,      2,      0,     -3,      4,      5,      0,     -1,      0,      3,      1,     -2,     -3,     -2,     -1,      2,
];

/// Filterbank coefficient table 0 (VA=0x1000C498, 20 entries)
pub const FILTERBANK_COEFF_0: [i16; 20] = [
     18413,   -723,  18299,  -2166,  18073,  -3595,  17735,  -5002,  17288,  -6378,  16734,  -7715,  16077,  -9004,  15321, -10237,
     14471, -11408,  13531, -12508,
];

/// Filterbank coefficient table 1 (VA=0x1000C4C0, 40 entries)
pub const FILTERBANK_COEFF_1: [i16; 40] = [
     18423,   -362,  18395,  -1085,  18338,  -1806,  18253,  -2525,  18140,  -3239,  17999,  -3949,  17830,  -4653,  17634,  -5349,
     17410,  -6037,  17159,  -6716,  16883,  -7385,  16580,  -8042,  16251,  -8686,  15898,  -9318,  15520,  -9935,  15118, -10536,
     14692, -11122,  14244, -11690,  13774, -12240,  13283, -12772,
];

/// Filterbank coefficient table 2 (VA=0x1000C510, 80 entries)
pub const FILTERBANK_COEFF_2: [i16; 80] = [
     18426,   -181,  18419,   -543,  18405,   -904,  18384,  -1265,  18355,  -1626,  18320,  -1986,  18277,  -2345,  18228,  -2704,
     18171,  -3061,  18107,  -3417,  18037,  -3772,  17959,  -4126,  17875,  -4477,  17783,  -4827,  17685,  -5176,  17580,  -5522,
     17468,  -5866,  17350,  -6208,  17225,  -6547,  17093,  -6884,  16954,  -7219,  16809,  -7550,  16658,  -7879,  16500,  -8204,
     16336,  -8526,  16165,  -8846,  15988,  -9161,  15805,  -9473,  15616,  -9782,  15421, -10087,  15220, -10387,  15013, -10684,
     14801, -10977,  14582, -11265,  14358, -11550,  14129, -11829,  13894, -12104,  13654, -12375,  13408, -12641,  13157, -12901,
];

/// Filterbank coefficient table 3 (VA=0x1000C5B0, 160 entries)
pub const FILTERBANK_COEFF_3: [i16; 160] = [
     18427,    -90,  18425,   -271,  18421,   -452,  18416,   -633,  18409,   -814,  18400,   -995,  18389,  -1175,  18377,  -1356,
     18363,  -1536,  18347,  -1716,  18329,  -1896,  18310,  -2076,  18288,  -2256,  18265,  -2435,  18241,  -2614,  18214,  -2793,
     18186,  -2972,  18156,  -3150,  18124,  -3328,  18090,  -3506,  18055,  -3684,  18018,  -3861,  17979,  -4037,  17939,  -4214,
     17897,  -4390,  17853,  -4565,  17807,  -4740,  17760,  -4915,  17710,  -5089,  17660,  -5262,  17607,  -5436,  17553,  -5608,
     17497,  -5780,  17439,  -5952,  17380,  -6123,  17319,  -6293,  17257,  -6463,  17192,  -6632,  17126,  -6800,  17059,  -6968,
     16990,  -7135,  16919,  -7302,  16846,  -7467,  16772,  -7632,  16696,  -7797,  16619,  -7960,  16540,  -8123,  16459,  -8285,
     16377,  -8446,  16294,  -8607,  16208,  -8766,  16121,  -8925,  16033,  -9083,  15943,  -9240,  15852,  -9396,  15759,  -9551,
     15664,  -9705,  15568,  -9858,  15471, -10011,  15372, -10162,  15271, -10313,  15169, -10462,  15066, -10610,  14961, -10758,
     14854, -10904,  14747, -11049,  14637, -11194,  14527, -11337,  14415, -11479,  14301, -11620,  14187, -11760,  14071, -11898,
     13953, -12036,  13834, -12172,  13714, -12308,  13593, -12442,  13470, -12575,  13346, -12706,  13220, -12837,  13094, -12966,
];

/// Filterbank coefficient table 4 (VA=0x1000C6F0, 320 entries)
pub const FILTERBANK_COEFF_4: [i16; 320] = [
     18427,    -45,  18427,   -136,  18426,   -226,  18424,   -317,  18423,   -407,  18420,   -497,  18418,   -588,  18415,   -678,
     18411,   -769,  18407,   -859,  18403,   -949,  18398,  -1040,  18392,  -1130,  18387,  -1220,  18380,  -1310,  18374,  -1401,
     18367,  -1491,  18359,  -1581,  18351,  -1671,  18343,  -1761,  18334,  -1851,  18324,  -1941,  18315,  -2031,  18305,  -2121,
     18294,  -2211,  18283,  -2301,  18271,  -2390,  18259,  -2480,  18247,  -2570,  18234,  -2659,  18221,  -2749,  18207,  -2838,
     18193,  -2927,  18178,  -3017,  18163,  -3106,  18148,  -3195,  18132,  -3284,  18116,  -3373,  18099,  -3462,  18082,  -3551,
     18064,  -3639,  18046,  -3728,  18027,  -3816,  18009,  -3905,  17989,  -3993,  17969,  -4081,  17949,  -4170,  17928,  -4258,
     17907,  -4346,  17886,  -4434,  17864,  -4521,  17841,  -4609,  17818,  -4696,  17795,  -4784,  17772,  -4871,  17747,  -4958,
     17723,  -5045,  17698,  -5132,  17672,  -5219,  17647,  -5306,  17620,  -5392,  17594,  -5479,  17567,  -5565,  17539,  -5651,
     17511,  -5737,  17483,  -5823,  17454,  -5909,  17425,  -5994,  17395,  -6080,  17365,  -6165,  17335,  -6250,  17304,  -6335,
     17272,  -6420,  17241,  -6505,  17208,  -6590,  17176,  -6674,  17143,  -6758,  17110,  -6842,  17076,  -6926,  17042,  -7010,
     17007,  -7093,  16972,  -7177,  16937,  -7260,  16901,  -7343,  16864,  -7426,  16828,  -7509,  16791,  -7591,  16753,  -7674,
     16715,  -7756,  16677,  -7838,  16638,  -7919,  16599,  -8001,  16560,  -8082,  16520,  -8164,  16480,  -8245,  16439,  -8325,
     16398,  -8406,  16357,  -8486,  16315,  -8567,  16272,  -8647,  16230,  -8726,  16187,  -8806,  16143,  -8885,  16100,  -8964,
     16055,  -9043,  16011,  -9122,  15966,  -9200,  15920,  -9279,  15875,  -9357,  15829,  -9435,  15782,  -9512,  15735,  -9589,
     15688,  -9667,  15640,  -9744,  15592,  -9820,  15544,  -9897,  15495,  -9973,  15446, -10049,  15396, -10124,  15347, -10200,
     15296, -10275,  15246, -10350,  15195, -10425,  15143, -10499,  15092, -10573,  15040, -10647,  14987, -10721,  14934, -10794,
     14881, -10868,  14828, -10941,  14774, -11013,  14719, -11086,  14665, -11158,  14610, -11230,  14555, -11301,  14499, -11372,
     14443, -11444,  14387, -11514,  14330, -11585,  14273, -11655,  14216, -11725,  14158, -11795,  14100, -11864,  14041, -11933,
     13983, -12002,  13924, -12070,  13864, -12138,  13804, -12206,  13744, -12274,  13684, -12341,  13623, -12408,  13562, -12475,
     13501, -12541,  13439, -12608,  13377, -12673,  13314, -12739,  13252, -12804,  13189, -12869,  13125, -12934,  13062, -12998,
];

/// Filterbank coefficient table 5 (VA=0x1000C970, 640 entries)
pub const FILTERBANK_COEFF_5: [i16; 640] = [
     18426,    -21,  18426,    -66,  18426,   -110,  18426,   -154,  18425,   -198,  18425,   -242,  18424,   -286,  18424,   -331,
     18423,   -374,  18421,   -419,  18421,   -463,  18419,   -507,  18418,   -552,  18417,   -595,  18415,   -639,  18414,   -684,
     18412,   -728,  18410,   -772,  18408,   -816,  18406,   -860,  18404,   -904,  18402,   -949,  18400,   -992,  18397,  -1037,
     18394,  -1081,  18392,  -1125,  18389,  -1169,  18387,  -1213,  18384,  -1257,  18380,  -1301,  18378,  -1345,  18374,  -1389,
     18371,  -1433,  18367,  -1477,  18364,  -1521,  18360,  -1566,  18356,  -1609,  18352,  -1653,  18348,  -1697,  18344,  -1742,
     18339,  -1785,  18335,  -1829,  18331,  -1873,  18326,  -1917,  18322,  -1961,  18317,  -2005,  18312,  -2049,  18307,  -2092,
     18302,  -2137,  18297,  -2180,  18292,  -2224,  18286,  -2268,  18281,  -2312,  18275,  -2356,  18270,  -2399,  18264,  -2443,
     18258,  -2487,  18252,  -2531,  18246,  -2574,  18240,  -2618,  18233,  -2662,  18227,  -2706,  18220,  -2749,  18214,  -2793,
     18207,  -2836,  18200,  -2880,  18193,  -2924,  18186,  -2967,  18179,  -3011,  18172,  -3055,  18164,  -3098,  18157,  -3142,
     18149,  -3185,  18141,  -3229,  18134,  -3272,  18126,  -3316,  18118,  -3359,  18109,  -3403,  18101,  -3446,  18094,  -3489,
     18085,  -3533,  18076,  -3576,  18068,  -3619,  18059,  -3663,  18050,  -3706,  18041,  -3749,  18032,  -3792,  18023,  -3836,
     18014,  -3879,  18005,  -3922,  17995,  -3965,  17986,  -4008,  17975,  -4051,  17966,  -4094,  17956,  -4138,  17946,  -4180,
     17936,  -4224,  17926,  -4266,  17916,  -4309,  17905,  -4353,  17895,  -4395,  17884,  -4438,  17874,  -4481,  17863,  -4524,
     17852,  -4567,  17841,  -4609,  17830,  -4652,  17819,  -4695,  17807,  -4738,  17796,  -4780,  17784,  -4823,  17772,  -4865,
     17761,  -4908,  17749,  -4951,  17738,  -4993,  17725,  -5036,  17713,  -5078,  17701,  -5121,  17689,  -5163,  17676,  -5205,
     17664,  -5248,  17651,  -5290,  17638,  -5333,  17626,  -5375,  17613,  -5417,  17599,  -5459,  17586,  -5501,  17573,  -5544,
     17560,  -5586,  17546,  -5627,  17533,  -5670,  17519,  -5712,  17505,  -5753,  17492,  -5795,  17478,  -5837,  17464,  -5879,
     17450,  -5921,  17435,  -5963,  17421,  -6005,  17406,  -6046,  17392,  -6088,  17377,  -6130,  17363,  -6172,  17348,  -6213,
     17333,  -6254,  17318,  -6296,  17303,  -6338,  17288,  -6379,  17272,  -6420,  17257,  -6462,  17241,  -6503,  17225,  -6545,
     17210,  -6586,  17194,  -6627,  17178,  -6668,  17162,  -6709,  17145,  -6750,  17130,  -6791,  17113,  -6832,  17097,  -6874,
     17080,  -6915,  17064,  -6956,  17047,  -6996,  17030,  -7037,  17013,  -7078,  16996,  -7119,  16979,  -7159,  16962,  -7200,
     16945,  -7241,  16927,  -7281,  16910,  -7322,  16892,  -7362,  16874,  -7403,  16856,  -7444,  16838,  -7484,  16821,  -7524,
     16802,  -7564,  16784,  -7605,  16766,  -7645,  16748,  -7685,  16729,  -7725,  16711,  -7765,  16692,  -7805,  16674,  -7845,
     16654,  -7885,  16635,  -7925,  16616,  -7964,  16597,  -8004,  16578,  -8044,  16559,  -8084,  16539,  -8124,  16520,  -8164,
     16500,  -8203,  16480,  -8242,  16461,  -8282,  16441,  -8322,  16421,  -8361,  16401,  -8400,  16380,  -8440,  16360,  -8479,
     16340,  -8518,  16319,  -8557,  16299,  -8597,  16278,  -8635,  16257,  -8674,  16237,  -8713,  16215,  -8752,  16195,  -8791,
     16173,  -8829,  16152,  -8868,  16131,  -8907,  16110,  -8946,  16088,  -8985,  16067,  -9023,  16045,  -9061,  16023,  -9100,
     16001,  -9138,  15979,  -9176,  15957,  -9215,  15935,  -9253,  15913,  -9291,  15891,  -9329,  15868,  -9367,  15846,  -9405,
     15823,  -9443,  15800,  -9481,  15778,  -9519,  15755,  -9557,  15732,  -9595,  15709,  -9632,  15686,  -9670,  15662,  -9708,
     15639,  -9745,  15615,  -9782,  15592,  -9820,  15569,  -9857,  15544,  -9894,  15521,  -9932,  15497,  -9969,  15473, -10006,
     15449, -10043,  15425, -10080,  15401, -10117,  15377, -10154,  15352, -10191,  15327, -10227,  15303, -10264,  15278, -10301,
     15254, -10337,  15229, -10374,  15204, -10411,  15180, -10447,  15154, -10483,  15129, -10519,  15104, -10556,  15078, -10592,
     15053, -10628,  15027, -10664,  15002, -10700,  14976, -10736,  14950, -10772,  14924, -10808,  14898, -10844,  14872, -10879,
     14846, -10915,  14820, -10950,  14794, -10985,  14767, -11021,  14741, -11056,  14714, -11092,  14687, -11127,  14661, -11162,
     14635, -11197,  14607, -11232,  14581, -11267,  14554, -11302,  14526, -11337,  14499, -11372,  14472, -11407,  14444, -11441,
     14417, -11476,  14389, -11511,  14362, -11545,  14334, -11579,  14306, -11614,  14278, -11648,  14251, -11682,  14222, -11716,
     14194, -11750,  14166, -11784,  14137, -11818,  14109, -11852,  14081, -11886,  14053, -11919,  14023, -11953,  13995, -11987,
     13966, -12020,  13937, -12054,  13909, -12087,  13879, -12120,  13851, -12153,  13821, -12187,  13792, -12220,  13763, -12253,
     13733, -12286,  13704, -12319,  13674, -12351,  13645, -12385,  13615, -12417,  13585, -12450,  13555, -12482,  13525, -12514,
     13495, -12546,  13465, -12579,  13435, -12611,  13405, -12644,  13374, -12676,  13345, -12708,  13314, -12739,  13283, -12772,
];

/// Codebook tree 0 (VA=0x1000F1B8, 360 entries)
pub const CODEBOOK_TREE_0: [i16; 360] = [
         1,      0,      2,      3,      4,      5,      6,      7,      8,      9,     -1,    -14,     10,     11,     12,     13,
        14,     15,     16,     17,     18,     19,    -15,     20,     21,     22,     23,    -28,     24,     -2,     25,     26,
        27,     28,     29,     30,     31,     32,    -29,     33,    -16,     34,     -3,     35,     36,     37,    -42,     38,
        39,     40,     41,     42,     43,     44,    -17,     45,    -43,     46,     47,     48,     -4,     49,    -56,     50,
        51,     52,     53,     54,     55,     56,    -57,     -5,    -30,     57,     58,     59,    -18,     60,     61,    -70,
        62,     63,     64,     -6,     65,     66,    -44,     67,    -71,     68,     69,     70,    -19,    -31,    -84,     71,
        72,     73,     74,     75,     76,     77,     -7,     78,     79,    -20,     80,     81,    -85,     82,    -98,     83,
       -58,     84,     85,    -32,    -99,     86,     -8,     87,     88,     89,    -72,    -45,     90,    -33,     91,   -112,
       -21,     92,    -59,   -113,    -46,     93,     -9,     94,    -22,     95,     96,     97,     98,     99,    -23,    -86,
       100,    101,    -34,    -73,    102,   -126,   -127,    -35,    103,    -47,    104,    105,    106,    107,   -140,   -100,
      -114,    -87,    108,    109,    110,    111,   -141,    -60,    112,    -48,    113,    -24,    -10,    -61,    114,   -101,
       115,    116,    -74,    -36,    117,   -128,    118,    -62,    119,    120,    -37,    121,    -11,    -49,    -88,    122,
       123,   -115,   -154,    -25,   -142,    124,   -155,   -129,    125,    -50,    126,    127,    -76,    -75,    128,    129,
       -63,    -77,   -102,    -39,    -38,    130,    -51,    131,    -89,   -116,   -117,   -156,    132,    -52,    -78,    133,
       134,   -103,    135,    136,   -143,    -65,    137,    -64,   -130,   -131,    -90,    138,   -104,    -91,    -92,    139,
      -169,   -183,    -26,   -118,    140,    141,   -144,    -66,    -12,    142,   -168,    143,   -105,   -157,    144,   -182,
       145,    146,    -79,    147,    -53,   -170,    148,    149,    -27,   -145,    150,    -80,   -106,    -13,   -132,    -67,
      -158,    -40,   -119,    151,    152,   -107,    153,    154,    -41,   -184,    155,    156,    -54,    157,   -171,    158,
       -94,    159,   -134,   -146,    -93,   -133,   -159,   -108,    160,    -81,    161,   -160,    162,    -68,   -120,   -122,
      -172,    163,    -55,    -95,    164,   -109,   -161,    -82,   -173,   -185,    165,    -69,   -147,   -186,    166,    167,
      -121,    -96,    168,   -148,   -174,    169,    170,   -136,    -83,    171,    172,    173,   -135,   -110,   -187,    174,
      -149,   -150,    175,   -123,   -162,   -163,    -97,   -175,   -188,    176,    177,    178,    179,   -111,   -151,   -124,
      -137,   -177,   -176,   -125,   -164,   -138,   -189,   -190,
];

/// Codebook tree 1 (VA=0x1000F488, 186 entries)
pub const CODEBOOK_TREE_1: [i16; 186] = [
         1,      0,      2,      3,      4,      5,      6,      7,      8,    -10,     -1,      9,     10,     11,     12,     13,
       -11,     14,     15,     16,     17,     18,    -20,     -2,     19,     20,    -21,     21,     22,     23,    -12,     24,
        25,     26,     27,     28,     29,     30,    -30,     31,    -31,     -3,     32,    -22,     33,    -13,     34,     35,
        36,     37,     38,     39,     40,     -4,    -41,    -14,     41,    -40,    -32,     42,     43,    -23,     44,     45,
        46,     47,     48,     -5,    -51,    -50,    -42,     49,    -33,     50,    -15,     51,     52,     53,     54,    -24,
        55,    -43,     56,    -52,     57,    -61,    -60,     58,    -25,     59,    -16,    -34,     -6,     60,    -62,     61,
       -71,     62,    -35,     -7,     63,    -72,    -53,    -17,     64,    -44,    -26,    -70,     65,    -45,    -36,     66,
       -63,     67,    -80,    -54,    -81,     68,    -27,     69,     70,    -82,    -18,     71,     72,    -55,     73,    -64,
        74,    -73,     75,    -46,    -37,     76,    -91,     -8,     -9,     77,    -90,    -83,     78,    -28,     79,    -56,
       -65,    -38,    -74,     80,    -19,    -57,    -92,     81,    -47,    -48,     82,    -66,     83,    -29,    -84,     84,
       -75,    -85,    -67,    -93,    -39,     85,    -76,     86,    -58,     87,     88,    -49,    -94,     89,     90,    -68,
        91,    -78,    -86,    -59,    -77,    -95,     92,    -69,    -87,    -96,
];

/// Codebook tree 2 (VA=0x1000F5FC, 94 entries)
pub const CODEBOOK_TREE_2: [i16; 94] = [
         1,      0,      2,      3,      4,      5,      6,     -7,     -1,      7,     -8,      8,      9,     10,     11,     12,
        13,    -14,    -15,     -9,     -2,     14,     15,     16,     17,     18,     19,    -16,     20,    -22,    -10,     21,
       -21,     -3,     22,     23,     24,     25,    -23,    -17,     26,     27,     28,    -29,    -11,    -28,     29,     30,
        -4,    -24,    -30,     31,     32,    -18,     33,    -35,    -36,     34,    -31,    -12,     35,    -25,     -5,    -37,
        36,     37,    -42,     38,    -19,    -43,    -32,     39,    -13,    -38,    -26,    -20,     40,     -6,    -44,     41,
        42,    -39,    -33,    -45,     43,    -27,     44,    -46,     45,    -34,    -40,     46,    -41,    -47,
];

/// Codebook tree 3 (VA=0x1000F6B8, 1038 entries)
pub const CODEBOOK_TREE_3: [i16; 1038] = [
         1,      2,      3,      4,      5,      0,      6,      7,      8,      9,     10,     11,     12,     13,     14,     15,
        16,     17,   -125,     18,     -1,     19,     20,     21,     22,     23,     24,     25,     -5,    -25,     26,     27,
        -6,   -150,     28,     29,     30,     31,     32,     33,     34,    -30,     35,     36,     37,     38,     39,    -31,
      -126,   -155,     40,     41,   -156,     42,     43,   -130,     44,   -131,   -151,    -26,     45,     46,   -250,     47,
        48,     49,     50,     51,     52,   -275,     53,     54,     -2,     -7,     55,     56,     57,     58,     59,     60,
        61,     62,     63,     64,     65,     66,     67,     68,     69,     70,     71,    -50,     72,   -180,     73,     74,
        75,     76,     77,    -55,     78,   -175,     79,    -36,     80,     81,    -35,    -10,     82,     83,   -280,     84,
       -11,     85,     86,    -32,     87,     88,     89,   -161,     90,   -276,     91,     92,   -281,     93,     -8,     94,
        95,     96,     97,   -157,   -181,   -400,   -132,     98,   -375,     99,   -160,    100,   -127,    101,    -27,    102,
       103,   -251,    -56,    104,    105,   -256,   -300,     -3,   -152,   -255,    106,    107,    -37,    108,   -305,    109,
      -176,    110,   -136,    111,    -12,    112,    113,    114,    115,   -135,    116,    117,   -162,    118,    -16,    -51,
      -186,    119,    120,    121,    122,    123,    -41,    124,    -61,    125,    126,    127,    128,    129,    130,    -60,
       131,    132,   -306,    133,    134,   -205,   -405,    135,    136,    137,    138,    139,   -185,    140,    141,   -500,
       -15,    142,    143,    -80,    -75,    -40,   -301,    144,    145,    146,   -200,    147,    148,    149,    150,    151,
       152,   -525,    153,   -177,   -425,    154,    155,    -13,   -430,    156,    157,   -406,    158,    159,   -206,   -380,
       160,    161,    162,    163,    164,   -182,   -137,    165,   -286,    166,    167,   -401,    168,    169,    -42,    -33,
       170,   -166,    -57,   -325,    171,   -187,    -38,    172,    173,    174,   -165,   -330,     -4,   -282,    175,   -257,
      -261,   -311,   -376,    176,    177,    178,    -28,    179,    180,     -9,   -285,    181,    182,    183,    184,   -277,
       185,   -133,   -310,    -81,    -85,    186,   -158,   -210,    -17,    187,    188,    189,    190,    -52,   -141,    191,
       192,   -128,   -191,    -20,    193,   -140,    194,    195,   -211,   -260,    196,    197,    198,    199,    200,    -66,
      -201,   -225,   -381,    201,    202,    203,    204,    205,    206,    207,   -163,   -287,    208,   -100,    209,    210,
       211,    212,    213,   -252,   -105,    -76,    214,    215,    216,    -21,    -86,    -62,   -307,    217,    -65,   -455,
      -550,    218,    219,    220,    221,    222,    223,    224,    225,   -230,   -142,    226,   -302,   -426,   -431,    227,
       228,    229,    230,   -190,   -402,    -46,   -153,   -450,   -505,    231,    232,    233,    234,    235,    236,    237,
       238,    239,   -262,    -29,    240,    241,    242,    243,   -167,    -67,   -331,   -530,    244,    245,    246,    247,
       248,    249,    250,    251,    252,    253,    254,    255,    256,    257,    258,    259,    260,    261,    262,   -336,
       263,   -171,   -192,   -207,   -258,   -138,    264,    265,    266,    267,    268,    269,    270,    271,    272,    273,
       274,    -45,   -335,   -411,    -43,    -18,   -265,    -71,   -316,   -326,   -350,   -407,   -146,    -14,    275,    276,
       277,    278,    279,    280,    281,   -216,    -34,   -283,   -291,   -312,   -410,   -168,   -555,    282,    -70,    -53,
      -235,    -87,    -77,   -183,   -315,   -332,   -178,    -58,    283,    284,    285,    286,    287,    288,    289,    290,
       291,    292,    293,    294,    295,    296,    297,    298,   -202,   -226,   -170,   -267,   -134,   -290,   -355,   -385,
      -386,    -47,   -526,   -196,    299,    300,    301,    302,    303,    304,    305,    306,    307,    308,    309,    310,
       311,    312,    313,    314,    315,    316,    317,    318,    319,    320,    321,    322,    323,    324,    325,   -111,
      -231,   -253,    -91,    -82,   -172,   -145,    -22,   -317,    -90,   -356,   -382,   -159,    326,    327,    328,    329,
       330,    331,    332,    333,    334,    335,   -106,   -263,   -278,   -215,   -110,    -39,   -101,   -377,   -129,    -63,
      -436,   -195,   -506,   -531,    336,   -212,   -154,   -266,    -59,   -288,   -292,   -303,   -337,   -432,   -188,   -451,
      -456,   -460,   -501,   -236,   -551,    337,    338,    339,    340,    341,    342,    343,    344,    345,    346,    347,
       348,    349,    350,    351,    352,    353,    354,    355,    356,    357,    358,    359,    360,    361,    362,    363,
       364,    365,    366,    367,    368,    369,    370,    371,    372,    373,    374,    375,    376,    377,    378,    379,
       380,    381,    382,    383,    384,    385,    386,    387,    388,    389,    390,    391,    392,    393,    394,    395,
       396,    397,    398,    399,    400,    401,    402,    403,    404,    405,    406,    407,    -72,   -272,   -309,   -333,
      -340,   -360,    -68,   -387,   -184,   -416,   -427,   -147,   -435,   -437,   -115,   -480,   -510,   -532,   -164,   -556,
       408,   -295,   -296,   -297,   -107,   -313,   -193,   -173,   -320,   -327,   -341,   -351,   -352,   -143,   -378,    -19,
      -403,   -412,   -268,    -54,    -83,   -441,   -442,   -457,   -475,    -44,    -97,   -511,   -515,   -208,   -527,   -528,
      -237,   -536,   -552,    409,    410,    411,    412,    413,    414,    415,    416,    417,    418,    419,    420,    421,
       422,    423,    424,    425,    426,    427,    428,    429,    430,    431,    432,    433,    434,    435,    436,    437,
       438,    439,    440,    441,    442,    443,    444,    445,    446,    447,    448,    449,    450,    451,    452,    453,
       454,    455,    456,    457,    458,    459,    460,    461,    462,    463,    464,    465,    466,    467,    468,    469,
       470,    471,    472,    473,    474,    475,    476,    477,    478,    479,    480,    481,    482,    483,    484,    485,
       486,    487,    488,    489,    490,    491,    492,    493,    494,    495,    496,    497,    498,    499,    500,    501,
       502,    503,    504,    505,    506,    507,    508,    509,    510,    511,    512,    513,    514,    515,    516,    517,
       518,   -104,    -84,   -218,   -318,   -319,   -117,   -321,   -322,   -323,   -219,   -174,   -243,   -328,   -329,    -94,
      -228,   -194,   -240,   -334,   -102,   -229,   -169,   -338,   -339,   -116,   -289,   -342,   -343,   -345,   -346,   -347,
       -23,   -203,   -214,   -353,   -204,   -220,   -357,   -358,   -264,   -361,   -362,   -363,   -365,   -366,   -367,    -92,
      -245,   -121,   -293,   -379,   -108,   -232,   -221,   -383,   -384,   -233,   -294,   -241,   -388,   -389,   -390,   -391,
      -392,   -393,   -394,   -395,   -396,   -397,   -398,    -24,   -109,   -149,   -242,   -404,    -64,    -79,    -89,   -408,
      -409,   -213,   -120,   -113,   -413,   -414,   -415,    -96,   -417,   -418,   -419,   -420,   -421,   -422,   -423,   -298,
       -69,   -269,   -428,   -429,    -78,   -270,    -88,   -433,   -434,   -271,   -234,   -259,   -438,   -439,   -440,   -227,
      -179,   -443,   -445,   -446,   -447,   -223,   -238,   -452,   -453,   -454,   -273,   -254,   -246,   -458,   -459,    -48,
      -461,   -462,   -463,   -465,   -466,   -467,   -468,   -470,   -471,   -304,   -476,   -477,   -478,   -112,   -481,   -482,
      -483,   -485,   -486,   -487,   -490,   -491,   -103,   -118,   -502,   -503,   -504,   -189,    -93,   -507,   -508,   -509,
      -148,   -139,   -512,   -513,   -308,   -516,   -517,   -518,   -520,   -521,    -73,    -98,    -95,    -49,   -529,   -222,
      -217,   -197,   -533,   -534,   -535,   -284,   -537,   -538,   -540,   -541,   -542,   -543,   -545,   -546,   -144,   -198,
      -314,   -553,   -209,   -279,   -557,   -558,   -560,   -561,   -562,   -563,   -565,   -566,   -567,   -575,   -576,   -577,
      -578,   -580,   -581,   -582,   -583,   -585,   -586,   -587,   -590,   -591,   -600,   -601,   -605,   -606,
];

/// Codebook tree 4 (VA=0x1000FED4, 416 entries)
pub const CODEBOOK_TREE_4: [i16; 416] = [
         1,      2,      3,      0,      4,      5,      6,      7,      8,      9,     10,     11,     12,    -64,     -1,     13,
        14,    -16,     -4,     15,     16,     17,     18,    -80,     -5,     19,     20,     21,    -20,     22,     23,    -65,
       -84,    -21,    -68,     24,    -17,     25,     26,     27,     28,    -81,    -69,    -85,     29,     30,     31,     32,
      -128,     33,     34,     35,     -2,     36,     37,     38,   -144,     39,     40,     -6,     41,     42,    -32,     43,
        44,     -8,     45,    -25,    -96,     46,     47,   -100,     -9,     48,     49,    -36,     50,    -24,     51,     52,
        53,   -148,     54,     55,    -22,     56,     57,     58,   -132,    -89,     59,     60,   -101,     61,    -37,     62,
       -18,     63,    -88,   -129,    -66,    -70,    -97,     64,    -72,    -73,     65,   -145,   -149,    -86,     66,    -33,
        67,   -133,     68,     69,     70,     71,   -192,     72,     73,   -160,    -82,     74,   -164,     75,    -10,     76,
        77,   -208,     78,    -40,     79,     80,     -3,     81,     -7,     82,     83,     84,   -104,     85,     86,    -26,
        87,   -105,     88,   -112,     89,     90,     91,    -41,     92,     93,     94,     95,    -48,     96,    -90,     97,
        98,    -28,    -52,     99,    -12,    100,    101,    -74,    -13,   -116,   -161,    102,    103,    -29,   -102,    104,
      -152,   -165,    105,    106,    107,    108,    109,    110,    111,   -212,    112,    113,   -136,    114,    115,   -137,
       116,    -23,    -19,   -153,    -98,   -134,   -196,    117,    118,    119,    -38,   -193,   -113,   -150,   -209,    120,
       121,    -93,    -83,    122,    123,    124,    125,    126,    127,    128,    129,    130,    131,    -34,   -146,    -53,
       132,    133,    134,    135,    136,    137,    138,   -130,    -49,    139,    140,    141,   -117,    -42,    -67,    -92,
       142,    -87,    -77,   -197,    -71,    143,    144,    145,    146,    147,    148,    149,    150,    151,    152,    153,
       154,    155,    156,    157,    158,    159,    160,    161,    162,    163,    164,    165,    166,    167,    168,    169,
      -108,    -76,   -168,   -169,   -176,    -44,   -224,    -56,    -45,   -180,    -11,   -106,   -213,    170,    171,    172,
       173,    174,    175,    176,    177,    178,    179,    180,    181,    182,    183,    184,    185,    186,    187,    188,
       189,    190,    191,    192,    193,    194,    195,    196,    197,    198,    199,    200,    201,    202,    203,    204,
       205,    206,    207,   -131,    -30,    -27,    -43,   -151,    -75,   -154,   -156,   -162,   -109,   -194,   -198,   -201,
      -114,   -225,   -228,   -229,   -141,   -142,    -94,   -124,    -95,   -147,   -115,   -125,    -54,    -55,   -107,    -58,
       -39,   -155,   -121,   -157,   -158,   -103,    -14,   -122,   -163,    -51,    -57,   -166,   -167,    -46,   -110,   -170,
      -172,   -173,    -61,   -177,   -178,    -99,   -181,   -182,   -184,   -185,   -118,    -35,    -15,   -195,    -31,    -60,
      -135,   -199,   -200,    -79,   -202,   -204,   -205,   -119,    -91,   -210,   -211,    -78,   -120,   -214,   -215,   -216,
      -217,   -218,   -220,   -221,    -50,   -138,   -226,   -139,   -140,   -230,   -232,   -233,   -240,   -241,   -244,   -245,
];

/// Codebook tree 5 (VA=0x10010214, 382 entries)
pub const CODEBOOK_TREE_5: [i16; 382] = [
         1,      2,      0,      3,      4,      5,      6,      7,      8,      9,     10,     11,    -81,     -1,     12,     13,
        14,    -27,     -3,     -9,     15,     16,     17,     18,     19,     20,   -108,     21,     -4,     22,     23,    -36,
       -12,     24,    -82,     25,     26,    -84,     27,    -90,    -10,    -30,     28,     29,     30,    -28,     31,   -117,
       -13,     32,    -39,     33,     34,   -109,     35,    -93,    -85,   -111,    -37,     36,    -31,     37,    -91,     38,
        39,     40,    -40,   -120,     41,     42,   -118,     43,    -94,     44,   -112,   -162,     45,     46,     -2,     47,
        48,     49,   -121,   -189,     50,    -54,     51,     52,     53,    -18,     54,     55,     -6,     56,     57,     -5,
      -135,     58,     59,     60,     61,     62,    -63,     63,     64,     -7,    -15,     65,     66,     67,    -45,     68,
        69,     70,     71,    -21,     72,     73,     74,     75,     76,     77,   -163,     78,     79,   -171,   -144,     80,
       -48,     81,    -57,     82,     83,     84,   -165,     85,    -16,   -198,     86,     87,    -11,     88,     89,    -99,
        90,    -83,    -19,     91,     92,     93,     94,     95,     96,     97,     98,     99,    -87,    100,    101,    102,
      -190,    -66,    -33,   -192,    103,    104,    105,    106,   -102,    -42,    107,   -126,    108,    -29,   -129,    -46,
       -86,    -14,   -114,    -32,   -172,    109,    110,    -58,    -34,   -138,    111,    112,    113,    114,    115,    116,
       117,    118,    119,    120,   -127,   -166,   -174,    121,    122,    123,    124,    125,    -88,    -96,    126,   -100,
       -38,   -110,    -22,   -136,    -55,   -139,   -201,    127,    -64,   -193,    128,    -49,   -175,   -199,    129,    130,
       131,    132,    133,    134,    135,    136,    137,    138,    139,    140,    141,    142,    143,    144,    145,    146,
       147,    148,    149,    150,   -103,    -92,    -43,   -130,   -145,   -147,   -148,    -41,   -216,   -115,   -119,   -123,
       -95,    151,    152,    153,    154,    155,    156,    157,    158,    159,    160,    161,    162,    163,    164,    165,
       166,    167,    168,    169,    170,    171,    172,    173,    174,    175,    176,    177,    178,    179,    180,    181,
       182,    183,    184,    185,    186,    187,    188,    189,    190,   -153,   -180,     -8,    -97,    -24,   -122,   -113,
      -124,   -125,    -67,    -44,   -128,    -69,   -106,   -131,   -132,   -133,    -61,    -73,   -137,   -116,    -89,   -140,
      -141,   -142,    -23,    -25,   -146,    -17,   -104,   -149,   -150,   -151,    -52,   -154,   -156,   -157,    -76,    -70,
      -164,    -51,    -72,   -167,   -168,   -169,    -47,    -20,   -173,    -59,   -101,   -176,   -177,   -178,    -68,   -181,
      -183,   -184,    -35,    -60,   -191,    -98,    -56,   -194,   -195,   -196,    -75,    -65,   -200,   -105,   -202,   -203,
      -204,   -205,   -207,   -208,   -210,   -211,    -50,   -217,   -219,   -220,   -225,   -226,   -228,   -229,
];

/// Codebook tree 6 (VA=0x10010510, 62 entries)
pub const CODEBOOK_TREE_6: [i16; 62] = [
         1,      0,      2,      3,      4,      5,      6,      7,      8,    -16,     -1,     -8,     -2,     -4,      9,     10,
        11,     12,     13,     14,     15,     16,     17,    -24,     -3,    -12,     -6,     18,     19,    -20,    -10,     -5,
       -17,     -9,    -18,     20,     21,     22,     23,     24,     25,    -28,     26,     -7,    -14,    -22,    -26,    -11,
        27,    -19,    -25,    -13,    -21,     28,     29,    -30,    -27,     30,    -15,    -29,    -23,    -31,
];

pub const SYNTH_OVERLAP_OFFSETS: [i16; 320] = [
        44,    133,    222,    310,    399,    488,    577,    666,    754,    843,    932,   1020,   1109,   1198,   1286,   1375,
      1464,   1552,   1641,   1729,   1817,   1906,   1994,   2082,   2171,   2259,   2347,   2435,   2523,   2611,   2699,   2786,
      2874,   2962,   3049,   3137,   3224,   3312,   3399,   3486,   3573,   3660,   3747,   3834,   3921,   4008,   4094,   4181,
      4267,   4353,   4439,   4526,   4611,   4697,   4783,   4869,   4954,   5040,   5125,   5210,   5295,   5380,   5465,   5549,
      5634,   5718,   5802,   5886,   5970,   6054,   6138,   6221,   6304,   6388,   6471,   6553,   6636,   6719,   6801,   6883,
      6965,   7047,   7129,   7211,   7292,   7373,   7454,   7535,   7616,   7696,   7777,   7857,   7937,   8016,   8096,   8175,
      8254,   8333,   8412,   8491,   8569,   8647,   8725,   8803,   8880,   8957,   9035,   9111,   9188,   9264,   9341,   9417,
      9492,   9568,   9643,   9718,   9793,   9868,   9942,  10016,  10090,  10163,  10237,  10310,  10383,  10455,  10528,  10600,
     10672,  10743,  10815,  10886,  10957,  11027,  11098,  11168,  11237,  11307,  11376,  11445,  11514,  11582,  11650,  11718,
     11785,  11853,  11920,  11986,  12053,  12119,  12185,  12250,  12315,  12380,  12445,  12509,  12573,  12637,  12701,  12764,
     12826,  12889,  12951,  13013,  13075,  13136,  13197,  13257,  13318,  13378,  13437,  13497,  13556,  13614,  13673,  13731,
     13788,  13846,  13903,  13959,  14016,  14072,  14128,  14183,  14238,  14292,  14347,  14401,  14454,  14508,  14561,  14613,
     14665,  14717,  14769,  14820,  14871,  14921,  14971,  15021,  15070,  15119,  15168,  15216,  15264,  15311,  15359,  15405,
     15452,  15498,  15544,  15589,  15634,  15678,  15722,  15766,  15810,  15853,  15895,  15938,  15979,  16021,  16062,  16103,
     16143,  16183,  16223,  16262,  16300,  16339,  16377,  16414,  16452,  16488,  16525,  16561,  16596,  16632,  16666,  16701,
     16735,  16768,  16801,  16834,  16867,  16899,  16930,  16961,  16992,  17022,  17052,  17082,  17111,  17140,  17168,  17196,
     17223,  17250,  17277,  17303,  17329,  17354,  17379,  17404,  17428,  17452,  17475,  17498,  17520,  17542,  17564,  17585,
     17606,  17626,  17646,  17665,  17684,  17703,  17721,  17739,  17756,  17773,  17790,  17806,  17821,  17836,  17851,  17865,
     17879,  17893,  17906,  17918,  17931,  17942,  17954,  17965,  17975,  17985,  17995,  18004,  18012,  18021,  18028,  18036,
     18043,  18049,  18055,  18061,  18066,  18071,  18076,  18079,  18083,  18086,  18089,  18091,  18093,  18094,  18095,  18095,
];

// ═══════════════════════════════════════════════════════════════════════════
// ENCODER TABLES — extracted from A1800.DLL via Ghidra
// ═══════════════════════════════════════════════════════════════════════════

/// Forward cosine modulation matrix (VA=0x1000bb88, 100 entries, 10×10)
pub static FWD_COSINE_MOD_MATRIX: [i16; 100] = [
    10453, 10196,  9688,  8941,  7973,  6810,  5479,  4013,  2448,   823,
    10196,  7973,  4013,  -823, -5479, -8941,-10453, -9688, -6810, -2448,
     9688,  4013, -4013, -9688, -9688, -4013,  4013,  9688,  9688,  4013,
     8941,  -823, -9688, -7973,  2448, 10196,  6810, -4013,-10453, -5479,
     7973, -5479, -9688,  2448, 10453,   823,-10196, -4013,  8941,  6810,
     6810, -8941, -4013, 10196,   823,-10453,  2448,  9688, -5479, -7973,
     5479,-10453,  4013,  6810,-10196,  2448,  7973, -9688,   823,  8941,
     4013, -9688,  9688, -4013, -4013,  9688, -9688,  4013,  4013, -9688,
     2448, -6810,  9688,-10453,  8941, -5479,   823,  4013, -7973, 10196,
      823, -2448,  4013, -5479,  6810, -7973,  8941, -9688, 10196,-10453,
];

/// Forward filterbank coefficient table 0 (VA=0x1000b198, 20 entries)
pub static FWD_FILTERBANK_COEFF_0: [i16; 20] = [
    29805, -1171, 29621, -3506, 29255, -5819, 28708, -8097, 27984,-10324,
    27088,-12488, 26025,-14575, 24801,-16572, 23425,-18466, 21903,-20247,
];

/// Forward filterbank coefficient table 1 (VA=0x1000b1c0, 40 entries)
pub static FWD_FILTERBANK_COEFF_1: [i16; 40] = [
    29822,  -586, 29776, -1756, 29684, -2924, 29547, -4087, 29364, -5244,
    29135, -6392, 28862, -7531, 28544, -8659, 28182, -9773, 27776,-10871,
    27328,-11954, 26838,-13017, 26306,-14061, 25734,-15083, 25122,-16081,
    24471,-17055, 23783,-18003, 23057,-18923, 22297,-19813, 21502,-20673,
];

/// Forward filterbank coefficient table 2 (VA=0x1000b210, 80 entries)
pub static FWD_FILTERBANK_COEFF_2: [i16; 80] = [
    29827,  -293, 29815,  -878, 29792, -1464, 29758, -2048, 29712, -2632,
    29654, -3215, 29586, -3797, 29505, -4377, 29414, -4955, 29311, -5532,
    29196, -6106, 29071, -6678, 28934, -7248, 28786, -7814, 28627, -8378,
    28457, -8938, 28276, -9495, 28084,-10049, 27882,-10598, 27668,-11144,
    27444,-11685, 27209,-12221, 26964,-12753, 26709,-13280, 26443,-13802,
    26167,-14318, 25881,-14829, 25584,-15335, 25278,-15834, 24963,-16327,
    24637,-16814, 24302,-17295, 23958,-17769, 23605,-18236, 23242,-18695,
    22871,-19148, 22490,-19594, 22101,-20031, 21704,-20461, 21298,-20884,
];

/// Forward filterbank coefficient table 3 (VA=0x1000b2b0, 160 entries)
pub static FWD_FILTERBANK_COEFF_3: [i16; 160] = [
    29828,  -146, 29825,  -439, 29819,  -732, 29811, -1025, 29799, -1317,
    29785, -1610, 29767, -1902, 29747, -2194, 29724, -2486, 29698, -2778,
    29670, -3069, 29638, -3360, 29604, -3651, 29567, -3942, 29526, -4232,
    29483, -4521, 29438, -4811, 29389, -5099, 29338, -5388, 29283, -5676,
    29226, -5963, 29166, -6249, 29103, -6535, 29038, -6821, 28969, -7106,
    28898, -7390, 28824, -7673, 28748, -7956, 28668, -8237, 28586, -8518,
    28501, -8799, 28413, -9078, 28323, -9357, 28229, -9634, 28133, -9911,
    28035,-10187, 27933,-10461, 27829,-10735, 27723,-11008, 27613,-11279,
    27501,-11550, 27387,-11819, 27269,-12088, 27149,-12355, 27027,-12621,
    26901,-12885, 26774,-13149, 26643,-13411, 26510,-13672, 26375,-13932,
    26237,-14190, 26096,-14447, 25953,-14702, 25807,-14956, 25659,-15209,
    25509,-15460, 25356,-15710, 25200,-15958, 25043,-16205, 24882,-16450,
    24720,-16693, 24554,-16935, 24387,-17175, 24217,-17414, 24045,-17651,
    23871,-17886, 23694,-18119, 23515,-18351, 23334,-18581, 23150,-18809,
    22964,-19036, 22776,-19260, 22586,-19483, 22394,-19704, 22199,-19923,
    22003,-20140, 21804,-20355, 21603,-20568, 21400,-20779, 21195,-20988,
];

/// Forward filterbank coefficient table 4 (VA=0x1000b3f0, 320 entries)
pub static FWD_FILTERBANK_COEFF_4: [i16; 320] = [
    29828, -73, 29827, -220, 29826, -366, 29824, -512, 29821, -659,
    29817, -805, 29813, -952, 29808, -1098, 29802, -1244, 29796, -1390,
    29789, -1537, 29781, -1683, 29772, -1829, 29763, -1975, 29753, -2121,
    29742, -2267, 29730, -2413, 29718, -2559, 29705, -2705, 29692, -2851,
    29677, -2997, 29662, -3142, 29646, -3288, 29630, -3433, 29613, -3579,
    29595, -3724, 29576, -3869, 29557, -4014, 29537, -4159, 29516, -4304,
    29494, -4449, 29472, -4594, 29449, -4738, 29426, -4883, 29401, -5027,
    29376, -5172, 29351, -5316, 29324, -5460, 29297, -5604, 29269, -5747,
    29241, -5891, 29211, -6034, 29181, -6178, 29151, -6321, 29119, -6464,
    29087, -6607, 29054, -6749, 29021, -6892, 28987, -7034, 28952, -7177,
    28916, -7319, 28880, -7460, 28843, -7602, 28805, -7744, 28767, -7885,
    28728, -8026, 28688, -8167, 28648, -8308, 28607, -8448, 28565, -8589,
    28522, -8729, 28479, -8869, 28435, -9008, 28391, -9148, 28346, -9287,
    28300, -9426, 28253, -9565, 28206, -9703, 28158, -9842, 28109, -9980,
    28060, -10118, 28010, -10255, 27959, -10393, 27908, -10530, 27856, -10667,
    27803, -10803, 27750, -10940, 27696, -11076, 27641, -11212, 27586, -11347,
    27529, -11482, 27473, -11617, 27415, -11752, 27357, -11886, 27299, -12021,
    27239, -12154, 27179, -12288, 27119, -12421, 27057, -12554, 26996, -12687,
    26933, -12819, 26870, -12951, 26806, -13083, 26741, -13215, 26676, -13346,
    26610, -13476, 26544, -13607, 26477, -13737, 26409, -13867, 26340, -13996,
    26271, -14125, 26202, -14254, 26132, -14383, 26061, -14511, 25989, -14638,
    25917, -14766, 25844, -14893, 25771, -15020, 25697, -15146, 25622, -15272,
    25547, -15397, 25471, -15523, 25394, -15648, 25317, -15772, 25239, -15896,
    25161, -16020, 25082, -16143, 25003, -16266, 24923, -16389, 24842, -16511,
    24760, -16632, 24678, -16754, 24596, -16875, 24513, -16995, 24429, -17115,
    24345, -17235, 24260, -17354, 24174, -17473,
    24088, -17592, 24002, -17710, 23914, -17827, 23827, -17945, 23738, -18061,
    23649, -18178, 23560, -18293, 23470, -18409, 23379, -18524, 23288, -18638,
    23196, -18752, 23104, -18866, 23011, -18979, 22917, -19092, 22824, -19204,
    22729, -19316, 22634, -19427, 22538, -19538, 22442, -19649, 22345, -19759,
    22248, -19868, 22150, -19977, 22052, -20086, 21953, -20194, 21854, -20301,
    21754, -20408, 21653, -20515, 21552, -20621, 21451, -20726, 21349, -20831,
    21246, -20936, 21143, -21040,
];

/// Forward filterbank coefficient table 5 (VA=0x1000b670, 640 entries)
pub static FWD_FILTERBANK_COEFF_5: [i16; 640] = [
    29827, -34, 29827, -106, 29827, -177, 29827, -249, 29826, -320,
    29825, -392, 29824, -463, 29823, -535, 29821, -606, 29819, -678,
    29818, -750, 29816, -821, 29814, -893, 29812, -964, 29809, -1035,
    29807, -1106, 29804, -1177, 29801, -1249, 29797, -1320, 29795, -1392,
    29791, -1463, 29787, -1535, 29784, -1606, 29780, -1678, 29776, -1749,
    29771, -1820, 29767, -1892, 29763, -1963, 29758, -2035, 29753, -2106,
    29748, -2177, 29742, -2249, 29737, -2320, 29731, -2391, 29726, -2462,
    29719, -2534, 29713, -2605, 29707, -2676, 29701, -2747, 29694, -2819,
    29686, -2890, 29680, -2961, 29673, -3032, 29665, -3103, 29658, -3174,
    29650, -3245, 29643, -3316, 29635, -3387, 29626, -3459, 29618, -3529,
    29610, -3600, 29601, -3671, 29592, -3742, 29583, -3813, 29574, -3884,
    29564, -3955, 29554, -4026, 29544, -4097, 29535, -4167, 29525, -4238,
    29514, -4309, 29504, -4380, 29493, -4450, 29483, -4521, 29472, -4591,
    29461, -4662, 29450, -4733, 29439, -4803, 29427, -4874, 29415, -4944,
    29403, -5015, 29391, -5085, 29379, -5155, 29366, -5226, 29353, -5296,
    29341, -5367, 29328, -5438, 29314, -5508, 29301, -5578, 29289, -5648,
    29274, -5718, 29260, -5788, 29247, -5858, 29232, -5928, 29218, -5998,
    29204, -6068, 29188, -6139, 29175, -6209, 29159, -6279, 29145, -6348,
    29128, -6418, 29114, -6488, 29097, -6557, 29082, -6627, 29066, -6697,
    29050, -6767, 29034, -6837, 29017, -6906, 29001, -6975, 28984, -7045,
    28966, -7114, 28950, -7184, 28933, -7254, 28915, -7323, 28897, -7392,
    28880, -7461, 28862, -7530, 28843, -7600, 28825, -7669, 28807, -7738,
    28788, -7806, 28769, -7875, 28751, -7944, 28732, -8014, 28712, -8082,
    28692, -8151, 28672, -8219, 28653, -8289, 28633, -8357, 28613, -8425,
    28593, -8494, 28572, -8563, 28551, -8632, 28531, -8700, 28510, -8768,
    28488, -8837, 28468, -8905, 28447, -8973, 28425, -9041, 28403, -9109,
    28381, -9177, 28359, -9245, 28336, -9313, 28315, -9381, 28292, -9448,
    28269, -9517, 28246, -9584, 28223, -9652, 28200, -9720, 28176, -9787,
    28153, -9854, 28129, -9922, 28105, -9990, 28082, -10056, 28057, -10124,
    28032, -10191, 28009, -10258, 27984, -10326, 27959, -10392, 27934, -10460,
    27909, -10526, 27883, -10593, 27858, -10661, 27832, -10727, 27807, -10794,
    27780, -10860, 27754, -10927, 27728, -10993, 27701, -11059, 27676, -11126,
    27648, -11192, 27622, -11259, 27595, -11324, 27567, -11391, 27540, -11456,
    27512, -11523, 27484, -11588, 27456, -11655, 27429, -11720, 27401, -11786,
    27372, -11852, 27344, -11917, 27315, -11982, 27286, -12049, 27257, -12114,
    27229, -12179, 27199, -12244, 27169, -12309, 27140, -12375, 27110, -12439,
    27080, -12505, 27050, -12570, 27019, -12634, 26990, -12699, 26958, -12764,
    26928, -12828, 26897, -12892, 26866, -12956, 26835, -13021, 26804, -13086,
    26773, -13149, 26741, -13214, 26709, -13278, 26677, -13342, 26645, -13406,
    26613, -13470, 26581, -13534, 26549, -13597, 26515, -13661, 26483, -13725,
    26450, -13788, 26417, -13851, 26384, -13915, 26350, -13978, 26316, -14041,
    26283, -14103, 26248, -14166, 26215, -14229, 26180, -14292, 26146, -14355,
    26112, -14417, 26077, -14480, 26042, -14543, 26008, -14605, 25972, -14667,
    25937, -14730, 25901, -14792, 25866, -14854, 25830, -14916, 25794, -14977,
    25759, -15039, 25723, -15101, 25687, -15162, 25650, -15224, 25613, -15286,
    25577, -15347, 25540, -15408, 25503, -15470, 25465, -15531, 25428, -15592,
    25391, -15653, 25353, -15714, 25315, -15774, 25277, -15834, 25240, -15895,
    25201, -15956, 25162, -16016, 25124, -16076, 25086, -16136, 25047, -16196,
    25008, -16256, 24969, -16316, 24930, -16375, 24891, -16436, 24851, -16496,
    24811, -16555, 24772, -16615, 24732, -16674, 24692, -16732, 24652, -16791,
    24612, -16852, 24572, -16911, 24531, -16969, 24490, -17027, 24449, -17086,
    24408, -17145, 24367, -17203, 24325, -17261, 24284, -17320, 24242, -17379,
    24200, -17436, 24158, -17494, 24116, -17552, 24075, -17610, 24032, -17668,
    23990, -17725, 23947, -17782, 23904, -17840, 23862, -17897, 23819, -17954,
    23775, -18011, 23732, -18068, 23689, -18125, 23645, -18181, 23602, -18238,
    23558, -18294, 23514, -18351, 23470, -18407, 23426, -18464, 23381, -18520,
    23337, -18576, 23293, -18632, 23248, -18688, 23202, -18743, 23158, -18799,
    23112, -18854, 23068, -18910, 23022, -18964, 22977, -19020, 22931, -19074,
    22885, -19129, 22839, -19185, 22793, -19239, 22747, -19294, 22700, -19348,
    22655, -19403, 22607, -19457, 22561, -19511, 22514, -19565, 22467, -19619,
    22421, -19673, 22373, -19726, 22326, -19780, 22279, -19834, 22230, -19887,
    22183, -19940, 22135, -19993, 22087, -20047, 22039, -20099, 21991, -20152,
    21942, -20205, 21894, -20257, 21845, -20309, 21797, -20362, 21748, -20413,
    21699, -20466, 21650, -20518, 21601, -20570, 21551, -20621, 21502, -20674,
];

/// Gain Huffman bit widths (VA=0x1000cea8, 14 sections x 24 = 336 entries)
/// Section 0 = sentinel (all 99), sections 1-13 = per-subband differential widths
pub static GAIN_HUFFMAN_BIT_WIDTHS: [i16; 336] = [
    // Section 0: sentinel
    99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
    // Section 1
     4,  6,  5,  5,  4,  4,  4,  4,  4,  4,  3,  3,  3,  4,  5,  7,  8,  9, 11, 11, 12, 12, 12, 12,
    // Section 2
    10,  8,  6,  5,  5,  4,  3,  3,  3,  3,  3,  3,  4,  5,  7,  9, 11, 12, 13, 15, 15, 15, 16, 16,
    // Section 3
    12, 10,  8,  6,  5,  4,  4,  4,  4,  4,  4,  3,  3,  3,  4,  4,  5,  5,  7,  9, 11, 13, 14, 14,
    // Section 4
    13, 10,  9,  9,  7,  7,  5,  5,  4,  3,  3,  3,  3,  3,  4,  4,  4,  5,  7,  9, 11, 13, 13, 13,
    // Section 5
    12, 13, 10,  8,  6,  6,  5,  5,  4,  4,  3,  3,  3,  3,  3,  4,  5,  5,  6,  7,  9, 11, 14, 14,
    // Section 6
    12, 11,  9,  8,  8,  7,  5,  4,  4,  3,  3,  3,  3,  3,  4,  4,  5,  5,  7,  8, 10, 13, 14, 14,
    // Section 7
    15, 16, 15, 12, 10,  8,  6,  5,  4,  3,  3,  3,  2,  3,  4,  5,  5,  7,  9, 11, 13, 16, 16, 16,
    // Section 8
    14, 14, 11, 10,  9,  7,  7,  5,  5,  4,  3,  3,  2,  3,  3,  4,  5,  7,  9,  9, 12, 14, 15, 15,
    // Section 9
     9,  9,  9,  8,  7,  6,  5,  4,  3,  3,  3,  3,  3,  3,  4,  5,  6,  7,  8, 10, 11, 12, 13, 13,
    // Section 10
    14, 12, 10,  8,  6,  6,  5,  4,  3,  3,  3,  3,  3,  3,  4,  5,  6,  8,  8,  9, 11, 14, 14, 14,
    // Section 11
    13, 10,  9,  8,  6,  6,  5,  4,  4,  4,  3,  3,  2,  3,  4,  5,  6,  8,  9,  9, 11, 12, 14, 14,
    // Section 12
    16, 13, 12, 11,  9,  6,  5,  5,  4,  4,  4,  3,  2,  3,  3,  4,  5,  7,  8, 10, 14, 16, 16, 16,
    // Section 13
    13, 14, 14, 14, 10,  8,  7,  7,  5,  4,  3,  3,  2,  3,  3,  4,  5,  5,  7,  9, 11, 14, 14, 14,
];

/// Gain Huffman codes (VA=0x1000d148, 14 sections x 24 = 336 entries)
pub static GAIN_HUFFMAN_CODES: [i16; 336] = [
    // Section 0: sentinel (all zeros)
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    // Section 1
     8, 38, 18, 10,  7,  6,  3,  2,  0,  1,  7,  6,  5,  4, 11, 78, 158, 318, 1278, 1279, 2552, 2553, 2554, 2555,
    // Section 2
    36,  8,  3,  5,  0,  1,  7,  6,  4,  3,  2,  5,  3,  4,  5, 19, 74, 150, 302, 1213, 1214, 1215, 2424, 2425,
    // Section 3
    2582, 644, 160, 41,  5, 11,  7,  5,  4,  1,  0,  6,  4,  7,  3,  6,  4, 21, 81, 323, 1290, 5167, 10332, 10333,
    // Section 4
    2940, 366, 181, 180, 47, 46, 27, 10,  8,  5,  1,  0,  3,  7,  4,  9, 12, 26, 44, 182, 734, 2941, 2942, 2943,
    // Section 5
    3982, 7967, 994, 249, 63, 26, 19, 18, 14,  8,  6,  1,  0,  2,  5,  7, 12, 30, 27, 125, 496, 1990, 15932, 15933,
    // Section 6
    3254, 1626, 407, 206, 202, 100, 30, 14,  3,  5,  3,  0,  2,  4,  2, 13, 24, 31, 102, 207, 812, 6511, 13020, 13021,
    // Section 7
    1110, 2216, 1111, 139, 35,  9,  3, 20, 11,  4,  2,  1,  3,  3,  1,  0, 21,  5, 16, 68, 276, 2217, 2218, 2219,
    // Section 8
    1013, 1014, 127, 62, 29,  6,  4, 16,  0,  1,  3,  2,  3,  1,  5,  9, 17,  5, 28, 30, 252, 1015, 2024, 2025,
    // Section 9
    381, 380, 372, 191, 94, 44, 16, 10,  7,  3,  1,  0,  2,  6,  9, 17, 45, 92, 187, 746, 1494, 2991, 5980, 5981,
    // Section 10
    3036, 758, 188, 45, 43, 10,  4,  3,  6,  4,  2,  0,  3,  7, 11, 20, 42, 44, 46, 95, 378, 3037, 3038, 3039,
    // Section 11
    751, 92, 45, 20, 26,  4, 12,  7,  4,  0,  4,  1,  3,  5,  5,  3, 27, 21, 44, 47, 186, 374, 1500, 1501,
    // Section 12
    -19964, 5697, 2849, 1425, 357, 45, 23,  6, 10,  7,  2,  2,  3,  0,  4,  6,  7, 88, 179, 713, 11392, -19963, -19962, -19961,
    // Section 13
    2511, 5016, 5018, 5017, 312, 79, 38, 36, 30, 14,  6,  0,  2,  1,  3,  5,  8, 31, 37, 157, 626, 5019, 5020, 5021,
];

/// Analysis window coefficients (VA=0x10010718, 320 entries)
pub static ANALYSIS_WINDOW: [i16; 320] = [
       44,   134,   224,   314,   404,   494,   584,   674,   764,   853,
      943,  1033,  1123,  1213,  1302,  1392,  1482,  1571,  1661,  1750,
     1840,  1929,  2019,  2108,  2197,  2286,  2376,  2465,  2554,  2643,
     2732,  2821,  2909,  2998,  3087,  3175,  3264,  3352,  3441,  3529,
     3617,  3705,  3793,  3881,  3969,  4057,  4144,  4232,  4319,  4407,
     4494,  4581,  4668,  4755,  4842,  4928,  5015,  5101,  5188,  5274,
     5360,  5446,  5532,  5617,  5703,  5788,  5873,  5959,  6043,  6128,
     6213,  6297,  6382,  6466,  6550,  6634,  6718,  6801,  6885,  6968,
     7051,  7134,  7217,  7299,  7382,  7464,  7546,  7628,  7709,  7791,
     7872,  7953,  8034,  8115,  8195,  8276,  8356,  8436,  8515,  8595,
     8674,  8753,  8832,  8911,  8989,  9068,  9146,  9223,  9301,  9378,
     9455,  9532,  9609,  9685,  9762,  9838,  9913,  9989, 10064, 10139,
    10214, 10288, 10363, 10437, 10510, 10584, 10657, 10730, 10803, 10875,
    10948, 11020, 11091, 11163, 11234, 11305, 11375, 11446, 11516, 11586,
    11655, 11724, 11793, 11862, 11930, 11998, 12066, 12134, 12201, 12268,
    12334, 12401, 12467, 12532, 12598, 12663, 12728, 12792, 12857, 12920,
    12984, 13047, 13110, 13173, 13235, 13297, 13359, 13420, 13481, 13542,
    13602, 13662, 13722, 13782, 13841, 13899, 13958, 14016, 14074, 14131,
    14188, 14245, 14301, 14357, 14413, 14468, 14523, 14578, 14632, 14686,
    14739, 14793, 14845, 14898, 14950, 15002, 15053, 15104, 15155, 15205,
    15255, 15305, 15354, 15403, 15451, 15500, 15547, 15595, 15642, 15688,
    15734, 15780, 15826, 15871, 15916, 15960, 16004, 16047, 16091, 16133,
    16176, 16218, 16259, 16300, 16341, 16382, 16422, 16461, 16501, 16540,
    16578, 16616, 16654, 16691, 16728, 16764, 16800, 16836, 16871, 16906,
    16940, 16974, 17008, 17041, 17074, 17106, 17138, 17170, 17201, 17232,
    17262, 17292, 17321, 17350, 17379, 17407, 17435, 17462, 17489, 17516,
    17542, 17567, 17593, 17617, 17642, 17666, 17689, 17713, 17735, 17758,
    17779, 17801, 17822, 17842, 17863, 17882, 17901, 17920, 17939, 17957,
    17974, 17991, 18008, 18024, 18040, 18055, 18070, 18085, 18099, 18113,
    18126, 18139, 18151, 18163, 18174, 18185, 18196, 18206, 18216, 18225,
    18234, 18242, 18250, 18257, 18265, 18271, 18277, 18283, 18288, 18293,
    18298, 18302, 18305, 18308, 18311, 18313, 18315, 18316, 18317, 18317,
];

/// Forward quantizer scale factors (VA=0x100106a8, 8 entries)
pub static QUANT_SCALE_FACTOR: [i16; 8] = [
    23167, 16384, 11585, 8192, 5793, 4096, 2896, 2896,
];

/// Gain-to-scale multiplier lookup (VA=0x10010628, 64 entries)
pub static QUANT_SCALE_BY_GAIN: [i16; 64] = [
    32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
    32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
    32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
    32767, 23170, 16384, 11585,  8192,  5793,  4096,  2896,
     2048,  1448,  1024,   724,   512,   362,   256,   181,
      128,    91,    64,    45,    32,    23,    16,    11,
        8,     6,     4,     3,     2,     1,     1,     1,
        1,     0,     0,     0,     0,     0,     0,     0,
];

/// Quantizer rounding offsets (VA=0x100106f8, 8 entries)
pub static QUANT_ROUNDING: [i16; 8] = [
    2457, 2703, 2949, 3195, 3440, 3686, 4096, 4096,
];

/// Forward codebook codes per quantizer step (7 tables)
pub static FWD_CODEBOOK_CODES_0: [i16; 196] = [
    1, 2, 1, 24, 14, 51, 9, 68, 110, 26, 218, 54, 154, 761, 3, 10,
    22, 8, 58, 22, 71, 16, 30, 50, 213, 75, 94, 632, 15, 18, 52, 23,
    107, 5, 54, 63, 239, 46, 276, 271, 851, 252, 28, 10, 12, 1, 22, 133,
    191, 55, 105, 278, 317, 554, 310, 276, 32, 50, 94, 20, 187, 219, 13, 268,
    473, 445, 145, 849, 1277, 623, 1, 14, 0, 55, 238, 121, 120, 269, 318, 530,
    639, 1117, 509, 556, 24, 78, 51, 153, 62, 308, 16, 25, 68, 1058, 428, 277,
    2233, 1114, 92, 108, 141, 223, 270, 381, 24, 212, 760, 35, 1063, 279, 1717, 3439,
    7, 21, 152, 73, 309, 310, 95, 944, 1890, 2232, 1891, 5107, 10213, 4981, 61, 62,
    9, 79, 474, 475, 848, 1059, 1056, 1716, 139, 4978, 4983, 4983, 140, 186, 76, 444,
    144, 633, 1057, 838, 2237, 4472, 4473, 10212, 10212, 4983, 74, 78, 311, 213, 850, 1062,
    1119, 508, 276, 277, 4982, 4473, 10212, 10212, 208, 70, 555, 418, 68, 510, 2552, 1115,
    4980, 4979, 4982, 4982, 4473, 10212, 215, 71, 253, 511, 839, 1718, 2488, 6876, 6877, 4979,
    4979, 4982, 4982, 4473,
];

pub static FWD_CODEBOOK_CODES_1: [i16; 100] = [
    1, 2, 11, 27, 31, 9, 120, 31, 275, 310, 1, 0, 12, 5, 33, 54,
    102, 111, 246, 448, 10, 14, 31, 39, 59, 100, 114, 202, 485, 969, 24, 26,
    36, 52, 103, 30, 120, 242, 69, 1244, 35, 32, 14, 61, 113, 117, 233, 486,
    487, 2491, 13, 12, 69, 110, 149, 35, 495, 449, 1978, 7751, 76, 75, 122, 136,
    213, 68, 623, 930, 3959, 9961, 115, 16, 107, 225, 424, 850, 1936, 7916, 4981, 4981,
    148, 154, 243, 407, 988, 851, 7750, 19920, 7916, 4981, 406, 274, 464, 931, 3874, 7917,
    19921, 19920, 19920, 7916,
];

pub static FWD_CODEBOOK_CODES_2: [i16; 49] = [
    1, 0, 10, 11, 28, 62, 363, 3, 2, 9, 8, 24, 53, 352, 7, 8,
    13, 25, 89, 74, 355, 10, 23, 24, 29, 55, 354, 1449, 25, 19, 30, 52,
    108, 438, 5793, 91, 36, 63, 353, 725, 11584, 23170, 180, 75, 218, 439, 2897, 23171,
    11584,
];

/// Forward codebook codes table 3 (25x25 = 625 entries)
pub static FWD_CODEBOOK_CODES_3: [i16; 625] = [
        3,     8,    46,   145,   228,     4,     8,    47,    28,   455,    89,     2,   180,     5,  1335,   250,    12,   644,  1311,   139,   729,   251,   870,  2172,  2211,
        5,    23,   112,   334,  1469,    21,     3,     5,   111,  2014,    88,    79,   152,   124,  2685,   297,    48,   110,  1310,   149,   501,  1231,   153,  2267,  2569,
       57,    13,   653,  2587,   143,    75,   124,   118,  2611,  5242,    61,    50,   253,  3633,  2216,   476,    39,    57,  1926,  2236,  2586,  1329,  1920,  2566,  1926,
      296,   233,  2590,  2240,  2217,   253,   613,   867,   144,   318,   614,   252,  2589,  2242,  2218,   872,   866,  2187,  2296,  2155,  2568,  2227,   150,  2567,  2296,
      199,  2686,  2160,  2290, 19145,   232,  2680,   128,  2192,  2212,  2684,   793,  2281,  2223,  2242,  1934,  2165,  2146,  2291,  2296,  2222,  2189,  2187,  2296,  2296,
        6,     4,    82,   725,  3632,    15,    21,    56,   599,   148,     3,   162,    42,   411,  2301,   735,   654,   930,   137,  2586,   869,  1334,  1931,  2300,  2213,
        9,    22,   146,  1290,  5240,     5,    12,    53,   630,   875,    80,     9,     8,    86,  2002,   210,   117,    56,  2019,  2162,   146,   397,   868,   131,  2151,
       77,   160,   365,  2610,  2252,    59,    54,    41,  2591,  1928,   226,    14,   121,  5792,  2295,  1197,   728,   408,   130,  2157,  3635,   155,  2573,  2587,   130,
      314,    64,   144,  2173,  2176,   115,    30,   409,   153,  2590,   631,    26,  4787,  2221,  2174,  2683,  1863,  2572,   319,  2150,  2177,  2194,  2571,  2257,   319,
       65,   145,  2251,  2156,  2161,   909,   864,  2193,  2197,  2246,  2588,  5797,   156,  2258,  2221,  2158,  2199,  2214,  2152,   319,  2188,  2264,  2572,   319,   319,
       30,   117,   219,   865,  2263,   147,   127,   239,   410,  2247,    27,   324,  1468,  2681,  2180,  1328,  5241,   147,   142,  2237,  2241,  2245,  1921,  2262,   142,
       41,    11,   505,  2682,  2591,     0,    26,   229,  2015,  2577,   464,    98,    87,  5243,  2166,   149,  2016,  5244,  2190,  2198,  9573, 11598, 11599,  2235,  2190,
      144,   298,  1004,  5245,  2277,   156,   104,   254,  2560,  1922,   612,   325,  2017,   129,  2588,  2608,  1330,   871,  2144,  2145,   132,  2147,  2148,  2149,  2144,
      119,  1331,   133,  2153,  2154,   211,    58,  2609,  1923,  2159,   510,   163,  5246,  2163,  2164,  1924,   134,  2167,  2168,  2168,  2169,  2170,  2171,  2168,  2168,
     1332,   135,   136,  2175,  2153,   150,   873,  2178,  2179,  1923,  1925,  2181,  2182,  2183,  2163,  2184,  2185,  2186,  2168,  2168,  1924,   134,  2167,  2168,  2168,
       58,   326,  2687,   138,  2191,    31,    66,   874,  2195,  2196,   151,   152,  1927,  2200,  2201,  2202,  2203,  2204,  2205,  2206,  2207,  2208,  2209,  2210,  2205,
       55,   103,  1230,   140,  2215,   118,    15,  1333,  2219,  2220,  2018,   511,   141,  2224,  2225,  2226,  1929,  2228,  2229,  2230,  2231,  2232,  2233,  2234,  2229,
      366,  1005,  1930,  2238,  2239,    12,  1006,  5247,  2243,  2244,  1932,  3634,  1933,  2248,  2249,  2250,   145,   146,  2253,  2253,  2254,  2255,  2256,  2253,  2253,
     1291,  5793,  2259,  2260,  2261,   477,  5794,   147,  2265,  2266,  5795,  2268,  2269,  2270,  2270,  2271,  2272,  2273,  2274,  2274,  2275,  2276,  2273,  2274,  2274,
      148,  2278,  2279,  2280,  2260,  1935,  2282,  2283,  2284,  2265,  2285,  2286,  2287,  2270,  2270,  2288,  2289,  2273,  2274,  2274,  2271,  2272,  2273,  2274,  2274,
      233,  5796,  2292,  2293,  2294,  1292,  3724,  2297,  2298,  2299,  2000,   151,  2302,  2303,  2200,   152,  2561,  2562,  2563,  2205,  2564,  2565,  2204,  2205,  2205,
      363,   154,   154,   155,  2570,    59,  3725,  2001,  2574,  2575,  2576,   157,  2578,  2579,  2224,  2580,  2581,  2582,  2583,  2229,  2584,  2585,  2228,  2229,  2229,
      654,  5798,   158,  2589,  2238,  2392,  2003,  2592,  2593,  2243,  2594,  2595,  2596,  2597,  2248,  2598,  2599,  2600,  2253,  2253,  2250,   145,   146,  2253,  2253,
     2601,  2602,  2603,  2604,  2260,  2605,  2606,  2607,  6336,  2265,  6337,  6338,  6339,  2270,  2270,  6340,  6341,  2273,  2274,  2274,  2271,  2272,  2273,  2274,  2274,
     6342,  6343,  2259,  2260,  2260, -27248, -27247,   147,  2265,  2265,  5795,  2268,  2269,  2270,  2270,  2271,  2272,  2273,  2274,  2274,  2271,  2272,  2273,  2274,  2274,
];

pub static FWD_CODEBOOK_CODES_4: [i16; 256] = [
    1, 2, 4, 572, 10, 0, 69, 712, 91, 10, 46, 9182, 1426, 1430, 30172, 30194,
    9, 28, 22, 2258, 16, 25, 142, 2179, 15, 111, 719, 1521, 1131, 1437, 1520, 30196,
    88, 283, 3803, 30193, 13, 236, 2856, 30166, 545, 951, 5709, 1522, 3241, 9180, 30179, 5709,
    1088, 4356, 30410, 30175, 1146, 377, 30162, 30163, 8715, 30176, 30165, 5709, 30197, 30184, 5709, 5709,
    1, 23, 28, 5710, 26, 14, 29, 7538, 102, 103, 1429, 1524, 3237, 7060, 30401, 30201,
    15, 13, 470, 3768, 24, 15, 281, 5747, 24, 181, 1128, 30206, 5711, 3531, 30156, 30158,
    116, 100, 2260, 30187, 119, 234, 1764, 30171, 716, 883, 9183, 30164, 3236, 1528, 30180, 9183,
    885, 2870, 1532, 30160, 1431, 5708, 30192, 30205, 30402, 30168, 30173, 9183, 30157, 30161, 9183, 9183,
    54, 25, 1621, 15211, 180, 287, 2261, 30198, 808, 811, 30411, 30413, 30414, 22986, 22987, 30411,
    24, 273, 376, 30159, 137, 280, 2871, 1523, 1768, 2259, 1525, 30167, 1526, 30169, 30170, 1525,
    443, 1434, 1527, 30174, 474, 1769, 30177, 30178, 3238, 3239, 30181, 30181, 30182, 30183, 30181, 30181,
    3240, 30185, 30186, 1527, 9181, 30188, 30189, 30177, 30190, 30191, 30181, 30181, 3238, 3239, 30181, 30181,
    440, 2857, 1529, 30195, 2294, 7061, 1530, 30199, 30200, 1531, 30202, 30411, 30203, 30204, 30411, 30411,
    203, 2872, 30207, 30400, 189, 11492, 30403, 30404, 30405, 30406, 30407, 1525, 30408, 30409, 1525, 1525,
    8714, 1533, 30412, 1527, 1534, 1535, 30415, 30177, 30416, 30417, 30181, 30181, 3238, 3239, 30181, 30181,
    30418, 30419, 1527, 1527, 30420, 30421, 30177, 30177, 3238, 3239, 30181, 30181, 3238, 3239, 30181, 30181,
];

pub static FWD_CODEBOOK_CODES_5: [i16; 243] = [
    0, 5, 220, 10, 16, 443, 390, 391, 14333, 11, 26, 1566, 26, 54, 3135, 508,
    1558, 28581, 255, 1782, 28599, 885, 6208, 28578, 14335, 28579, 54, 9, 35, 3129, 27, 68,
    3537, 1562, 3568, 28610, 25, 62, 4078, 58, 118, 7763, 3107, 7758, 28563, 778, 3131, 28598,
    780, 7123, 28630, 28593, 28586, 118, 243, 6210, 28614, 1018, 3567, 28601, 28611, 28570, 68, 388,
    6256, 28619, 1559, 28562, 28606, 28565, 28591, 118, 28594, 28571, 62, 28618, 28590, 118, 58, 118,
    118, 4, 28, 1781, 31, 60, 3134, 1938, 3882, 28574, 25, 96, 7757, 49, 126, 14244,
    3883, 14334, 28613, 1769, 4077, 28602, 3106, 7756, 28582, 28621, 28566, 126, 14, 61, 4079, 61,
    138, 28491, 3536, 8153, 28573, 49, 96, 12442, 119, 240, 28490, 12443, 28560, 28561, 3111, 3580,
    28564, 3130, 7759, 28567, 28568, 28569, 240, 444, 6209, 28572, 3569, 6211, 28575, 28576, 28577, 138,
    778, 7760, 28580, 7761, 7762, 28583, 28584, 28585, 240, 14319, 28587, 96, 28588, 28589, 240, 119,
    240, 240, 139, 968, 28592, 1554, 3581, 28595, 28596, 28597, 60, 971, 3560, 28600, 3582, 7132,
    28603, 28604, 28605, 126, 14332, 28607, 96, 28608, 28609, 126, 49, 126, 126, 241, 1558, 28612,
    1563, 6257, 28615, 28616, 28617, 138, 1559, 7133, 28620, 6220, 28622, 28623, 28624, 28625, 240, 28626,
    28627, 96, 28628, 28629, 240, 119, 240, 240, 8152, 28631, 61, 28632, 28633, 138, 61, 138,
    138, 28634, 28635, 96, 28636, 28637, 240, 119, 240, 240, 49, 96, 96, 119, 240, 240,
    119, 240, 240,
];

pub static FWD_CODEBOOK_CODES_6: [i16; 32] = [
    1, 2, 4, 2, 5, 29, 24, 101, 3, 31, 28, 105, 3, 5, 102, 424,
    1, 30, 0, 107, 27, 200, 103, 806, 1, 4, 104, 402, 3, 425, 213, 807,
];

/// Forward codebook widths per quantizer step (7 tables)
pub static FWD_CODEBOOK_WIDTHS_0: [i16; 196] = [
    1, 4, 6, 6, 7, 7, 8, 8, 8, 9, 9, 10, 11, 11, 4, 5,
    6, 7, 7, 8, 8, 9, 9, 9, 9, 10, 11, 11, 5, 6, 7, 8,
    8, 9, 9, 9, 9, 10, 10, 10, 11, 12, 6, 7, 8, 9, 9, 9,
    9, 10, 10, 10, 10, 11, 12, 13, 7, 7, 8, 9, 9, 9, 10, 10,
    10, 10, 11, 11, 12, 13, 8, 8, 9, 9, 9, 10, 10, 10, 10, 11,
    11, 12, 13, 14, 8, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 13,
    13, 15, 8, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 13, 14, 15,
    9, 9, 9, 10, 10, 10, 11, 11, 12, 13, 12, 14, 15, 16, 9, 9,
    10, 10, 10, 10, 11, 12, 12, 14, 14, 16, 16, 16, 9, 9, 10, 10,
    11, 11, 12, 13, 13, 14, 14, 15, 15, 16, 10, 10, 10, 11, 11, 12,
    12, 13, 15, 15, 16, 14, 15, 15, 11, 11, 11, 12, 13, 13, 13, 15,
    16, 16, 16, 16, 14, 15, 11, 11, 12, 13, 13, 14, 15, 16, 16, 16,
    16, 16, 16, 14,
];

pub static FWD_CODEBOOK_WIDTHS_1: [i16; 100] = [
    1, 4, 5, 6, 7, 8, 8, 9, 10, 10, 4, 5, 6, 7, 7, 8,
    8, 9, 9, 11, 5, 5, 6, 7, 8, 8, 9, 9, 10, 11, 6, 6,
    7, 8, 8, 9, 9, 10, 11, 12, 7, 7, 8, 8, 9, 9, 10, 11,
    11, 13, 8, 8, 8, 9, 9, 10, 10, 11, 12, 14, 8, 8, 8, 9,
    10, 11, 11, 12, 13, 15, 9, 9, 9, 10, 11, 12, 12, 14, 14, 14,
    9, 9, 9, 10, 11, 12, 14, 16, 14, 14, 10, 10, 11, 12, 13, 14,
    16, 16, 16, 14,
];

pub static FWD_CODEBOOK_WIDTHS_2: [i16; 49] = [
    1, 4, 5, 7, 8, 9, 10, 3, 4, 5, 7, 8, 9, 10, 5, 5,
    6, 7, 8, 10, 10, 7, 6, 7, 8, 9, 10, 12, 8, 8, 8, 9,
    10, 12, 14, 8, 9, 9, 10, 11, 15, 16, 9, 10, 11, 12, 13, 16,
    15,
];

/// Forward codebook widths table 3 (25x25 = 625 entries)
pub static FWD_CODEBOOK_WIDTHS_3: [i16; 625] = [
        2,     4,     6,     8,    10,     5,     5,     6,     8,    10,     7,     8,     8,    10,    12,     9,     9,    10,    12,    15,    10,    11,    13,    16,    16,
        5,     6,     8,    10,    11,     5,     6,     8,    10,    12,     7,     7,     8,    10,    13,     9,     9,    10,    12,    15,    12,    11,    13,    16,    16,
        7,     9,    10,    12,    15,     7,     8,    10,    12,    13,     9,     9,    11,    13,    16,    11,    11,    12,    14,    16,    12,    12,    14,    16,    14,
        9,    11,    12,    16,    16,     9,    10,    13,    15,    16,    10,    11,    12,    16,    16,    13,    13,    16,    16,    16,    16,    16,    15,    16,    16,
       11,    13,    16,    16,    15,    11,    13,    15,    16,    16,    13,    13,    16,    16,    16,    14,    16,    16,    16,    16,    16,    16,    16,    16,    16,
        4,     6,     8,    10,    13,     6,     6,     8,    10,    13,     9,     8,    10,    12,    16,    10,    10,    11,    15,    16,    13,    12,    14,    16,    16,
        5,     6,     8,    11,    13,     6,     6,     8,    10,    13,     8,     8,     9,    11,    14,    10,    10,    12,    12,    16,    13,    12,    13,    15,    16,
        7,     8,     9,    12,    16,     7,     8,    10,    12,    14,     9,     9,    10,    13,    16,    11,    10,    12,    15,    16,    13,    13,    16,    16,    15,
        9,    11,    13,    16,    16,     9,    10,    12,    15,    16,    10,    11,    13,    16,    16,    13,    12,    16,    16,    16,    16,    16,    16,    16,    16,
       11,    13,    16,    16,    16,    11,    13,    16,    16,    16,    12,    13,    15,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,
        6,     8,    11,    13,    16,     8,     8,    10,    12,    16,    11,    10,    11,    13,    16,    12,    13,    13,    15,    16,    16,    16,    14,    16,    15,
        6,     8,    10,    13,    16,     8,     8,    10,    12,    16,    10,    10,    11,    13,    16,    13,    12,    13,    16,    16,    14,    14,    14,    16,    16,
        8,     9,    11,    13,    16,     8,     9,    11,    16,    14,    10,    10,    12,    15,    16,    12,    12,    13,    16,    16,    15,    16,    16,    16,    16,
       10,    12,    15,    16,    16,    10,    12,    12,    14,    16,    12,    12,    13,    16,    16,    14,    15,    16,    16,    16,    16,    16,    16,    16,    16,
       12,    15,    15,    16,    16,    13,    13,    16,    16,    14,    14,    16,    16,    16,    16,    16,    16,    16,    16,    16,    14,    15,    16,    16,    16,
        8,    10,    13,    15,    16,    10,    11,    13,    16,    16,    13,    13,    14,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,
        8,    10,    11,    15,    16,     9,    10,    12,    16,    16,    12,    12,    15,    16,    16,    16,    14,    16,    16,    16,    16,    16,    16,    16,    16,
        9,    11,    14,    16,    16,    10,    11,    13,    16,    16,    14,    13,    14,    16,    16,    16,    15,    15,    16,    16,    16,    16,    16,    16,    16,
       11,    13,    16,    16,    16,    11,    13,    15,    16,    16,    13,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,
       15,    16,    16,    16,    16,    14,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,
        9,    13,    16,    16,    16,    11,    13,    16,    16,    16,    14,    15,    16,    16,    16,    15,    16,    16,    16,    16,    16,    16,    16,    16,    16,
        9,    13,    15,    15,    16,    12,    13,    14,    16,    16,    16,    15,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,
       11,    13,    15,    16,    16,    12,    14,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    15,    15,    16,    16,
       16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,
       16,    16,    16,    16,    16,    16,    16,    15,    16,    16,    13,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,    16,
];

pub static FWD_CODEBOOK_WIDTHS_4: [i16; 256] = [
    2, 4, 7, 10, 4, 5, 7, 10, 7, 8, 10, 14, 11, 11, 15, 15,
    4, 5, 9, 12, 5, 5, 8, 12, 8, 7, 10, 15, 11, 11, 15, 15,
    7, 9, 12, 15, 8, 8, 12, 15, 10, 10, 13, 15, 14, 14, 15, 13,
    11, 13, 15, 15, 11, 13, 15, 15, 14, 15, 15, 13, 15, 15, 13, 13,
    4, 5, 9, 13, 5, 6, 9, 13, 9, 9, 11, 15, 14, 13, 15, 15,
    4, 6, 9, 12, 5, 6, 9, 13, 9, 8, 11, 15, 13, 12, 15, 15,
    7, 9, 12, 15, 7, 8, 11, 15, 10, 10, 14, 15, 14, 15, 15, 14,
    10, 12, 15, 15, 11, 13, 15, 15, 15, 15, 15, 14, 15, 15, 14, 14,
    6, 9, 13, 14, 8, 9, 12, 15, 12, 12, 15, 15, 15, 15, 15, 15,
    7, 9, 13, 15, 8, 9, 12, 15, 11, 12, 15, 15, 15, 15, 15, 15,
    9, 11, 15, 15, 9, 11, 15, 15, 14, 14, 15, 15, 15, 15, 15, 15,
    14, 15, 15, 15, 14, 15, 15, 15, 15, 15, 15, 15, 14, 14, 15, 15,
    9, 12, 15, 15, 12, 13, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
    10, 12, 15, 15, 12, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
    14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 15, 15,
    15, 15, 15, 15, 15, 15, 15, 15, 14, 14, 15, 15, 14, 14, 15, 15,
];

pub static FWD_CODEBOOK_WIDTHS_5: [i16; 243] = [
    2, 4, 8, 4, 5, 9, 9, 10, 14, 4, 6, 11, 5, 6, 12, 10,
    11, 15, 9, 11, 15, 10, 13, 15, 14, 15, 6, 4, 6, 12, 6, 7,
    12, 12, 12, 15, 5, 7, 13, 6, 7, 13, 12, 13, 15, 10, 12, 15,
    11, 13, 15, 15, 15, 7, 8, 13, 15, 11, 12, 15, 15, 15, 7, 10,
    13, 15, 12, 15, 15, 15, 15, 7, 15, 15, 7, 15, 15, 7, 6, 7,
    7, 4, 5, 11, 5, 7, 12, 11, 12, 15, 6, 7, 13, 7, 8, 14,
    12, 14, 15, 11, 13, 15, 12, 13, 15, 15, 15, 8, 5, 6, 13, 7,
    8, 15, 12, 14, 15, 6, 8, 14, 7, 8, 15, 14, 15, 15, 12, 12,
    15, 12, 13, 15, 15, 15, 8, 9, 13, 15, 12, 13, 15, 15, 15, 8,
    11, 13, 15, 13, 13, 15, 15, 15, 8, 14, 15, 8, 15, 15, 8, 7,
    8, 8, 8, 10, 15, 11, 12, 15, 15, 15, 7, 10, 12, 15, 12, 13,
    15, 15, 15, 8, 14, 15, 7, 15, 15, 8, 7, 8, 8, 8, 12, 15,
    12, 13, 15, 15, 15, 8, 11, 13, 15, 13, 15, 15, 15, 15, 8, 15,
    15, 8, 15, 15, 8, 7, 8, 8, 14, 15, 6, 15, 15, 8, 7, 8,
    8, 15, 15, 8, 15, 15, 8, 7, 8, 8, 6, 8, 8, 7, 8, 8,
    7, 8, 8,
];

pub static FWD_CODEBOOK_WIDTHS_6: [i16; 32] = [
    1, 4, 4, 6, 4, 6, 6, 8, 4, 6, 6, 8, 6, 9, 8, 10,
    4, 6, 7, 8, 6, 9, 8, 11, 6, 9, 8, 10, 8, 10, 9, 11,
];