Cosmetics: indent
[ffmpeg.git] / libavcodec / ra144.c
1 /*
2  * Real Audio 1.0 (14.4K)
3  * Copyright (c) 2003 the ffmpeg project
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21
22 #include <stdint.h>
23 #include "avcodec.h"
24 #include "ra144.h"
25
26 const int16_t ff_gain_val_tab[256][3] = {
27     { 541, 956,  768}, { 877, 581,  568}, { 675,1574,  635}, {1248,1464,  668},
28     {1246, 839, 1394}, {2560,1386,  991}, { 925, 687,  608}, {2208, 797, 1144},
29     { 535, 832,  799}, { 762, 605, 1154}, { 832,1122, 1003}, {1180, 687, 1176},
30     {1292, 901,  732}, {1656, 689,  896}, {1750,1248,  848}, {2284, 942, 1022},
31     { 824,1472,  643}, { 517, 765,  512}, { 562,1816, 1522}, { 694,1826, 2700},
32     { 704, 524,  672}, {1442, 757, 2232}, { 884, 551, 1266}, {2232,1007, 1692},
33     { 932, 746,  777}, {1132, 822,  926}, {1226, 771,  611}, {2948,1342, 1008},
34     {1302, 594, 1158}, {1602, 636, 1128}, {3408, 910, 1438}, {1996, 614,  575},
35     { 665, 935,  628}, { 631,1192,  829}, { 644, 926, 1052}, { 879, 988, 1226},
36     { 941,2768, 2772}, { 565,1344, 2304}, { 547, 628,  740}, { 639, 532, 1074},
37     { 955,1208,  598}, {1124,1160,  900}, {1206, 899, 1242}, { 746, 533,  624},
38     {1458,1028,  735}, {1706,1102,  692}, {1898,1018, 1004}, {2176, 988,  735},
39     {1578, 782, 1642}, { 897, 516,  754}, {2068, 702, 1656}, {2344, 818, 1526},
40     { 907, 652,  592}, {1056, 652,  642}, {2124,1416,  780}, {2664,1250,  727},
41     {1894, 727, 1108}, {2196, 657,  981}, {4840, 920, 1704}, {4992,1238,  983},
42     {2420, 909, 1094}, {2760, 935, 1032}, {2800, 612,  853}, {3068, 832,  574},
43     { 523,1796,  923}, { 722,1916, 1382}, {1226,1542,  928}, { 758, 757,  584},
44     { 512,1134,  577}, { 615,1276,  698}, { 574,2568, 2356}, { 993,2728, 3512},
45     { 539, 890,  913}, { 694, 928, 1088}, { 805, 600, 1360}, {2160, 951, 3128},
46     { 816, 950,  590}, { 955, 847,  811}, {1094, 883,  556}, {1304, 888,  604},
47     { 863,1170,  855}, {1023, 997, 1032}, { 932,1228, 1280}, { 627, 564,  573},
48     { 876, 900, 1448}, {1030, 857, 1792}, {1294, 953, 1758}, {1612, 854, 1714},
49     {1090,1166,  631}, {1314,1202,  751}, {1480, 905,  795}, {1682,1016,  568},
50     {1494,1178,  983}, { 878, 613,  526}, {1728,1446,  779}, {2136,1348,  774},
51     { 950, 649,  939}, {1180, 703,  899}, {1236, 527, 1158}, {1450, 647,  972},
52     {1282, 647,  707}, {1460, 663,  644}, {1614, 572,  578}, {3516,1222,  821},
53     {2668, 729, 1682}, {3128, 585, 1502}, {3208, 733,  976}, {6800, 871, 1416},
54     {3480, 743, 1408}, {3764, 899, 1170}, {3772, 632,  875}, {4092, 732,  638},
55     {3112, 753, 2620}, {3372, 945, 1890}, {3768, 969, 2288}, {2016, 559,  854},
56     {1736, 729,  787}, {1940, 686,  547}, {2140, 635,  674}, {4480,1272,  828},
57     {3976, 592, 1666}, {4384, 621, 1388}, {4400, 801,  955}, {4656, 522,  646},
58     {4848, 625, 1636}, {4984, 591,  874}, {5352, 535, 1001}, {11216,938, 1184},
59     { 925,3280, 1476}, { 735,1580, 1088}, {1150,1576,  674}, { 655, 783,  528},
60     { 527,2052, 1354}, { 782,1704, 1880}, { 578, 910, 1026}, { 692, 882, 1468},
61     { 586, 683,  715}, { 739, 609,  717}, { 778, 773,  697}, { 922, 785,  813},
62     { 766, 651,  984}, { 978, 596, 1030}, {1070, 757, 1080}, {1324, 687, 1178},
63     {1108,2144,  979}, { 723, 982,  690}, { 936, 956,  527}, {1180,1002,  547},
64     { 517,1306,  825}, { 832,1184,  974}, {1024, 957,  903}, {1262,1090,  906},
65     {1028, 720,  649}, {1192, 679,  694}, {2468,1480,  979}, {2844,1370,  877},
66     {1310, 835,  848}, {1508, 839,  698}, {1742,1030,  769}, {1910, 852,  573},
67     {1280, 859, 1174}, {1584, 863, 1108}, {1686, 708, 1364}, {1942, 768, 1104},
68     { 891, 536,  690}, {1016, 560,  663}, {2172, 870, 1348}, {2404, 999, 1170},
69     {1890, 966,  889}, {2116, 912,  777}, {2296,1020,  714}, {4872,1844,  932},
70     {2392, 778,  929}, {2604, 772,  744}, {2764, 957,  722}, {5832,1532,  984},
71     {2188, 519, 1264}, {2332, 532,  922}, {5064, 995, 2412}, {2708, 571,  874},
72     {2408, 545,  666}, {5016,1084,  875}, {5376, 983, 1196}, {5536, 979,  730},
73     {5344, 634, 1744}, {5688, 706, 1348}, {5912, 977, 1190}, {6072, 905,  763},
74     {6048, 582, 1526}, {11968,1013,1816}, {12864,937, 1900}, {12560,1086, 998},
75     {1998, 684, 1884}, {2504, 633, 1992}, {1252, 567,  835}, {1478, 571,  973},
76     {2620, 769, 1414}, {2808, 952, 1142}, {2908, 712, 1028}, {2976, 686,  741},
77     {1462, 552,  714}, {3296, 991, 1452}, {1590, 615,  544}, {3480,1150,  824},
78     {3212, 832,  923}, {3276, 839,  531}, {3548, 786,  852}, {3732, 764,  570},
79     {5728, 906, 2616}, {6272, 804, 2252}, {3096, 535,  876}, {3228, 598,  649},
80     {6536, 759, 1436}, {6648, 993,  846}, {6864, 567, 1210},{14016,1012, 1302},
81     {3408, 548, 1098}, {7160,1008, 1742}, {7136,1000, 1182}, {7480,1032,  836},
82     {7448, 612, 1552}, {7744, 614,  816}, {8384, 777, 1438}, {8784, 694,  786},
83     { 882,1508, 1068}, { 597, 837,  766}, {1270, 954, 1408}, { 803, 550,  798},
84     {1398,1308,  798}, {1848,1534,  738}, { 970, 675,  608}, {1264, 706,  684},
85     {1716, 767, 1126}, {2108, 765, 1404}, {2236, 924, 1003}, {2472,1048,  611},
86     { 999, 942,  963}, {1094, 857,  935}, {2936, 926, 1138}, {1934, 746,  551},
87     {3336, 633, 1762}, {3764, 701, 1454}, {1890, 564,  636}, {4096,1126,  793},
88     {3936, 556, 1140}, {3936, 540,  740}, {4216, 764,  874}, {8480,1328, 1014},
89     {2184, 515, 1042}, {4432, 934, 1344}, {4784, 945, 1112}, {5016,1062,  733},
90     {9216,1020, 2028}, {9968, 924, 1188}, {5424, 909, 1206}, {6512, 744, 1086}
91 };
92
93 const uint8_t ff_gain_exp_tab[256] = {
94    15, 15, 15, 15, 15, 16, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14,
95    14, 13, 14, 14, 13, 14, 13, 14, 13, 13, 13, 14, 13, 13, 14, 13,
96    13, 13, 13, 13, 14, 13, 12, 12, 13, 13, 13, 12, 13, 13, 13, 13,
97    13, 12, 13, 13, 12, 12, 13, 13, 13, 13, 14, 14, 13, 13, 13, 13,
98    13, 13, 13, 12, 12, 12, 13, 13, 12, 12, 12, 13, 12, 12, 12, 12,
99    12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12,
100    12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 13, 13, 13, 13,
101    13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14,
102    13, 12, 12, 11, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
103    12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 11, 11, 11, 11,
104    12, 12, 12, 12, 11, 11, 12, 12, 12, 12, 12, 13, 12, 12, 12, 13,
105    12, 12, 13, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14,
106    12, 12, 11, 11, 12, 12, 12, 12, 11, 12, 11, 12, 12, 12, 12, 12,
107    13, 13, 12, 12, 13, 13, 13, 14, 12, 13, 13, 13, 13, 13, 13, 13,
108    11, 10, 11, 10, 11, 11, 10, 10, 11, 11, 11, 11, 10,  9, 11, 10,
109    12, 12, 11, 12, 12, 12, 12, 13, 11, 12, 12, 12, 13, 13, 12, 12
110 };
111
112 const int8_t ff_cb1_vects[128][40]={
113     {
114      38,  -4,  15,  -4,  14, -13,  12, -11,  -2,  -6,
115      -6, -11, -45, -16, -11, -13,  -7,   6, -12,   4,
116     -20,   3, -16,  12,  -1,  12,  46,  24,   0,  33,
117      -3,   9, -12, -12,  -8,  -7,  17,  -6,   0,  -2,
118     }, {
119      60, -16,   3, -22,  10, -32,   0, -28, -17, -18,
120      -3, -25, -37, -23, -10,   3,   2,   3,   0,   3,
121     -14,   0, -14,  -1,   0,   2,  32,   9,  -1,  25,
122       7,  13,  -5,  13,   8,   1,   2,   8, -10,   6,
123     }, {
124      27, -12,  28,  -2,   6,  -7,  15,   9, -11,   1,
125     -13, -11, -40,   4, -29, -14, -19,  -5, -23,  -8,
126     -30, -13, -17,   0, -14,  12,  34,  20,  -2,  25,
127       2, -16,  -4, -12,  15,  16,  29,   7,  24,  10,
128     }, {
129      49, -24,  16, -20,   2, -26,   2,  -7, -25, -10,
130     -11, -25, -32,  -3, -27,   2,  -8,  -8, -11,  -9,
131     -24, -17, -16, -14, -13,   2,  20,   5,  -4,  17,
132      14, -12,   3,  13,  33,  25,  14,  23,  15,  19,
133     }, {
134      46,  -6,  21,   8,  -2, -16,  -5,  -8, -11,   4,
135       8,  15, -24,   4,  -2, -26,  -3, -16, -16, -14,
136      -9,  -2,  -1,   4,  19,   7,  36,  17,   9,  13,
137       0,  31,  -5, -12,   7,  -8,  11, -15, -13,  -4,
138     }, {
139      68, -18,   9,  -9,  -6, -35, -18, -25, -26,  -7,
140      10,   1, -16,  -3,  -1,  -9,   6, -19,  -4, -15,
141      -4,  -6,   0,  -8,  20,  -2,  23,   2,   7,   5,
142      12,  35,   1,  13,  24,   0,  -3,   0, -22,   4,
143     }, {
144      35, -14,  34,  10, -10, -10,  -1,  12, -20,  12,
145       0,  15, -18,  24, -20, -27, -14, -28, -27, -27,
146     -20, -19,  -2,  -8,   5,   7,  25,  13,   5,   5,
147       6,   5,   2, -12,  31,  15,  23,  -1,  12,   8,
148     }, {
149      57, -26,  22,  -7, -14, -28, -14,  -3, -35,   0,
150       3,   1, -11,  16, -18, -10,  -4, -31, -15, -28,
151     -14, -23,  -1, -21,   7,  -2,  11,  -1,   3,  -1,
152      18,   9,  10,  13,  49,  24,   8,  14,   2,  16,
153     }, {
154      25,  15,  22,  11,  18,   4,  15, -22,   8,  -2,
155     -17,  -9, -48, -20, -30, -17, -16,  11,  -1,  16,
156       2,  10,  -5,  26,  -2,  -4,  22,   0,   2,  10,
157      -6,  13, -14,  10, -23,   0,  10,  -2,   1,   0,
158     }, {
159      47,   3,  11,  -6,  15, -13,   2, -38,  -6, -13,
160     -15, -22, -40, -28, -28,   0,  -5,   8,  10,  15,
161       7,   7,  -4,  13,  -1, -14,   9, -14,   0,   2,
162       4,  18,  -7,  36,  -6,   8,  -3,  13,  -7,   8,
163     }, {
164      14,   7,  36,  13,  10,  10,  18,   0,   0,   5,
165     -25,  -8, -43,   0, -48, -18, -27,   0, -12,   3,
166      -7,  -6,  -7,  13, -15,  -5,  11,  -3,   0,   2,
167       0, -12,  -6,  10,   0,  23,  22,  11,  26,  12,
168     }, {
169      36,  -5,  24,  -4,   7,  -7,   6, -17, -14,  -5,
170     -22, -22, -35,  -8, -46,  -1, -17,  -3,   0,   2,
171      -2, -10,  -5,   0, -14, -15,  -2, -18,  -2,  -4,
172      11,  -7,   1,  36,  18,  32,   7,  27,  17,  20,
173     }, {
174      33,  13,  29,  24,   1,   1,  -2, -18,   0,   9,
175      -3,  17, -27,   0, -21, -30, -12, -11,  -5,  -2,
176      12,   4,   9,  19,  18,  -9,  13,  -6,  11,  -8,
177      -2,  35,  -8,  10,  -7,  -1,   4, -11, -10,  -2,
178     }, {
179      55,   1,  17,   6,  -1, -16, -15, -35, -15,  -2,
180       0,   4, -19,  -8, -20, -13,  -1, -14,   7,  -3,
181      18,   0,  10,   5,  19, -19,   0, -21,   8, -16,
182       9,  39,   0,  36,  10,   7,  -9,   4, -20,   5,
183     }, {
184      22,   5,  42,  26,  -6,   8,   1,   2,  -9,  17,
185     -10,  18, -21,  19, -39, -31, -23, -23, -16, -15,
186       2, -12,   7,   6,   5,  -9,   1, -10,   7, -16,
187       4,   9,   0,  10,  17,  22,  16,   2,  14,   9,
188     }, {
189      44,  -6,  30,   8,  -9, -10, -11, -14, -23,   5,
190      -8,   4, -14,  12, -37, -14, -12, -26,  -4, -16,
191       8, -16,   9,  -7,   6, -19, -12, -25,   5, -24,
192      15,  13,   8,  36,  34,  31,   1,  18,   4,  18,
193     }, {
194      -3,  -5,  -9,  -7,  15,  -1,   5,  13,   2,  12,
195       5,   2, -21, -23,  -2, -16,   0,   5,  -6,  13,
196     -23,   3, -32,  10, -15,   8,  44,  28,   9,  37,
197      -2,  13,  -9, -15, -12, -27,  -7, -12,   0, -11,
198     }, {
199      18, -17, -21, -25,  11, -19,  -6,  -3, -11,   0,
200       7, -11, -13, -31,  -1,   0,   9,   1,   5,  12,
201     -18,   0, -31,  -2, -13,  -1,  30,  14,   7,  29,
202       9,  18,  -1,  10,   4, -18, -22,   3, -10,  -2,
203     }, {
204     -13, -13,   3,  -5,   7,   4,   9,  34,  -5,  20,
205      -2,   3, -16,  -3, -20, -17, -11,  -7, -17,   0,
206     -34, -13, -33,  -2, -28,   8,  32,  24,   5,  29,
207       3, -12,   0, -15,  11,  -3,   3,   2,  24,   1,
208     }, {
209       8, -25,  -8, -23,   3, -13,  -3,  17, -20,   8,
210       0, -10,  -8, -11, -18,   0,  -1, -10,  -5,   0,
211     -28, -17, -32, -15, -26,  -1,  19,   9,   3,  21,
212      15,  -7,   6,   9,  29,   5, -10,  17,  15,   9,
213     }, {
214       4,  -6,  -3,   5,  -1,  -4, -11,  16,  -6,  23,
215      19,  29,   0,  -3,   6, -30,   3, -17, -10,  -5,
216     -13,  -2, -17,   3,   5,   3,  35,  21,  17,  17,
217       2,  35,  -2, -15,   3, -28, -13, -21, -13, -13,
218     }, {
219      26, -19, -15, -12,  -5, -22, -24,   0, -21,  12,
220      21,  15,   8, -11,   7, -12,  14, -20,   2,  -6,
221      -7,  -6, -16,  -9,   6,  -5,  21,   7,  15,  10,
222      13,  39,   5,  10,  20, -19, -28,  -5, -22,  -5,
223     }, {
224      -5, -15,   9,   7,  -9,   2,  -8,  37, -14,  31,
225      11,  29,   5,  16, -11, -30,  -7, -29, -21, -18,
226     -23, -19, -18,  -9,  -7,   3,  23,  17,  14,   9,
227       8,   9,   6, -15,  27,  -4,  -2,  -6,  12,  -1,
228     }, {
229      16, -27,  -2, -10, -13, -16, -20,  20, -29,  20,
230      14,  16,  13,   8,  -9, -13,   2, -33,  -9, -19,
231     -17, -23, -17, -22,  -6,  -6,   9,   2,  12,   2,
232      20,  13,  13,  10,  45,   4, -16,   8,   2,   7,
233     }, {
234     -16,  14,  -2,   8,  20,  17,   9,   2,  14,  16,
235      -6,   5, -24, -28, -21, -20,  -8,   9,   4,  25,
236      -1,  11, -22,  24, -15,  -8,  21,   5,  11,  14,
237      -5,  18, -11,   7, -27, -20, -14,  -7,   1,  -9,
238     }, {
239       6,   2, -14,  -9,  16,  -1,  -3, -14,   0,   5,
240      -3,  -8, -16, -36, -19,  -3,   1,   6,  17,  24,
241       4,   7, -21,  11, -14, -18,   7,  -9,   9,   7,
242       6,  22,  -3,  33, -10, -11, -28,   7,  -7,   0,
243     }, {
244     -26,   6,  11,  10,  12,  23,  12,  23,   5,  24,
245     -13,   5, -19,  -8, -38, -21, -20,  -2,  -6,  12,
246     -11,  -5, -23,  11, -29,  -9,   9,   0,   7,   6,
247       1,  -7,  -2,   7,  -3,   3,  -2,   6,  27,   3,
248     }, {
249      -4,  -6,   0,  -7,   8,   4,   0,   6,  -9,  13,
250     -11,  -7, -11, -15, -37,  -4,  -9,  -5,   5,  11,
251      -5,  -9, -22,  -1, -27, -18,  -4, -14,   5,   0,
252      12,  -3,   4,  32,  14,  12, -17,  22,  17,  11,
253     }, {
254      -8,  12,   3,  21,   3,  14,  -8,   5,   4,  28,
255       7,  32,  -2,  -8, -12, -34,  -4, -12,   1,   6,
256       9,   4,  -7,  17,   4, -13,  11,  -1,  19,  -4,
257       0,  39,  -4,   7, -11, -21, -20, -16, -10, -11,
258     }, {
259      13,   0,  -8,   3,   0,  -4, -21, -11,  -9,  16,
260      10,  18,   5, -16, -10, -16,   5, -15,  13,   5,
261      15,   1,  -6,   4,   6, -23,  -2, -16,  17, -12,
262      10,  44,   3,  33,   6, -12, -34,  -1, -20,  -3,
263     }, {
264     -18,   4,  17,  23,  -4,  20,  -4,  26,  -3,  36,
265       0,  32,   2,  12, -29, -34, -16, -24, -10,  -6,
266       0, -12,  -8,   4,  -8, -13,   0,  -6,  16, -12,
267       5,  13,   3,   7,  13,   3,  -8,  -2,  14,   0,
268     }, {
269       3,  -7,   5,   5,  -8,   2, -17,   9, -18,  24,
270       2,  19,  10,   4, -28, -17,  -5, -28,   2,  -7,
271       4, -15,  -7,  -8,  -6, -23, -13, -21,  14, -20,
272      17,  18,  11,  33,  30,  11, -23,  13,   5,   9,
273     }, {
274      60,  10,   7,  -1,   9,  -8,   6, -13,   2, -15,
275      -1, -10, -13, -11,  15,   0,   6,   9,  -1,   0,
276     -13,   1, -11,  -3, -13,  21,  13,  26,  -7,  31,
277     -10,  -7, -16, -33, -31, -10,  22,  -8,   1,  -2,
278     }, {
279      82,  -1,  -4, -19,   6, -27,  -6, -29, -12, -26,
280       1, -24,  -5, -18,  17,  17,  17,   6,  10,   0,
281      -7,  -2,  -9, -16, -12,  11,   0,  11,  -9,  23,
282       0,  -3,  -8,  -8, -13,  -1,   8,   7,  -7,   6,
283     }, {
284      49,   2,  21,   0,   1,  -2,   9,   8,  -6,  -6,
285      -8, -10,  -8,   9,  -2,   0,  -4,  -2, -13, -12,
286     -23, -15, -12, -16, -26,  21,   2,  21, -11,  23,
287      -4, -33,  -7, -33,  -6,  13,  34,   5,  27,  10,
288     }, {
289      71, -10,   9, -17,  -1, -20,  -3,  -8, -21, -18,
290      -6, -24,   0,   1,   0,  16,   6,  -5,   0, -13,
291     -17, -19, -11, -29, -25,  11, -11,   6, -13,  15,
292       7, -29,   0,  -8,  11,  22,  20,  21,  17,  18,
293     }, {
294      67,   8,  14,  11,  -7, -11, -11,  -9,  -7,  -3,
295      13,  16,   8,   9,  24, -12,  10, -13,  -5, -17,
296      -2,  -4,   3, -10,   6,  17,   4,  19,   0,  11,
297      -6,  13,  -9, -33, -14, -10,  16, -17, -10,  -4,
298     }, {
299      90,  -3,   2,  -6, -10, -29, -24, -26, -21, -15,
300      15,   2,  16,   1,  25,   4,  21, -16,   6, -18,
301       3,  -8,   5, -24,   8,   7,  -9,   4,  -1,   3,
302       5,  18,  -1,  -7,   2,  -1,   2,  -1, -19,   3,
303     }, {
304      57,   0,  27,  13, -14,  -5,  -7,  11, -15,   4,
305       5,  16,  13,  29,   6, -13,   0, -25, -16, -31,
306     -12, -22,   2, -23,  -6,  16,  -7,  14,  -2,   3,
307       0, -12,   0, -33,   9,  13,  28,  -3,  14,   7,
308     }, {
309      79, -11,  15,  -4, -18, -23, -20,  -5, -30,  -7,
310       7,   2,  21,  21,   8,   3,  10, -28,  -4, -31,
311      -6, -25,   3, -37,  -4,   7, -20,   0,  -4,  -4,
312      11,  -7,   6,  -8,  27,  22,  14,  12,   5,  16,
313     }, {
314      47,  30,  15,  14,  14,   9,   9, -23,  13, -10,
315     -12,  -7, -16, -15,  -3,  -3,  -1,  14,   9,  12,
316       9,   8,   0,  10, -14,   4,  -9,   2,  -5,   8,
317     -13,  -3, -18, -10, -45,  -3,  16,  -4,   4,   0,
318     }, {
319      69,  17,   3,  -3,  10,  -8,  -3, -40,  -1, -21,
320     -10, -21,  -8, -23,  -1,  13,   8,  11,  21,  11,
321      15,   4,   0,  -2, -13,  -5, -23, -12,  -7,   0,
322      -1,   0, -10,  14, -28,   5,   1,  11,  -5,   7,
323     }, {
324      36,  21,  28,  16,   6,  16,  12,  -2,   4,  -2,
325     -20,  -7, -11,   4, -20,  -4, -12,   2,  -1,   0,
326       0,  -8,  -2,  -2, -27,   4, -21,  -2,  -9,   0,
327      -6, -29,  -9, -10, -21,  21,  28,  10,  29,  11,
328     }, {
329      58,   9,  16,  -1,   2,  -2,   0, -19, -10, -13,
330     -17, -21,  -3,  -3, -19,  12,  -2,   0,  10,  -1,
331       5, -12,   0, -15, -26,  -5, -34, -16, -11,  -7,
332       4, -25,  -2,  14,  -3,  29,  13,  25,  20,  20,
333     }, {
334      55,  28,  21,  27,  -2,   7,  -8, -20,   4,   1,
335       1,  18,   5,   4,   5, -16,   2,  -8,   5,  -5,
336      19,   2,  14,   3,   6,   0, -18,  -4,   2, -11,
337      -8,  18, -11, -10, -29,  -3,  10, -13,  -8,  -3,
338     }, {
339      77,  16,   9,   9,  -6, -11, -21, -37, -10, -10,
340       4,   5,  13,  -3,   7,   0,  13, -11,  17,  -6,
341      25,  -1,  15,  -9,   7,  -9, -32, -19,   0, -18,
342       2,  22,  -3,  15, -12,   5,  -4,   2, -17,   5,
343     }, {
344      44,  20,  34,  29, -10,  13,  -4,   0,  -4,   9,
345      -5,  19,  10,  24, -11, -17,  -8, -20,  -5, -19,
346       9, -14,  12,  -9,  -6,   0, -30,  -9,   0, -19,
347      -2,  -7,  -2, -10,  -5,  20,  21,   1,  17,   9,
348     }, {
349      66,   8,  23,  11, -14,  -5, -17, -16, -19,  -2,
350      -3,   5,  18,  17, -10,   0,   1, -23,   6, -20,
351      15, -18,  14, -22,  -5, -10, -44, -23,  -2, -26,
352       9,  -3,   4,  14,  12,  29,   7,  16,   7,  18,
353     }, {
354      18,   9, -17,  -4,  11,   3,   0,  11,   7,   4,
355      10,   3,  10, -18,  24,  -3,  14,   7,   4,  10,
356     -16,   1, -27,  -4, -27,  17,  12,  30,   0,  35,
357      -9,  -3, -12, -36, -35, -30,  -2, -13,   2, -11,
358     }, {
359      40,  -2, -29, -22,   7, -14, -12,  -5,  -7,  -7,
360      12,  -9,  18, -26,  26,  14,  24,   4,  16,   9,
361     -10,  -2, -26, -18, -26,   7,  -1,  15,  -1,  27,
362       2,   0,  -4, -11, -17, -21, -16,   1,  -7,  -3,
363     }, {
364       8,   1,  -3,  -2,   3,  10,   3,  32,  -1,  12,
365       2,   4,  15,   1,   7,  -3,   2,  -4,  -6,  -3,
366     -26, -15, -29, -17, -40,  17,   0,  26,  -2,  27,
367      -2, -29,  -4, -36, -10,  -6,   9,   0,  27,   0,
368     }, {
369      30, -11, -15, -20,   0,  -8,  -9,  15, -15,   0,
370       5,  -9,  23,  -6,   8,  13,  13,  -7,   5,  -3,
371     -20, -19, -27, -31, -39,   7, -13,  11,  -4,  19,
372       8, -25,   3, -11,   7,   2,  -4,  16,  18,   9,
373     }, {
374      26,   7, -11,   8,  -5,   1, -17,  14,  -1,  15,
375      24,  30,  32,   1,  33, -16,  18, -14,   0,  -8,
376      -6,  -4, -12, -12,  -6,  13,   2,  23,   8,  15,
377      -4,  17,  -5, -36, -18, -30,  -8, -22, -10, -14,
378     }, {
379      48,  -4, -23,  -9,  -9, -17, -30,  -2, -16,   3,
380      26,  16,  40,  -6,  35,   1,  28, -17,  12,  -9,
381       0,  -8, -11, -25,  -5,   3, -10,   8,   6,   7,
382       6,  22,   1, -11,  -1, -21, -22,  -7, -19,  -5,
383     }, {
384      15,   0,   2,  10, -13,   7, -14,  35, -10,  23,
385      16,  31,  37,  21,  16, -17,   6, -26, -10, -21,
386     -16, -21, -13, -25, -19,  13,  -8,  19,   5,   7,
387       1,  -8,   2, -36,   5,  -6,   3,  -8,  15,  -1,
388     }, {
389      37, -12,  -9,  -7, -17, -11, -26,  18, -25,  12,
390      19,  17,  45,  14,  17,   0,  17, -30,   1, -22,
391     -10, -25, -12, -38, -18,   3, -22,   4,   3,   0,
392      13,  -3,  10, -11,  23,   2, -10,   7,   5,   7,
393     }, {
394       5,  29,  -9,  11,  15,  22,   3,   0,  18,   8,
395      -1,   6,   7, -23,   6,  -6,   5,  12,  15,  21,
396       5,   8, -17,   9, -28,   0, -11,   6,   2,  12,
397     -11,   0, -14, -13, -49, -22,  -8,  -9,   4,  -9,
398     }, {
399      27,  16, -21,  -6,  12,   3,  -9, -16,   3,  -2,
400       1,  -7,  15, -31,   7,  10,  16,   9,  27,  21,
401      11,   5, -16,  -3, -26,  -9, -24,  -7,   0,   4,
402       0,   4,  -6,  11, -32, -14, -23,   6,  -5,  -1,
403     }, {
404      -4,  20,   3,  13,   8,  28,   6,  21,  10,  16,
405      -8,   7,  12,  -3, -11,  -7,  -5,   0,   4,   8,
406      -4,  -8, -18,  -3, -41,   0, -22,   2,   0,   4,
407      -5, -25,  -6, -14, -25,   1,   2,   4,  29,   2,
408     }, {
409      17,   8,  -8,  -4,   4,  10,  -6,   5,  -4,   5,
410      -6,  -6,  20, -10,  -9,   9,   4,  -2,  16,   7,
411       1, -12, -17, -16, -39,  -9, -36, -12,  -2,  -3,
412       6, -21,   1,  11,  -7,  10, -11,  20,  20,  11,
413     }, {
414      13,  27,  -3,  24,  -1,  19, -14,   3,   9,  20,
415      12,  33,  29,  -3,  15, -20,   9,  -9,  11,   3,
416      16,   2,  -2,   2,  -7,  -3, -20,   0,  10,  -7,
417      -7,  22,  -7, -13, -33, -23, -14, -18,  -7, -12,
418     }, {
419      35,  15, -15,   6,  -4,   1, -27, -12,  -5,   8,
420      15,  19,  37, -11,  16,  -2,  20, -12,  23,   2,
421      22,  -1,  -1, -11,  -5, -13, -34, -14,   8, -14,
422       4,  26,   0,  11, -16, -14, -29,  -2, -17,  -3,
423     }, {
424       3,  19,   9,  26,  -8,  26, -10,  24,   0,  28,
425       5,  33,  34,  17,  -2, -20,  -1, -22,   0, -10,
426       6, -14,  -3, -10, -20,  -4, -32,  -4,   7, -15,
427       0,  -3,   0, -13,  -9,   0,  -3,  -4,  17,   0,
428     }, {
429      25,   7,  -2,   8, -12,   7, -23,   8, -13,  16,
430       7,  20,  42,   9,   0,  -3,   9, -25,  12, -10,
431      12, -18,  -2, -24, -19, -13, -46, -19,   5, -22,
432      10,   0,   8,  11,   8,   9, -17,  11,   7,   8,
433     }, {
434     -25,  -7,   2,  -8,  12,  -7,  23,  -8,  13, -16,
435      -7, -20, -42,  -9,   0,   3,  -9,  25, -12,  10,
436     -12,  18,   2,  24,  19,  13,  46,  19,  -5,  22,
437     -10,   0,  -8, -11,  -8,  -9,  17, -11,  -7,  -8,
438     }, {
439      -3, -19,  -9, -26,   8, -26,  10, -24,   0, -28,
440      -5, -33, -34, -17,   2,  20,   1,  22,   0,  10,
441      -6,  14,   3,  10,  20,   4,  32,   4,  -7,  15,
442       0,   3,   0,  13,   9,   0,   3,   4, -17,   0,
443     }, {
444     -35, -15,  15,  -6,   4,  -1,  27,  12,   5,  -8,
445     -15, -19, -37,  11, -16,   2, -20,  12, -23,  -2,
446     -22,   1,   1,  11,   5,  13,  34,  14,  -8,  14,
447      -4, -26,   0, -11,  16,  14,  29,   2,  17,   3,
448     }, {
449     -13, -27,   3, -24,   1, -19,  14,  -3,  -9, -20,
450     -12, -33, -29,   3, -15,  20,  -9,   9, -11,  -3,
451     -16,  -2,   2,  -2,   7,   3,  20,   0, -10,   7,
452       7, -22,   7,  13,  33,  23,  14,  18,   7,  12,
453     }, {
454     -17,  -8,   8,   4,  -4, -10,   6,  -5,   4,  -5,
455       6,   6, -20,  10,   9,  -9,  -4,   2, -16,  -7,
456      -1,  12,  17,  16,  39,   9,  36,  12,   2,   3,
457      -6,  21,  -1, -11,   7, -10,  11, -20, -20, -11,
458     }, {
459       4, -20,  -3, -13,  -8, -28,  -6, -21, -10, -16,
460       8,  -7, -12,   3,  11,   7,   5,   0,  -4,  -8,
461       4,   8,  18,   3,  41,   0,  22,  -2,   0,  -4,
462       5,  25,   6,  14,  25,  -1,  -2,  -4, -29,  -2,
463     }, {
464     -27, -16,  21,   6, -12,  -3,   9,  16,  -3,   2,
465      -1,   7, -15,  31,  -7, -10, -16,  -9, -27, -21,
466     -11,  -5,  16,   3,  26,   9,  24,   7,   0,  -4,
467       0,  -4,   6, -11,  32,  14,  23,  -6,   5,   1,
468     }, {
469      -5, -29,   9, -11, -15, -22,  -3,   0, -18,  -8,
470       1,  -6,  -7,  23,  -6,   6,  -5, -12, -15, -21,
471      -5,  -8,  17,  -9,  28,   0,  11,  -6,  -2, -12,
472      11,   0,  14,  13,  49,  22,   8,   9,  -4,   9,
473     }, {
474     -37,  12,   9,   7,  17,  11,  26, -18,  25, -12,
475     -19, -17, -45, -14, -17,   0, -17,  30,  -1,  22,
476      10,  25,  12,  38,  18,  -3,  22,  -4,  -3,   0,
477     -13,   3, -10,  11, -23,  -2,  10,  -7,  -5,  -7,
478     }, {
479     -15,   0,  -2, -10,  13,  -7,  14, -35,  10, -23,
480     -16, -31, -37, -21, -16,  17,  -6,  26,  10,  21,
481      16,  21,  13,  25,  19, -13,   8, -19,  -5,  -7,
482      -1,   8,  -2,  36,  -5,   6,  -3,   8, -15,   1,
483     }, {
484     -48,   4,  23,   9,   9,  17,  30,   2,  16,  -3,
485     -26, -16, -40,   6, -35,  -1, -28,  17, -12,   9,
486       0,   8,  11,  25,   5,  -3,  10,  -8,  -6,  -7,
487      -6, -22,  -1,  11,   1,  21,  22,   7,  19,   5,
488     }, {
489     -26,  -7,  11,  -8,   5,  -1,  17, -14,   1, -15,
490     -24, -30, -32,  -1, -33,  16, -18,  14,   0,   8,
491       6,   4,  12,  12,   6, -13,  -2, -23,  -8, -15,
492       4, -17,   5,  36,  18,  30,   8,  22,  10,  14,
493     }, {
494     -30,  11,  15,  20,   0,   8,   9, -15,  15,   0,
495      -5,   9, -23,   6,  -8, -13, -13,   7,  -5,   3,
496      20,  19,  27,  31,  39,  -7,  13, -11,   4, -19,
497      -8,  25,  -3,  11,  -7,  -2,   4, -16, -18,  -9,
498     }, {
499      -8,  -1,   3,   2,  -3, -10,  -3, -32,   1, -12,
500      -2,  -4, -15,  -1,  -7,   3,  -2,   4,   6,   3,
501      26,  15,  29,  17,  40, -17,   0, -26,   2, -27,
502       2,  29,   4,  36,  10,   6,  -9,   0, -27,   0,
503     }, {
504     -40,   2,  29,  22,  -7,  14,  12,   5,   7,   7,
505     -12,   9, -18,  26, -26, -14, -24,  -4, -16,  -9,
506      10,   2,  26,  18,  26,  -7,   1, -15,   1, -27,
507      -2,   0,   4,  11,  17,  21,  16,  -1,   7,   3,
508     }, {
509     -18,  -9,  17,   4, -11,  -3,   0, -11,  -7,  -4,
510     -10,  -3, -10,  18, -24,   3, -14,  -7,  -4, -10,
511      16,  -1,  27,   4,  27, -17, -12, -30,   0, -35,
512       9,   3,  12,  36,  35,  30,   2,  13,  -2,  11,
513     }, {
514     -66,  -8, -23, -11,  14,   5,  17,  16,  19,   2,
515       3,  -5, -18, -17,  10,   0,  -1,  23,  -6,  20,
516     -15,  18, -14,  22,   5,  10,  44,  23,   2,  26,
517      -9,   3,  -4, -14, -12, -29,  -7, -16,  -7, -18,
518     }, {
519     -44, -20, -34, -29,  10, -13,   4,   0,   4,  -9,
520       5, -19, -10, -24,  11,  17,   8,  20,   5,  19,
521      -9,  14, -12,   9,   6,   0,  30,   9,   0,  19,
522       2,   7,   2,  10,   5, -20, -21,  -1, -17,  -9,
523     }, {
524     -77, -16,  -9,  -9,   6,  11,  21,  37,  10,  10,
525      -4,  -5, -13,   3,  -7,   0, -13,  11, -17,   6,
526     -25,   1, -15,   9,  -7,   9,  32,  19,   0,  18,
527      -2, -22,   3, -15,  12,  -5,   4,  -2,  17,  -5,
528     }, {
529     -55, -28, -21, -27,   2,  -7,   8,  20,  -4,  -1,
530      -1, -18,  -5,  -4,  -5,  16,  -2,   8,  -5,   5,
531     -19,  -2, -14,  -3,  -6,   0,  18,   4,  -2,  11,
532       8, -18,  11,  10,  29,   3, -10,  13,   8,   3,
533     }, {
534     -58,  -9, -16,   1,  -2,   2,   0,  19,  10,  13,
535      17,  21,   3,   3,  19, -12,   2,   0, -10,   1,
536      -5,  12,   0,  15,  26,   5,  34,  16,  11,   7,
537      -4,  25,   2, -14,   3, -29, -13, -25, -20, -20,
538     }, {
539     -36, -21, -28, -16,  -6, -16, -12,   2,  -4,   2,
540      20,   7,  11,  -4,  20,   4,  12,  -2,   1,   0,
541       0,   8,   2,   2,  27,  -4,  21,   2,   9,   0,
542       6,  29,   9,  10,  21, -21, -28, -10, -29, -11,
543     }, {
544     -69, -17,  -3,   3, -10,   8,   3,  40,   1,  21,
545      10,  21,   8,  23,   1, -13,  -8, -11, -21, -11,
546     -15,  -4,   0,   2,  13,   5,  23,  12,   7,   0,
547       1,   0,  10, -14,  28,  -5,  -1, -11,   5,  -7,
548     }, {
549     -47, -30, -15, -14, -14,  -9,  -9,  23, -13,  10,
550      12,   7,  16,  15,   3,   3,   1, -14,  -9, -12,
551      -9,  -8,   0, -10,  14,  -4,   9,  -2,   5,  -8,
552      13,   3,  18,  10,  45,   3, -16,   4,  -4,   0,
553     }, {
554     -79,  11, -15,   4,  18,  23,  20,   5,  30,   7,
555      -7,  -2, -21, -21,  -8,  -3, -10,  28,   4,  31,
556       6,  25,  -3,  37,   4,  -7,  20,   0,   4,   4,
557     -11,   7,  -6,   8, -27, -22, -14, -12,  -5, -16,
558     }, {
559     -57,   0, -27, -13,  14,   5,   7, -11,  15,  -4,
560      -5, -16, -13, -29,  -6,  13,   0,  25,  16,  31,
561      12,  22,  -2,  23,   6, -16,   7, -14,   2,  -3,
562       0,  12,   0,  33,  -9, -13, -28,   3, -14,  -7,
563     }, {
564     -90,   3,  -2,   6,  10,  29,  24,  26,  21,  15,
565     -15,  -2, -16,  -1, -25,  -4, -21,  16,  -6,  18,
566      -3,   8,  -5,  24,  -8,  -7,   9,  -4,   1,  -3,
567      -5, -18,   1,   7,  -2,   1,  -2,   1,  19,  -3,
568     }, {
569     -67,  -8, -14, -11,   7,  11,  11,   9,   7,   3,
570     -13, -16,  -8,  -9, -24,  12, -10,  13,   5,  17,
571       2,   4,  -3,  10,  -6, -17,  -4, -19,   0, -11,
572       6, -13,   9,  33,  14,  10, -16,  17,  10,   4,
573     }, {
574     -71,  10,  -9,  17,   1,  20,   3,   8,  21,  18,
575       6,  24,   0,  -1,   0, -16,  -6,   5,   0,  13,
576      17,  19,  11,  29,  25, -11,  11,  -6,  13, -15,
577      -7,  29,   0,   8, -11, -22, -20, -21, -17, -18,
578     }, {
579     -49,  -2, -21,   0,  -1,   2,  -9,  -8,   6,   6,
580       8,  10,   8,  -9,   2,   0,   4,   2,  13,  12,
581      23,  15,  12,  16,  26, -21,  -2, -21,  11, -23,
582       4,  33,   7,  33,   6, -13, -34,  -5, -27, -10,
583     }, {
584     -82,   1,   4,  19,  -6,  27,   6,  29,  12,  26,
585      -1,  24,   5,  18, -17, -17, -17,  -6, -10,   0,
586       7,   2,   9,  16,  12, -11,   0, -11,   9, -23,
587       0,   3,   8,   8,  13,   1,  -8,  -7,   7,  -6,
588     }, {
589     -60, -10,  -7,   1,  -9,   8,  -6,  13,  -2,  15,
590       1,  10,  13,  11, -15,   0,  -6,  -9,   1,   0,
591      13,  -1,  11,   3,  13, -21, -13, -26,   7, -31,
592      10,   7,  16,  33,  31,  10, -22,   8,  -1,   2,
593     }, {
594      -3,   7,  -5,  -5,   8,  -2,  17,  -9,  18, -24,
595      -2, -19, -10,  -4,  28,  17,   5,  28,  -2,   7,
596      -4,  15,   7,   8,   6,  23,  13,  21, -14,  20,
597     -17, -18, -11, -33, -30, -11,  23, -13,  -5,  -9,
598     }, {
599      18,  -4, -17, -23,   4, -20,   4, -26,   3, -36,
600       0, -32,  -2, -12,  29,  34,  16,  24,  10,   6,
601       0,  12,   8,  -4,   8,  13,   0,   6, -16,  12,
602      -5, -13,  -3,  -7, -13,  -3,   8,   2, -14,   0,
603     }, {
604     -13,   0,   8,  -3,   0,   4,  21,  11,   9, -16,
605     -10, -18,  -5,  16,  10,  16,  -5,  15, -13,  -5,
606     -15,  -1,   6,  -4,  -6,  23,   2,  16, -17,  12,
607     -10, -44,  -3, -33,  -6,  12,  34,   1,  20,   3,
608     }, {
609       8, -12,  -3, -21,  -3, -14,   8,  -5,  -4, -28,
610      -7, -32,   2,   8,  12,  34,   4,  12,  -1,  -6,
611      -9,  -4,   7, -17,  -4,  13, -11,   1, -19,   4,
612       0, -39,   4,  -7,  11,  21,  20,  16,  10,  11,
613     }, {
614       4,   6,   0,   7,  -8,  -4,   0,  -6,   9, -13,
615      11,   7,  11,  15,  37,   4,   9,   5,  -5, -11,
616       5,   9,  22,   1,  27,  18,   4,  14,  -5,   0,
617     -12,   3,  -4, -32, -14, -12,  17, -22, -17, -11,
618     }, {
619      26,  -6, -11, -10, -12, -23, -12, -23,  -5, -24,
620      13,  -5,  19,   8,  38,  21,  20,   2,   6, -12,
621      11,   5,  23, -11,  29,   9,  -9,   0,  -7,  -6,
622      -1,   7,   2,  -7,   3,  -3,   2,  -6, -27,  -3,
623     }, {
624      -6,  -2,  14,   9, -16,   1,   3,  14,   0,  -5,
625       3,   8,  16,  36,  19,   3,  -1,  -6, -17, -24,
626      -4,  -7,  21, -11,  14,  18,  -7,   9,  -9,  -7,
627      -6, -22,   3, -33,  10,  11,  28,  -7,   7,   0,
628     }, {
629      16, -14,   2,  -8, -20, -17,  -9,  -2, -14, -16,
630       6,  -5,  24,  28,  21,  20,   8,  -9,  -4, -25,
631       1, -11,  22, -24,  15,   8, -21,  -5, -11, -14,
632       5, -18,  11,  -7,  27,  20,  14,   7,  -1,   9,
633     }, {
634     -16,  27,   2,  10,  13,  16,  20, -20,  29, -20,
635     -14, -16, -13,  -8,   9,  13,  -2,  33,   9,  19,
636      17,  23,  17,  22,   6,   6,  -9,  -2, -12,  -2,
637     -20, -13, -13, -10, -45,  -4,  16,  -8,  -2,  -7,
638     }, {
639       5,  15,  -9,  -7,   9,  -2,   8, -37,  14, -31,
640     -11, -29,  -5, -16,  11,  30,   7,  29,  21,  18,
641      23,  19,  18,   9,   7,  -3, -23, -17, -14,  -9,
642      -8,  -9,  -6,  15, -27,   4,   2,   6, -12,   1,
643     }, {
644     -26,  19,  15,  12,   5,  22,  24,   0,  21, -12,
645     -21, -15,  -8,  11,  -7,  12, -14,  20,  -2,   6,
646       7,   6,  16,   9,  -6,   5, -21,  -7, -15, -10,
647     -13, -39,  -5, -10, -20,  19,  28,   5,  22,   5,
648     }, {
649      -4,   6,   3,  -5,   1,   4,  11, -16,   6, -23,
650     -19, -29,   0,   3,  -6,  30,  -3,  17,  10,   5,
651      13,   2,  17,  -3,  -5,  -3, -35, -21, -17, -17,
652      -2, -35,   2,  15,  -3,  28,  13,  21,  13,  13,
653     }, {
654      -8,  25,   8,  23,  -3,  13,   3, -17,  20,  -8,
655       0,  10,   8,  11,  18,   0,   1,  10,   5,   0,
656      28,  17,  32,  15,  26,   1, -19,  -9,  -3, -21,
657     -15,   7,  -6,  -9, -29,  -5,  10, -17, -15,  -9,
658     }, {
659      13,  13,  -3,   5,  -7,  -4,  -9, -34,   5, -20,
660       2,  -3,  16,   3,  20,  17,  11,   7,  17,   0,
661      34,  13,  33,   2,  28,  -8, -32, -24,  -5, -29,
662      -3,  12,   0,  15, -11,   3,  -3,  -2, -24,  -1,
663     }, {
664     -18,  17,  21,  25, -11,  19,   6,   3,  11,   0,
665      -7,  11,  13,  31,   1,   0,  -9,  -1,  -5, -12,
666      18,   0,  31,   2,  13,   1, -30, -14,  -7, -29,
667      -9, -18,   1, -10,  -4,  18,  22,  -3,  10,   2,
668     }, {
669       3,   5,   9,   7, -15,   1,  -5, -13,  -2, -12,
670      -5,  -2,  21,  23,   2,  16,   0,  -5,   6, -13,
671      23,  -3,  32, -10,  15,  -8, -44, -28,  -9, -37,
672       2, -13,   9,  15,  12,  27,   7,  12,   0,  11,
673     }, {
674     -44,   6, -30,  -8,   9,  10,  11,  14,  23,  -5,
675       8,  -4,  14, -12,  37,  14,  12,  26,   4,  16,
676      -8,  16,  -9,   7,  -6,  19,  12,  25,  -5,  24,
677     -15, -13,  -8, -36, -34, -31,  -1, -18,  -4, -18,
678     }, {
679     -22,  -5, -42, -26,   6,  -8,  -1,  -2,   9, -17,
680      10, -18,  21, -19,  39,  31,  23,  23,  16,  15,
681      -2,  12,  -7,  -6,  -5,   9,  -1,  10,  -7,  16,
682      -4,  -9,   0, -10, -17, -22, -16,  -2, -14,  -9,
683     }, {
684     -55,  -1, -17,  -6,   1,  16,  15,  35,  15,   2,
685       0,  -4,  19,   8,  20,  13,   1,  14,  -7,   3,
686     -18,   0, -10,  -5, -19,  19,   0,  21,  -8,  16,
687      -9, -39,   0, -36, -10,  -7,   9,  -4,  20,  -5,
688     }, {
689     -33, -13, -29, -24,  -1,  -1,   2,  18,   0,  -9,
690       3, -17,  27,   0,  21,  30,  12,  11,   5,   2,
691     -12,  -4,  -9, -19, -18,   9, -13,   6, -11,   8,
692       2, -35,   8, -10,   7,   1,  -4,  11,  10,   2,
693     }, {
694     -36,   5, -24,   4,  -7,   7,  -6,  17,  14,   5,
695      22,  22,  35,   8,  46,   1,  17,   3,   0,  -2,
696       2,  10,   5,   0,  14,  15,   2,  18,   2,   4,
697     -11,   7,  -1, -36, -18, -32,  -7, -27, -17, -20,
698     }, {
699     -14,  -7, -36, -13, -10, -10, -18,   0,   0,  -5,
700      25,   8,  43,   0,  48,  18,  27,   0,  12,  -3,
701       7,   6,   7, -13,  15,   5, -11,   3,   0,  -2,
702       0,  12,   6, -10,   0, -23, -22, -11, -26, -12,
703     }, {
704     -47,  -3, -11,   6, -15,  13,  -2,  38,   6,  13,
705      15,  22,  40,  28,  28,   0,   5,  -8, -10, -15,
706      -7,  -7,   4, -13,   1,  14,  -9,  14,   0,  -2,
707      -4, -18,   7, -36,   6,  -8,   3, -13,   7,  -8,
708     }, {
709     -25, -15, -22, -11, -18,  -4, -15,  22,  -8,   2,
710      17,   9,  48,  20,  30,  17,  16, -11,   1, -16,
711      -2, -10,   5, -26,   2,   4, -22,   0,  -2, -10,
712       6, -13,  14, -10,  23,   0, -10,   2,  -1,   0,
713     }, {
714     -57,  26, -22,   7,  14,  28,  14,   3,  35,   0,
715      -3,  -1,  11, -16,  18,  10,   4,  31,  15,  28,
716      14,  23,   1,  21,  -7,   2, -11,   1,  -3,   1,
717     -18,  -9, -10, -13, -49, -24,  -8, -14,  -2, -16,
718     }, {
719     -35,  14, -34, -10,  10,  10,   1, -12,  20, -12,
720       0, -15,  18, -24,  20,  27,  14,  28,  27,  27,
721      20,  19,   2,   8,  -5,  -7, -25, -13,  -5,  -5,
722      -6,  -5,  -2,  12, -31, -15, -23,   1, -12,  -8,
723     }, {
724     -68,  18,  -9,   9,   6,  35,  18,  25,  26,   7,
725     -10,  -1,  16,   3,   1,   9,  -6,  19,   4,  15,
726       4,   6,   0,   8, -20,   2, -23,  -2,  -7,  -5,
727     -12, -35,  -1, -13, -24,   0,   3,   0,  22,  -4,
728     }, {
729     -46,   6, -21,  -8,   2,  16,   5,   8,  11,  -4,
730      -8, -15,  24,  -4,   2,  26,   3,  16,  16,  14,
731       9,   2,   1,  -4, -19,  -7, -36, -17,  -9, -13,
732       0, -31,   5,  12,  -7,   8, -11,  15,  13,   4,
733     }, {
734     -49,  24, -16,  20,  -2,  26,  -2,   7,  25,  10,
735      11,  25,  32,   3,  27,  -2,   8,   8,  11,   9,
736      24,  17,  16,  14,  13,  -2, -20,  -5,   4, -17,
737     -14,  12,  -3, -13, -33, -25, -14, -23, -15, -19,
738     }, {
739     -27,  12, -28,   2,  -6,   7, -15,  -9,  11,  -1,
740      13,  11,  40,  -4,  29,  14,  19,   5,  23,   8,
741      30,  13,  17,   0,  14, -12, -34, -20,   2, -25,
742      -2,  16,   4,  12, -15, -16, -29,  -7, -24, -10,
743     }, {
744     -60,  16,  -3,  22, -10,  32,   0,  28,  17,  18,
745       3,  25,  37,  23,  10,  -3,  -2,  -3,   0,  -3,
746      14,   0,  14,   1,   0,  -2, -32,  -9,   1, -25,
747      -7, -13,   5, -13,  -8,  -1,  -2,  -8,  10,  -6,
748     }, {
749     -38,   4, -15,   4, -14,  13, -12,  11,   2,   6,
750       6,  11,  45,  16,  11,  13,   7,  -6,  12,  -4,
751      20,  -3,  16, -12,   1, -12, -46, -24,   0, -33,
752       3,  -9,  12,  12,   8,   7, -17,   6,   0,   2
753     }
754 };
755
756 const int8_t ff_cb2_vects[128][40]={
757     {
758      73, -32, -60, -15, -26,  59,   2, -33,  30, -10,
759      -3, -17,   8,  30,  -1, -26,  -4, -22,  10,  16,
760     -36,  -5, -11,  56,  37,   6, -10,  -5, -13,  -3,
761       6,  -5,  11,   4, -19,  -5, -16,  41,  24,  13,
762     }, {
763       4, -11, -37,  23,  -5,  46,  -2, -29,  -5, -39,
764     -21,  -9,   0,  49,  12,  -9, -16, -26,  22,  15,
765     -45, -20,  -5,  40,  22,  17, -26,  31, -14,   2,
766     -14,  10,  30,  20, -27,  -9, -39,  39,  18,   5,
767     }, {
768      34, -25, -48, -28, -11,  34,  -2, -41,   9,  -7,
769     -17,  21,  20,  24, -17, -33,   0, -24,  10,  42,
770       3,  -5,  10,  42,  11,   8,  -3,   3,  16,   9,
771      22,  -2,   0, -33, -10,  18,   7,  58,  10,  28,
772     }, {
773     -34,  -4, -25,  10,   9,  21,  -7, -36, -26, -36,
774     -35,  28,  12,  42,  -3, -16, -12, -28,  21,  42,
775      -5, -21,  16,  26,  -4,  19, -19,  39,  15,  15,
776       1,  13,  19, -17, -17,  14, -15,  55,   4,  19,
777     }, {
778      28, -20, -51, -14,  -6,   7,   0, -26,  27,  -4,
779      18, -40,  -6,  16,  -1, -15,   0, -55,  -5, -16,
780     -19,  14,  -3,  49,  14,   1, -22, -30, -12,   0,
781      24,  15,   9, -17, -45, -29,   4,  28,  51,  35,
782     }, {
783     -40,   0, -28,  24,  14,  -5,  -4, -21,  -7, -33,
784       0, -32, -15,  35,  12,   1, -11, -58,   5, -16,
785     -28,   0,   1,  33,   0,  11, -39,   5, -14,   6,
786       3,  31,  28,  -1, -53, -33, -19,  25,  46,  26,
787     }, {
788     -11, -14, -39, -27,   9, -17,  -4, -33,   6,   0,
789       4,  -1,   5,  10, -17, -22,   5, -57,  -5,   9,
790      20,  13,  18,  35, -11,   3, -16, -22,  17,  13,
791      40,  19,  -1, -55, -35,  -5,  27,  44,  37,  49,
792     }, {
793     -80,   6, -16,  11,  30, -30,  -9, -28, -28, -29,
794     -13,   6,  -2,  28,  -3,  -5,  -7, -60,   5,   9,
795      11,  -1,  24,  19, -27,  13, -32,  13,  15,  19,
796      19,  35,  17, -39, -43,  -9,   4,  42,  32,  41,
797     }, {
798      78, -21, -43,   4, -38,  17,  17,  -5,  55,  24,
799     -15, -36,  14,   4,  24, -24,  12,   5,  17,  31,
800     -54,  -5,  -2,  27,  43, -12,   2,   9,  -9, -15,
801      22,  -3,  28,  21, -20,   3,  20,  28,   9,  -5,
802     }, {
803       9,  -1, -20,  43, -17,   3,  12,   0,  20,  -4,
804     -33, -29,   6,  22,  38,  -7,   0,   1,  29,  30,
805     -63, -21,   3,  11,  27,  -1, -14,  45, -10,  -9,
806       1,  12,  47,  37, -28,   0,  -2,  26,   4, -13,
807     }, {
808      39, -14, -30,  -8, -22,  -8,  12, -12,  34,  27,
809     -29,   2,  26,  -2,   8, -31,  16,   3,  17,  57,
810     -14,  -6,  19,  13,  16, -10,   8,  17,  20,  -2,
811      38,   0,  17, -16, -11,  27,  44,  45,  -4,   8,
812     }, {
813     -29,   5,  -7,  30,  -1, -21,   7,  -7,   0,   0,
814     -47,   9,  18,  15,  22, -14,   4,   0,  28,  57,
815     -23, -21,  25,  -2,   1,   0,  -7,  53,  19,   3,
816      17,  15,  36,   0, -19,  24,  21,  43,  -9,   0,
817     }, {
818      33, -10, -34,   5, -17, -35,  15,   1,  53,  30,
819       6, -59,   0, -10,  24, -13,  17, -27,   1,  -1,
820     -37,  13,   4,  20,  20, -18, -10, -16,  -8, -11,
821      39,  18,  26,   0, -46, -20,  41,  15,  37,  15,
822     }, {
823     -35,  10, -11,  44,   3, -48,  10,   6,  17,   2,
824     -11, -51,  -8,   8,  38,   3,   4, -31,  12,  -2,
825     -46,  -1,  10,   4,   5,  -7, -26,  19, -10,  -5,
826      18,  34,  45,  15, -54, -24,  18,  13,  31,   7,
827     }, {
828      -5,  -3, -21,  -7,  -2, -60,  10,  -5,  32,  34,
829      -7, -20,  11, -16,   8, -20,  21, -29,   1,  24,
830       2,  13,  27,   6,  -5, -15,  -3,  -8,  21,   1,
831      55,  21,  15, -38, -37,   3,  65,  32,  23,  30,
832     }, {
833     -74,  17,   0,  31,  18, -73,   5,   0,  -3,   5,
834     -25, -12,   3,   1,  22,  -3,   9, -33,  12,  24,
835      -6,  -2,  33,  -9, -21,  -5, -20,  27,  19,   7,
836      34,  37,  34, -22, -44,   0,  41,  29,  17,  21,
837     }, {
838      76, -35, -31, -28, -49,  43, -40,   0,  29, -14,
839       8,   5,  10,  18, -26, -46,   0,   7,   6,   3,
840     -25,  -7,  -2,  40,  28,  14,  18,  -3, -27, -28,
841      -8, -45, -13,  34, -13, -27, -15,  31,  12,   3,
842     }, {
843       7, -15,  -9,   9, -28,  29, -45,   5,  -6, -43,
844      -9,  12,   2,  36, -12, -30, -11,   3,  17,   3,
845     -34, -22,   3,  24,  12,  24,   2,  32, -28, -22,
846     -29, -29,   5,  50, -21, -31, -38,  29,   7,  -5,
847     }, {
848      36, -29, -19, -41, -34,  18, -45,  -6,   8, -10,
849      -5,  43,  23,  11, -42, -53,   5,   5,   6,  30,
850      14,  -8,  20,  26,   1,  16,  25,   4,   3, -15,
851       7, -41, -23,  -3,  -4,  -3,   8,  48,  -1,  17,
852     }, {
853     -32,  -8,   3,  -2, -13,   4, -50,  -1, -27, -39,
854     -23,  51,  15,  30, -27, -37,  -7,   1,  17,  29,
855       5, -23,  25,  10, -14,  26,   8,  41,   1,  -9,
856     -13, -26,  -5,  12, -12,  -7, -14,  45,  -6,   9,
857     }, {
858      31, -24, -23, -27, -29,  -9, -43,   8,  26,  -7,
859      30, -17,  -4,   3, -26, -35,   5, -24, -10, -28,
860      -9,  12,   5,  33,   5,   8,   5, -29, -26, -24,
861       9, -23, -14,  12, -39, -52,   5,  18,  39,  24,
862     }, {
863     -37,  -3,   0,  10,  -7, -22, -48,  12,  -8, -36,
864      12,  -9, -12,  22, -12, -19,  -6, -28,   0, -29,
865     -18,  -3,  11,  17, -10,  18, -10,   7, -27, -18,
866     -11,  -7,   3,  28, -47, -55, -18,  15,  34,  16,
867     }, {
868      -8, -17, -10, -40, -13, -34, -47,   0,   5,  -4,
869      16,  21,   8,  -2, -42, -43,  10, -26, -10,  -2,
870      31,  11,  27,  19, -21,  10,  12, -20,   3, -11,
871      25, -20, -25, -25, -29, -28,  28,  34,  25,  38,
872     }, {
873     -77,   2,  11,  -1,   7, -47, -52,   5, -29, -33,
874      -1,  28,   0,  15, -28, -26,  -2, -30,   0,  -2,
875      22,  -4,  33,   3, -36,  21,  -3,  15,   2,  -5,
876       4,  -4,  -6,  -9, -37, -31,   5,  32,  20,  30,
877     }, {
878      81, -25, -14,  -8, -61,   0, -25,  28,  54,  20,
879      -3, -14,  17,  -8,   0, -44,  16,  35,  13,  18,
880     -43,  -7,   6,  11,  33,  -4,  30,  11, -22, -40,
881       6, -43,   3,  50, -14, -18,  22,  18,  -1, -16,
882     }, {
883      12,  -4,   8,  29, -39, -12, -30,  33,  19,  -8,
884     -21,  -6,   8,   9,  13, -28,   4,  31,  24,  18,
885     -52, -23,  12,  -4,  18,   5,  14,  47, -24, -34,
886     -14, -27,  22,  66, -22, -22,  -1,  16,  -6, -24,
887     }, {
888      41, -18,  -2, -21, -45, -24, -30,  21,  33,  24,
889     -17,  24,  29, -15, -16, -51,  21,  33,  13,  45,
890      -3,  -8,  28,  -2,   7,  -2,  37,  19,   7, -27,
891      22, -39,  -7,  12,  -5,   5,  45,  35, -15,  -1,
892     }, {
893     -27,   1,  20,  17, -24, -38, -35,  26,  -1,  -4,
894     -35,  32,  21,   3,  -2, -35,   8,  29,  24,  44,
895     -12, -24,  34, -18,  -8,   7,  21,  55,   5, -21,
896       2, -23,  11,  28, -13,   1,  22,  33, -21, -10,
897     }, {
898      36, -13,  -5,  -7, -40, -51, -28,  36,  52,  27,
899      18, -36,   2, -22,   0, -33,  21,   2,  -3, -13,
900     -26,  11,  14,   4,  10, -10,  18, -14, -22, -36,
901      24, -21,   1,  28, -40, -42,  42,   5,  25,   5,
902     }, {
903     -32,   6,  17,  31, -19, -65, -33,  41,  16,  -1,
904       0, -29,  -6,  -4,  13, -17,   9,  -1,   8, -14,
905     -35,  -3,  19, -11,  -4,   0,   1,  21, -23, -30,
906       3,  -5,  20,  44, -48, -46,  19,   3,  20,  -3,
907     }, {
908      -3,  -7,   6, -20, -25, -77, -32,  29,  31,  30,
909       4,   2,  14, -29, -16, -40,  26,   0,  -3,  12,
910      13,  10,  36,  -9, -15,  -8,  24,  -6,   7, -22,
911      40, -17,  -8,  -9, -31, -18,  66,  22,  11,  19,
912     }, {
913     -72,  13,  29,  18,  -4, -90, -37,  34,  -4,   1,
914     -13,   9,   6, -11,  -2, -24,  13,  -3,   7,  11,
915       4,  -4,  42, -25, -31,   1,   8,  29,   6, -17,
916      19,  -2,  10,   6, -38, -22,  42,  19,   6,  11,
917     }, {
918     116, -20, -68, -30, -28,  83,  28, -18,  32, -22,
919     -13, -21,   5,  28,   5,  -7, -24,  -8, -22,  17,
920     -23,  30, -25,  45,  15,  -9, -11, -18,  22, -10,
921       4,  -2,  19, -12,  23,   3, -43,   2,  12,  -4,
922     }, {
923      47,   0, -45,   7,  -7,  69,  23, -13,  -2, -51,
924     -32, -14,  -3,  47,  19,   8, -37, -11, -10,  16,
925     -32,  15, -19,  29,   0,   1, -28,  18,  20,  -4,
926     -16,  13,  38,   3,  15,   0, -66,   0,   7, -13,
927     }, {
928      77, -13, -56, -43, -13,  57,  23, -26,  11, -19,
929     -27,  16,  17,  22, -10, -15, -19, -10, -22,  43,
930      16,  30,  -2,  31, -11,  -6,  -5,  -9,  52,   2,
931      20,   0,   8, -50,  33,  27, -19,  19,  -1,   9,
932     }, {
933       8,   6, -33,  -4,   7,  44,  18, -21, -23, -48,
934     -46,  24,   9,  40,   3,   1, -32, -13, -11,  43,
935       7,  14,   3,  15, -26,   3, -21,  26,  50,   8,
936       0,  16,  27, -34,  25,  23, -43,  17,  -6,   1,
937     }, {
938      71,  -9, -59, -29,  -8,  30,  26, -11,  30, -16,
939       8, -44,  -9,  14,   5,   2, -19, -40, -38, -15,
940      -7,  50, -17,  38,  -7, -14, -24, -43,  22,  -6,
941      22,  19,  17, -34,  -2, -20, -23, -10,  39,  16,
942     }, {
943       2,  11, -36,   9,  13,  17,  21,  -6,  -5, -45,
944     -10, -36, -18,  33,  19,  19, -31, -44, -27, -15,
945     -16,  34, -11,  22, -22,  -4, -40,  -7,  21,   0,
946       1,  35,  36, -18, -10, -24, -46, -12,  34,   8,
947     }, {
948      32,  -2, -47, -42,   7,   5,  21, -18,   9, -12,
949      -5,  -5,   2,   8, -10,  -4, -14, -42, -38,  10,
950      33,  49,   5,  24, -33, -12, -17, -35,  52,   6,
951      38,  22,   7, -72,   7,   3,   0,   6,  25,  30,
952     }, {
953     -36,  18, -24,  -3,  28,  -7,  16, -13, -26, -41,
954     -24,   1,  -5,  26,   3,  12, -27, -46, -27,  10,
955      24,  34,  10,   8, -49,  -2, -34,   0,  51,  12,
956      17,  38,  25, -56,   0,   0, -22,   3,  20,  22,
957     }, {
958     121,  -9, -50, -10, -40,  40,  43,   9,  58,  12,
959     -25, -41,  11,   2,  31,  -5,  -8,  19, -15,  32,
960     -41,  30, -16,  16,  20, -28,   0,  -3,  26, -22,
961      19,   0,  36,   4,  22,  12,  -6,  -9,  -1, -24,
962     }, {
963      52,  10, -27,  27, -18,  26,  38,  14,  23, -16,
964     -44, -33,   3,  20,  45,  10, -20,  15,  -3,  31,
965     -50,  14, -10,   0,   5, -17, -15,  32,  24, -16,
966      -1,  15,  55,  20,  14,   8, -29, -12,  -7, -32,
967     }, {
968      82,  -3, -38, -23, -24,  15,  38,   2,  37,  15,
969     -39,  -2,  23,  -4,  15, -12,  -3,  17, -15,  58,
970      -1,  29,   6,   2,  -5, -26,   7,   4,  56,  -9,
971      35,   3,  25, -33,  32,  36,  17,   7, -15,  -9,
972     }, {
973      13,  17, -15,  15,  -3,   1,  33,   7,   1, -12,
974     -58,   5,  15,  13,  29,   3, -16,  13,  -4,  57,
975     -10,  13,  11, -13, -21, -15,  -9,  40,  55,  -3,
976      14,  19,  44, -17,  24,  32,  -5,   4, -21, -18,
977     }, {
978      76,   1, -41,  -9, -19, -12,  41,  17,  55,  18,
979      -3, -63,  -3, -12,  30,   5,  -3, -12, -31,   0,
980     -24,  49,  -8,   9,  -1, -33, -12, -29,  27, -18,
981      37,  21,  34, -17,  -3, -11,  14, -23,  25,  -2,
982     }, {
983       7,  22, -18,  29,   1, -25,  36,  21,  20,  -9,
984     -22, -56, -11,   6,  45,  21, -15, -16, -20,  -1,
985     -33,  34,  -2,  -6, -17, -23, -28,   6,  25, -12,
986      16,  37,  53,  -1, -11, -15,  -8, -25,  20, -11,
987     }, {
988      37,   8, -29, -22,  -4, -37,  36,   9,  34,  22,
989     -17, -24,   8, -18,  15,  -2,   1, -14, -31,  25,
990      15,  48,  13,  -4, -28, -31,  -5, -21,  57,  -4,
991      53,  24,  23, -55,   6,  12,  37,  -6,  11,  11,
992     }, {
993     -31,  28,  -6,  16,  16, -50,  31,  14,   0,  -6,
994     -36, -17,   0,   0,  29,  14, -11, -18, -20,  25,
995       6,  33,  19, -20, -43, -21, -21,  14,  55,   0,
996      32,  40,  42, -39,  -1,   8,  14,  -8,   6,   3,
997     }, {
998     119, -24, -39, -44, -51,  66, -14,  15,  31, -26,
999      -1,   0,   7,  16, -19, -28, -19,  22, -26,   4,
1000     -13,  28, -16,  29,   5,  -1,  16, -16,   8, -35,
1001     -10, -42,  -4,  17,  29, -19, -42,  -7,   0, -15,
1002     }, {
1003      50,  -3, -16,  -5, -30,  53, -19,  20,  -3, -55,
1004     -19,   8,   0,  34,  -5, -11, -32,  18, -15,   4,
1005     -22,  13, -10,  13,  -9,   8,   0,  19,   7, -29,
1006     -31, -26,  13,  33,  21, -22, -65,  -9,  -4, -23,
1007     }, {
1008      79, -17, -27, -56, -36,  41, -19,   8,  10, -22,
1009     -15,  39,  20,   9, -35, -35, -15,  20, -26,  31,
1010      26,  27,   6,  15, -20,   0,  23,  -8,  38, -22,
1011       5, -38, -15, -20,  39,   4, -18,   9, -13,  -1,
1012     }, {
1013      10,   3,  -4, -18, -15,  27, -24,  13, -24, -51,
1014     -34,  47,  12,  28, -21, -19, -27,  16, -15,  30,
1015      17,  12,  12,   0, -36,  10,   7,  27,  37, -16,
1016     -15, -22,   3,  -4,  31,   1, -42,   7, -18,  -9,
1017     }, {
1018      74, -12, -30, -42, -30,  14, -16,  23,  29, -19,
1019      20, -21,  -7,   1, -19, -17, -14, -10, -43, -27,
1020       3,  48,  -8,  22, -16,  -7,   4, -42,   9, -31,
1021       6, -20,  -6,  -4,   3, -43, -22, -20,  28,   5,
1022     }, {
1023       5,   7,  -7,  -4,  -9,   0, -21,  28,  -6, -48,
1024       2, -14, -15,  20,  -5,   0, -27, -14, -32, -28,
1025      -5,  32,  -2,   6, -32,   3, -12,  -5,   8, -25,
1026     -14,  -4,  12,  11,  -4, -47, -45, -22,  22,  -2,
1027     }, {
1028      34,  -6, -18, -55, -15, -11, -21,  16,   8, -16,
1029       6,  16,   5,  -4, -35, -24, -10, -12, -43,  -1,
1030      43,  47,  14,   8, -43,  -5,  10, -34,  39, -18,
1031      22, -16, -17, -42,  13, -19,   1,  -3,  14,  20,
1032     }, {
1033     -34,  14,   4, -17,   5, -24, -26,  20, -27, -45,
1034     -12,  24,  -2,  13, -21,  -8, -22, -16, -32,  -2,
1035      34,  31,  20,  -7, -58,   5,  -5,   2,  38, -12,
1036       2,  -1,   1, -26,   5, -23, -21,  -6,   8,  11,
1037     }, {
1038     124, -13, -21, -23, -62,  23,   0,  43,  57,   8,
1039     -13, -18,  14, -10,   6, -26,  -3,  49, -19,  19,
1040     -31,  27,  -7,   0,  11, -20,  29,  -1,  12, -47,
1041       4, -39,  11,  34,  28,  -9,  -5, -19, -13, -34,
1042     }, {
1043      55,   6,   1,  14, -41,  10,  -4,  48,  22, -20,
1044     -31, -10,   5,   7,  20,  -9, -16,  45,  -8,  19,
1045     -40,  12,  -1, -15,  -4, -10,  12,  34,  11, -41,
1046     -16, -24,  30,  49,  20, -13, -28, -22, -18, -43,
1047     }, {
1048      84,  -6,  -9, -36, -47,  -1,  -4,  36,  36,  12,
1049     -27,  20,  26, -17,  -9, -33,   1,  47, -19,  46,
1050       9,  27,  15, -13, -15, -18,  35,   6,  42, -33,
1051      20, -36,   1,  -4,  38,  14,  18,  -2, -27, -20,
1052     }, {
1053      15,  13,  13,   1, -26, -14,  -9,  41,   1, -16,
1054     -46,  27,  18,   1,   4, -16, -11,  43,  -8,  45,
1055       0,  11,  21, -29, -30,  -8,  19,  42,  41, -28,
1056       0, -20,  20,  11,  30,  10,  -4,  -5, -32, -28,
1057     }, {
1058      79,  -2, -12, -22, -42, -28,  -1,  51,  54,  15,
1059       8, -41,   0, -24,   6, -15,   1,  17, -36, -12,
1060     -14,  47,   0,  -6, -11, -26,  16, -27,  13, -43,
1061      22, -18,  10,  12,   2, -34,  15, -33,  13, -13,
1062     }, {
1063      10,  18,  10,  15, -21, -41,  -6,  56,  19, -13,
1064      -9, -33,  -9,  -6,  20,   1, -11,  13, -24, -13,
1065     -23,  32,   6, -22, -26, -15,   0,   8,  12, -37,
1066       1,  -2,  28,  27,  -5, -37,  -7, -35,   8, -21,
1067     }, {
1068      39,   4,   0, -35, -27, -53,  -6,  44,  33,  18,
1069      -5,  -2,  11, -31,  -9, -22,   6,  15, -36,  13,
1070      25,  46,  23, -20, -37, -24,  23, -19,  43, -29,
1071      38, -14,   0, -26,  12, -10,  38, -16,   0,   0,
1072     }, {
1073     -29,  25,  22,   2,  -6, -67, -11,  49,  -1, -10,
1074     -24,   5,   3, -13,   4,  -5,  -6,  11, -25,  12,
1075      16,  31,  28, -36, -53, -13,   6,  16,  42, -24,
1076      17,   1,  18, -10,   4, -13,  15, -18,  -5,  -7,
1077     }, {
1078      29, -25, -22,  -2,   6,  67,  11, -49,   1,  10,
1079      24,  -5,  -3,  13,  -4,   5,   6, -11,  25, -12,
1080     -16, -31, -28,  36,  53,  13,  -6, -16, -42,  24,
1081     -17,  -1, -18,  10,  -4,  13, -15,  18,   5,   7,
1082     }, {
1083     -39,  -4,   0,  35,  27,  53,   6, -44, -33, -18,
1084       5,   2, -11,  31,   9,  22,  -6, -15,  36, -13,
1085     -25, -46, -23,  20,  37,  24, -23,  19, -43,  29,
1086     -38,  14,   0,  26, -12,  10, -38,  16,   0,   0,
1087     }, {
1088     -10, -18, -10, -15,  21,  41,   6, -56, -19,  13,
1089       9,  33,   9,   6, -20,  -1,  11, -13,  24,  13,
1090      23, -32,  -6,  22,  26,  15,   0,  -8, -12,  37,
1091      -1,   2, -28, -27,   5,  37,   7,  35,  -8,  21,
1092     }, {
1093     -79,   2,  12,  22,  42,  28,   1, -51, -54, -15,
1094      -8,  41,   0,  24,  -6,  15,  -1, -17,  36,  12,
1095      14, -47,   0,   6,  11,  26, -16,  27, -13,  43,
1096     -22,  18, -10, -12,  -2,  34, -15,  33, -13,  13,
1097     }, {
1098     -15, -13, -13,  -1,  26,  14,   9, -41,  -1,  16,
1099      46, -27, -18,  -1,  -4,  16,  11, -43,   8, -45,
1100       0, -11, -21,  29,  30,   8, -19, -42, -41,  28,
1101       0,  20, -20, -11, -30, -10,   4,   5,  32,  28,
1102     }, {
1103     -84,   6,   9,  36,  47,   1,   4, -36, -36, -12,
1104      27, -20, -26,  17,   9,  33,  -1, -47,  19, -46,
1105      -9, -27, -15,  13,  15,  18, -35,  -6, -42,  33,
1106     -20,  36,  -1,   4, -38, -14, -18,   2,  27,  20,
1107     }, {
1108     -55,  -6,  -1, -14,  41, -10,   4, -48, -22,  20,
1109      31,  10,  -5,  -7, -20,   9,  16, -45,   8, -19,
1110      40, -12,   1,  15,   4,  10, -12, -34, -11,  41,
1111      16,  24, -30, -49, -20,  13,  28,  22,  18,  43,
1112     }, {
1113    -124,  13,  21,  23,  62, -23,   0, -43, -57,  -8,
1114      13,  18, -14,  10,  -6,  26,   3, -49,  19, -19,
1115      31, -27,   7,   0, -11,  20, -29,   1, -12,  47,
1116      -4,  39, -11, -34, -28,   9,   5,  19,  13,  34,
1117     }, {
1118      34, -14,  -4,  17,  -5,  24,  26, -20,  27,  45,
1119      12, -24,   2, -13,  21,   8,  22,  16,  32,   2,
1120     -34, -31, -20,   7,  58,  -5,   5,  -2, -38,  12,
1121      -2,   1,  -1,  26,  -5,  23,  21,   6,  -8, -11,
1122     }, {
1123     -34,   6,  18,  55,  15,  11,  21, -16,  -8,  16,
1124      -6, -16,  -5,   4,  35,  24,  10,  12,  43,   1,
1125     -43, -47, -14,  -8,  43,   5, -10,  34, -39,  18,
1126     -22,  16,  17,  42, -13,  19,  -1,   3, -14, -20,
1127     }, {
1128      -5,  -7,   7,   4,   9,   0,  21, -28,   6,  48,
1129      -2,  14,  15, -20,   5,   0,  27,  14,  32,  28,
1130       5, -32,   2,  -6,  32,  -3,  12,   5,  -8,  25,
1131      14,   4, -12, -11,   4,  47,  45,  22, -22,   2,
1132     }, {
1133     -74,  12,  30,  42,  30, -14,  16, -23, -29,  19,
1134     -20,  21,   7,  -1,  19,  17,  14,  10,  43,  27,
1135      -3, -48,   8, -22,  16,   7,  -4,  42,  -9,  31,
1136      -6,  20,   6,   4,  -3,  43,  22,  20, -28,  -5,
1137     }, {
1138     -10,  -3,   4,  18,  15, -27,  24, -13,  24,  51,
1139      34, -47, -12, -28,  21,  19,  27, -16,  15, -30,
1140     -17, -12, -12,   0,  36, -10,  -7, -27, -37,  16,
1141      15,  22,  -3,   4, -31,  -1,  42,  -7,  18,   9,
1142     }, {
1143     -79,  17,  27,  56,  36, -41,  19,  -8, -10,  22,
1144      15, -39, -20,  -9,  35,  35,  15, -20,  26, -31,
1145     -26, -27,  -6, -15,  20,   0, -23,   8, -38,  22,
1146      -5,  38,  15,  20, -39,  -4,  18,  -9,  13,   1,
1147     }, {
1148     -50,   3,  16,   5,  30, -53,  19, -20,   3,  55,
1149      19,  -8,   0, -34,   5,  11,  32, -18,  15,  -4,
1150      22, -13,  10, -13,   9,  -8,   0, -19,  -7,  29,
1151      31,  26, -13, -33, -21,  22,  65,   9,   4,  23,
1152     }, {
1153    -119,  24,  39,  44,  51, -66,  14, -15, -31,  26,
1154       1,   0,  -7, -16,  19,  28,  19, -22,  26,  -4,
1155      13, -28,  16, -29,  -5,   1, -16,  16,  -8,  35,
1156      10,  42,   4, -17, -29,  19,  42,   7,   0,  15,
1157     }, {
1158      31, -28,   6, -16, -16,  50, -31, -14,   0,   6,
1159      36,  17,   0,   0, -29, -14,  11,  18,  20, -25,
1160      -6, -33, -19,  20,  43,  21,  21, -14, -55,   0,
1161     -32, -40, -42,  39,   1,  -8, -14,   8,  -6,  -3,
1162     }, {
1163     -37,  -8,  29,  22,   4,  37, -36,  -9, -34, -22,
1164      17,  24,  -8,  18, -15,   2,  -1,  14,  31, -25,
1165     -15, -48, -13,   4,  28,  31,   5,  21, -57,   4,
1166     -53, -24, -23,  55,  -6, -12, -37,   6, -11, -11,
1167     }, {
1168      -7, -22,  18, -29,  -1,  25, -36, -21, -20,   9,
1169      22,  56,  11,  -6, -45, -21,  15,  16,  20,   1,
1170      33, -34,   2,   6,  17,  23,  28,  -6, -25,  12,
1171     -16, -37, -53,   1,  11,  15,   8,  25, -20,  11,
1172     }, {
1173     -76,  -1,  41,   9,  19,  12, -41, -17, -55, -18,
1174       3,  63,   3,  12, -30,  -5,   3,  12,  31,   0,
1175      24, -49,   8,  -9,   1,  33,  12,  29, -27,  18,
1176     -37, -21, -34,  17,   3,  11, -14,  23, -25,   2,
1177     }, {
1178     -13, -17,  15, -15,   3,  -1, -33,  -7,  -1,  12,
1179      58,  -5, -15, -13, -29,  -3,  16, -13,   4, -57,
1180      10, -13, -11,  13,  21,  15,   9, -40, -55,   3,
1181     -14, -19, -44,  17, -24, -32,   5,  -4,  21,  18,
1182     }, {
1183     -82,   3,  38,  23,  24, -15, -38,  -2, -37, -15,
1184      39,   2, -23,   4, -15,  12,   3, -17,  15, -58,
1185       1, -29,  -6,  -2,   5,  26,  -7,  -4, -56,   9,
1186     -35,  -3, -25,  33, -32, -36, -17,  -7,  15,   9,
1187     }, {
1188     -52, -10,  27, -27,  18, -26, -38, -14, -23,  16,
1189      44,  33,  -3, -20, -45, -10,  20, -15,   3, -31,
1190      50, -14,  10,   0,  -5,  17,  15, -32, -24,  16,
1191       1, -15, -55, -20, -14,  -8,  29,  12,   7,  32,
1192     }, {
1193    -121,   9,  50,  10,  40, -40, -43,  -9, -58, -12,
1194      25,  41, -11,  -2, -31,   5,   8, -19,  15, -32,
1195      41, -30,  16, -16, -20,  28,   0,   3, -26,  22,
1196     -19,   0, -36,  -4, -22, -12,   6,   9,   1,  24,
1197     }, {
1198      36, -18,  24,   3, -28,   7, -16,  13,  26,  41,
1199      24,  -1,   5, -26,  -3, -12,  27,  46,  27, -10,
1200     -24, -34, -10,  -8,  49,   2,  34,   0, -51, -12,
1201     -17, -38, -25,  56,   0,   0,  22,  -3, -20, -22,
1202     }, {
1203     -32,   2,  47,  42,  -7,  -5, -21,  18,  -9,  12,
1204       5,   5,  -2,  -8,  10,   4,  14,  42,  38, -10,
1205     -33, -49,  -5, -24,  33,  12,  17,  35, -52,  -6,
1206     -38, -22,  -7,  72,  -7,  -3,   0,  -6, -25, -30,
1207     }, {
1208      -2, -11,  36,  -9, -13, -17, -21,   6,   5,  45,
1209      10,  36,  18, -33, -19, -19,  31,  44,  27,  15,
1210      16, -34,  11, -22,  22,   4,  40,   7, -21,   0,
1211      -1, -35, -36,  18,  10,  24,  46,  12, -34,  -8,
1212     }, {
1213     -71,   9,  59,  29,   8, -30, -26,  11, -30,  16,
1214      -8,  44,   9, -14,  -5,  -2,  19,  40,  38,  15,
1215       7, -50,  17, -38,   7,  14,  24,  43, -22,   6,
1216     -22, -19, -17,  34,   2,  20,  23,  10, -39, -16,
1217     }, {
1218      -8,  -6,  33,   4,  -7, -44, -18,  21,  23,  48,
1219      46, -24,  -9, -40,  -3,  -1,  32,  13,  11, -43,
1220      -7, -14,  -3, -15,  26,  -3,  21, -26, -50,  -8,
1221       0, -16, -27,  34, -25, -23,  43, -17,   6,  -1,
1222     }, {
1223     -77,  13,  56,  43,  13, -57, -23,  26, -11,  19,
1224      27, -16, -17, -22,  10,  15,  19,  10,  22, -43,
1225     -16, -30,   2, -31,  11,   6,   5,   9, -52,  -2,
1226     -20,   0,  -8,  50, -33, -27,  19, -19,   1,  -9,
1227     }, {
1228     -47,   0,  45,  -7,   7, -69, -23,  13,   2,  51,
1229      32,  14,   3, -47, -19,  -8,  37,  11,  10, -16,
1230      32, -15,  19, -29,   0,  -1,  28, -18, -20,   4,
1231      16, -13, -38,  -3, -15,   0,  66,   0,  -7,  13,
1232     }, {
1233    -116,  20,  68,  30,  28, -83, -28,  18, -32,  22,
1234      13,  21,  -5, -28,  -5,   7,  24,   8,  22, -17,
1235      23, -30,  25, -45, -15,   9,  11,  18, -22,  10,
1236      -4,   2, -19,  12, -23,  -3,  43,  -2, -12,   4,
1237     }, {
1238      72, -13, -29, -18,   4,  90,  37, -34,   4,  -1,
1239      13,  -9,  -6,  11,   2,  24, -13,   3,  -7, -11,
1240      -4,   4, -42,  25,  31,  -1,  -8, -29,  -6,  17,
1241     -19,   2, -10,  -6,  38,  22, -42, -19,  -6, -11,
1242     }, {
1243       3,   7,  -6,  20,  25,  77,  32, -29, -31, -30,
1244      -4,  -2, -14,  29,  16,  40, -26,   0,   3, -12,
1245     -13, -10, -36,   9,  15,   8, -24,   6,  -7,  22,
1246     -40,  17,   8,   9,  31,  18, -66, -22, -11, -19,
1247     }, {
1248      32,  -6, -17, -31,  19,  65,  33, -41, -16,   1,
1249       0,  29,   6,   4, -13,  17,  -9,   1,  -8,  14,
1250      35,   3, -19,  11,   4,   0,  -1, -21,  23,  30,
1251      -3,   5, -20, -44,  48,  46, -19,  -3, -20,   3,
1252     }, {
1253     -36,  13,   5,   7,  40,  51,  28, -36, -52, -27,
1254     -18,  36,  -2,  22,   0,  33, -21,  -2,   3,  13,
1255      26, -11, -14,  -4, -10,  10, -18,  14,  22,  36,
1256     -24,  21,  -1, -28,  40,  42, -42,  -5, -25,  -5,
1257     }, {
1258      27,  -1, -20, -17,  24,  38,  35, -26,   1,   4,
1259      35, -32, -21,  -3,   2,  35,  -8, -29, -24, -44,
1260      12,  24, -34,  18,   8,  -7, -21, -55,  -5,  21,
1261      -2,  23, -11, -28,  13,  -1, -22, -33,  21,  10,
1262     }, {
1263     -41,  18,   2,  21,  45,  24,  30, -21, -33, -24,
1264      17, -24, -29,  15,  16,  51, -21, -33, -13, -45,
1265       3,   8, -28,   2,  -7,   2, -37, -19,  -7,  27,
1266     -22,  39,   7, -12,   5,  -5, -45, -35,  15,   1,
1267     }, {
1268     -12,   4,  -8, -29,  39,  12,  30, -33, -19,   8,
1269      21,   6,  -8,  -9, -13,  28,  -4, -31, -24, -18,
1270      52,  23, -12,   4, -18,  -5, -14, -47,  24,  34,
1271      14,  27, -22, -66,  22,  22,   1, -16,   6,  24,
1272     }, {
1273     -81,  25,  14,   8,  61,   0,  25, -28, -54, -20,
1274       3,  14, -17,   8,   0,  44, -16, -35, -13, -18,
1275      43,   7,  -6, -11, -33,   4, -30, -11,  22,  40,
1276      -6,  43,  -3, -50,  14,  18, -22, -18,   1,  16,
1277     }, {
1278      77,  -2, -11,   1,  -7,  47,  52,  -5,  29,  33,
1279       1, -28,   0, -15,  28,  26,   2,  30,   0,   2,
1280     -22,   4, -33,  -3,  36, -21,   3, -15,  -2,   5,
1281      -4,   4,   6,   9,  37,  31,  -5, -32, -20, -30,
1282     }, {
1283       8,  17,  10,  40,  13,  34,  47,   0,  -5,   4,
1284     -16, -21,  -8,   2,  42,  43, -10,  26,  10,   2,
1285     -31, -11, -27, -19,  21, -10, -12,  20,  -3,  11,
1286     -25,  20,  25,  25,  29,  28, -28, -34, -25, -38,
1287     }, {
1288      37,   3,   0, -10,   7,  22,  48, -12,   8,  36,
1289     -12,   9,  12, -22,  12,  19,   6,  28,   0,  29,
1290      18,   3, -11, -17,  10, -18,  10,  -7,  27,  18,
1291      11,   7,  -3, -28,  47,  55,  18, -15, -34, -16,
1292     }, {
1293     -31,  24,  23,  27,  29,   9,  43,  -8, -26,   7,
1294     -30,  17,   4,  -3,  26,  35,  -5,  24,  10,  28,
1295       9, -12,  -5, -33,  -5,  -8,  -5,  29,  26,  24,
1296      -9,  23,  14, -12,  39,  52,  -5, -18, -39, -24,
1297     }, {
1298      32,   8,  -3,   2,  13,  -4,  50,   1,  27,  39,
1299      23, -51, -15, -30,  27,  37,   7,  -1, -17, -29,
1300      -5,  23, -25, -10,  14, -26,  -8, -41,  -1,   9,
1301      13,  26,   5, -12,  12,   7,  14, -45,   6,  -9,
1302     }, {
1303     -36,  29,  19,  41,  34, -18,  45,   6,  -8,  10,
1304       5, -43, -23, -11,  42,  53,  -5,  -5,  -6, -30,
1305     -14,   8, -20, -26,  -1, -16, -25,  -4,  -3,  15,
1306      -7,  41,  23,   3,   4,   3,  -8, -48,   1, -17,
1307     }, {
1308      -7,  15,   9,  -9,  28, -29,  45,  -5,   6,  43,
1309       9, -12,  -2, -36,  12,  30,  11,  -3, -17,  -3,
1310      34,  22,  -3, -24, -12, -24,  -2, -32,  28,  22,
1311      29,  29,  -5, -50,  21,  31,  38, -29,  -7,   5,
1312     }, {
1313     -76,  35,  31,  28,  49, -43,  40,   0, -29,  14,
1314      -8,  -5, -10, -18,  26,  46,   0,  -7,  -6,  -3,
1315      25,   7,   2, -40, -28, -14, -18,   3,  27,  28,
1316       8,  45,  13, -34,  13,  27,  15, -31, -12,  -3,
1317     }, {
1318      74, -17,   0, -31, -18,  73,  -5,   0,   3,  -5,
1319      25,  12,  -3,  -1, -22,   3,  -9,  33, -12, -24,
1320       6,   2, -33,   9,  21,   5,  20, -27, -19,  -7,
1321     -34, -37, -34,  22,  44,   0, -41, -29, -17, -21,
1322     }, {
1323       5,   3,  21,   7,   2,  60, -10,   5, -32, -34,
1324       7,  20, -11,  16,  -8,  20, -21,  29,  -1, -24,
1325      -2, -13, -27,  -6,   5,  15,   3,   8, -21,  -1,
1326     -55, -21, -15,  38,  37,  -3, -65, -32, -23, -30,
1327     }, {
1328      35, -10,  11, -44,  -3,  48, -10,  -6, -17,  -2,
1329      11,  51,   8,  -8, -38,  -3,  -4,  31, -12,   2,
1330      46,   1, -10,  -4,  -5,   7,  26, -19,  10,   5,
1331     -18, -34, -45, -15,  54,  24, -18, -13, -31,  -7,
1332     }, {
1333     -33,  10,  34,  -5,  17,  35, -15,  -1, -53, -30,
1334      -6,  59,   0,  10, -24,  13, -17,  27,  -1,   1,
1335      37, -13,  -4, -20, -20,  18,  10,  16,   8,  11,
1336     -39, -18, -26,   0,  46,  20, -41, -15, -37, -15,
1337     }, {
1338      29,  -5,   7, -30,   1,  21,  -7,   7,   0,   0,
1339      47,  -9, -18, -15, -22,  14,  -4,   0, -28, -57,
1340      23,  21, -25,   2,  -1,   0,   7, -53, -19,  -3,
1341     -17, -15, -36,   0,  19, -24, -21, -43,   9,   0,
1342     }, {
1343     -39,  14,  30,   8,  22,   8, -12,  12, -34, -27,
1344      29,  -2, -26,   2,  -8,  31, -16,  -3, -17, -57,
1345      14,   6, -19, -13, -16,  10,  -8, -17, -20,   2,
1346     -38,   0, -17,  16,  11, -27, -44, -45,   4,  -8,
1347     }, {
1348      -9,   1,  20, -43,  17,  -3, -12,   0, -20,   4,
1349      33,  29,  -6, -22, -38,   7,   0,  -1, -29, -30,
1350      63,  21,  -3, -11, -27,   1,  14, -45,  10,   9,
1351      -1, -12, -47, -37,  28,   0,   2, -26,  -4,  13,
1352     }, {
1353     -78,  21,  43,  -4,  38, -17, -17,   5, -55, -24,
1354      15,  36, -14,  -4, -24,  24, -12,  -5, -17, -31,
1355      54,   5,   2, -27, -43,  12,  -2,  -9,   9,  15,
1356     -22,   3, -28, -21,  20,  -3, -20, -28,  -9,   5,
1357     }, {
1358      80,  -6,  16, -11, -30,  30,   9,  28,  28,  29,
1359      13,  -6,   2, -28,   3,   5,   7,  60,  -5,  -9,
1360     -11,   1, -24, -19,  27, -13,  32, -13, -15, -19,
1361     -19, -35, -17,  39,  43,   9,  -4, -42, -32, -41,
1362     }, {
1363      11,  14,  39,  27,  -9,  17,   4,  33,  -6,   0,
1364      -4,   1,  -5, -10,  17,  22,  -5,  57,   5,  -9,
1365     -20, -13, -18, -35,  11,  -3,  16,  22, -17, -13,
1366     -40, -19,   1,  55,  35,   5, -27, -44, -37, -49,
1367     }, {
1368      40,   0,  28, -24, -14,   5,   4,  21,   7,  33,
1369       0,  32,  15, -35, -12,  -1,  11,  58,  -5,  16,
1370      28,   0,  -1, -33,   0, -11,  39,  -5,  14,  -6,
1371      -3, -31, -28,   1,  53,  33,  19, -25, -46, -26,
1372     }, {
1373     -28,  20,  51,  14,   6,  -7,   0,  26, -27,   4,
1374     -18,  40,   6, -16,   1,  15,   0,  55,   5,  16,
1375      19, -14,   3, -49, -14,  -1,  22,  30,  12,   0,
1376     -24, -15,  -9,  17,  45,  29,  -4, -28, -51, -35,
1377     }, {
1378      34,   4,  25, -10,  -9, -21,   7,  36,  26,  36,
1379      35, -28, -12, -42,   3,  16,  12,  28, -21, -42,
1380       5,  21, -16, -26,   4, -19,  19, -39, -15, -15,
1381      -1, -13, -19,  17,  17, -14,  15, -55,  -4, -19,
1382     }, {
1383     -34,  25,  48,  28,  11, -34,   2,  41,  -9,   7,
1384      17, -21, -20, -24,  17,  33,   0,  24, -10, -42,
1385      -3,   5, -10, -42, -11,  -8,   3,  -3, -16,  -9,
1386     -22,   2,   0,  33,  10, -18,  -7, -58, -10, -28,
1387     }, {
1388      -4,  11,  37, -23,   5, -46,   2,  29,   5,  39,
1389      21,   9,   0, -49, -12,   9,  16,  26, -22, -15,
1390      45,  20,   5, -40, -22, -17,  26, -31,  14,  -2,
1391      14, -10, -30, -20,  27,   9,  39, -39, -18,  -5,
1392     }, {
1393     -73,  32,  60,  15,  26, -59,  -2,  33, -30,  10,
1394       3,  17,  -8, -30,   1,  26,   4,  22, -10, -16,
1395      36,   5,  11, -56, -37,  -6,  10,   5,  13,   3,
1396      -6,   5, -11,  -4,  19,   5,  16, -41, -24, -13
1397     }
1398 };
1399
1400 const uint16_t ff_cb1_base[128]={
1401     19657, 18474, 18365, 17520, 21048, 18231, 18584, 16671,
1402     20363, 19069, 19409, 18430, 21844, 18753, 19613, 17411,
1403     20389, 21772, 20129, 21702, 20978, 20472, 19627, 19387,
1404     21477, 23134, 21841, 23919, 22089, 21519, 21134, 20852,
1405     19675, 17821, 19044, 17477, 19986, 16955, 18446, 16086,
1406     21138, 18899, 20952, 18929, 21452, 17833, 20104, 17159,
1407     19770, 20056, 20336, 20866, 19329, 18217, 18908, 18004,
1408     21556, 21948, 23079, 23889, 20922, 19544, 20984, 19781,
1409     19781, 20984, 19544, 20922, 23889, 23079, 21948, 21556,
1410     18004, 18908, 18217, 19329, 20866, 20336, 20056, 19770,
1411     17159, 20104, 17833, 21452, 18929, 20952, 18899, 21138,
1412     16086, 18446, 16955, 19986, 17477, 19044, 17821, 19675,
1413     20852, 21134, 21519, 22089, 23919, 21841, 23134, 21477,
1414     19387, 19627, 20472, 20978, 21702, 20129, 21772, 20389,
1415     17411, 19613, 18753, 21844, 18430, 19409, 19069, 20363,
1416     16671, 18584, 18231, 21048, 17520, 18365, 18474, 19657,
1417 };
1418
1419 const uint16_t ff_cb2_base[128]={
1420     12174, 13380, 13879, 13832, 13170, 13227, 13204, 12053,
1421     12410, 13988, 14348, 14631, 13100, 13415, 13224, 12268,
1422     11982, 13825, 13499, 14210, 13877, 14788, 13811, 13109,
1423     11449, 13275, 12833, 13717, 12728, 13696, 12759, 12405,
1424     10230, 12185, 11628, 13161, 11762, 13458, 12312, 12818,
1425     10443, 12773, 12011, 14020, 11818, 13825, 12453, 13226,
1426     10446, 13162, 11881, 14300, 12859, 16288, 13490, 15053,
1427     10155, 12820, 11519, 13973, 12041, 15081, 12635, 14198,
1428     14198, 12635, 15081, 12041, 13973, 11519, 12820, 10155,
1429     15053, 13490, 16288, 12859, 14300, 11881, 13162, 10446,
1430     13226, 12453, 13825, 11818, 14020, 12011, 12773, 10443,
1431     12818, 12312, 13458, 11762, 13161, 11628, 12185, 10230,
1432     12405, 12759, 13696, 12728, 13717, 12833, 13275, 11449,
1433     13109, 13811, 14788, 13877, 14210, 13499, 13825, 11982,
1434     12268, 13224, 13415, 13100, 14631, 14348, 13988, 12410,
1435     12053, 13204, 13227, 13170, 13832, 13879, 13380, 12174,
1436 };
1437
1438 const int16_t ff_energy_tab[32]={
1439         0,    16,    20,    25,    32,    41,    51,    65,
1440        81,   103,   129,   163,   205,   259,   326,   410,
1441       516,   650,   819,  1031,  1298,  1634,  2057,  2590,
1442      3261,  4105,  5168,  6507,  8192, 10313, 12983, 16345
1443 };
1444
1445 static const int16_t lpc_refl_cb1[64]={
1446     -4041, -4018, -3998, -3977, -3954, -3930, -3906, -3879,
1447     -3852, -3825, -3795, -3764, -3731, -3699, -3666, -3631,
1448     -3594, -3555, -3513, -3468, -3420, -3372, -3321, -3268,
1449     -3212, -3153, -3090, -3021, -2944, -2863, -2772, -2676,
1450     -2565, -2445, -2328, -2202, -2072, -1941, -1808, -1660,
1451     -1508, -1348, -1185,  -994,  -798,  -600,  -374,  -110,
1452       152,   447,   720,   982,  1229,  1456,  1682,  1916,
1453      2130,  2353,  2595,  2853,  3118,  3363,  3588,  3814
1454 };
1455
1456 static const int16_t lpc_refl_cb2[32]={
1457     -3091, -2386, -1871, -1425, -1021,  -649,  -316,   -20,
1458       267,   544,   810,  1065,  1305,  1534,  1756,  1970,
1459      2171,  2359,  2536,  2700,  2854,  2996,  3133,  3263,
1460      3386,  3499,  3603,  3701,  3789,  3870,  3947,  4020
1461 };
1462
1463 static const int16_t lpc_refl_cb3[32]={
1464     -3525, -3295, -3081, -2890, -2696, -2511, -2328, -2149,
1465     -1979, -1817, -1658, -1498, -1341, -1188, -1032,  -876,
1466      -721,  -561,  -394,  -228,   -54,   119,   296,   484,
1467       683,   895,  1123,  1373,  1651,  1965,  2360,  2854
1468 };
1469
1470 static const int16_t lpc_refl_cb4[16]={
1471     -1845, -1057,  -522,   -77,   301,   647,   975,  1285,
1472      1582,  1873,  2163,  2452,  2735,  3017,  3299,  3569
1473 };
1474
1475 static const int16_t lpc_refl_cb5[16]={
1476     -2691, -2187, -1788, -1435, -1118,  -837,  -571,  -316,
1477       -59,   201,   470,   759,  1077,  1457,  1908,  2495
1478 };
1479
1480 static const int16_t lpc_refl_cb6[8]={
1481     -1372,  -474,   133,   632,  1100,  1571,  2075,  2672
1482 };
1483
1484 static const int16_t lpc_refl_cb7[8]={
1485     -2389, -1787, -1231,  -717,  -239,   234,   770,  1474
1486 };
1487
1488 static const int16_t lpc_refl_cb8[8]={
1489     -1569,  -864,  -296,   200,   670,  1151,  1709,  2385
1490 };
1491
1492 static const int16_t lpc_refl_cb9[8]={
1493     -2200, -1608, -1062,  -569,  -120,   338,   863,  1621
1494 };
1495
1496 static const int16_t lpc_refl_cb10[4]={
1497      -617,   190,   802,  1483
1498 };
1499
1500 const int16_t * const ff_lpc_refl_cb[10]={
1501     lpc_refl_cb1, lpc_refl_cb2, lpc_refl_cb3, lpc_refl_cb4, lpc_refl_cb5,
1502     lpc_refl_cb6, lpc_refl_cb7, lpc_refl_cb8, lpc_refl_cb9, lpc_refl_cb10
1503 };
1504
1505 void ff_add_wav(int16_t *dest, int n, int skip_first, int *m, const int16_t *s1,
1506                 const int8_t *s2, const int8_t *s3)
1507 {
1508     int i;
1509     int v[3];
1510
1511     v[0] = 0;
1512     for (i=!skip_first; i<3; i++)
1513         v[i] = (ff_gain_val_tab[n][i] * m[i]) >> ff_gain_exp_tab[n];
1514
1515     if (v[0]) {
1516         for (i=0; i < BLOCKSIZE; i++)
1517             dest[i] = (s1[i]*v[0] + s2[i]*v[1] + s3[i]*v[2]) >> 12;
1518     } else {
1519         for (i=0; i < BLOCKSIZE; i++)
1520             dest[i] = (             s2[i]*v[1] + s3[i]*v[2]) >> 12;
1521     }
1522 }
1523
1524 /**
1525  * Copy the last offset values of *source to *target. If those values are not
1526  * enough to fill the target buffer, fill it with another copy of those values.
1527  */
1528 void ff_copy_and_dup(int16_t *target, const int16_t *source, int offset)
1529 {
1530     source += BUFFERSIZE - offset;
1531
1532     memcpy(target, source, FFMIN(BLOCKSIZE, offset)*sizeof(*target));
1533     if (offset < BLOCKSIZE)
1534         memcpy(target + offset, source, (BLOCKSIZE - offset)*sizeof(*target));
1535 }
1536
1537 /**
1538  * Evaluate the reflection coefficients from the filter coefficients.
1539  *
1540  * @return 1 if one of the reflection coefficients is greater than
1541  *         4095, 0 if not.
1542  */
1543 int ff_eval_refl(int *refl, const int16_t *coefs, AVCodecContext *avctx)
1544 {
1545     int b, i, j;
1546     int buffer1[10];
1547     int buffer2[10];
1548     int *bp1 = buffer1;
1549     int *bp2 = buffer2;
1550
1551     for (i=0; i < 10; i++)
1552         buffer2[i] = coefs[i];
1553
1554     refl[9] = bp2[9];
1555
1556     if ((unsigned) bp2[9] + 0x1000 > 0x1fff) {
1557         av_log(avctx, AV_LOG_ERROR, "Overflow. Broken sample?\n");
1558         return 1;
1559     }
1560
1561     for (i=8; i >= 0; i--) {
1562         b = 0x1000-((bp2[i+1] * bp2[i+1]) >> 12);
1563
1564         if (!b)
1565             b = -2;
1566
1567         for (j=0; j <= i; j++)
1568             bp1[j] = ((bp2[j] - ((refl[i+1] * bp2[i-j]) >> 12)) * (0x1000000 / b)) >> 12;
1569
1570         if ((unsigned) bp1[i] + 0x1000 > 0x1fff)
1571             return 1;
1572
1573         refl[i] = bp1[i];
1574
1575         FFSWAP(int *, bp1, bp2);
1576     }
1577     return 0;
1578 }
1579
1580 /**
1581  * Evaluate the LPC filter coefficients from the reflection coefficients.
1582  * Does the inverse of the ff_eval_refl() function.
1583  */
1584 void ff_eval_coefs(int *coefs, const int *refl)
1585 {
1586     int buffer[10];
1587     int *b1 = buffer;
1588     int *b2 = coefs;
1589     int i, j;
1590
1591     for (i=0; i < 10; i++) {
1592         b1[i] = refl[i] << 4;
1593
1594         for (j=0; j < i; j++)
1595             b1[j] = ((refl[i] * b2[i-j-1]) >> 12) + b2[j];
1596
1597         FFSWAP(int *, b1, b2);
1598     }
1599
1600     for (i=0; i < 10; i++)
1601         coefs[i] >>= 4;
1602 }
1603
1604 void ff_int_to_int16(int16_t *out, const int *inp)
1605 {
1606     int i;
1607
1608     for (i=0; i < 10; i++)
1609         *out++ = *inp++;
1610 }
1611
1612 /**
1613  * Evaluate sqrt(x << 24). x must fit in 20 bits. This value is evaluated in an
1614  * odd way to make the output identical to the binary decoder.
1615  */
1616 int ff_t_sqrt(unsigned int x)
1617 {
1618     int s = 2;
1619     while (x > 0xfff) {
1620         s++;
1621         x >>= 2;
1622     }
1623
1624     return ff_sqrt(x << 20) << s;
1625 }
1626
1627 unsigned int ff_rms(const int *data)
1628 {
1629     int i;
1630     unsigned int res = 0x10000;
1631     int b = 10;
1632
1633     for (i=0; i < 10; i++) {
1634         res = (((0x1000000 - data[i]*data[i]) >> 12) * res) >> 12;
1635
1636         if (res == 0)
1637             return 0;
1638
1639         while (res <= 0x3fff) {
1640             b++;
1641             res <<= 2;
1642         }
1643     }
1644
1645     return ff_t_sqrt(res) >> b;
1646 }
1647
1648 int ff_interp(RA144Context *ractx, int16_t *out, int a, int copyold, int energy)
1649 {
1650     int work[10];
1651     int b = NBLOCKS - a;
1652     int i;
1653
1654     // Interpolate block coefficients from the this frame's forth block and
1655     // last frame's forth block.
1656     for (i=0; i<10; i++)
1657         out[i] = (a * ractx->lpc_coef[0][i] + b * ractx->lpc_coef[1][i])>> 2;
1658
1659     if (ff_eval_refl(work, out, ractx->avctx)) {
1660         // The interpolated coefficients are unstable, copy either new or old
1661         // coefficients.
1662         ff_int_to_int16(out, ractx->lpc_coef[copyold]);
1663         return ff_rescale_rms(ractx->lpc_refl_rms[copyold], energy);
1664     } else {
1665         return ff_rescale_rms(ff_rms(work), energy);
1666     }
1667 }
1668
1669 unsigned int ff_rescale_rms(unsigned int rms, unsigned int energy)
1670 {
1671     return (rms * energy) >> 10;
1672 }
1673
1674 /** inverse root mean square */
1675 int ff_irms(const int16_t *data)
1676 {
1677     unsigned int i, sum = 0;
1678
1679     for (i=0; i < BLOCKSIZE; i++)
1680         sum += data[i] * data[i];
1681
1682     if (sum == 0)
1683         return 0; /* OOPS - division by zero */
1684
1685     return 0x20000000 / (ff_t_sqrt(sum) >> 8);
1686 }