lavc: G.723.1 encoder
[ffmpeg.git] / libavcodec / g723_1.h
1 /*
2  * G.723.1 common header and data tables
3  * Copyright (c) 2006 Benjamin Larsson
4  * Copyright (c) 2010 Mohamed Naufal Basheer
5  *
6  * This file is part of Libav.
7  *
8  * Libav is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * Libav is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with Libav; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22
23 /**
24  * @file
25  * G.723.1 types, functions and data tables
26  */
27
28 #ifndef AVCODEC_G723_1_H
29 #define AVCODEC_G723_1_H
30
31 #include <stdint.h>
32
33 #define SUBFRAMES       4
34 #define SUBFRAME_LEN    60
35 #define FRAME_LEN       (SUBFRAME_LEN << 2)
36 #define HALF_FRAME_LEN  (FRAME_LEN / 2)
37 #define LPC_FRAME       (HALF_FRAME_LEN + SUBFRAME_LEN)
38 #define LPC_ORDER       10
39 #define LSP_BANDS       3
40 #define LSP_CB_SIZE     256
41 #define PITCH_MIN       18
42 #define PITCH_MAX       (PITCH_MIN + 127)
43 #define PITCH_ORDER     5
44 #define GRID_SIZE       2
45 #define PULSE_MAX       6
46 #define GAIN_LEVELS     24
47 #define COS_TBL_SIZE    512
48
49 /**
50  * Bitexact implementation of 2ab scaled by 1/2^16.
51  *
52  * @param a 32 bit multiplicand
53  * @param b 16 bit multiplier
54  */
55 #define MULL2(a, b) \
56         ((((a) >> 16) * (b) << 1) + (((a) & 0xffff) * (b) >> 15))
57
58 /**
59  * G723.1 frame types
60  */
61 enum FrameType {
62     ACTIVE_FRAME,        ///< Active speech
63     SID_FRAME,           ///< Silence Insertion Descriptor frame
64     UNTRANSMITTED_FRAME
65 };
66
67 /**
68  * G723.1 rate values
69  */
70 enum Rate {
71     RATE_6300,
72     RATE_5300
73 };
74
75 /**
76  * G723.1 unpacked data subframe
77  */
78 typedef struct G723_1_Subframe {
79     int ad_cb_lag;     ///< adaptive codebook lag
80     int ad_cb_gain;
81     int dirac_train;
82     int pulse_sign;
83     int grid_index;
84     int amp_index;
85     int pulse_pos;
86 } G723_1_Subframe;
87
88 /**
89  * Pitch postfilter parameters
90  */
91 typedef struct PPFParam {
92     int     index;    ///< postfilter backward/forward lag
93     int16_t opt_gain; ///< optimal gain
94     int16_t sc_gain;  ///< scaling gain
95 } PPFParam;
96
97 /**
98  * Harmonic filter parameters
99  */
100 typedef struct HFParam {
101     int index;
102     int gain;
103 } HFParam;
104
105 /**
106  * Optimized fixed codebook excitation parameters
107  */
108 typedef struct FCBParam {
109     int min_err;
110     int amp_index;
111     int grid_index;
112     int dirac_train;
113     int pulse_pos[PULSE_MAX];
114     int pulse_sign[PULSE_MAX];
115 } FCBParam;
116
117 typedef struct g723_1_context {
118     AVClass *class;
119
120     G723_1_Subframe subframe[4];
121     enum FrameType cur_frame_type;
122     enum FrameType past_frame_type;
123     enum Rate cur_rate;
124     uint8_t lsp_index[LSP_BANDS];
125     int pitch_lag[2];
126     int erased_frames;
127
128     int16_t prev_lsp[LPC_ORDER];
129     int16_t sid_lsp[LPC_ORDER];
130     int16_t prev_excitation[PITCH_MAX];
131     int16_t excitation[PITCH_MAX + FRAME_LEN + 4];
132     int16_t synth_mem[LPC_ORDER];
133     int16_t fir_mem[LPC_ORDER];
134     int     iir_mem[LPC_ORDER];
135
136     int random_seed;
137     int cng_random_seed;
138     int interp_index;
139     int interp_gain;
140     int sid_gain;
141     int cur_gain;
142     int reflection_coef;
143     int pf_gain;
144     int postfilter;
145
146     int16_t audio[FRAME_LEN + LPC_ORDER + PITCH_MAX + 4];
147
148     /* encoder */
149     int16_t prev_data[HALF_FRAME_LEN];
150     int16_t prev_weight_sig[PITCH_MAX];
151
152     int16_t hpf_fir_mem;                   ///< highpass filter fir
153     int     hpf_iir_mem;                   ///< and iir memories
154     int16_t perf_fir_mem[LPC_ORDER];       ///< perceptual filter fir
155     int16_t perf_iir_mem[LPC_ORDER];       ///< and iir memories
156
157     int16_t harmonic_mem[PITCH_MAX];
158 } G723_1_Context;
159
160
161 /**
162  * Scale vector contents based on the largest of their absolutes.
163  */
164 int ff_g723_1_scale_vector(int16_t *dst, const int16_t *vector, int length);
165
166 /**
167  * Calculate the number of left-shifts required for normalizing the input.
168  *
169  * @param num   input number
170  * @param width width of the input, 16 bits(0) / 32 bits(1)
171  */
172 int ff_g723_1_normalize_bits(int num, int width);
173
174 int ff_g723_1_dot_product(const int16_t *a, const int16_t *b, int length);
175
176 /**
177  * Get delayed contribution from the previous excitation vector.
178  */
179 void ff_g723_1_get_residual(int16_t *residual, int16_t *prev_excitation,
180                             int lag);
181
182 /**
183  * Generate a train of dirac functions with period as pitch lag.
184  */
185 void ff_g723_1_gen_dirac_train(int16_t *buf, int pitch_lag);
186
187
188 /**
189  * Generate adaptive codebook excitation.
190  */
191 void ff_g723_1_gen_acb_excitation(int16_t *vector, int16_t *prev_excitation,
192                                   int pitch_lag, G723_1_Subframe *subfrm,
193                                   enum Rate cur_rate);
194 /**
195  * Quantize LSP frequencies by interpolation and convert them to
196  * the corresponding LPC coefficients.
197  *
198  * @param lpc      buffer for LPC coefficients
199  * @param cur_lsp  the current LSP vector
200  * @param prev_lsp the previous LSP vector
201  */
202 void ff_g723_1_lsp_interpolate(int16_t *lpc, int16_t *cur_lsp,
203                                int16_t *prev_lsp);
204
205 /**
206  * Perform inverse quantization of LSP frequencies.
207  *
208  * @param cur_lsp    the current LSP vector
209  * @param prev_lsp   the previous LSP vector
210  * @param lsp_index  VQ indices
211  * @param bad_frame  bad frame flag
212  */
213 void ff_g723_1_inverse_quant(int16_t *cur_lsp, int16_t *prev_lsp,
214                              uint8_t *lsp_index, int bad_frame);
215
216
217 static const uint8_t frame_size[4] = { 24, 20, 4, 1 };
218
219 /* Postfilter gain weighting factors scaled by 2^15 */
220 static const int16_t ppf_gain_weight[2] = { 0x1800, 0x2000 };
221
222 /* LSP DC component */
223 static const int16_t dc_lsp[LPC_ORDER] = {
224     0x0c3b, 0x1271, 0x1e0a, 0x2a36, 0x3630,
225     0x406f, 0x4d28, 0x56f4, 0x638c, 0x6c46
226 };
227
228 /* Cosine table scaled by 2^14 */
229 static const int16_t cos_tab[COS_TBL_SIZE + 1] = {
230     16384,  16383,  16379,  16373,  16364,  16353,  16340,  16324,
231     16305,  16284,  16261,  16235,  16207,  16176,  16143,  16107,
232     16069,  16029,  15986,  15941,  15893,  15843,  15791,  15736,
233     15679,  15619,  15557,  15493,  15426,  15357,  15286,  15213,
234     15137,  15059,  14978,  14896,  14811,  14724,  14635,  14543,
235     14449,  14354,  14256,  14155,  14053,  13949,  13842,  13733,
236     13623,  13510,  13395,  13279,  13160,  13039,  12916,  12792,
237     12665,  12537,  12406,  12274,  12140,  12004,  11866,  11727,
238     11585,  11442,  11297,  11151,  11003,  10853,  10702,  10549,
239     10394,  10238,  10080,   9921,   9760,   9598,   9434,   9269,
240      9102,   8935,   8765,   8595,   8423,   8250,   8076,   7900,
241      7723,   7545,   7366,   7186,   7005,   6823,   6639,   6455,
242      6270,   6084,   5897,   5708,   5520,   5330,   5139,   4948,
243      4756,   4563,   4370,   4176,   3981,   3786,   3590,   3393,
244      3196,   2999,   2801,   2603,   2404,   2205,   2006,   1806,
245      1606,   1406,   1205,   1005,    804,    603,    402,    201,
246         0,   -201,   -402,   -603,   -804,  -1005,  -1205,  -1406,
247     -1606,  -1806,  -2006,  -2205,  -2404,  -2603,  -2801,  -2999,
248     -3196,  -3393,  -3590,  -3786,  -3981,  -4176,  -4370,  -4563,
249     -4756,  -4948,  -5139,  -5330,  -5520,  -5708,  -5897,  -6084,
250     -6270,  -6455,  -6639,  -6823,  -7005,  -7186,  -7366,  -7545,
251     -7723,  -7900,  -8076,  -8250,  -8423,  -8595,  -8765,  -8935,
252     -9102,  -9269,  -9434,  -9598,  -9760,  -9921, -10080, -10238,
253    -10394, -10549, -10702, -10853, -11003, -11151, -11297, -11442,
254    -11585, -11727, -11866, -12004, -12140, -12274, -12406, -12537,
255    -12665, -12792, -12916, -13039, -13160, -13279, -13395, -13510,
256    -13623, -13733, -13842, -13949, -14053, -14155, -14256, -14354,
257    -14449, -14543, -14635, -14724, -14811, -14896, -14978, -15059,
258    -15137, -15213, -15286, -15357, -15426, -15493, -15557, -15619,
259    -15679, -15736, -15791, -15843, -15893, -15941, -15986, -16029,
260    -16069, -16107, -16143, -16176, -16207, -16235, -16261, -16284,
261    -16305, -16324, -16340, -16353, -16364, -16373, -16379, -16383,
262    -16384, -16383, -16379, -16373, -16364, -16353, -16340, -16324,
263    -16305, -16284, -16261, -16235, -16207, -16176, -16143, -16107,
264    -16069, -16029, -15986, -15941, -15893, -15843, -15791, -15736,
265    -15679, -15619, -15557, -15493, -15426, -15357, -15286, -15213,
266    -15137, -15059, -14978, -14896, -14811, -14724, -14635, -14543,
267    -14449, -14354, -14256, -14155, -14053, -13949, -13842, -13733,
268    -13623, -13510, -13395, -13279, -13160, -13039, -12916, -12792,
269    -12665, -12537, -12406, -12274, -12140, -12004, -11866, -11727,
270    -11585, -11442, -11297, -11151, -11003, -10853, -10702, -10549,
271    -10394, -10238, -10080,  -9921,  -9760,  -9598,  -9434,  -9269,
272     -9102,  -8935,  -8765,  -8595,  -8423,  -8250,  -8076,  -7900,
273     -7723,  -7545,  -7366,  -7186,  -7005,  -6823,  -6639,  -6455,
274     -6270,  -6084,  -5897,  -5708,  -5520,  -5330,  -5139,  -4948,
275     -4756,  -4563,  -4370,  -4176,  -3981,  -3786,  -3590,  -3393,
276     -3196,  -2999,  -2801,  -2603,  -2404,  -2205,  -2006,  -1806,
277     -1606,  -1406,  -1205,  -1005,   -804,   -603,   -402,   -201,
278         0,    201,    402,    603,    804,   1005,   1205,   1406,
279      1606,   1806,   2006,   2205,   2404,   2603,   2801,   2999,
280      3196,   3393,   3590,   3786,   3981,   4176,   4370,   4563,
281      4756,   4948,   5139,   5330,   5520,   5708,   5897,   6084,
282      6270,   6455,   6639,   6823,   7005,   7186,   7366,   7545,
283      7723,   7900,   8076,   8250,   8423,   8595,   8765,   8935,
284      9102,   9269,   9434,   9598,   9760,   9921,  10080,  10238,
285     10394,  10549,  10702,  10853,  11003,  11151,  11297,  11442,
286     11585,  11727,  11866,  12004,  12140,  12274,  12406,  12537,
287     12665,  12792,  12916,  13039,  13160,  13279,  13395,  13510,
288     13623,  13733,  13842,  13949,  14053,  14155,  14256,  14354,
289     14449,  14543,  14635,  14724,  14811,  14896,  14978,  15059,
290     15137,  15213,  15286,  15357,  15426,  15493,  15557,  15619,
291     15679,  15736,  15791,  15843,  15893,  15941,  15986,  16029,
292     16069,  16107,  16143,  16176,  16207,  16235,  16261,  16284,
293     16305,  16324,  16340,  16353,  16364,  16373,  16379,  16383,
294     16384
295 };
296
297 /* LSP VQ tables */
298 static const int16_t lsp_band0[LSP_CB_SIZE][3] = {
299     {    0,      0,      0}, { -270,  -1372,  -1032}, { -541,  -1650,  -1382},
300     { -723,  -2011,  -2213}, { -941,  -1122,  -1942}, { -780,  -1145,  -2454},
301     { -884,  -1309,  -1373}, {-1051,  -1523,  -1766}, {-1083,  -1622,  -2300},
302     { -777,  -1377,  -2147}, { -935,  -1467,  -2763}, { -802,  -1327,  -3471},
303     { -935,  -1959,  -3999}, { -240,    -89,    222}, { -661,   -257,   -160},
304     { -994,   -466,   -419}, { -188,   -164,   -278}, { -342,   -512,   -415},
305     { -607,   -511,   -797}, {   16,     19,   -716}, {  374,    425,   -972},
306     { -346,    245,   -282}, { -265,    506,   -754}, { -620,   -147,   1955},
307     { -742,   -860,   2597}, { -150,   -352,   2704}, {  305,    880,   1954},
308     {  123,    731,   2766}, { -348,    765,   3327}, {  618,    221,   3258},
309     { -178,    -47,   4219}, {  393,   1304,   3842}, {  698,   1702,   4801},
310     {   63,   -584,   1229}, { -215,   -732,   1704}, {  172,   -335,   1909},
311     {   -2,    216,   1797}, {  353,    127,   2205}, {-1208,    188,     11},
312     { -513,    -75,   -683}, { -973,    222,   -646}, { -616,   -843,   -388},
313     { -950,  -1113,   -359}, {-1431,   -623,   -705}, {-1398,  -1063,   -178},
314     {  -45,   -461,     35}, {   -9,   -657,   -216}, {  127,  -1078,     95},
315     { -950,  -1156,    584}, {-1480,  -1494,    449}, { -120,   -705,    516},
316     { -368,   -961,    727}, { -378,   -526,    973}, { -793,   -614,    676},
317     { -801,   -755,   1287}, {-1476,   -340,   1636}, { -505,  -1254,   1543},
318     {-1243,  -1622,   1532}, { -776,  -1477,   -655}, {-1151,  -1296,   -823},
319     {-1153,  -1672,  -1124}, {-1291,  -2003,  -1702}, { -622,  -1283,     57},
320     { -471,  -1611,    509}, {-1060,  -1570,   -139}, { -873,  -2156,   -536},
321     {-1716,  -2021,   -364}, {-2150,  -3218,  -1291}, {-1248,  -1945,  -2904},
322     {-1215,  -2633,  -2855}, {  167,   -244,     84}, {  349,   -412,   -217},
323     {  -40,   -352,    632}, {  227,   -529,    405}, {   68,   -383,   -443},
324     {  167,   -558,   -706}, { -275,   -854,    -14}, { -351,  -1089,   -449},
325     {  341,    -72,   -289}, {  603,   -106,   -474}, {  322,   -219,   -649},
326     {  179,   -317,   -998}, {  450,   -291,   -996}, {  555,    195,   -525},
327     {  784,    272,   -831}, { -148,   -384,   -849}, {   82,   -536,  -1357},
328     {  238,   -172,  -1354}, {  422,   -268,  -1841}, {  297,   -737,  -2079},
329     { -111,   -801,   -598}, {    1,   -668,   -984}, { -131,   -818,  -1299},
330     { -329,   -521,  -1310}, { -151,   -778,  -1834}, {  -93,   -352,  -1746},
331     { -568,   -640,  -1821}, { -509,   -941,  -2183}, {  464,   -815,  -1250},
332     {   79,  -1133,  -1597}, { -184,  -1353,  -2123}, { -196,   -410,  -2427},
333     { -192,   -833,  -2810}, { -259,  -1382,  -3045}, { -217,      4,  -1166},
334     { -800,   -325,  -1219}, { -363,   -830,   -898}, { -661,  -1134,   -960},
335     { -386,   -980,  -1501}, { -627,  -1159,  -1722}, { -903,   -829,   -855},
336     { -685,   -829,  -1313}, {-1065,   -959,  -1405}, {  441,     25,   -847},
337     {  655,    -27,  -1181}, { 1159,   -110,   -705}, {  856,    253,  -1671},
338     {  415,    404,     -1}, {  322,    903,   -398}, {  670,    499,   -292},
339     {  803,    591,   -610}, { 1144,    591,   -814}, {  717,    183,    393},
340     {  857,    381,    106}, {  609,     62,    -27}, {  792,    198,   -325},
341     {  735,    805,     88}, { 1142,    812,     78}, { 1028,    366,   -292},
342     { 1309,    743,   -237}, { 1615,    589,    -79}, { 1010,    639,   -243},
343     {  999,    964,   -311}, { 1500,   1137,   -615}, {  988,    357,    646},
344     { 1227,    667,    683}, { 1164,   1565,    894}, { 1392,   2015,    477},
345     { 1138,    533,    250}, { 1437,    896,    391}, { 1765,   1118,     99},
346     { 1112,   1090,    802}, { 1596,    846,   1134}, {  937,   1161,    279},
347     { 1719,   1254,    683}, { 1338,   1086,     35}, { 1419,   1324,    428},
348     { 1428,   1524,     40}, { 2108,   1594,     89}, { 1015,    544,   1222},
349     { 1121,    925,   1263}, { 1030,   1318,   1485}, { 1295,    789,   1817},
350     { 1323,   1272,   1909}, { 1724,   1237,   1803}, { 1797,   1689,    858},
351     { 2149,   1367,   1301}, { 2302,   1867,    761}, { 2863,   2351,   1053},
352     {   52,    163,    -76}, {  230,    309,   -492}, {  -71,    619,     39},
353     { -218,    856,    499}, { -654,    736,   -207}, { -535,   1259,    155},
354     { -480,   1476,    643}, {  262,   1081,    102}, {  309,   1592,   -182},
355     {  627,   1629,    534}, {  337,    643,    456}, {  758,    670,    713},
356     {  202,   1126,    658}, {  612,   1131,    666}, {  686,   1223,   1136},
357     { -131,    377,    525}, {   42,    708,    907}, {   87,   1488,   1035},
358     {  432,   2117,    904}, {  137,    981,   1332}, { -447,   1014,   1136},
359     { -839,   1793,   1246}, { -559,    297,    198}, { -850,    685,    446},
360     {-1273,    632,    826}, { -401,   -544,    173}, { -753,   -793,    144},
361     { -436,     -9,    772}, { -115,   -243,   1310}, { -670,   -269,    374},
362     {-1027,    -13,    639}, { -887,    -81,   1137}, {-1277,   -455,    158},
363     {-1411,   -720,    736}, {  172,     88,    403}, {  386,    255,    756},
364     { -500,    522,    910}, { -958,    659,   1388}, { -395,    301,   1344},
365     { -356,    768,   1813}, { -613,    841,   2419}, {  445,   -122,    252},
366     {  629,    -87,    723}, {  283,   -253,    870}, {  456,   -116,   1381},
367     {  757,    180,   1059}, {  532,    408,   1509}, {  947,    288,   1806},
368     { 1325,    994,   2524}, {  892,   1219,   3023}, { 1397,   1596,   3406},
369     { 1143,   1552,   2546}, { 1850,   1433,   2710}, {  -10,    134,   1002},
370     {  154,    499,   1323}, {  508,    792,   1117}, {  509,   1340,   1616},
371     {  762,    862,   1608}, {  787,    740,   2320}, {  794,   1727,   1283},
372     {  465,   2108,   1660}, { -120,   1451,   1613}, { -386,   2016,   2169},
373     {  891,   1225,   2050}, {  456,   1480,   2185}, { 1493,   1283,   1209},
374     { 1397,   1636,   1518}, { 1776,   1738,   1552}, { 1572,   1698,   2141},
375     { 1389,   2126,   1271}, { 1959,   2413,   1119}, { 1365,   2892,   1505},
376     { 2206,   1971,   1623}, { 2076,   1950,   2280}, { 1717,   2291,   1867},
377     { 2366,   2515,   1953}, { 2865,   2838,   2522}, { 2535,   3465,   2011},
378     { 3381,   4127,   2638}, {  836,   2667,   2289}, { 1761,   2773,   2337},
379     { 1415,   3325,   2911}, { 2354,   3138,   3126}, { 2659,   4192,   4010},
380     { 1048,   1786,   1818}, { 1242,   2111,   2240}, { 1512,   2079,   2780},
381     { 1573,   2491,   3138}, { 2230,   2377,   2782}, {  416,   1773,   2704},
382     {  725,   2336,   3297}, { 1252,   2373,   3978}, { 2094,   2268,   3568},
383     { 2011,   2712,   4528}, { 1341,   3507,   3876}, { 1216,   3919,   4922},
384     { 1693,   4793,   6012}
385 };
386
387 static const int16_t lsp_band1[LSP_CB_SIZE][3] = {
388     {    0,      0,      0}, {-2114,  -1302,     76}, {-2652,  -1278,  -1368},
389     {-2847,   -828,   -349}, {-3812,  -2190,   -349}, {-3946,   -364,   -449},
390     {-2725,  -4492,  -3607}, {-3495,  -4764,  -1744}, {  -51,   -756,     84},
391     { -153,  -1191,    504}, {  108,  -1418,   1167}, { -835,   -896,    390},
392     { -569,  -1702,     87}, {-1151,  -1818,    933}, {-1826,  -2547,    411},
393     {-1842,  -1818,   1451}, {-2438,  -1611,    781}, {-2747,  -2477,   1311},
394     { -940,   1252,    477}, {-1629,   1688,    602}, {-1202,    617,    280},
395     {-1737,    393,    580}, {-1528,   1077,   1199}, {-2165,   -161,   1408},
396     {-2504,  -1087,   2371}, {-3458,   -175,   1395}, {-1397,    -98,   -843},
397     {-2252,   -177,  -1149}, {-1489,   -726,  -1283}, {-1558,   -265,  -1744},
398     {-1867,   -821,  -1897}, {-2062,  -1516,  -2340}, {-2595,  -1142,  -2861},
399     {  170,     46,   -819}, { -193,   -204,  -1151}, {  326,   -196,  -1532},
400     {  780,    329,   -816}, {  201,    369,  -1243}, {  650,   -209,  -1060},
401     { 1144,    -15,  -1216}, { 1203,   -259,  -1867}, { -890,   -564,  -1430},
402     { -638,   -852,  -1921}, {  177,   -739,  -1358}, { -261,   -526,  -1666},
403     {  206,   -407,  -2255}, {  338,   -526,   -822}, {  421,  -1095,  -1009},
404     {  765,   -607,  -1408}, {  825,  -1295,  -2004}, {  357,   -905,  -1815},
405     {  -58,  -1248,  -1588}, { -596,  -1436,  -2046}, {  -73,  -1159,  -2116},
406     { -115,  -1382,  -2581}, { -160,  -1723,  -1952}, {   -6,  -2196,  -2954},
407     { -649,  -1705,  -2603}, { -617,  -1453,  -3282}, { -949,  -2019,  -3102},
408     { -812,   1544,   1937}, {-1854,    574,   2000}, {-1463,   1140,   2649},
409     {-2683,   1748,   1452}, {-2486,   2241,   2523}, {  783,   1910,   1435},
410     {  581,   2682,   1376}, {  236,   2197,   1885}, { -453,   2943,   2057},
411     { -682,   2178,   2565}, {-1342,   3201,   3328}, { -288,   -184,    262},
412     {  121,   -149,   -183}, {  758,   -412,    206}, { 1038,   -204,    853},
413     { 1577,   -457,    700}, {  937,   -640,   -567}, { 1508,   -528,  -1024},
414     { -225,   -527,   -427}, { -564,  -1095,   -332}, { -742,   -353,   -186},
415     {-1288,   -459,     84}, {-1853,   -484,   -274}, {-1554,   -731,    825},
416     {-2425,   -234,    382}, {-1722,    293,   -271}, {-2515,    425,   -564},
417     {-2599,    818,    464}, { -358,    118,   -375}, { -613,    198,   -874},
418     { -690,    683,   -324}, {-1352,   1155,   -168}, {-1093,    129,   -324},
419     {-1184,    611,   -858}, {  433,    386,   -372}, { -120,    486,   -634},
420     {  234,    851,   -631}, {  602,    128,     46}, { 1099,    410,    159},
421     {  715,   -145,   -424}, { 1198,    -85,   -593}, { 1390,    367,   -358},
422     { 1683,    362,   -964}, { 1711,    622,     45}, { 2033,    833,   -383},
423     { 2890,    549,   -506}, {    7,    401,     52}, {   72,    811,    415},
424     {  566,    668,     41}, {  467,   1218,    130}, {   68,    957,   -187},
425     {  -25,   1649,   -103}, { -661,    260,    214}, { -925,    -94,    612},
426     { -321,   -422,    965}, { -788,   -672,   1783}, {  400,   -673,    779},
427     {  741,   -595,   1635}, { -161,    307,    657}, { -382,    836,    871},
428     { -814,    400,   1223}, {  364,    606,   1247}, {   57,     75,   1571},
429     {  151,    471,   2287}, {  -81,   1021,   1502}, {  227,   1470,   1097},
430     {  658,   1275,   1653}, {  664,   1478,   2377}, {  263,   -127,    444},
431     {  264,     89,    969}, {  794,    171,    576}, {  821,    186,   1226},
432     {  404,    462,    517}, {  339,    918,    794}, { 1280,   1423,    196},
433     { 1453,   2019,    365}, { 1615,   1481,    672}, { 2394,   1708,    508},
434     {  806,   1238,    573}, {  713,   1158,   1078}, { 1285,   1436,   1232},
435     { 1790,   1188,   1141}, {  765,    643,    864}, { 1032,    797,   1279},
436     {  900,    563,   1827}, { 1514,    673,   2312}, { 1544,   1129,   3240},
437     { 1469,   1050,   1594}, { 1945,   1318,   1988}, { 2397,   2026,   2060},
438     { 3538,   2057,   2620}, { 1249,   -118,     74}, { 1727,    194,    421},
439     { 2078,    -50,   -463}, {  970,    688,   -432}, { 1149,    952,   -110},
440     { 1254,   1275,   -651}, { 1386,    929,    401}, { 1960,   1167,    232},
441     {  407,   -752,   -243}, {  859,  -1118,    172}, { -227,   -860,   -992},
442     { -796,  -1175,  -1380}, {    8,  -1282,   -388}, {  353,  -1781,  -1037},
443     { -732,   -397,   -807}, { -853,    -28,  -1342}, {-1229,  -1207,  -1959},
444     {-1015,  -1125,  -2543}, {-1452,  -1791,  -2725}, {-1891,  -2416,  -3269},
445     { -918,  -1629,   -783}, { -580,  -2155,   -698}, {-1097,  -2364,    -96},
446     {-1387,  -1513,      7}, {-1588,  -2076,   -664}, {-1473,  -2740,   -784},
447     {-2378,  -3149,    -56}, {-2856,  -2092,   -169}, {-3391,  -3708,    316},
448     {-1176,   -890,   -614}, {-1944,  -1061,   -800}, { -299,  -1517,  -1000},
449     { -640,  -1850,  -1526}, {-1454,  -1536,  -1233}, {-1890,  -1955,  -1756},
450     {-1086,  -1921,  -2122}, { -750,  -2325,  -2260}, {-1325,  -2413,  -2673},
451     {-1114,  -2542,  -3459}, {-1341,  -2901,  -3963}, {-1160,  -2226,  -1393},
452     {-1001,  -2772,  -1573}, {-1594,  -2641,  -1978}, {-1534,  -3046,  -2624},
453     {-2224,  -2196,   -675}, {-2807,  -3054,  -1102}, {-2008,  -2840,  -1186},
454     {-1980,  -3332,  -1695}, {-1715,  -3562,   -505}, {-2527,  -4000,  -1887},
455     {-2333,  -2734,  -2296}, {-3440,  -2401,  -3211}, {-2008,  -3528,  -3337},
456     {-2247,  -3291,  -4510}, { -475,    949,    155}, { -149,   1365,    545},
457     { -757,   1644,   1083}, { -217,   2053,   1353}, {-1433,   2301,   1462},
458     {  495,   1661,    529}, {   10,   2037,    740}, { 2082,   1898,    978},
459     { 2831,   2294,    911}, {  842,    793,    420}, { 1223,   1023,    863},
460     { 1237,    451,    780}, { 1744,    708,    822}, { 1533,    284,   1384},
461     { 2135,    609,   1538}, { 2305,    626,    540}, { 2368,   1187,    955},
462     { 2586,   1255,     -7}, { 3116,   1131,    726}, { 3431,   1730,    428},
463     { 2734,   1648,   1307}, { 2988,   1231,   2010}, { 3523,   2024,   1488},
464     { 1034,   1657,    871}, { 1206,   2163,   1036}, { 1807,   2372,   1233},
465     { 1808,   1769,   1493}, { 1573,   2332,   1779}, { 1216,   1609,   1866},
466     { 1480,   1898,   2513}, {  465,   2708,   2776}, {  771,   3638,   3338},
467     { 1869,   2599,   2623}, { 2825,   2745,   2468}, { 2638,   2439,   1585},
468     { 2094,   2970,   1308}, { 2022,   3057,   1999}, { 3428,   2912,   1816},
469     { 4536,   2974,   2129}, { 1046,   2563,   2086}, { 1363,   3562,   2318},
470     { 2511,   1891,   2984}, { 1866,   2306,   3986}, { 3272,   2924,   3682},
471     { 3146,   3564,   2272}, { 3592,   3968,   2822}, { 2431,   3369,   3069},
472     { 1931,   4709,   3090}, { 2629,   4220,   3986}, { 4639,   4056,   3664},
473     { 4035,   5334,   4912}
474 };
475
476 static const int16_t lsp_band2[LSP_CB_SIZE][4] = {
477     {    0,      0,      0,      0}, {  601,    512,   -542,    334},
478     {  428,   1087,   -484,   -132}, {  652,    622,   -391,   -572},
479     {  378,    799,    141,   -860}, { 1040,    409,    112,   -554},
480     { 1123,    670,    -75,   -847}, { 1421,    494,   -315,  -1095},
481     {  787,   1001,    114,   -460}, {  988,   1672,    216,   -681},
482     { 1007,   1241,   -132,  -1247}, { 1073,    399,    186,     -5},
483     { 1262,    193,   -694,   -129}, {  325,    196,     51,   -641},
484     {  861,    -59,    350,   -458}, { 1261,    567,    586,   -346},
485     { 1532,    885,    210,   -517}, { 2027,    937,    113,   -792},
486     { 1383,   1064,    334,     38}, { 1964,   1468,    459,    133},
487     { 2062,   1186,    -98,   -121}, { 2577,   1445,    506,   -373},
488     { 2310,   1682,     -2,   -960}, { 2876,   1939,    765,    138},
489     { 3581,   2360,    649,   -414}, {  219,    176,   -398,   -309},
490     {  434,    -78,   -435,   -880}, { -344,    301,    265,   -552},
491     { -915,    470,    657,   -380}, {  419,   -432,   -163,   -453},
492     {  351,   -953,      8,   -562}, {  789,    -43,     20,   -958},
493     {  302,   -594,   -352,  -1159}, { 1040,    108,   -668,   -924},
494     { 1333,    210,  -1217,  -1663}, {  483,    589,   -350,  -1140},
495     { 1003,    824,   -802,  -1184}, {  745,     58,   -589,  -1443},
496     {  346,    247,   -915,  -1683}, {  270,    796,   -720,  -2043},
497     { 1208,    722,   -222,   -193}, { 1486,   1180,   -412,   -672},
498     { 1722,    179,    -69,   -521}, { 2047,    860,   -666,  -1410},
499     { -146,    222,   -281,   -805}, { -189,     90,   -114,  -1307},
500     { -152,   1086,   -241,   -764}, { -439,    733,   -601,  -1302},
501     { -833,   -167,   -351,   -601}, { -856,   -422,   -411,  -1059},
502     { -747,   -355,   -582,  -1644}, { -837,    210,   -916,  -1144},
503     {-1800,     32,   -878,  -1687}, {  -48,    -23,  -1146,     52},
504     { -350,   -409,  -1656,   -364}, {  265,   -728,   -858,   -577},
505     {  458,   -247,  -1141,   -997}, {  691,   -407,  -1988,  -1161},
506     {  -66,   -104,   -705,  -1249}, { -431,    -93,  -1191,  -1844},
507     {  203,   -732,  -1000,  -1693}, {   10,   -832,  -1846,  -1819},
508     {  493,   -128,  -1436,  -1768}, {  488,   -311,  -1730,  -2540},
509     { -653,   -532,  -1150,  -1172}, {-1086,   -289,  -1706,  -1533},
510     { -699,  -1205,  -1216,  -1766}, {-1032,  -1481,  -2074,  -1523},
511     { -721,  -1220,  -2277,  -2600}, {   12,   -539,  -1484,  -1131},
512     {  -40,   -911,  -2106,   -441}, { -471,   -484,  -2267,  -1549},
513     { -141,   -988,  -3006,  -1721}, {-1545,  -2102,   -583,    342},
514     {-1383,  -2772,   -386,    -13}, {-2118,  -2589,  -1205,     72},
515     {-2147,  -3231,   -965,    390}, {-2949,  -3300,   -621,    637},
516     {-3907,  -4138,   -865,    803}, {-1287,   -845,   -375,   -548},
517     {-1416,  -1169,   -487,  -1277}, {-1400,  -1690,  -1027,   -418},
518     {-2018,  -1909,  -1188,  -1260}, {-1418,  -2222,  -2029,   -128},
519     {-2067,  -2998,  -2693,   -310}, { -950,  -1028,  -1538,    185},
520     {-1616,   -915,  -2205,   -549}, {   19,   -821,  -1145,    352},
521     {  184,  -1175,  -1356,   -627}, { -547,  -1088,  -1661,   -911},
522     { -216,  -1502,  -2197,   -948}, { -795,  -1306,  -2374,   -451},
523     { -924,  -1889,  -2796,   -680}, { -600,  -1614,  -3609,   -885},
524     {-2392,  -2528,    319,    303}, {-2908,  -2095,   -310,    573},
525     {-3460,  -2141,     49,   -113}, {-2231,   -448,    675,   -146},
526     {-2805,   -532,   1231,    479}, {-2684,   -486,   -200,    611},
527     {-3525,   -971,   -198,    704}, {-3707,    173,    349,    254},
528     {-4734,  -1447,    -34,    880}, {  777,   -512,    114,    -10},
529     { 1250,    -66,    442,     -5}, {  604,    613,    452,   -352},
530     { 1224,    777,    675,  -1014}, {-1372,    -79,  -1208,   -238},
531     {-2389,    -17,  -1157,   -818}, {-1504,   -673,  -1133,  -1060},
532     {-1984,   -799,  -2005,  -1973}, {-2037,   -798,  -1068,   -105},
533     {-3190,   -899,  -1817,   -194}, { -156,   -886,    394,   -318},
534     { -258,  -1283,    551,    202}, { -536,  -1729,    910,    331},
535     { -847,  -1109,    795,   -163}, {-1171,  -1128,    715,    519},
536     {-1080,  -1319,   1685,    668}, {-1000,  -1921,     96,    211},
537     {-1487,  -2148,    831,    174}, {-1139,   -374,    414,     -4},
538     {-1517,  -1383,    396,   -352}, {-1012,    439,    -59,   -967},
539     {-1812,    706,   -440,  -1030}, {-1971,   -329,    -34,   -827},
540     {-2472,  -1588,   -151,   -606}, {-2161,    374,   -281,     76},
541     {-3012,    231,    -15,   -690}, { 1104,    566,    721,    209},
542     { 1685,    564,    383,     98}, { 1898,    750,    792,    -97},
543     {  556,    -64,    561,    -93}, {  876,    162,    913,    -22},
544     {  961,    675,   1296,    140}, {  756,   -396,    851,    544},
545     {  360,   -303,   1341,    396}, {  878,    -22,   1464,    863},
546     { -309,   -273,    642,   -129}, { -686,    -82,    842,    454},
547     {   -5,    -47,   1069,    998}, {  -94,    967,   1277,    298},
548     { -489,    385,   1473,    746}, { -369,   -717,   1333,    242},
549     {  281,   -993,   1726,    924}, {  464,    601,   1575,   1376},
550     { -250,    206,   2339,   1175}, { -438,    377,   -597,   -285},
551     {-1020,    787,   -790,   -287}, { -458,   -410,    215,    295},
552     { -589,   -860,   -121,    797}, {-1175,    122,   -437,    466},
553     {-1480,   -121,    367,    924}, {  234,    323,    770,   -555},
554     {  145,     30,    996,     26}, {   66,    849,     93,   -145},
555     { -117,   1261,    474,   -399}, {-1495,   1051,    218,   -506},
556     {-1390,    694,    994,     88}, {  616,      7,     78,    304},
557     { 1060,     52,    -62,    835}, {  833,    454,    649,   1359},
558     { -770,    464,     47,     93}, { -574,   1199,    -39,    379},
559     {  114,    -98,    488,    485}, {  727,    244,    606,    696},
560     {  -76,    455,    671,    546}, { -565,    -13,    145,    819},
561     { -376,    569,    448,   1128}, {  218,    122,    265,   1167},
562     {  230,    738,    932,   1003}, {  138,    477,     36,    450},
563     {  404,    787,    -73,   1000}, {  497,   1259,    387,   1231},
564     {   17,    207,    195,    -79}, {  562,    358,     53,   -158},
565     {  493,    387,    478,    189}, {  678,    831,    640,    558},
566     { -197,    523,    613,     57}, {  429,    894,    769,    111},
567     {   67,   1174,    568,    511}, { 1242,    824,    251,    840},
568     { 1419,   1074,    864,    481}, {  924,   1474,    669,    724},
569     { 1539,   1879,    654,   1590}, {  445,    337,   1111,    541},
570     {  472,   1421,   1264,   1094}, {  794,    735,   1103,    668},
571     { 1055,    863,   1192,   1020}, {  778,   1105,    806,   1798},
572     { 1052,   1527,   1587,   2151}, {  881,   1552,   1265,    391},
573     {  726,    872,   1812,    601}, { 1469,    280,   1008,    616},
574     { 1403,    577,   1803,   1244}, { 1650,   1314,   1148,   1072},
575     { 1297,   1669,   1911,   1026}, { 2093,   1044,   2115,   1189},
576     { 1644,   1961,   2587,   1512}, {   25,   -315,     -9,   -106},
577     {  290,   -339,    428,   -444}, {  -68,   -783,    735,    772},
578     {  245,   -555,    468,     47}, {  334,   -895,    814,    146},
579     {  235,    368,   -964,   -959}, { -203,    315,  -1566,  -1217},
580     {  801,     17,   -276,   -354}, {  894,   -495,   -789,   -635},
581     {  716,    291,  -1189,   -357}, {  560,   -260,   -733,     -2},
582     {  679,   -508,  -1429,    211}, {  -51,    -62,   -428,    557},
583     {  322,   -638,   -211,    614}, { -878,  -1057,    -84,    -71},
584     { -388,  -1415,   -167,   -318}, { -754,  -1574,    214,   -539},
585     {-1419,  -2004,    -92,   -787}, {  -47,   -856,   -347,   -255},
586     {   23,  -1211,   -173,    320}, { -658,   -487,   -893,    353},
587     { -783,  -1587,   -584,    507}, {-1420,   -859,   -378,    441},
588     {-2095,  -1491,   -137,    439}, { -321,  -1450,  -1288,    -12},
589     { -359,  -2113,   -553,     -8}, { -831,  -1918,  -1561,     32},
590     {-1014,  -2487,  -1359,   -939}, { -475,   -311,   -169,   -236},
591     { -907,   -426,    276,   -611}, {  -96,   -400,     50,   -710},
592     { -426,  -1022,    -10,   -985}, { -197,   -258,   -744,   -575},
593     { -611,   -930,   -771,   -394}, { -267,   -776,   -612,   -939},
594     { -256,  -1346,   -802,  -1122}, { -796,  -1570,   -825,   -754},
595     {  712,    876,    141,    227}, {  981,   1509,     85,    124},
596     { 1462,   1228,    979,    -39}, { 1734,    999,   1481,    440},
597     { 2293,   1116,    769,    440}, { 2504,   1480,   1241,    356},
598     { 2474,   1909,   1558,    810}, {  917,   1134,    607,   -134},
599     {  509,   1809,    781,   -123}, { 1712,   1506,    559,   -423},
600     { 2037,   2317,    726,   -155}, { 3031,   2676,   1203,    331},
601     { 3664,   3274,   1768,    531}, { 1610,   1839,    867,    183},
602     { 1774,   1972,   1538,     97}, { 1822,   2158,   1282,    659},
603     { 2222,   2758,   1818,    900}, { 3251,   2124,   1723,    996},
604     { 3633,   2336,   2408,   1453}, { 2923,   3517,   2567,   1318},
605 };
606
607 /*
608  * Used for the coding/decoding of the pulses positions
609  * for the MP-MLQ codebook
610  */
611 static const int32_t combinatorial_table[PULSE_MAX][SUBFRAME_LEN/GRID_SIZE] = {
612     {118755, 98280, 80730, 65780L, 53130,
613       42504, 33649, 26334,  20349, 15504,
614       11628,  8568,  6188,   4368,  3003,
615        2002,  1287,   792,    462,   252,
616         126,    56,    21,      6,     1,
617           0,     0,     0,      0,     0},
618
619     { 23751, 20475, 17550,  14950, 12650,
620       10626,  8855,  7315,   5985,  4845,
621        3876,  3060,  2380,   1820,  1365,
622        1001,   715,   495,    330,   210,
623         126,    70,    35,     15,     5,
624           1,     0,     0,      0,     0},
625
626     {  3654,  3276,  2925,   2600,  2300,
627        2024,  1771,  1540,   1330,  1140,
628         969,   816,   680,    560,   455,
629         364,   286,   220,    165,   120,
630          84,    56,    35,     20,    10,
631           4,     1,     0,      0,     0},
632
633     {   406,   378,   351,    325,   300,
634         276,   253,   231,    210,   190,
635         171,   153,   136,    120,   105,
636          91,    78,    66,     55,    45,
637          36,    28,    21,     15,    10,
638           6,     3,     1,      0,     0},
639
640     {    29,    28,    27,     26,    25,
641          24,    23,    22,     21,    20,
642          19,    18,    17,     16,    15,
643          14,    13,    12,     11,    10,
644           9,     8,     7,      6,     5,
645           4,     3,     2,      1,     0},
646
647     {     1,     1,     1,      1,     1,
648           1,     1,     1,      1,     1,
649           1,     1,     1,      1,     1,
650           1,     1,     1,      1,     1,
651           1,     1,     1,      1,     1,
652           1,     1,     1,      1,     1},
653 };
654
655 static const int16_t pitch_contrib[340] = {
656     60,     0,  0,  2489, 60,     0,  0,  5217,
657      1,  6171,  0,  3953,  0, 10364,  1,  9357,
658     -1,  8843,  1,  9396,  0,  5794, -1, 10816,
659      2, 11606, -2, 12072,  0,  8616,  1, 12170,
660      0, 14440,  0,  7787, -1, 13721,  0, 18205,
661      0, 14471,  0, 15807,  1, 15275,  0, 13480,
662     -1, 18375, -1,     0,  1, 11194, -1, 13010,
663      1, 18836, -2, 20354,  1, 16233, -1,     0,
664     60,     0,  0, 12130,  0, 13385,  1, 17834,
665      1, 20875,  0, 21996,  1,     0,  1, 18277,
666     -1, 21321,  1, 13738, -1, 19094, -1, 20387,
667     -1,     0,  0, 21008, 60,     0, -2, 22807,
668      0, 15900,  1,     0,  0, 17989, -1, 22259,
669      1, 24395,  1, 23138,  0, 23948,  1, 22997,
670      2, 22604, -1, 25942,  0, 26246,  1, 25321,
671      0, 26423,  0, 24061,  0, 27247, 60,     0,
672     -1, 25572,  1, 23918,  1, 25930,  2, 26408,
673     -1, 19049,  1, 27357, -1, 24538, 60,     0,
674     -1, 25093,  0, 28549,  1,     0,  0, 22793,
675     -1, 25659,  0, 29377,  0, 30276,  0, 26198,
676      1, 22521, -1, 28919,  0, 27384,  1, 30162,
677     -1,     0,  0, 24237, -1, 30062,  0, 21763,
678      1, 30917, 60,     0,  0, 31284,  0, 29433,
679      1, 26821,  1, 28655,  0, 31327,  2, 30799,
680      1, 31389,  0, 32322,  1, 31760, -2, 31830,
681      0, 26936, -1, 31180,  1, 30875,  0, 27873,
682     -1, 30429,  1, 31050,  0,     0,  0, 31912,
683      1, 31611,  0, 31565,  0, 25557,  0, 31357,
684     60,     0,  1, 29536,  1, 28985, -1, 26984,
685     -1, 31587,  2, 30836, -2, 31133,  0, 30243,
686     -1, 30742, -1, 32090, 60,     0,  2, 30902,
687     60,     0,  0, 30027,  0, 29042, 60,     0,
688      0, 31756,  0, 24553,  0, 25636, -2, 30501,
689     60,     0, -1, 29617,  0, 30649, 60,     0,
690      0, 29274,  2, 30415,  0, 27480,  0, 31213,
691     -1, 28147,  0, 30600,  1, 31652,  2, 29068,
692     60,     0,  1, 28571,  1, 28730,  1, 31422,
693      0, 28257,  0, 24797, 60,     0,  0,     0,
694     60,     0,  0, 22105,  0, 27852, 60,     0,
695     60,     0, -1, 24214,  0, 24642,  0, 23305,
696     60,     0, 60,     0,  1, 22883,  0, 21601,
697     60,     0,  2, 25650, 60,     0, -2, 31253,
698     -2, 25144,  0, 17998
699 };
700
701 /* Number of non-zero pulses in the MP-MLQ excitation */
702 static const int8_t pulses[4] = {6, 5, 6, 5};
703
704 /* Size of the MP-MLQ fixed excitation codebooks */
705 static const int32_t max_pos[4] = {593775, 142506, 593775, 142506};
706
707 static const int16_t fixed_cb_gain[GAIN_LEVELS] = {
708       1,    2,    3,    4,    6,    9,   13,   18,
709      26,   38,   55,   80,  115,  166,  240,  348,
710     502,  726, 1050, 1517, 2193, 3170, 4582, 6623,
711 };
712
713 static const int16_t adaptive_cb_gain85[85 * 20] = {
714         0,      0,      0,      0,      0,      0,      0,      0,
715         0,      0,      0,      0,      0,      0,      0,      0,
716         0,      0,      0,      0,    800,   1496,    167,   -256,
717      -338,    -39,   -136,     -1,     -4,     -6,    -73,     -8,
718       -15,     12,     23,      2,     16,     30,      3,     -5,
719      -462,   -686,    493,   2575,    311,    -13,    -28,    -14,
720      -404,     -5,    -19,     13,     20,     72,    107,    -77,
721         8,     13,     -9,    -48,   1483,    144,    784,    928,
722      1243,   -134,     -1,    -37,    -52,    -94,    -13,    -71,
723        -6,    -84,     -8,    -44,   -112,    -10,    -59,    -70,
724       -77,    275,   3522,   1056,  -1254,      0,     -4,   -757,
725       -68,    -95,      1,     16,    -59,      4,    -17,   -227,
726        -5,     21,    269,     80,   -125,    -40,   -264,    381,
727      5027,      0,      0,     -4,     -8,  -1542,      0,     -2,
728         0,      2,      0,      6,     38,     12,     81,   -117,
729       138,    332,   2215,   2574,   1339,     -1,     -6,   -299,
730      -404,   -109,     -2,    -18,    -44,    -21,    -52,   -348,
731       -11,    -27,   -181,   -210,   3685,   2883,   -887,    866,
732     -1639,   -828,   -507,    -48,    -45,   -164,   -648,    199,
733       156,   -194,   -152,     46,    368,    288,    -88,     86,
734      1396,   2146,   2235,    345,    942,   -118,   -281,   -305,
735        -7,    -54,   -182,   -190,   -292,    -29,    -45,    -47,
736       -80,   -123,   -128,    -19,     13,   4475,   3549,   -804,
737      -655,      0,  -1222,   -768,    -39,    -26,     -3,     -2,
738      -969,      0,    219,    174,      0,    179,    141,    -32,
739      -724,    254,    242,   6049,   2462,    -32,     -3,     -3,
740     -2233,   -370,     11,     10,     -3,    267,    -94,    -89,
741       108,    -38,    -36,   -909,    626,  -1713,   6121,   4561,
742     -1061,    -23,   -179,  -2287,  -1270,    -68,     65,   -233,
743       640,   -174,    477,  -1704,     40,   -111,    396,    295,
744      -350,   1391,   7985,    511,   -405,     -7,   -118,  -3892,
745       -15,    -10,     29,    170,   -678,     10,    -43,   -249,
746        -8,     34,    197,     12,   3144,   -529,    608,   2530,
747      3878,   -603,    -17,    -22,   -390,   -918,    101,   -116,
748        19,   -485,     81,    -93,   -744,    125,   -144,   -599,
749      2589,   -689,   3045,   5603,   -404,   -409,    -29,   -566,
750     -1916,    -10,    108,   -481,    128,   -885,    235,  -1041,
751        63,    -17,     75,    138,   3107,    513,   1374,  -3594,
752     -4922,   -589,    -16,   -115,   -788,  -1478,    -97,   -260,
753       -43,    681,    112,    301,    933,    154,    413,  -1079,
754      2468,   6010,   1107,   -390,   1961,   -372,  -2204,    -74,
755        -9,   -234,   -905,   -166,   -406,     58,    143,     26,
756      -295,   -719,   -132,     46,   4773,   2766,   2368,   4862,
757     -4044,  -1390,   -467,   -342,  -1443,   -998,   -806,   -690,
758      -399,  -1416,   -821,   -702,   1178,    682,    584,   1200,
759      1665,  -1879,   1443,   1701,   8562,   -169,   -215,   -127,
760      -176,  -4475,    190,   -146,    165,   -172,    195,   -149,
761      -870,    982,   -754,   -889,   2716,   9011,  -1007,    755,
762     -1785,   -450,  -4956,    -61,    -34,   -194,  -1493,    167,
763       554,   -125,   -415,     46,    296,    982,   -109,     82,
764     -2727,   7548,   1285,    938,   3420,   -453,  -3478,   -100,
765       -53,   -714,   1256,    213,   -592,    156,   -432,    -73,
766       569,  -1576,   -268,   -196,   3677,    882,   4050,   1202,
767      2323,   -825,    -47,  -1001,    -88,   -329,   -198,   -909,
768      -218,   -269,    -64,   -297,   -521,   -125,   -574,   -170,
769      2046,   -753,    122,  10102,    603,   -255,    -34,      0,
770     -6229,    -22,     94,    -15,      5,  -1261,    464,    -75,
771       -75,     27,     -4,   -372,    449,  -1815,  10690,   3870,
772      -527,    -12,   -201,  -6976,   -914,    -16,     49,   -293,
773      1184,   -106,    428,  -2525,     14,    -58,    344,    124,
774      -941,   2352,   5049,   3650,   2637,    -54,   -337,  -1556,
775      -813,   -424,    135,    290,   -725,    209,   -524,  -1125,
776       151,   -378,   -812,   -587,  -1879,    796,   3117,   9569,
777      -404,   -215,    -38,   -593,  -5589,     -9,     91,    357,
778      -151,   1097,   -464,  -1821,    -46,     19,     76,    236,
779     -1715,   2043,  -2096,   9946,   4001,   -179,   -254,   -268,
780     -6038,   -977,    213,   -219,    261,   1041,  -1240,   1272,
781       418,   -498,    511,  -2429,  -5772,   -618,  -3921,    284,
782     -3155,  -2033,    -23,   -938,     -4,   -607,   -218,  -1381,
783      -148,    100,     10,     68,  -1111,   -119,   -755,     54,
784       382,   4748,   8003,  -2064,   2198,     -8,  -1376,  -3909,
785      -260,   -294,   -110,   -186,  -2319,     48,    598,   1008,
786       -51,   -637,  -1073,    277,   -867,   3015,  11926,  -1675,
787       947,    -45,   -555,  -8681,   -171,    -54,    159,    631,
788     -2195,    -88,    308,   1219,     50,   -174,   -690,     96,
789     -4933,   -432,   6757,   3771,   1352,  -1485,    -11,  -2786,
790      -867,   -111,   -130,   2034,    178,   1135,     99,  -1555,
791       407,     35,   -557,   -311,    152,   9726,   4231,  -1928,
792      1490,     -1,  -5774,  -1092,   -226,   -135,    -90,    -39,
793     -2511,     17,   1144,    498,    -13,   -884,   -384,    175,
794      2512,    193,   9033,   5361,  -3148,   -385,     -2,  -4980,
795     -1754,   -605,    -29,  -1385,   -106,   -822,    -63,  -2956,
796       482,     37,   1735,   1030,   8464,   2844,     12,    549,
797      2132,  -4373,   -493,      0,    -18,   -277,  -1469,     -6,
798        -2,   -284,    -95,      0,  -1101,   -370,     -1,    -71,
799      2141,  -2602,   7166,   9046,  -1350,   -279,   -413,  -3134,
800     -4994,   -111,    340,   -936,   1138,  -1182,   1436,  -3957,
801       176,   -214,    590,    745,   -244,    278,  13307,   1227,
802      -161,     -3,     -4, -10808,    -91,     -1,      4,    198,
803      -226,     18,    -20,   -997,     -2,      2,    131,     12,
804     -1947,   8217,   6269,    917,  -2559,   -231,  -4121,  -2399,
805       -51,   -399,    976,    745,  -3144,    108,   -460,   -350,
806      -304,   1283,    979,    143,  -1810,   2061,  -2781,   6056,
807     10058,   -200,   -259,   -472,  -2238,  -6174,    227,   -307,
808       349,    669,   -761,   1028,   1111,  -1265,   1707,  -3717,
809      7827,   9161,  -3409,   2473,  -1510,  -3739,  -5122,   -709,
810      -373,   -139,  -4376,   1628,   1906,  -1181,  -1382,    514,
811       721,    844,   -314,    228,  -1430,   8313,   9541,  -2955,
812      1626,   -124,  -4218,  -5556,   -533,   -161,    725,    832,
813     -4841,   -257,   1499,   1721,    142,   -825,   -947,    293,
814      2819,  -4247,   5391,   8673,   2756,   -485,  -1101,  -1774,
815     -4591,   -463,    730,   -927,   1397,  -1492,   2248,  -2854,
816      -474,    714,   -907,  -1459,    141,  14552,    690,    257,
817      -112,     -1, -12926,    -29,     -4,      0,   -125,     -5,
818      -613,     -2,   -228,    -10,      0,     99,      4,      1,
819     11938,  -1859,   1806,   -962,   -884,  -8699,   -211,   -199,
820       -56,    -47,   1355,  -1316,    205,    701,   -109,    106,
821       644,   -100,     97,    -51,   3728,   1982,   2264,   4584,
822      3131,   -848,   -239,   -312,  -1282,   -598,   -451,   -515,
823      -273,  -1043,   -554,   -633,   -712,   -378,   -432,   -876,
824     -1181,    766,    720,  14303,   -216,    -85,    -35,    -31,
825    -12486,     -2,     55,     51,    -33,   1031,   -668,   -628,
826       -15,     10,      9,    189,  -4385,   4826,  10112,   1569,
827      3388,  -1173,  -1421,  -6242,   -150,   -700,   1291,   2706,
828     -2979,    420,   -462,   -969,    906,   -998,  -2091,   -324,
829      -448,   1932,  15591,  -1842,    657,    -12,   -227, -14837,
830      -207,    -26,     52,    427,  -1838,    -50,    217,   1753,
831        18,    -77,   -626,     74,  -4141,   1844,   3962,   5517,
832      6220,  -1046,   -207,   -958,  -1858,  -2361,    466,   1001,
833      -446,   1394,   -621,  -1334,   1572,   -700,  -1504,  -2094,
834       729,  -2299,  14755,   3657,   -952,    -32,   -322, -13288,
835      -816,    -55,    102,   -656,   2071,   -162,    513,  -3294,
836        42,   -133,    857,    212,  -1385,   5801,  13339,  -3137,
837      1344,   -117,  -2054, -10861,   -600,   -110,    490,   1127,
838     -4723,   -265,   1111,   2554,    113,   -476,  -1094,    257,
839      4710,   9661,   1073,  -2467,   3274,  -1354,  -5697,    -70,
840      -371,   -654,  -2777,   -308,   -633,    709,   1455,    161,
841      -941,  -1930,   -214,    493,   1843,  -3624,  12422,   6898,
842     -1559,   -207,   -802,  -9419,  -2904,   -148,    407,  -1397,
843      2748,   -775,   1526,  -5230,    175,   -344,   1182,    656,
844      1433,   2394,   2507,   1380,   8780,   -125,   -349,   -383,
845      -116,  -4705,   -209,   -219,   -366,   -120,   -201,   -211,
846      -768,  -1283,  -1343,   -740,  -1712,  12915,   5883,  -2197,
847       991,   -179, -10181,  -2112,   -294,    -60,   1350,    615,
848     -4638,   -229,   1732,    789,    103,   -781,   -356,    133,
849     15072,   2158,  -1245,    910,   -496, -13865,   -284,    -94,
850       -50,    -15,  -1986,   1145,    164,   -837,   -119,     69,
851       456,     65,    -37,     27,   4655,   7319,   4916,    586,
852     -3381,  -1322,  -3270,  -1475,    -20,   -697,  -2079,  -1396,
853     -2196,   -166,   -261,   -175,    960,   1510,   1014,    120,
854      1191,  -2140,   5120,  13498,  -1418,    -86,   -279,  -1600,
855    -11121,   -122,    155,   -372,    669,   -981,   1763,  -4218,
856       103,   -185,    443,   1168,  -1530,   -817,   8191,   9632,
857     -1452,   -143,    -40,  -4095,  -5663,   -128,    -76,    765,
858       408,    900,    480,  -4815,   -135,    -72,    726,    854,
859     -3236,    607,   1696,  -2106,  11485,   -639,    -22,   -175,
860      -270,  -8051,    119,    335,    -62,   -416,     78,    218,
861      2268,   -425,  -1189,   1476,   3203,  -1903,   -837,   9679,
862      7057,   -626,   -221,    -42,  -5718,  -3039,    372,    163,
863       -97,  -1892,   1124,    494,  -1380,    819,    360,  -4169,
864       213,   -655,  17015,    620,   -384,     -2,    -26, -17671,
865       -23,     -9,      8,   -221,    681,     -8,     24,   -644,
866         5,    -15,    399,     14,   5088,     35,  -3339,   3726,
867      8488,  -1580,      0,   -680,   -847,  -4397,    -10,   1037,
868         7,  -1157,     -8,    759,  -2636,    -18,   1730,  -1930,
869      -988,   1454,  -2688,  15039,   2682,    -59,   -129,   -441,
870    -13805,   -439,     87,   -162,    238,    907,  -1335,   2467,
871       161,   -238,    440,  -2462,  -4865,  -2842,    -53,   5495,
872      6523,  -1445,   -493,      0,  -1843,  -2597,   -844,    -16,
873        -9,   1632,    953,     18,   1937,   1131,     21,  -2188,
874      3076,  15069,  -2914,   1810,   -971,   -577, -13860,   -518,
875      -200,    -57,  -2829,    547,   2680,   -339,  -1665,    322,
876       182,    893,   -172,    107,   1311,   5355,  11054,   2299,
877     -3654,   -105,  -1750,  -7458,   -322,   -814,   -428,   -885,
878     -3613,   -184,   -751,  -1551,    292,   1194,   2465,    512,
879      4035,   5619,   4618,   1815,   1912,   -994,  -1927,  -1301,
880      -201,   -223,  -1384,  -1137,  -1583,   -447,   -622,   -511,
881      -471,   -656,   -539,   -211,  -2131,   2754,  -4501,  12879,
882      7432,   -277,   -463,  -1236, -10124,  -3371,    358,   -585,
883       756,   1675,  -2165,   3538,    967,  -1249,   2042,  -5842,
884      5618,   -515,   3219,  -4149,   4857,  -1926,    -16,   -632,
885     -1050,  -1440,    176,  -1104,    101,   1422,   -130,    815,
886     -1666,    152,   -954,   1230,   1838,  -1709,   1139,  16867,
887       716,   -206,   -178,    -79, -17366,    -31,    191,   -127,
888       118,  -1892,   1759,  -1173,    -80,     74,    -49,   -737,
889      1978,  -3845,  10050,  11854,  -2492,   -238,   -902,  -6164,
890     -8576,   -379,    464,  -1213,   2358,  -1431,   2782,  -7271,
891       301,   -585,   1529,   1803,  -2600,  11246,  11289,  -3647,
892      1463,   -412,  -7720,  -7778,   -812,   -130,   1784,   1791,
893     -7749,   -578,   2504,   2513,    232,  -1004,  -1008,    325,
894      3442,    907,   2725,   8970,   3638,   -723,    -50,   -453,
895     -4911,   -808,   -190,   -572,   -150,  -1884,   -496,  -1492,
896      -764,   -201,   -605,  -1992,   -126,  17498,   3481,  -2003,
897      1090,      0, -18689,   -739,   -244,    -72,    135,     26,
898     -3717,    -15,   2139,    425,      8,  -1165,   -231,    133,
899     -1814,   1048,  -2164,   4070,  16272,   -200,    -67,   -285,
900     -1011, -16160,    116,   -239,    138,    450,   -260,    537,
901      1801,  -1041,   2149,  -4042,   9354,  12580,  -1883,    962,
902      -617,  -5341,  -9660,   -216,    -56,    -23,  -7183,   1075,
903      1446,   -549,   -738,    110,    352,    474,    -71,     36,
904      1708,   4199,   7387,   6335,   1003,   -178,  -1076,  -3330,
905     -2449,    -61,   -437,   -770,  -1893,   -660,  -1623,  -2856,
906      -104,   -257,   -452,   -388,  -2624,   5623,  17310,  -2353,
907       592,   -420,  -1930, -18288,   -338,    -21,    900,   2772,
908     -5941,   -376,    807,   2486,     94,   -203,   -625,     85,
909      1211,   -850,   1193,  -1926,  15992,    -89,    -44,    -86,
910      -226, -15609,     62,    -88,     61,    142,   -100,    140,
911     -1182,    830,  -1165,   1880,   3983,  -2054,  11506,    -19,
912      3622,   -968,   -257,  -8080,      0,   -801,    499,  -2797,
913      1442,      4,     -2,     13,   -880,    454,  -2544,      4,
914      -786,  -1354,  16092,   7246,  -1665,    -37,   -111, -15805,
915     -3205,   -169,    -65,    772,   1330,    348,    599,  -7117,
916       -80,   -137,   1636,    736,  -4316,   -511,   6674,  11665,
917      4633,  -1137,    -15,  -2719,  -8305,  -1310,   -134,   1758,
918       208,   3073,    364,  -4752,   1220,    144,  -1887,  -3299,
919      7912,   4557,   1937,   1885,   7037,  -3821,  -1267,   -229,
920      -216,  -3022,  -2200,   -935,   -538,   -910,   -524,   -222,
921     -3398,  -1957,   -832,   -809,   3434,   2967,   5867,   8196,
922      8766,   -720,   -537,  -2101,  -4100,  -4690,   -622,  -1230,
923     -1062,  -1718,  -1484,  -2935,  -1837,  -1588,  -3139,  -4385,
924      5881,   9176,   8119,   3934,   3355,  -2111,  -5139,  -4023,
925      -944,   -687,  -3294,  -2914,  -4547,  -1412,  -2203,  -1949,
926     -1204,  -1879,  -1662,   -805
927 };
928
929 static const int16_t adaptive_cb_gain170[170 * 20] = {
930         0,      0,      0,      0,      0,      0,      0,      0,
931         0,      0,      0,      0,      0,      0,      0,      0,
932         0,      0,      0,      0,    776,    212,    715,    670,
933       809,    -36,     -2,    -31,    -27,    -39,    -10,    -33,
934        -9,    -31,     -8,    -29,    -38,    -10,    -35,    -33,
935      1296,   1316,   -168,   -320,   -815,   -102,   -105,     -1,
936        -6,    -40,   -104,     13,     13,     25,     25,     -3,
937        64,     65,     -8,    -15,   -589,    680,   2478,    308,
938      -596,    -21,    -28,   -375,     -5,    -21,     24,     89,
939      -102,     11,    -12,    -46,    -21,     24,     90,     11,
940      -735,   -487,     -5,   2948,    468,    -33,    -14,      0,
941      -530,    -13,    -21,      0,      0,    132,     87,      0,
942        21,     13,      0,    -84,   1042,   1730,   1068,    333,
943       626,    -66,   -182,    -69,     -6,    -23,   -110,    -67,
944      -112,    -21,    -35,    -21,    -39,    -66,    -40,    -12,
945       486,   -769,   4074,   2825,  -1107,    -14,    -36,  -1013,
946      -487,    -74,     22,   -120,    191,    -83,    132,   -702,
947        32,    -52,    275,    191,   1521,   -767,   -124,   4320,
948      1026,   -141,    -35,      0,  -1139,    -64,     71,     11,
949        -5,   -401,    202,     32,    -95,     48,      7,   -270,
950      2425,   1267,   3439,    -91,  -1166,   -359,    -98,   -722,
951         0,    -83,   -187,   -509,   -266,     13,      7,     19,
952       172,     90,    244,     -6,  -1251,    975,    173,   4039,
953      2005,    -95,    -58,     -1,   -996,   -245,     74,     13,
954       -10,    308,   -240,    -42,    153,   -119,    -21,   -494,
955      1820,    632,   1322,   2062,   1031,   -202,    -24,   -106,
956      -259,    -64,    -70,   -146,    -51,   -229,    -79,   -166,
957      -114,    -39,    -83,   -129,   -447,   4904,    244,   -315,
958     -2038,    -12,  -1467,     -3,     -6,   -253,    134,      6,
959       -73,     -8,     94,      4,    -55,    610,     30,    -39,
960      -208,  -1102,    463,   -448,   5653,     -2,    -74,    -13,
961       -12,  -1950,    -14,      5,     31,     -5,    -30,     12,
962        71,    380,   -159,    154,   4739,   2600,  -1864,    856,
963     -1554,  -1371,   -412,   -212,    -44,   -147,   -752,    539,
964       295,   -247,   -135,     97,    449,    246,   -176,     81,
965      1894,   3533,     35,    -26,   2145,   -219,   -762,      0,
966         0,   -280,   -408,     -4,     -7,      3,      5,      0,
967      -248,   -462,     -4,      3,  -2699,   1841,   4072,   2443,
968      1582,   -444,   -207,  -1012,   -364,   -152,    303,    670,
969      -457,    402,   -274,   -607,    260,   -177,   -393,   -236,
970      -844,   3358,   6106,  -1059,   -537,    -43,   -688,  -2275,
971       -68,    -17,    173,    314,  -1251,    -54,    217,    395,
972       -27,    110,    200,    -34,   1251,   1016,   3020,   2210,
973      1445,    -95,    -63,   -556,   -298,   -127,    -77,   -230,
974      -187,   -168,   -137,   -407,   -110,    -89,   -266,   -194,
975      2099,   2277,   4038,   3533,  -2870,   -269,   -316,   -995,
976      -762,   -503,   -291,   -517,   -561,   -452,   -491,   -871,
977       367,    399,    707,    619,    400,  -1114,   8516,   2422,
978     -1117,     -9,    -75,  -4426,   -358,    -76,     27,   -208,
979       579,    -59,    164,  -1259,     27,    -75,    580,    165,
980     -4398,  -2011,   3912,  -2407,   2258,  -1180,   -247,   -934,
981      -353,   -311,   -540,   1050,    480,   -646,   -295,    575,
982       606,    277,   -539,    331,   1767,  -1447,   4240,   6160,
983      -757,   -190,   -127,  -1097,  -2316,    -35,    156,   -457,
984       374,   -664,    544,  -1594,     81,    -66,    195,    284,
985      1594,  -1463,   1035,   6938,   1920,   -155,   -130,    -65,
986     -2938,   -225,    142,   -100,     92,   -675,    619,   -438,
987      -186,    171,   -121,   -813,   -562,   4716,   4085,   -591,
988      2421,    -19,  -1357,  -1018,    -21,   -357,    162,    140,
989     -1175,    -20,    170,    147,     83,   -696,   -603,     87,
990      1552,   8778,   -935,    354,  -1424,   -147,  -4703,    -53,
991        -7,   -123,   -831,     88,    501,    -33,   -189,     20,
992       134,    763,    -81,     30,   4831,  -4431,     41,  -1479,
993     -2976,  -1424,  -1198,      0,   -133,   -540,   1306,    -12,
994        11,    436,   -400,      3,    877,   -804,      7,   -268,
995      2090,   1192,   1006,   1645,   4853,   -266,    -86,    -61,
996      -165,  -1437,   -152,   -128,    -73,   -210,   -119,   -101,
997      -619,   -353,   -298,   -487,   2386,   5712,   1426,    -94,
998      1350,   -347,  -1991,   -124,      0,   -111,   -832,   -207,
999      -497,     13,     32,      8,   -196,   -470,   -117,      7,
1000     -1349,   1091,   1659,   8891,    313,   -111,    -72,   -168,
1001     -4825,     -5,     89,    136,   -110,    732,   -592,   -900,
1002        25,    -20,    -31,   -170,   9980,    916,   -381,   -808,
1003        88,  -6080,    -51,     -8,    -39,      0,   -558,    232,
1004        21,    492,     45,    -18,    -53,     -4,      2,      4,
1005      2338,  -1031,   -248,   3928,   6484,   -333,    -64,     -3,
1006      -942,  -2566,    147,     35,    -15,   -560,    247,     59,
1007      -925,    408,     98,  -1555,   6166,  -1240,   -337,   3672,
1008     -1277,  -2320,    -93,     -6,   -823,    -99,    466,    126,
1009       -25,  -1382,    278,     75,    480,    -96,    -26,    286,
1010      4377,   -132,  -2588,   1701,   4865,  -1169,     -1,   -409,
1011      -176,  -1444,     35,    691,    -20,   -454,     13,    268,
1012     -1299,     39,    768,   -505,   2594,   3295,   3944,   1481,
1013       682,   -410,   -662,   -949,   -133,    -28,   -521,   -624,
1014      -793,   -234,   -297,   -356,   -108,   -137,   -164,    -61,
1015      4151,    624,    815,   4485,   2229,  -1052,    -23,    -40,
1016     -1228,   -303,   -158,   -206,    -31,  -1136,   -170,   -223,
1017      -565,    -84,   -111,   -610,  -3575,   -361,   4924,   2791,
1018      4698,   -780,     -7,  -1480,   -475,  -1347,    -78,   1074,
1019       108,    609,     61,   -839,   1025,    103,  -1412,   -800,
1020     -2518,   3791,   8623,    315,   2465,   -387,   -877,  -4538,
1021        -6,   -370,    582,   1325,  -1995,     48,    -73,   -166,
1022       378,   -570,  -1297,    -47,   -691,   2989,   9957,   -421,
1023     -1142,    -29,   -545,  -6051,    -10,    -79,    126,    420,
1024     -1817,    -17,     76,    256,    -48,    208,    694,    -29,
1025     -1918,    104,  -3190,  -3410,  -4440,   -224,      0,   -621,
1026      -709,  -1203,     12,   -373,     20,   -399,     21,   -664,
1027      -519,     28,   -864,   -924,  -3359,  -1668,   1854,   6939,
1028      1430,   -688,   -169,   -209,  -2939,   -124,   -341,    380,
1029       188,   1422,    706,   -785,    293,    145,   -161,   -606,
1030        42,   9706,   3164,   -952,    907,      0,  -5750,   -611,
1031       -55,    -50,    -25,     -8,  -1874,      2,    564,    183,
1032        -2,   -537,   -175,     52,   1607,    785,   2862,   4327,
1033      3307,   -157,    -37,   -500,  -1143,   -667,    -77,   -280,
1034      -137,   -424,   -207,   -756,   -324,   -158,   -577,   -873,
1035      6801,   3416,   2227,   1682,  -3217,  -2823,   -712,   -302,
1036      -172,   -631,  -1418,   -924,   -464,   -698,   -350,   -228,
1037      1335,    670,    437,    330,   3459,   3898,    364,   7841,
1038     -2640,   -730,   -927,     -8,  -3753,   -425,   -823,    -76,
1039       -86,  -1655,  -1865,   -174,    557,    628,     58,   1263,
1040     -5902,  -3458,  -2465,  -1886,   4334,  -2126,   -730,   -371,
1041      -217,  -1146,  -1245,   -888,   -520,   -679,   -398,   -283,
1042      1561,    915,    652,    499,  -3710,   1133,   7849,   3443,
1043      -215,   -840,    -78,  -3760,   -723,     -2,    256,   1777,
1044      -543,    779,   -238,  -1649,    -48,     14,    103,     45,
1045      4132,   2828,      2,  -4212,  -4116,  -1042,   -488,      0,
1046     -1083,  -1034,   -713,      0,      0,   1062,    727,      0,
1047      1038,    710,      0,  -1058,   5875,   8496,  -1796,   1376,
1048     -1786,  -2107,  -4406,   -197,   -115,   -194,  -3047,    644,
1049       931,   -493,   -713,    150,    640,    926,   -195,    150,
1050      3143,   3483,   3546,   -793,   4489,   -603,   -740,   -767,
1051       -38,  -1230,   -668,   -680,   -754,    152,    168,    171,
1052      -861,   -954,   -971,    217,   2845,   7965,   3695,  -5432,
1053      3978,   -494,  -3873,   -833,  -1801,   -966,  -1383,   -641,
1054     -1796,    943,   2641,   1225,   -691,  -1934,   -897,   1319,
1055      1538,    150,   7139,   2049,   3097,   -144,     -1,  -3110,
1056      -256,   -585,    -14,   -670,    -65,   -192,    -18,   -892,
1057      -290,    -28,  -1349,   -387,    618,   7520,   4729,   -238,
1058     -3373,    -23,  -3452,  -1365,     -3,   -694,   -283,   -178,
1059     -2170,      8,    109,     68,    127,   1548,    973,    -49,
1060      2965,  -3013,   7912,   7076,  -1997,   -536,   -554,  -3821,
1061     -3056,   -243,    545,  -1431,   1455,  -1280,   1301,  -3417,
1062       361,   -367,    964,    862,   2443,   -929,  -1113,   9677,
1063      4138,   -364,    -52,    -75,  -5716,  -1045,    138,    166,
1064       -63,  -1443,    549,    657,   -617,    234,    281,  -2444,
1065      1966,   3309,  10085,  -3399,   2105,   -236,   -668,  -6207,
1066      -705,   -270,   -397,  -1210,  -2037,    408,    686,   2092,
1067      -252,   -425,  -1295,    436,   -112,  -1368,   8868,   4822,
1068      2048,      0,   -114,  -4800,  -1419,   -256,     -9,     61,
1069       740,     33,    402,  -2610,     14,    171,  -1108,   -602,
1070     -2597,    438,  -1839,   6229,   7266,   -411,    -11,   -206,
1071     -2368,  -3223,     69,   -291,     49,    987,   -166,    699,
1072      1152,   -194,    816,  -2763,   3454,    553,   9127,   4946,
1073     -5596,   -728,    -18,  -5084,  -1493,  -1911,   -116,  -1924,
1074      -308,  -1042,   -166,  -2755,   1179,    188,   3117,   1689,
1075      -532,   -663,  12262,   2495,  -1004,    -17,    -26,  -9177,
1076      -380,    -61,    -21,    398,    496,     81,    101,  -1867,
1077       -32,    -40,    751,    152,  -2100,   1317,  -1509,  11425,
1078      2997,   -269,   -105,   -139,  -7967,   -548,    168,   -193,
1079       121,   1464,   -918,   1052,    384,   -240,    276,  -2090,
1080      1193,  -2697,  11259,   5373,   -763,    -86,   -444,  -7737,
1081     -1762,    -35,    196,   -819,   1853,   -391,    884,  -3692,
1082        55,   -125,    525,    250,   2405,   -471,  11079,    203,
1083       782,   -353,    -13,  -7491,     -2,    -37,     69,  -1626,
1084       318,    -29,      5,   -137,   -114,     22,   -529,     -9,
1085     -1871,   5685,  11290,  -2662,   1353,   -213,  -1972,  -7780,
1086      -432,   -111,    649,   1289,  -3917,   -304,    923,   1834,
1087       154,   -469,   -932,    220,  -3768,   5927,  -3093,   5041,
1088      5212,   -866,  -2144,   -584,  -1551,  -1658,   1363,   -711,
1089      1119,   1159,  -1824,    951,   1198,  -1885,    984,  -1603,
1090     -2546,   9502,   5969,  -2440,   1928,   -395,  -5511,  -2175,
1091      -363,   -226,   1477,    927,  -3462,   -379,   1415,    889,
1092       299,  -1118,   -702,    287,  -4963,   3568,   4592,   5508,
1093      3451,  -1503,   -777,  -1287,  -1851,   -727,   1080,   1391,
1094     -1000,   1668,  -1199,  -1543,   1045,   -751,   -967,  -1160,
1095      1745,  -2586,   3983,  10899,  -1551,   -186,   -408,   -968,
1096     -7250,   -146,    275,   -424,    628,  -1161,   1720,  -2649,
1097       165,   -244,    377,   1032,    867,   -456,   -727,   3369,
1098     11822,    -45,    -12,    -32,   -692,  -8531,     24,     38,
1099       -20,   -178,     93,    149,   -625,    329,    525,  -2431,
1100      7535,   2422,   1926,   1405,   1599,  -3466,   -358,   -226,
1101      -120,   -156,  -1114,   -886,   -284,   -646,   -207,   -165,
1102      -735,   -236,   -188,   -137,   1041,   -735,   -142,  13209,
1103      1515,    -66,    -33,     -1, -10649,   -140,     46,      9,
1104        -6,   -839,    593,    114,    -96,     68,     13,  -1222,
1105      7950,   6745,  -1444,  -1008,   2721,  -3857,  -2777,   -127,
1106       -62,   -452,  -3273,    700,    594,    489,    415,    -88,
1107     -1320,  -1120,    239,    167,  -4754,  -1379,   4522,   -578,
1108     -5733,  -1379,   -116,  -1248,    -20,  -2006,   -400,   1312,
1109       380,   -167,    -48,    159,  -1663,   -482,   1582,   -202,
1110      3220,   5978,   5923,   2430,  -2689,   -633,  -2181,  -2141,
1111      -360,   -441,  -1175,  -1164,  -2161,   -477,   -886,   -878,
1112       528,    981,    972,    398,    377,   1312,  13978,  -1470,
1113       677,     -8,   -105, -11925,   -132,    -28,    -30,   -321,
1114     -1119,     33,    117,   1254,    -15,    -54,   -577,     60,
1115     -3435,   6770,    314,   -885,   5686,   -720,  -2797,     -6,
1116       -47,  -1973,   1419,     65,   -129,   -185,    366,     16,
1117      1192,  -2349,   -109,    307,   3171,   8774,  -2260,   2679,
1118      3069,   -613,  -4699,   -312,   -438,   -575,  -1698,    437,
1119      1210,   -518,  -1435,    369,   -594,  -1643,    423,   -501,
1120      5557,   1509,   5407,   -125,  -7386,  -1884,   -139,  -1784,
1121         0,  -3330,   -511,  -1834,   -498,     42,     11,     41,
1122      2505,    680,   2438,    -56,  -2838,   2595,  13228,    271,
1123      1793,   -491,   -411, -10680,     -4,   -196,    449,   2291,
1124     -2095,     47,    -42,   -219,    310,   -284,  -1447,    -29,
1125       664,   -278,  14966,    951,   -711,    -26,     -4, -13672,
1126       -55,    -30,     11,   -606,    253,    -38,     16,   -869,
1127        28,    -12,    650,     41,    808,   1770,   8658,   5863,
1128     -1486,    -39,   -191,  -4576,  -2098,   -134,    -87,   -427,
1129      -935,   -289,   -633,  -3098,     73,    160,    785,    531,
1130      3063,   1539,   2000,   -542,   9576,   -572,   -144,   -244,
1131       -17,  -5597,   -287,   -374,   -188,    101,     51,     66,
1132     -1790,   -900,  -1169,    317,    514,  14083,   -323,    896,
1133      -891,    -16, -12106,     -6,    -49,    -48,   -442,     10,
1134       277,    -28,   -770,     17,     27,    766,    -17,     48,
1135       892,    158,   5237,  11057,  -1603,    -48,     -1,  -1674,
1136     -7462,   -156,     -8,   -285,    -50,   -602,   -106,  -3534,
1137        87,     15,    512,   1082,  -1612,   2564,  -4296,  12526,
1138      5710,   -158,   -401,  -1126,  -9576,  -1990,    252,   -422,
1139       672,   1232,  -1960,   3284,    561,   -893,   1497,  -4365,
1140      4889,  -6878,    612,   6109,   4753,  -1459,  -2887,    -22,
1141     -2277,  -1379,   2052,   -182,    257,  -1823,   2564,   -228,
1142     -1418,   1995,   -177,  -1772,   3053,   -506,   2403,   9625,
1143      1322,   -569,    -15,   -352,  -5655,   -106,     94,   -448,
1144        74,  -1794,    297,  -1412,   -246,     40,   -194,   -777,
1145      -754,  12904,   4480,  -2113,   1471,    -34, -10163,  -1225,
1146      -272,   -132,    594,    206,  -3529,    -97,   1664,    577,
1147        67,  -1159,   -402,    189,   4255,   1476,   5055,   2393,
1148      2912,  -1105,   -132,  -1559,   -349,   -517,   -383,  -1313,
1149      -455,   -621,   -215,   -738,   -756,   -262,   -898,   -425,
1150     -1371,    535,   1417,  14604,   -997,   -114,    -17,   -122,
1151    -13017,    -60,     44,    118,    -46,   1222,   -477,  -1263,
1152       -83,     32,     86,    888,   5368,  -1744,   4083,  -1236,
1153      3753,  -1758,   -185,  -1017,    -93,   -860,    571,  -1338,
1154       434,    405,   -131,    308,  -1229,    399,   -935,    283,
1155      1588,  -3097,  14415,   3699,  -1171,   -154,   -585, -12683,
1156      -835,    -83,    300,  -1397,   2725,   -358,    699,  -3255,
1157       113,   -221,   1030,    264,    212,   7989,   9471,  -3344,
1158      2009,     -2,  -3895,  -5475,   -682,   -246,   -103,   -123,
1159     -4618,     43,   1630,   1933,    -26,   -979,  -1161,    410,
1160       856,   2294,   -627,   6930,   6929,    -44,   -321,    -24,
1161     -2931,  -2930,   -119,     32,     87,   -362,   -970,    265,
1162      -362,   -970,    265,  -2931,   2357,  -4187,   7162,   7683,
1163      3371,   -339,  -1070,  -3131,  -3603,   -693,    602,  -1030,
1164      1830,  -1105,   1963,  -3359,   -485,    861,  -1474,  -1581,
1165       350,   4585,  14053,  -3819,   1218,     -7,  -1283, -12054,
1166      -890,    -90,    -97,   -300,  -3933,     81,   1068,   3275,
1167       -26,   -341,  -1045,    284,  -3248,   3531,    475,   2137,
1168     11711,   -644,   -761,    -13,   -278,  -8372,    700,     94,
1169      -102,    423,   -460,    -62,   2322,  -2524,   -340,  -1528,
1170     -3017,   3852,   1725,   8440,   5257,   -555,   -905,   -181,
1171     -4348,  -1686,    709,    317,   -405,   1554,  -1984,   -889,
1172       968,  -1236,   -553,  -2708,   -909,   3196,  15512,  -2528,
1173      1066,    -50,   -623, -14686,   -390,    -69,    177,    861,
1174     -3026,   -140,    493,   2393,     59,   -208,  -1009,    164,
1175       959,  -3370,   9617,   9545,  -1761,    -56,   -693,  -5645,
1176     -5561,   -189,    197,   -563,   1978,   -558,   1963,  -5603,
1177       103,   -362,   1034,   1026,   7575,  11796,  -4845,   3252,
1178     -1703,  -3502,  -8493,  -1433,   -645,   -177,  -5454,   2240,
1179      3488,  -1503,  -2341,    961,    787,   1226,   -503,    338,
1180      6409,   1722,   1764,  -4191,   6015,  -2507,   -181,   -189,
1181     -1072,  -2208,   -673,   -690,   -185,   1639,    440,    451,
1182     -2353,   -632,   -647,   1538,  -2420,  12161,   5038,   1286,
1183     -2098,   -357,  -9027,  -1549,   -100,   -268,   1796,    744,
1184     -3740,    190,   -954,   -395,   -310,   1557,    645,    164,
1185     -2232,  -1341,   7246,   9470,  -1977,   -304,   -109,  -3204,
1186     -5474,   -238,   -182,    987,    593,   1290,    775,  -4188,
1187      -269,   -161,    874,   1143,   1030,   7034,   4231,   1551,
1188      3077,    -64,  -3019,  -1093,   -146,   -577,   -442,   -266,
1189     -1816,    -97,   -666,   -400,   -193,  -1321,   -794,   -291,
1190      5121,  11835,   -477,  -1749,   2298,  -1601,  -8549,    -13,
1191      -186,   -322,  -3699,    149,    344,    546,   1264,    -50,
1192      -718,  -1660,     66,    245,  -3328,   3827,   5921,   9976,
1193     -1045,   -676,   -894,  -2140,  -6075,    -66,    777,   1203,
1194     -1383,   2027,  -2330,  -3605,   -212,    244,    377,    636,
1195      3813,   5718,  -4666,  -3412,   5674,   -887,  -1995,  -1329,
1196      -710,  -1965,  -1331,   1086,   1628,    794,   1191,   -972,
1197     -1320,  -1980,   1616,   1181,   1348,  -3672,  13154,   6938,
1198     -1690,   -110,   -823, -10561,  -2938,   -174,    302,  -1082,
1199      2948,   -570,   1555,  -5570,    139,   -379,   1357,    716,
1200      2151,  -3586,   6949,  12131,  -1224,   -282,   -785,  -2947,
1201     -8982,    -91,    470,   -912,   1521,  -1592,   2655,  -5145,
1202       160,   -268,    519,    906,  -2889,   9647,  10276,  -2728,
1203       995,   -509,  -5680,  -6445,   -454,    -60,   1701,   1812,
1204     -6051,   -481,   1606,   1711,    175,   -586,   -624,    165,
1205      6177,   2184,    555,   1985,   6589,  -2329,   -291,    -18,
1206      -240,  -2650,   -823,   -209,    -74,   -748,   -264,    -67,
1207     -2484,   -878,   -223,   -798,   -492,    391,  17166,   -681,
1208       240,    -14,     -9, -17987,    -28,     -3,     11,    515,
1209      -410,    -20,     16,    713,      7,     -5,   -252,     10,
1210     12628,   5448,  -2630,   3011,  -2695,  -9733,  -1811,   -422,
1211      -553,   -443,  -4199,   2027,    874,  -2321,  -1001,    483,
1212      2077,    896,   -432,    495,  -3628,   -534,   3447,   7002,
1213      6751,   -803,    -17,   -725,  -2992,  -2782,   -118,    763,
1214       112,   1550,    228,  -1473,   1495,    220,  -1420,  -2885,
1215     -5239,   5901,   8107,   3650,   4846,  -1675,  -2125,  -4012,
1216      -813,  -1433,   1887,   2592,  -2920,   1167,  -1315,  -1806,
1217      1550,  -1745,  -2398,  -1080,   6157,   6678,   4099,  -1074,
1218      2348,  -2314,  -2722,  -1025,    -70,   -336,  -2509,  -1540,
1219     -1670,    403,    437,    268,   -882,   -957,   -587,    153,
1220      1079,  16099,    242,   -881,   1690,    -71, -15820,     -3,
1221       -47,   -174,  -1060,    -16,   -238,     58,    865,     13,
1222      -111,  -1661,    -25,     90,   -278,    227,  -1039,   1636,
1223     16945,     -4,     -3,    -65,   -163, -17526,      3,    -17,
1224        14,     27,    -22,    103,    287,   -234,   1074,  -1693,
1225     15778,  -1454,    574,   -603,   -107, -15195,   -129,    -20,
1226       -22,      0,   1400,   -553,     51,    581,    -53,     21,
1227       103,     -9,      3,     -3,   2406,   -836,  13224,   7993,
1228     -4266,   -353,    -42, -10673,  -3899,  -1111,    122,  -1942,
1229       674,  -1174,    407,  -6451,    626,   -217,   3443,   2081,
1230      3184,  14368,  -3336,   2255,  -1801,   -619, -12600,   -679,
1231      -310,   -198,  -2793,    648,   2926,   -438,  -1977,    459,
1232       350,   1580,   -366,    247,  -1698,  17076,   2504,   -539,
1233      -646,   -176, -17798,   -382,    -17,    -25,   1770,    259,
1234     -2610,    -55,    561,     82,    -67,    673,     98,    -21,
1235      2375,   -797,  -2696,  14483,   5383,   -344,    -38,   -443,
1236    -12803,  -1769,    115,    391,   -131,  -2100,    705,   2384,
1237      -780,    262,    886,  -4759,  -2691,   2554,  -4520,   9573,
1238     10655,   -442,   -398,  -1247,  -5594,  -6930,    419,   -742,
1239       704,   1572,  -1492,   2641,   1750,  -1661,   2939,  -6226,
1240     -4332,  -4399,  -1657,   4880,   7375,  -1145,  -1181,   -167,
1241     -1453,  -3319,  -1163,   -438,   -444,   1290,   1310,    493,
1242      1950,   1980,    745,  -2196,  -3498,   7405,   9955,   2693,
1243     -2971,   -746,  -3347,  -6049,   -442,   -538,   1581,   2125,
1244     -4499,    575,  -1217,  -1636,   -634,   1342,   1805,    488,
1245      6717,  -3792,   7739,   2798,   3489,  -2754,   -877,  -3655,
1246      -477,   -743,   1554,  -3173,   1791,  -1147,    647,  -1321,
1247     -1430,    807,  -1648,   -595,   5263,   9770,   3463,   1069,
1248     -3971,  -1690,  -5826,   -732,    -69,   -962,  -3138,  -1112,
1249     -2065,   -343,   -637,   -226,   1275,   2368,    839,    259,
1250      1243,  -2634,  16772,   1871,    332,    -94,   -423, -17169,
1251      -213,     -6,    199,  -1273,   2696,   -142,    300,  -1915,
1252       -25,     53,   -339,    -37,   2691,   2836,   3105,   5711,
1253      4817,   -442,   -491,   -588,  -1991,  -1416,   -465,   -510,
1254      -537,   -938,   -988,  -1082,   -791,   -834,   -913,  -1679,
1255      4366,   2944,   7210,   3627,   1161,  -1163,   -529,  -3172,
1256      -803,    -82,   -784,  -1921,  -1295,   -966,   -651,  -1596,
1257      -309,   -208,   -511,   -257,  13888,   3951,   -671,  -2305,
1258      3354, -11773,   -953,    -27,   -324,   -686,  -3349,    569,
1259       161,   1954,    556,    -94,  -2843,   -809,    137,    472,
1260      7053,   5847,   2929,   8378,  -4794,  -3036,  -2086,   -523,
1261     -4284,  -1403,  -2517,  -1261,  -1045,  -3607,  -2990,  -1498,
1262      2064,   1711,    857,   2451,  -2191,  12838,   9182,  -3915,
1263      1617,   -293, -10059,  -5146,   -935,   -159,   1717,   1228,
1264     -7195,   -523,   3068,   2194,    216,  -1267,   -906,    386,
1265     -4881,  13114,   5767,   -435,   4155,  -1454, -10498,  -2030,
1266       -11,  -1054,   3907,   1718,  -4616,   -129,    348,    153,
1267      1238,  -3326,  -1462,    110,   7843,  -1250,    210,   7106,
1268     -5203,  -3754,    -95,     -2,  -3082,  -1652,    598,   -100,
1269        16,  -3402,    542,    -91,   2491,   -397,     66,   2257,
1270     -2463,   8168,  14551,  -3908,   1828,   -370,  -4072, -12923,
1271      -932,   -204,   1228,   2188,  -7254,   -587,   1948,   3471,
1272       274,   -911,  -1623,    436,  -1579,    347,   -272,  -2735,
1273     16031,   -152,     -7,     -4,   -456, -15686,     33,    -26,
1274         5,   -263,     58,    -45,   1545,   -340,    266,   2676,
1275     -6327,   1328,   5093,  -5079,   7617,  -2443,   -107,  -1583,
1276     -1574,  -3541,    513,   1967,   -413,  -1961,    411,   1578,
1277      2941,   -617,  -2367,   2361,   3286,  -4509,  11306,  11025,
1278     -2623,   -659,  -1241,  -7802,  -7419,   -420,    904,  -2267,
1279      3112,  -2211,   3034,  -7608,    526,   -722,   1810,   1765,
1280      5567,  17853,  -3754,   1166,   -519,  -1892, -19455,   -860,
1281       -83,    -16,  -6067,   1275,   4090,   -396,  -1271,    267,
1282       176,    566,   -119,     37,  -2136,   -424,  15292,   5108,
1283     -1648,   -278,    -10, -14273,  -1593,   -165,    -55,   1993,
1284       396,    666,    132,  -4768,   -214,    -42,   1538,    514,
1285      2267,  -3297,   2549,  16563,   -791,   -313,   -663,   -396,
1286    -16745,    -38,    456,   -352,    513,  -2291,   3333,  -2576,
1287       109,   -159,    123,    799,   3655,   1899,  -3364,   6279,
1288     12510,   -815,   -220,   -690,  -2406,  -9552,   -423,    750,
1289       390,  -1400,   -728,   1289,  -2791,  -1450,   2568,  -4794,
1290      8052,   2285,  -6193,   5138,   6003,  -3957,   -318,  -2341,
1291     -1611,  -2199,  -1123,   3044,    864,  -2525,   -716,   1942,
1292     -2950,   -837,   2269,  -1882,   -386,  -2291,   7679,  15387,
1293     -2723,     -9,   -320,  -3599, -14452,   -452,    -54,    181,
1294      1074,    362,   2152,  -7212,    -64,   -380,   1276,   2557,
1295      2777,  -1173,   3984,  13079,   2508,   -470,    -84,   -969,
1296    -10440,   -384,    198,   -675,    285,  -2217,    936,  -3180,
1297      -425,    179,   -610,  -2002,  -1879,   1771,  -2684,  16705,
1298      1833,   -215,   -191,   -439, -17032,   -205,    203,   -308,
1299       290,   1916,  -1805,   2736,    210,   -198,    300,  -1869,
1300      1052,   4495,  15519,   1467,  -4032,    -67,  -1233, -14700,
1301      -131,   -992,   -288,   -997,  -4257,    -94,   -402,  -1389,
1302       259,   1106,   3819,    361,   3010,   2544,   6969,   7559,
1303      1996,   -553,   -395,  -2964,  -3487,   -243,   -467,  -1280,
1304     -1082,  -1388,  -1174,  -3215,   -366,   -310,   -849,   -921,
1305     -5209,  -1867,   8713,  10351,   1549,  -1656,   -212,  -4634,
1306     -6540,   -146,   -593,   2770,    993,   3291,   1180,  -5505,
1307       492,    176,   -824,   -979,  -4314,   8513,    913,   7547,
1308     -2723,  -1135,  -4423,    -50,  -3476,   -452,   2241,    240,
1309      -474,   1987,  -3921,   -420,   -717,   1415,    151,   1254,
1310     12929,  -1219,   2448,   1757,   6303, -10204,    -90,   -365,
1311      -188,  -2425,    962,  -1932,    182,  -1386,    130,   -262,
1312     -4974,    469,   -941,   -676,   6465,   4132,   3167,   3160,
1313      5697,  -2551,  -1042,   -612,   -609,  -1981,  -1630,  -1249,
1314      -798,  -1247,   -797,   -611,  -2248,  -1437,  -1101,  -1099,
1315     -3636,   4859,  18914,  -1335,    810,   -807,  -1441, -21836,
1316      -108,    -40,   1078,   4198,  -5609,   -296,    396,   1541,
1317       179,   -240,   -936,     66,   8844,   7864,    654,  -4063,
1318     -5680,  -4774,  -3774,    -26,  -1007,  -1969,  -4245,   -353,
1319      -314,   2193,   1950,    162,   3066,   2726,    226,  -1408,
1320      1859,   2634,   9228,    996,   9464,   -211,   -423,  -5197,
1321       -60,  -5467,   -299,  -1047,  -1483,   -113,   -160,   -561,
1322     -1074,  -1521,  -5330,   -575,   2949,  12260,  10290,   -497,
1323     -3943,   -530,  -9174,  -6463,    -15,   -949,  -2206,  -1852,
1324     -7700,     89,    372,    312,    709,   2950,   2476,   -119,
1325     -2903,   1552,  14867,   9970,   -496,   -514,   -147, -13491,
1326     -6068,    -15,    275,   2634,  -1408,   1766,   -944,  -9047,
1327       -87,     47,    450,    302,   3243,   8234,   7586,   3373,
1328      2151,   -642,  -4138,  -3512,   -694,   -282,  -1630,  -1501,
1329     -3812,   -667,  -1695,  -1561,   -425,  -1081,   -996,   -442,
1330     -9631,     60,   3501,   5359,  10150,  -5662,      0,   -748,
1331     -1752,  -6288,     35,   2058,    -12,   3150,    -19,  -1145,
1332      5967,    -37,  -2169,  -3320,  -6874,  -2553,  -5446,  -2195,
1333     -7841,  -2884,   -397,  -1810,   -294,  -3753,  -1071,  -2285,
1334      -848,   -921,   -342,   -729,  -3290,  -1221,  -2606,  -1050,
1335     -3413,  -1141,   4630,  13612,   7897,   -711,    -79,  -1308,
1336    -11310,  -3806,   -237,    964,    322,   2836,    948,  -3847,
1337      1645,    550,  -2231,  -6561,   4410,  -5678,   8006,  -3992,
1338      3811,  -1187,  -1968,  -3912,   -973,   -886,   1528,  -2155,
1339      2775,   1074,  -1383,   1951,  -1025,   1321,  -1862,    928,
1340      5659,  11535,   2203,   -452,   7169,  -1954,  -8121,   -296,
1341       -12,  -3137,  -3984,   -761,  -1551,    156,    318,     60,
1342     -2476,  -5048,   -964,    197,   2914,  -2914,   3485,  -3965,
1343     13675,   -518,   -518,   -741,   -959, -11414,    518,   -620,
1344       620,    705,   -705,    843,  -2433,   2432,  -2909,   3310,
1345      7843,   1907,   1022,   8882,   7972,  -3755,   -222,    -63,
1346     -4815,  -3879,   -913,   -489,   -119,  -4252,  -1034,   -554,
1347     -3816,   -928,   -497,  -4322,  13807,   9531,   1436,   1612,
1348      1779, -11636,  -5544,   -125,   -158,   -193,  -8032,  -1210,
1349      -835,  -1358,   -938,   -141,  -1499,  -1035,   -156,   -175,
1350     13620,  -5337,   5450,  -2263,   1723, -11322,  -1738,  -1813,
1351      -312,   -181,   4436,  -4531,   1775,   1881,   -737,    752,
1352     -1432,    561,   -573,    238,   5297,   8374,   8872,   7694,
1353      6538,  -1712,  -4280,  -4804,  -3613,  -2609,  -2707,  -2868,
1354     -4534,  -2487,  -3932,  -4166,  -2113,  -3341,  -3540,  -3070
1355 };
1356
1357 /* 0.65^i (Zero part) and 0.75^i (Pole part) scaled by 2^15 */
1358 static const int16_t postfilter_tbl[2][LPC_ORDER] = {
1359     /* Zero */
1360     { 21299, 13844,  8999,  5849, 3802, 2471, 1606, 1044,  679,  441 },
1361     /* Pole */
1362     { 24576, 18432, 13824, 10368, 7776, 5832, 4374, 3281, 2460, 1845 }
1363 };
1364
1365
1366 /**
1367  * Hamming window coefficients scaled by 2^15
1368  */
1369 static const int16_t hamming_window[LPC_FRAME] = {
1370      2621,  2631,  2659,  2705,  2770,  2853,  2955,  3074,  3212,  3367,
1371      3541,  3731,  3939,  4164,  4405,  4663,  4937,  5226,  5531,  5851,
1372      6186,  6534,  6897,  7273,  7661,  8062,  8475,  8899,  9334,  9780,
1373     10235, 10699, 11172, 11653, 12141, 12636, 13138, 13645, 14157, 14673,
1374     15193, 15716, 16242, 16769, 17298, 17827, 18356, 18884, 19411, 19935,
1375     20457, 20975, 21489, 21999, 22503, 23002, 23494, 23978, 24455, 24924,
1376     25384, 25834, 26274, 26704, 27122, 27529, 27924, 28306, 28675, 29031,
1377     29373, 29700, 30012, 30310, 30592, 30857, 31107, 31340, 31557, 31756,
1378     31938, 32102, 32249, 32377, 32488, 32580, 32654, 32710, 32747, 32766,
1379     32766, 32747, 32710, 32654, 32580, 32488, 32377, 32249, 32102, 31938,
1380     31756, 31557, 31340, 31107, 30857, 30592, 30310, 30012, 29700, 29373,
1381     29031, 28675, 28306, 27924, 27529, 27122, 26704, 26274, 25834, 25384,
1382     24924, 24455, 23978, 23494, 23002, 22503, 21999, 21489, 20975, 20457,
1383     19935, 19411, 18884, 18356, 17827, 17298, 16769, 16242, 15716, 15193,
1384     14673, 14157, 13645, 13138, 12636, 12141, 11653, 11172, 10699, 10235,
1385      9780, 9334,   8899,  8475,  8062,  7661,  7273,  6897,  6534,  6186,
1386      5851, 5531,   5226,  4937,  4663,  4405,  4164,  3939,  3731,  3541,
1387      3367, 3212,   3074,  2955,  2853,  2770,  2705,  2659,  2631,  2621
1388 };
1389
1390 /**
1391  * Binomial window coefficients scaled by 2^15
1392  */
1393 static const int16_t binomial_window[LPC_ORDER] = {
1394     32749, 32695, 32604, 32477, 32315, 32118, 31887, 31622, 31324, 30995
1395 };
1396
1397 /**
1398  * 0.994^i scaled by 2^15
1399  */
1400 static const int16_t bandwidth_expand[LPC_ORDER] = {
1401     32571, 32376, 32182, 31989, 31797, 31606, 31416, 31228, 31040, 30854
1402 };
1403
1404 /**
1405  * 0.5^i scaled by 2^15
1406  */
1407 static const int16_t percept_flt_tbl[2][LPC_ORDER] = {
1408     /* Zero part */
1409     {29491, 26542, 23888, 21499, 19349, 17414, 15673, 14106, 12695, 11425},
1410     /* Pole part */
1411     {16384,  8192,  4096,  2048,  1024,   512,   256,   128,    64,    32}
1412 };
1413
1414 static const int cng_adaptive_cb_lag[4] = { 1, 0, 1, 3 };
1415
1416 static const int cng_filt[4] = { 273, 998, 499, 333 };
1417
1418 static const int cng_bseg[3] = { 2048, 18432, 231233 };
1419
1420 #endif /* AVCODEC_G723_1_H */