aac: Fix TNS decoding for the 512 sample window family.
[ffmpeg.git] / libavcodec / aactab.c
1 /*
2  * AAC data
3  * Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org )
4  * Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com )
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  * AAC data
26  * @author Oded Shimon  ( ods15 ods15 dyndns org )
27  * @author Maxim Gavrilov ( maxim.gavrilov gmail com )
28  */
29
30 #include "libavutil/mem.h"
31 #include "aac.h"
32 #include "aac_tablegen.h"
33
34 #include <stdint.h>
35
36 DECLARE_ALIGNED(32, float,  ff_aac_kbd_long_1024)[1024];
37 DECLARE_ALIGNED(32, float,  ff_aac_kbd_long_512 )[512];
38 DECLARE_ALIGNED(32, float,  ff_aac_kbd_short_128)[128];
39
40 const uint8_t ff_aac_num_swb_1024[] = {
41     41, 41, 47, 49, 49, 51, 47, 47, 43, 43, 43, 40, 40
42 };
43
44 const uint8_t ff_aac_num_swb_512[] = {
45      0,  0,  0, 36, 36, 37, 31, 31,  0,  0,  0,  0,  0
46 };
47
48 const uint8_t ff_aac_num_swb_128[] = {
49     12, 12, 12, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15
50 };
51
52 const uint8_t ff_aac_pred_sfb_max[] = {
53     33, 33, 38, 40, 40, 40, 41, 41, 37, 37, 37, 34, 34
54 };
55
56 const uint32_t ff_aac_scalefactor_code[121] = {
57     0x3ffe8, 0x3ffe6, 0x3ffe7, 0x3ffe5, 0x7fff5, 0x7fff1, 0x7ffed, 0x7fff6,
58     0x7ffee, 0x7ffef, 0x7fff0, 0x7fffc, 0x7fffd, 0x7ffff, 0x7fffe, 0x7fff7,
59     0x7fff8, 0x7fffb, 0x7fff9, 0x3ffe4, 0x7fffa, 0x3ffe3, 0x1ffef, 0x1fff0,
60     0x0fff5, 0x1ffee, 0x0fff2, 0x0fff3, 0x0fff4, 0x0fff1, 0x07ff6, 0x07ff7,
61     0x03ff9, 0x03ff5, 0x03ff7, 0x03ff3, 0x03ff6, 0x03ff2, 0x01ff7, 0x01ff5,
62     0x00ff9, 0x00ff7, 0x00ff6, 0x007f9, 0x00ff4, 0x007f8, 0x003f9, 0x003f7,
63     0x003f5, 0x001f8, 0x001f7, 0x000fa, 0x000f8, 0x000f6, 0x00079, 0x0003a,
64     0x00038, 0x0001a, 0x0000b, 0x00004, 0x00000, 0x0000a, 0x0000c, 0x0001b,
65     0x00039, 0x0003b, 0x00078, 0x0007a, 0x000f7, 0x000f9, 0x001f6, 0x001f9,
66     0x003f4, 0x003f6, 0x003f8, 0x007f5, 0x007f4, 0x007f6, 0x007f7, 0x00ff5,
67     0x00ff8, 0x01ff4, 0x01ff6, 0x01ff8, 0x03ff8, 0x03ff4, 0x0fff0, 0x07ff4,
68     0x0fff6, 0x07ff5, 0x3ffe2, 0x7ffd9, 0x7ffda, 0x7ffdb, 0x7ffdc, 0x7ffdd,
69     0x7ffde, 0x7ffd8, 0x7ffd2, 0x7ffd3, 0x7ffd4, 0x7ffd5, 0x7ffd6, 0x7fff2,
70     0x7ffdf, 0x7ffe7, 0x7ffe8, 0x7ffe9, 0x7ffea, 0x7ffeb, 0x7ffe6, 0x7ffe0,
71     0x7ffe1, 0x7ffe2, 0x7ffe3, 0x7ffe4, 0x7ffe5, 0x7ffd7, 0x7ffec, 0x7fff4,
72     0x7fff3,
73 };
74
75 const uint8_t ff_aac_scalefactor_bits[121] = {
76     18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
77     19, 19, 19, 18, 19, 18, 17, 17, 16, 17, 16, 16, 16, 16, 15, 15,
78     14, 14, 14, 14, 14, 14, 13, 13, 12, 12, 12, 11, 12, 11, 10, 10,
79     10,  9,  9,  8,  8,  8,  7,  6,  6,  5,  4,  3,  1,  4,  4,  5,
80      6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 10, 11, 11, 11, 11, 12,
81     12, 13, 13, 13, 14, 14, 16, 15, 16, 15, 18, 19, 19, 19, 19, 19,
82     19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
83     19, 19, 19, 19, 19, 19, 19, 19, 19,
84 };
85
86 static const uint16_t codes1[81] = {
87     0x7f8, 0x1f1, 0x7fd, 0x3f5, 0x068, 0x3f0, 0x7f7, 0x1ec,
88     0x7f5, 0x3f1, 0x072, 0x3f4, 0x074, 0x011, 0x076, 0x1eb,
89     0x06c, 0x3f6, 0x7fc, 0x1e1, 0x7f1, 0x1f0, 0x061, 0x1f6,
90     0x7f2, 0x1ea, 0x7fb, 0x1f2, 0x069, 0x1ed, 0x077, 0x017,
91     0x06f, 0x1e6, 0x064, 0x1e5, 0x067, 0x015, 0x062, 0x012,
92     0x000, 0x014, 0x065, 0x016, 0x06d, 0x1e9, 0x063, 0x1e4,
93     0x06b, 0x013, 0x071, 0x1e3, 0x070, 0x1f3, 0x7fe, 0x1e7,
94     0x7f3, 0x1ef, 0x060, 0x1ee, 0x7f0, 0x1e2, 0x7fa, 0x3f3,
95     0x06a, 0x1e8, 0x075, 0x010, 0x073, 0x1f4, 0x06e, 0x3f7,
96     0x7f6, 0x1e0, 0x7f9, 0x3f2, 0x066, 0x1f5, 0x7ff, 0x1f7,
97     0x7f4,
98 };
99
100 static const uint8_t bits1[81] = {
101     11,  9, 11, 10,  7, 10, 11,  9, 11, 10,  7, 10,  7,  5,  7,  9,
102      7, 10, 11,  9, 11,  9,  7,  9, 11,  9, 11,  9,  7,  9,  7,  5,
103      7,  9,  7,  9,  7,  5,  7,  5,  1,  5,  7,  5,  7,  9,  7,  9,
104      7,  5,  7,  9,  7,  9, 11,  9, 11,  9,  7,  9, 11,  9, 11, 10,
105      7,  9,  7,  5,  7,  9,  7, 10, 11,  9, 11, 10,  7,  9, 11,  9,
106     11,
107 };
108
109 static const uint16_t codes2[81] = {
110     0x1f3, 0x06f, 0x1fd, 0x0eb, 0x023, 0x0ea, 0x1f7, 0x0e8,
111     0x1fa, 0x0f2, 0x02d, 0x070, 0x020, 0x006, 0x02b, 0x06e,
112     0x028, 0x0e9, 0x1f9, 0x066, 0x0f8, 0x0e7, 0x01b, 0x0f1,
113     0x1f4, 0x06b, 0x1f5, 0x0ec, 0x02a, 0x06c, 0x02c, 0x00a,
114     0x027, 0x067, 0x01a, 0x0f5, 0x024, 0x008, 0x01f, 0x009,
115     0x000, 0x007, 0x01d, 0x00b, 0x030, 0x0ef, 0x01c, 0x064,
116     0x01e, 0x00c, 0x029, 0x0f3, 0x02f, 0x0f0, 0x1fc, 0x071,
117     0x1f2, 0x0f4, 0x021, 0x0e6, 0x0f7, 0x068, 0x1f8, 0x0ee,
118     0x022, 0x065, 0x031, 0x002, 0x026, 0x0ed, 0x025, 0x06a,
119     0x1fb, 0x072, 0x1fe, 0x069, 0x02e, 0x0f6, 0x1ff, 0x06d,
120     0x1f6,
121 };
122
123 static const uint8_t bits2[81] = {
124     9, 7, 9, 8, 6, 8, 9, 8, 9, 8, 6, 7, 6, 5, 6, 7,
125     6, 8, 9, 7, 8, 8, 6, 8, 9, 7, 9, 8, 6, 7, 6, 5,
126     6, 7, 6, 8, 6, 5, 6, 5, 3, 5, 6, 5, 6, 8, 6, 7,
127     6, 5, 6, 8, 6, 8, 9, 7, 9, 8, 6, 8, 8, 7, 9, 8,
128     6, 7, 6, 4, 6, 8, 6, 7, 9, 7, 9, 7, 6, 8, 9, 7,
129     9,
130 };
131
132 static const uint16_t codes3[81] = {
133     0x0000, 0x0009, 0x00ef, 0x000b, 0x0019, 0x00f0, 0x01eb, 0x01e6,
134     0x03f2, 0x000a, 0x0035, 0x01ef, 0x0034, 0x0037, 0x01e9, 0x01ed,
135     0x01e7, 0x03f3, 0x01ee, 0x03ed, 0x1ffa, 0x01ec, 0x01f2, 0x07f9,
136     0x07f8, 0x03f8, 0x0ff8, 0x0008, 0x0038, 0x03f6, 0x0036, 0x0075,
137     0x03f1, 0x03eb, 0x03ec, 0x0ff4, 0x0018, 0x0076, 0x07f4, 0x0039,
138     0x0074, 0x03ef, 0x01f3, 0x01f4, 0x07f6, 0x01e8, 0x03ea, 0x1ffc,
139     0x00f2, 0x01f1, 0x0ffb, 0x03f5, 0x07f3, 0x0ffc, 0x00ee, 0x03f7,
140     0x7ffe, 0x01f0, 0x07f5, 0x7ffd, 0x1ffb, 0x3ffa, 0xffff, 0x00f1,
141     0x03f0, 0x3ffc, 0x01ea, 0x03ee, 0x3ffb, 0x0ff6, 0x0ffa, 0x7ffc,
142     0x07f2, 0x0ff5, 0xfffe, 0x03f4, 0x07f7, 0x7ffb, 0x0ff7, 0x0ff9,
143     0x7ffa,
144 };
145
146 static const uint8_t bits3[81] = {
147      1,  4,  8,  4,  5,  8,  9,  9, 10,  4,  6,  9,  6,  6,  9,  9,
148      9, 10,  9, 10, 13,  9,  9, 11, 11, 10, 12,  4,  6, 10,  6,  7,
149     10, 10, 10, 12,  5,  7, 11,  6,  7, 10,  9,  9, 11,  9, 10, 13,
150      8,  9, 12, 10, 11, 12,  8, 10, 15,  9, 11, 15, 13, 14, 16,  8,
151     10, 14,  9, 10, 14, 12, 12, 15, 11, 12, 16, 10, 11, 15, 12, 12,
152     15,
153 };
154
155 static const uint16_t codes4[81] = {
156     0x007, 0x016, 0x0f6, 0x018, 0x008, 0x0ef, 0x1ef, 0x0f3,
157     0x7f8, 0x019, 0x017, 0x0ed, 0x015, 0x001, 0x0e2, 0x0f0,
158     0x070, 0x3f0, 0x1ee, 0x0f1, 0x7fa, 0x0ee, 0x0e4, 0x3f2,
159     0x7f6, 0x3ef, 0x7fd, 0x005, 0x014, 0x0f2, 0x009, 0x004,
160     0x0e5, 0x0f4, 0x0e8, 0x3f4, 0x006, 0x002, 0x0e7, 0x003,
161     0x000, 0x06b, 0x0e3, 0x069, 0x1f3, 0x0eb, 0x0e6, 0x3f6,
162     0x06e, 0x06a, 0x1f4, 0x3ec, 0x1f0, 0x3f9, 0x0f5, 0x0ec,
163     0x7fb, 0x0ea, 0x06f, 0x3f7, 0x7f9, 0x3f3, 0xfff, 0x0e9,
164     0x06d, 0x3f8, 0x06c, 0x068, 0x1f5, 0x3ee, 0x1f2, 0x7f4,
165     0x7f7, 0x3f1, 0xffe, 0x3ed, 0x1f1, 0x7f5, 0x7fe, 0x3f5,
166     0x7fc,
167 };
168
169 static const uint8_t bits4[81] = {
170      4,  5,  8,  5,  4,  8,  9,  8, 11,  5,  5,  8,  5,  4,  8,  8,
171      7, 10,  9,  8, 11,  8,  8, 10, 11, 10, 11,  4,  5,  8,  4,  4,
172      8,  8,  8, 10,  4,  4,  8,  4,  4,  7,  8,  7,  9,  8,  8, 10,
173      7,  7,  9, 10,  9, 10,  8,  8, 11,  8,  7, 10, 11, 10, 12,  8,
174      7, 10,  7,  7,  9, 10,  9, 11, 11, 10, 12, 10,  9, 11, 11, 10,
175     11,
176 };
177
178 static const uint16_t codes5[81] = {
179     0x1fff, 0x0ff7, 0x07f4, 0x07e8, 0x03f1, 0x07ee, 0x07f9, 0x0ff8,
180     0x1ffd, 0x0ffd, 0x07f1, 0x03e8, 0x01e8, 0x00f0, 0x01ec, 0x03ee,
181     0x07f2, 0x0ffa, 0x0ff4, 0x03ef, 0x01f2, 0x00e8, 0x0070, 0x00ec,
182     0x01f0, 0x03ea, 0x07f3, 0x07eb, 0x01eb, 0x00ea, 0x001a, 0x0008,
183     0x0019, 0x00ee, 0x01ef, 0x07ed, 0x03f0, 0x00f2, 0x0073, 0x000b,
184     0x0000, 0x000a, 0x0071, 0x00f3, 0x07e9, 0x07ef, 0x01ee, 0x00ef,
185     0x0018, 0x0009, 0x001b, 0x00eb, 0x01e9, 0x07ec, 0x07f6, 0x03eb,
186     0x01f3, 0x00ed, 0x0072, 0x00e9, 0x01f1, 0x03ed, 0x07f7, 0x0ff6,
187     0x07f0, 0x03e9, 0x01ed, 0x00f1, 0x01ea, 0x03ec, 0x07f8, 0x0ff9,
188     0x1ffc, 0x0ffc, 0x0ff5, 0x07ea, 0x03f3, 0x03f2, 0x07f5, 0x0ffb,
189     0x1ffe,
190 };
191
192 static const uint8_t bits5[81] = {
193     13, 12, 11, 11, 10, 11, 11, 12, 13, 12, 11, 10,  9,  8,  9, 10,
194     11, 12, 12, 10,  9,  8,  7,  8,  9, 10, 11, 11,  9,  8,  5,  4,
195      5,  8,  9, 11, 10,  8,  7,  4,  1,  4,  7,  8, 11, 11,  9,  8,
196      5,  4,  5,  8,  9, 11, 11, 10,  9,  8,  7,  8,  9, 10, 11, 12,
197     11, 10,  9,  8,  9, 10, 11, 12, 13, 12, 12, 11, 10, 10, 11, 12,
198     13,
199 };
200
201 static const uint16_t codes6[81] = {
202     0x7fe, 0x3fd, 0x1f1, 0x1eb, 0x1f4, 0x1ea, 0x1f0, 0x3fc,
203     0x7fd, 0x3f6, 0x1e5, 0x0ea, 0x06c, 0x071, 0x068, 0x0f0,
204     0x1e6, 0x3f7, 0x1f3, 0x0ef, 0x032, 0x027, 0x028, 0x026,
205     0x031, 0x0eb, 0x1f7, 0x1e8, 0x06f, 0x02e, 0x008, 0x004,
206     0x006, 0x029, 0x06b, 0x1ee, 0x1ef, 0x072, 0x02d, 0x002,
207     0x000, 0x003, 0x02f, 0x073, 0x1fa, 0x1e7, 0x06e, 0x02b,
208     0x007, 0x001, 0x005, 0x02c, 0x06d, 0x1ec, 0x1f9, 0x0ee,
209     0x030, 0x024, 0x02a, 0x025, 0x033, 0x0ec, 0x1f2, 0x3f8,
210     0x1e4, 0x0ed, 0x06a, 0x070, 0x069, 0x074, 0x0f1, 0x3fa,
211     0x7ff, 0x3f9, 0x1f6, 0x1ed, 0x1f8, 0x1e9, 0x1f5, 0x3fb,
212     0x7fc,
213 };
214
215 static const uint8_t bits6[81] = {
216     11, 10,  9,  9,  9,  9,  9, 10, 11, 10,  9,  8,  7,  7,  7,  8,
217      9, 10,  9,  8,  6,  6,  6,  6,  6,  8,  9,  9,  7,  6,  4,  4,
218      4,  6,  7,  9,  9,  7,  6,  4,  4,  4,  6,  7,  9,  9,  7,  6,
219      4,  4,  4,  6,  7,  9,  9,  8,  6,  6,  6,  6,  6,  8,  9, 10,
220      9,  8,  7,  7,  7,  7,  8, 10, 11, 10,  9,  9,  9,  9,  9, 10,
221     11,
222 };
223
224 static const uint16_t codes7[64] = {
225     0x000, 0x005, 0x037, 0x074, 0x0f2, 0x1eb, 0x3ed, 0x7f7,
226     0x004, 0x00c, 0x035, 0x071, 0x0ec, 0x0ee, 0x1ee, 0x1f5,
227     0x036, 0x034, 0x072, 0x0ea, 0x0f1, 0x1e9, 0x1f3, 0x3f5,
228     0x073, 0x070, 0x0eb, 0x0f0, 0x1f1, 0x1f0, 0x3ec, 0x3fa,
229     0x0f3, 0x0ed, 0x1e8, 0x1ef, 0x3ef, 0x3f1, 0x3f9, 0x7fb,
230     0x1ed, 0x0ef, 0x1ea, 0x1f2, 0x3f3, 0x3f8, 0x7f9, 0x7fc,
231     0x3ee, 0x1ec, 0x1f4, 0x3f4, 0x3f7, 0x7f8, 0xffd, 0xffe,
232     0x7f6, 0x3f0, 0x3f2, 0x3f6, 0x7fa, 0x7fd, 0xffc, 0xfff,
233 };
234
235 static const uint8_t bits7[64] = {
236      1,  3,  6,  7,  8,  9, 10, 11,  3,  4,  6,  7,  8,  8,  9,  9,
237      6,  6,  7,  8,  8,  9,  9, 10,  7,  7,  8,  8,  9,  9, 10, 10,
238      8,  8,  9,  9, 10, 10, 10, 11,  9,  8,  9,  9, 10, 10, 11, 11,
239     10,  9,  9, 10, 10, 11, 12, 12, 11, 10, 10, 10, 11, 11, 12, 12,
240 };
241
242 static const uint16_t codes8[64] = {
243     0x00e, 0x005, 0x010, 0x030, 0x06f, 0x0f1, 0x1fa, 0x3fe,
244     0x003, 0x000, 0x004, 0x012, 0x02c, 0x06a, 0x075, 0x0f8,
245     0x00f, 0x002, 0x006, 0x014, 0x02e, 0x069, 0x072, 0x0f5,
246     0x02f, 0x011, 0x013, 0x02a, 0x032, 0x06c, 0x0ec, 0x0fa,
247     0x071, 0x02b, 0x02d, 0x031, 0x06d, 0x070, 0x0f2, 0x1f9,
248     0x0ef, 0x068, 0x033, 0x06b, 0x06e, 0x0ee, 0x0f9, 0x3fc,
249     0x1f8, 0x074, 0x073, 0x0ed, 0x0f0, 0x0f6, 0x1f6, 0x1fd,
250     0x3fd, 0x0f3, 0x0f4, 0x0f7, 0x1f7, 0x1fb, 0x1fc, 0x3ff,
251 };
252
253 static const uint8_t bits8[64] = {
254      5,  4,  5,  6,  7,  8,  9, 10,  4,  3,  4,  5,  6,  7,  7,  8,
255      5,  4,  4,  5,  6,  7,  7,  8,  6,  5,  5,  6,  6,  7,  8,  8,
256      7,  6,  6,  6,  7,  7,  8,  9,  8,  7,  6,  7,  7,  8,  8, 10,
257      9,  7,  7,  8,  8,  8,  9,  9, 10,  8,  8,  8,  9,  9,  9, 10,
258 };
259
260 static const uint16_t codes9[169] = {
261     0x0000, 0x0005, 0x0037, 0x00e7, 0x01de, 0x03ce, 0x03d9, 0x07c8,
262     0x07cd, 0x0fc8, 0x0fdd, 0x1fe4, 0x1fec, 0x0004, 0x000c, 0x0035,
263     0x0072, 0x00ea, 0x00ed, 0x01e2, 0x03d1, 0x03d3, 0x03e0, 0x07d8,
264     0x0fcf, 0x0fd5, 0x0036, 0x0034, 0x0071, 0x00e8, 0x00ec, 0x01e1,
265     0x03cf, 0x03dd, 0x03db, 0x07d0, 0x0fc7, 0x0fd4, 0x0fe4, 0x00e6,
266     0x0070, 0x00e9, 0x01dd, 0x01e3, 0x03d2, 0x03dc, 0x07cc, 0x07ca,
267     0x07de, 0x0fd8, 0x0fea, 0x1fdb, 0x01df, 0x00eb, 0x01dc, 0x01e6,
268     0x03d5, 0x03de, 0x07cb, 0x07dd, 0x07dc, 0x0fcd, 0x0fe2, 0x0fe7,
269     0x1fe1, 0x03d0, 0x01e0, 0x01e4, 0x03d6, 0x07c5, 0x07d1, 0x07db,
270     0x0fd2, 0x07e0, 0x0fd9, 0x0feb, 0x1fe3, 0x1fe9, 0x07c4, 0x01e5,
271     0x03d7, 0x07c6, 0x07cf, 0x07da, 0x0fcb, 0x0fda, 0x0fe3, 0x0fe9,
272     0x1fe6, 0x1ff3, 0x1ff7, 0x07d3, 0x03d8, 0x03e1, 0x07d4, 0x07d9,
273     0x0fd3, 0x0fde, 0x1fdd, 0x1fd9, 0x1fe2, 0x1fea, 0x1ff1, 0x1ff6,
274     0x07d2, 0x03d4, 0x03da, 0x07c7, 0x07d7, 0x07e2, 0x0fce, 0x0fdb,
275     0x1fd8, 0x1fee, 0x3ff0, 0x1ff4, 0x3ff2, 0x07e1, 0x03df, 0x07c9,
276     0x07d6, 0x0fca, 0x0fd0, 0x0fe5, 0x0fe6, 0x1feb, 0x1fef, 0x3ff3,
277     0x3ff4, 0x3ff5, 0x0fe0, 0x07ce, 0x07d5, 0x0fc6, 0x0fd1, 0x0fe1,
278     0x1fe0, 0x1fe8, 0x1ff0, 0x3ff1, 0x3ff8, 0x3ff6, 0x7ffc, 0x0fe8,
279     0x07df, 0x0fc9, 0x0fd7, 0x0fdc, 0x1fdc, 0x1fdf, 0x1fed, 0x1ff5,
280     0x3ff9, 0x3ffb, 0x7ffd, 0x7ffe, 0x1fe7, 0x0fcc, 0x0fd6, 0x0fdf,
281     0x1fde, 0x1fda, 0x1fe5, 0x1ff2, 0x3ffa, 0x3ff7, 0x3ffc, 0x3ffd,
282     0x7fff,
283 };
284
285 static const uint8_t bits9[169] = {
286      1,  3,  6,  8,  9, 10, 10, 11, 11, 12, 12, 13, 13,  3,  4,  6,
287      7,  8,  8,  9, 10, 10, 10, 11, 12, 12,  6,  6,  7,  8,  8,  9,
288     10, 10, 10, 11, 12, 12, 12,  8,  7,  8,  9,  9, 10, 10, 11, 11,
289     11, 12, 12, 13,  9,  8,  9,  9, 10, 10, 11, 11, 11, 12, 12, 12,
290     13, 10,  9,  9, 10, 11, 11, 11, 12, 11, 12, 12, 13, 13, 11,  9,
291     10, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 11, 10, 10, 11, 11,
292     12, 12, 13, 13, 13, 13, 13, 13, 11, 10, 10, 11, 11, 11, 12, 12,
293     13, 13, 14, 13, 14, 11, 10, 11, 11, 12, 12, 12, 12, 13, 13, 14,
294     14, 14, 12, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 12,
295     11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 15, 15, 13, 12, 12, 12,
296     13, 13, 13, 13, 14, 14, 14, 14, 15,
297 };
298
299 static const uint16_t codes10[169] = {
300     0x022, 0x008, 0x01d, 0x026, 0x05f, 0x0d3, 0x1cf, 0x3d0,
301     0x3d7, 0x3ed, 0x7f0, 0x7f6, 0xffd, 0x007, 0x000, 0x001,
302     0x009, 0x020, 0x054, 0x060, 0x0d5, 0x0dc, 0x1d4, 0x3cd,
303     0x3de, 0x7e7, 0x01c, 0x002, 0x006, 0x00c, 0x01e, 0x028,
304     0x05b, 0x0cd, 0x0d9, 0x1ce, 0x1dc, 0x3d9, 0x3f1, 0x025,
305     0x00b, 0x00a, 0x00d, 0x024, 0x057, 0x061, 0x0cc, 0x0dd,
306     0x1cc, 0x1de, 0x3d3, 0x3e7, 0x05d, 0x021, 0x01f, 0x023,
307     0x027, 0x059, 0x064, 0x0d8, 0x0df, 0x1d2, 0x1e2, 0x3dd,
308     0x3ee, 0x0d1, 0x055, 0x029, 0x056, 0x058, 0x062, 0x0ce,
309     0x0e0, 0x0e2, 0x1da, 0x3d4, 0x3e3, 0x7eb, 0x1c9, 0x05e,
310     0x05a, 0x05c, 0x063, 0x0ca, 0x0da, 0x1c7, 0x1ca, 0x1e0,
311     0x3db, 0x3e8, 0x7ec, 0x1e3, 0x0d2, 0x0cb, 0x0d0, 0x0d7,
312     0x0db, 0x1c6, 0x1d5, 0x1d8, 0x3ca, 0x3da, 0x7ea, 0x7f1,
313     0x1e1, 0x0d4, 0x0cf, 0x0d6, 0x0de, 0x0e1, 0x1d0, 0x1d6,
314     0x3d1, 0x3d5, 0x3f2, 0x7ee, 0x7fb, 0x3e9, 0x1cd, 0x1c8,
315     0x1cb, 0x1d1, 0x1d7, 0x1df, 0x3cf, 0x3e0, 0x3ef, 0x7e6,
316     0x7f8, 0xffa, 0x3eb, 0x1dd, 0x1d3, 0x1d9, 0x1db, 0x3d2,
317     0x3cc, 0x3dc, 0x3ea, 0x7ed, 0x7f3, 0x7f9, 0xff9, 0x7f2,
318     0x3ce, 0x1e4, 0x3cb, 0x3d8, 0x3d6, 0x3e2, 0x3e5, 0x7e8,
319     0x7f4, 0x7f5, 0x7f7, 0xffb, 0x7fa, 0x3ec, 0x3df, 0x3e1,
320     0x3e4, 0x3e6, 0x3f0, 0x7e9, 0x7ef, 0xff8, 0xffe, 0xffc,
321     0xfff,
322 };
323
324 static const uint8_t bits10[169] = {
325      6,  5,  6,  6,  7,  8,  9, 10, 10, 10, 11, 11, 12,  5,  4,  4,
326      5,  6,  7,  7,  8,  8,  9, 10, 10, 11,  6,  4,  5,  5,  6,  6,
327      7,  8,  8,  9,  9, 10, 10,  6,  5,  5,  5,  6,  7,  7,  8,  8,
328      9,  9, 10, 10,  7,  6,  6,  6,  6,  7,  7,  8,  8,  9,  9, 10,
329     10,  8,  7,  6,  7,  7,  7,  8,  8,  8,  9, 10, 10, 11,  9,  7,
330      7,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11,  9,  8,  8,  8,  8,
331      8,  9,  9,  9, 10, 10, 11, 11,  9,  8,  8,  8,  8,  8,  9,  9,
332     10, 10, 10, 11, 11, 10,  9,  9,  9,  9,  9,  9, 10, 10, 10, 11,
333     11, 12, 10,  9,  9,  9,  9, 10, 10, 10, 10, 11, 11, 11, 12, 11,
334     10,  9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 11, 10, 10, 10,
335     10, 10, 10, 11, 11, 12, 12, 12, 12,
336 };
337
338 static const uint16_t codes11[289] = {
339     0x000, 0x006, 0x019, 0x03d, 0x09c, 0x0c6, 0x1a7, 0x390,
340     0x3c2, 0x3df, 0x7e6, 0x7f3, 0xffb, 0x7ec, 0xffa, 0xffe,
341     0x38e, 0x005, 0x001, 0x008, 0x014, 0x037, 0x042, 0x092,
342     0x0af, 0x191, 0x1a5, 0x1b5, 0x39e, 0x3c0, 0x3a2, 0x3cd,
343     0x7d6, 0x0ae, 0x017, 0x007, 0x009, 0x018, 0x039, 0x040,
344     0x08e, 0x0a3, 0x0b8, 0x199, 0x1ac, 0x1c1, 0x3b1, 0x396,
345     0x3be, 0x3ca, 0x09d, 0x03c, 0x015, 0x016, 0x01a, 0x03b,
346     0x044, 0x091, 0x0a5, 0x0be, 0x196, 0x1ae, 0x1b9, 0x3a1,
347     0x391, 0x3a5, 0x3d5, 0x094, 0x09a, 0x036, 0x038, 0x03a,
348     0x041, 0x08c, 0x09b, 0x0b0, 0x0c3, 0x19e, 0x1ab, 0x1bc,
349     0x39f, 0x38f, 0x3a9, 0x3cf, 0x093, 0x0bf, 0x03e, 0x03f,
350     0x043, 0x045, 0x09e, 0x0a7, 0x0b9, 0x194, 0x1a2, 0x1ba,
351     0x1c3, 0x3a6, 0x3a7, 0x3bb, 0x3d4, 0x09f, 0x1a0, 0x08f,
352     0x08d, 0x090, 0x098, 0x0a6, 0x0b6, 0x0c4, 0x19f, 0x1af,
353     0x1bf, 0x399, 0x3bf, 0x3b4, 0x3c9, 0x3e7, 0x0a8, 0x1b6,
354     0x0ab, 0x0a4, 0x0aa, 0x0b2, 0x0c2, 0x0c5, 0x198, 0x1a4,
355     0x1b8, 0x38c, 0x3a4, 0x3c4, 0x3c6, 0x3dd, 0x3e8, 0x0ad,
356     0x3af, 0x192, 0x0bd, 0x0bc, 0x18e, 0x197, 0x19a, 0x1a3,
357     0x1b1, 0x38d, 0x398, 0x3b7, 0x3d3, 0x3d1, 0x3db, 0x7dd,
358     0x0b4, 0x3de, 0x1a9, 0x19b, 0x19c, 0x1a1, 0x1aa, 0x1ad,
359     0x1b3, 0x38b, 0x3b2, 0x3b8, 0x3ce, 0x3e1, 0x3e0, 0x7d2,
360     0x7e5, 0x0b7, 0x7e3, 0x1bb, 0x1a8, 0x1a6, 0x1b0, 0x1b2,
361     0x1b7, 0x39b, 0x39a, 0x3ba, 0x3b5, 0x3d6, 0x7d7, 0x3e4,
362     0x7d8, 0x7ea, 0x0ba, 0x7e8, 0x3a0, 0x1bd, 0x1b4, 0x38a,
363     0x1c4, 0x392, 0x3aa, 0x3b0, 0x3bc, 0x3d7, 0x7d4, 0x7dc,
364     0x7db, 0x7d5, 0x7f0, 0x0c1, 0x7fb, 0x3c8, 0x3a3, 0x395,
365     0x39d, 0x3ac, 0x3ae, 0x3c5, 0x3d8, 0x3e2, 0x3e6, 0x7e4,
366     0x7e7, 0x7e0, 0x7e9, 0x7f7, 0x190, 0x7f2, 0x393, 0x1be,
367     0x1c0, 0x394, 0x397, 0x3ad, 0x3c3, 0x3c1, 0x3d2, 0x7da,
368     0x7d9, 0x7df, 0x7eb, 0x7f4, 0x7fa, 0x195, 0x7f8, 0x3bd,
369     0x39c, 0x3ab, 0x3a8, 0x3b3, 0x3b9, 0x3d0, 0x3e3, 0x3e5,
370     0x7e2, 0x7de, 0x7ed, 0x7f1, 0x7f9, 0x7fc, 0x193, 0xffd,
371     0x3dc, 0x3b6, 0x3c7, 0x3cc, 0x3cb, 0x3d9, 0x3da, 0x7d3,
372     0x7e1, 0x7ee, 0x7ef, 0x7f5, 0x7f6, 0xffc, 0xfff, 0x19d,
373     0x1c2, 0x0b5, 0x0a1, 0x096, 0x097, 0x095, 0x099, 0x0a0,
374     0x0a2, 0x0ac, 0x0a9, 0x0b1, 0x0b3, 0x0bb, 0x0c0, 0x18f,
375     0x004,
376 };
377
378 static const uint8_t bits11[289] = {
379      4,  5,  6,  7,  8,  8,  9, 10, 10, 10, 11, 11, 12, 11, 12, 12,
380     10,  5,  4,  5,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 10, 10,
381     11,  8,  6,  5,  5,  6,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10,
382     10, 10,  8,  7,  6,  6,  6,  7,  7,  8,  8,  8,  9,  9,  9, 10,
383     10, 10, 10,  8,  8,  7,  7,  7,  7,  8,  8,  8,  8,  9,  9,  9,
384     10, 10, 10, 10,  8,  8,  7,  7,  7,  7,  8,  8,  8,  9,  9,  9,
385      9, 10, 10, 10, 10,  8,  9,  8,  8,  8,  8,  8,  8,  8,  9,  9,
386      9, 10, 10, 10, 10, 10,  8,  9,  8,  8,  8,  8,  8,  8,  9,  9,
387      9, 10, 10, 10, 10, 10, 10,  8, 10,  9,  8,  8,  9,  9,  9,  9,
388      9, 10, 10, 10, 10, 10, 10, 11,  8, 10,  9,  9,  9,  9,  9,  9,
389      9, 10, 10, 10, 10, 10, 10, 11, 11,  8, 11,  9,  9,  9,  9,  9,
390      9, 10, 10, 10, 10, 10, 11, 10, 11, 11,  8, 11, 10,  9,  9, 10,
391      9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,  8, 11, 10, 10, 10,
392     10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,  9, 11, 10,  9,
393      9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,  9, 11, 10,
394     10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,  9, 12,
395     10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12,  9,
396      9,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  9,
397      5,
398 };
399
400 const uint16_t * const ff_aac_spectral_codes[11] = {
401     codes1,  codes2,  codes3, codes4, codes5, codes6, codes7, codes8,
402     codes9, codes10, codes11,
403 };
404
405 const uint8_t * const ff_aac_spectral_bits[11] = {
406     bits1,  bits2,  bits3, bits4, bits5, bits6, bits7, bits8,
407     bits9, bits10, bits11,
408 };
409
410 const uint16_t ff_aac_spectral_sizes[11] = {
411     81, 81, 81, 81, 81, 81, 64, 64, 169, 169, 289,
412 };
413
414 /* NOTE:
415  * 64.0f is a special value indicating the existence of an escape code in the
416  * bitstream.
417  */
418 static const DECLARE_ALIGNED(16, float, codebook_vector0)[324] = {
419  -1.0000000, -1.0000000, -1.0000000, -1.0000000,
420  -1.0000000, -1.0000000, -1.0000000,  0.0000000,
421  -1.0000000, -1.0000000, -1.0000000,  1.0000000,
422  -1.0000000, -1.0000000,  0.0000000, -1.0000000,
423  -1.0000000, -1.0000000,  0.0000000,  0.0000000,
424  -1.0000000, -1.0000000,  0.0000000,  1.0000000,
425  -1.0000000, -1.0000000,  1.0000000, -1.0000000,
426  -1.0000000, -1.0000000,  1.0000000,  0.0000000,
427  -1.0000000, -1.0000000,  1.0000000,  1.0000000,
428  -1.0000000,  0.0000000, -1.0000000, -1.0000000,
429  -1.0000000,  0.0000000, -1.0000000,  0.0000000,
430  -1.0000000,  0.0000000, -1.0000000,  1.0000000,
431  -1.0000000,  0.0000000,  0.0000000, -1.0000000,
432  -1.0000000,  0.0000000,  0.0000000,  0.0000000,
433  -1.0000000,  0.0000000,  0.0000000,  1.0000000,
434  -1.0000000,  0.0000000,  1.0000000, -1.0000000,
435  -1.0000000,  0.0000000,  1.0000000,  0.0000000,
436  -1.0000000,  0.0000000,  1.0000000,  1.0000000,
437  -1.0000000,  1.0000000, -1.0000000, -1.0000000,
438  -1.0000000,  1.0000000, -1.0000000,  0.0000000,
439  -1.0000000,  1.0000000, -1.0000000,  1.0000000,
440  -1.0000000,  1.0000000,  0.0000000, -1.0000000,
441  -1.0000000,  1.0000000,  0.0000000,  0.0000000,
442  -1.0000000,  1.0000000,  0.0000000,  1.0000000,
443  -1.0000000,  1.0000000,  1.0000000, -1.0000000,
444  -1.0000000,  1.0000000,  1.0000000,  0.0000000,
445  -1.0000000,  1.0000000,  1.0000000,  1.0000000,
446   0.0000000, -1.0000000, -1.0000000, -1.0000000,
447   0.0000000, -1.0000000, -1.0000000,  0.0000000,
448   0.0000000, -1.0000000, -1.0000000,  1.0000000,
449   0.0000000, -1.0000000,  0.0000000, -1.0000000,
450   0.0000000, -1.0000000,  0.0000000,  0.0000000,
451   0.0000000, -1.0000000,  0.0000000,  1.0000000,
452   0.0000000, -1.0000000,  1.0000000, -1.0000000,
453   0.0000000, -1.0000000,  1.0000000,  0.0000000,
454   0.0000000, -1.0000000,  1.0000000,  1.0000000,
455   0.0000000,  0.0000000, -1.0000000, -1.0000000,
456   0.0000000,  0.0000000, -1.0000000,  0.0000000,
457   0.0000000,  0.0000000, -1.0000000,  1.0000000,
458   0.0000000,  0.0000000,  0.0000000, -1.0000000,
459   0.0000000,  0.0000000,  0.0000000,  0.0000000,
460   0.0000000,  0.0000000,  0.0000000,  1.0000000,
461   0.0000000,  0.0000000,  1.0000000, -1.0000000,
462   0.0000000,  0.0000000,  1.0000000,  0.0000000,
463   0.0000000,  0.0000000,  1.0000000,  1.0000000,
464   0.0000000,  1.0000000, -1.0000000, -1.0000000,
465   0.0000000,  1.0000000, -1.0000000,  0.0000000,
466   0.0000000,  1.0000000, -1.0000000,  1.0000000,
467   0.0000000,  1.0000000,  0.0000000, -1.0000000,
468   0.0000000,  1.0000000,  0.0000000,  0.0000000,
469   0.0000000,  1.0000000,  0.0000000,  1.0000000,
470   0.0000000,  1.0000000,  1.0000000, -1.0000000,
471   0.0000000,  1.0000000,  1.0000000,  0.0000000,
472   0.0000000,  1.0000000,  1.0000000,  1.0000000,
473   1.0000000, -1.0000000, -1.0000000, -1.0000000,
474   1.0000000, -1.0000000, -1.0000000,  0.0000000,
475   1.0000000, -1.0000000, -1.0000000,  1.0000000,
476   1.0000000, -1.0000000,  0.0000000, -1.0000000,
477   1.0000000, -1.0000000,  0.0000000,  0.0000000,
478   1.0000000, -1.0000000,  0.0000000,  1.0000000,
479   1.0000000, -1.0000000,  1.0000000, -1.0000000,
480   1.0000000, -1.0000000,  1.0000000,  0.0000000,
481   1.0000000, -1.0000000,  1.0000000,  1.0000000,
482   1.0000000,  0.0000000, -1.0000000, -1.0000000,
483   1.0000000,  0.0000000, -1.0000000,  0.0000000,
484   1.0000000,  0.0000000, -1.0000000,  1.0000000,
485   1.0000000,  0.0000000,  0.0000000, -1.0000000,
486   1.0000000,  0.0000000,  0.0000000,  0.0000000,
487   1.0000000,  0.0000000,  0.0000000,  1.0000000,
488   1.0000000,  0.0000000,  1.0000000, -1.0000000,
489   1.0000000,  0.0000000,  1.0000000,  0.0000000,
490   1.0000000,  0.0000000,  1.0000000,  1.0000000,
491   1.0000000,  1.0000000, -1.0000000, -1.0000000,
492   1.0000000,  1.0000000, -1.0000000,  0.0000000,
493   1.0000000,  1.0000000, -1.0000000,  1.0000000,
494   1.0000000,  1.0000000,  0.0000000, -1.0000000,
495   1.0000000,  1.0000000,  0.0000000,  0.0000000,
496   1.0000000,  1.0000000,  0.0000000,  1.0000000,
497   1.0000000,  1.0000000,  1.0000000, -1.0000000,
498   1.0000000,  1.0000000,  1.0000000,  0.0000000,
499   1.0000000,  1.0000000,  1.0000000,  1.0000000,
500 };
501
502 static const DECLARE_ALIGNED(16, float, codebook_vector2)[324] = {
503   0.0000000,  0.0000000,  0.0000000,  0.0000000,
504   0.0000000,  0.0000000,  0.0000000,  1.0000000,
505   0.0000000,  0.0000000,  0.0000000,  2.5198421,
506   0.0000000,  0.0000000,  1.0000000,  0.0000000,
507   0.0000000,  0.0000000,  1.0000000,  1.0000000,
508   0.0000000,  0.0000000,  1.0000000,  2.5198421,
509   0.0000000,  0.0000000,  2.5198421,  0.0000000,
510   0.0000000,  0.0000000,  2.5198421,  1.0000000,
511   0.0000000,  0.0000000,  2.5198421,  2.5198421,
512   0.0000000,  1.0000000,  0.0000000,  0.0000000,
513   0.0000000,  1.0000000,  0.0000000,  1.0000000,
514   0.0000000,  1.0000000,  0.0000000,  2.5198421,
515   0.0000000,  1.0000000,  1.0000000,  0.0000000,
516   0.0000000,  1.0000000,  1.0000000,  1.0000000,
517   0.0000000,  1.0000000,  1.0000000,  2.5198421,
518   0.0000000,  1.0000000,  2.5198421,  0.0000000,
519   0.0000000,  1.0000000,  2.5198421,  1.0000000,
520   0.0000000,  1.0000000,  2.5198421,  2.5198421,
521   0.0000000,  2.5198421,  0.0000000,  0.0000000,
522   0.0000000,  2.5198421,  0.0000000,  1.0000000,
523   0.0000000,  2.5198421,  0.0000000,  2.5198421,
524   0.0000000,  2.5198421,  1.0000000,  0.0000000,
525   0.0000000,  2.5198421,  1.0000000,  1.0000000,
526   0.0000000,  2.5198421,  1.0000000,  2.5198421,
527   0.0000000,  2.5198421,  2.5198421,  0.0000000,
528   0.0000000,  2.5198421,  2.5198421,  1.0000000,
529   0.0000000,  2.5198421,  2.5198421,  2.5198421,
530   1.0000000,  0.0000000,  0.0000000,  0.0000000,
531   1.0000000,  0.0000000,  0.0000000,  1.0000000,
532   1.0000000,  0.0000000,  0.0000000,  2.5198421,
533   1.0000000,  0.0000000,  1.0000000,  0.0000000,
534   1.0000000,  0.0000000,  1.0000000,  1.0000000,
535   1.0000000,  0.0000000,  1.0000000,  2.5198421,
536   1.0000000,  0.0000000,  2.5198421,  0.0000000,
537   1.0000000,  0.0000000,  2.5198421,  1.0000000,
538   1.0000000,  0.0000000,  2.5198421,  2.5198421,
539   1.0000000,  1.0000000,  0.0000000,  0.0000000,
540   1.0000000,  1.0000000,  0.0000000,  1.0000000,
541   1.0000000,  1.0000000,  0.0000000,  2.5198421,
542   1.0000000,  1.0000000,  1.0000000,  0.0000000,
543   1.0000000,  1.0000000,  1.0000000,  1.0000000,
544   1.0000000,  1.0000000,  1.0000000,  2.5198421,
545   1.0000000,  1.0000000,  2.5198421,  0.0000000,
546   1.0000000,  1.0000000,  2.5198421,  1.0000000,
547   1.0000000,  1.0000000,  2.5198421,  2.5198421,
548   1.0000000,  2.5198421,  0.0000000,  0.0000000,
549   1.0000000,  2.5198421,  0.0000000,  1.0000000,
550   1.0000000,  2.5198421,  0.0000000,  2.5198421,
551   1.0000000,  2.5198421,  1.0000000,  0.0000000,
552   1.0000000,  2.5198421,  1.0000000,  1.0000000,
553   1.0000000,  2.5198421,  1.0000000,  2.5198421,
554   1.0000000,  2.5198421,  2.5198421,  0.0000000,
555   1.0000000,  2.5198421,  2.5198421,  1.0000000,
556   1.0000000,  2.5198421,  2.5198421,  2.5198421,
557   2.5198421,  0.0000000,  0.0000000,  0.0000000,
558   2.5198421,  0.0000000,  0.0000000,  1.0000000,
559   2.5198421,  0.0000000,  0.0000000,  2.5198421,
560   2.5198421,  0.0000000,  1.0000000,  0.0000000,
561   2.5198421,  0.0000000,  1.0000000,  1.0000000,
562   2.5198421,  0.0000000,  1.0000000,  2.5198421,
563   2.5198421,  0.0000000,  2.5198421,  0.0000000,
564   2.5198421,  0.0000000,  2.5198421,  1.0000000,
565   2.5198421,  0.0000000,  2.5198421,  2.5198421,
566   2.5198421,  1.0000000,  0.0000000,  0.0000000,
567   2.5198421,  1.0000000,  0.0000000,  1.0000000,
568   2.5198421,  1.0000000,  0.0000000,  2.5198421,
569   2.5198421,  1.0000000,  1.0000000,  0.0000000,
570   2.5198421,  1.0000000,  1.0000000,  1.0000000,
571   2.5198421,  1.0000000,  1.0000000,  2.5198421,
572   2.5198421,  1.0000000,  2.5198421,  0.0000000,
573   2.5198421,  1.0000000,  2.5198421,  1.0000000,
574   2.5198421,  1.0000000,  2.5198421,  2.5198421,
575   2.5198421,  2.5198421,  0.0000000,  0.0000000,
576   2.5198421,  2.5198421,  0.0000000,  1.0000000,
577   2.5198421,  2.5198421,  0.0000000,  2.5198421,
578   2.5198421,  2.5198421,  1.0000000,  0.0000000,
579   2.5198421,  2.5198421,  1.0000000,  1.0000000,
580   2.5198421,  2.5198421,  1.0000000,  2.5198421,
581   2.5198421,  2.5198421,  2.5198421,  0.0000000,
582   2.5198421,  2.5198421,  2.5198421,  1.0000000,
583   2.5198421,  2.5198421,  2.5198421,  2.5198421,
584 };
585
586 static const DECLARE_ALIGNED(16, float, codebook_vector4)[162] = {
587  -6.3496042, -6.3496042, -6.3496042, -4.3267487,
588  -6.3496042, -2.5198421, -6.3496042, -1.0000000,
589  -6.3496042,  0.0000000, -6.3496042,  1.0000000,
590  -6.3496042,  2.5198421, -6.3496042,  4.3267487,
591  -6.3496042,  6.3496042, -4.3267487, -6.3496042,
592  -4.3267487, -4.3267487, -4.3267487, -2.5198421,
593  -4.3267487, -1.0000000, -4.3267487,  0.0000000,
594  -4.3267487,  1.0000000, -4.3267487,  2.5198421,
595  -4.3267487,  4.3267487, -4.3267487,  6.3496042,
596  -2.5198421, -6.3496042, -2.5198421, -4.3267487,
597  -2.5198421, -2.5198421, -2.5198421, -1.0000000,
598  -2.5198421,  0.0000000, -2.5198421,  1.0000000,
599  -2.5198421,  2.5198421, -2.5198421,  4.3267487,
600  -2.5198421,  6.3496042, -1.0000000, -6.3496042,
601  -1.0000000, -4.3267487, -1.0000000, -2.5198421,
602  -1.0000000, -1.0000000, -1.0000000,  0.0000000,
603  -1.0000000,  1.0000000, -1.0000000,  2.5198421,
604  -1.0000000,  4.3267487, -1.0000000,  6.3496042,
605   0.0000000, -6.3496042,  0.0000000, -4.3267487,
606   0.0000000, -2.5198421,  0.0000000, -1.0000000,
607   0.0000000,  0.0000000,  0.0000000,  1.0000000,
608   0.0000000,  2.5198421,  0.0000000,  4.3267487,
609   0.0000000,  6.3496042,  1.0000000, -6.3496042,
610   1.0000000, -4.3267487,  1.0000000, -2.5198421,
611   1.0000000, -1.0000000,  1.0000000,  0.0000000,
612   1.0000000,  1.0000000,  1.0000000,  2.5198421,
613   1.0000000,  4.3267487,  1.0000000,  6.3496042,
614   2.5198421, -6.3496042,  2.5198421, -4.3267487,
615   2.5198421, -2.5198421,  2.5198421, -1.0000000,
616   2.5198421,  0.0000000,  2.5198421,  1.0000000,
617   2.5198421,  2.5198421,  2.5198421,  4.3267487,
618   2.5198421,  6.3496042,  4.3267487, -6.3496042,
619   4.3267487, -4.3267487,  4.3267487, -2.5198421,
620   4.3267487, -1.0000000,  4.3267487,  0.0000000,
621   4.3267487,  1.0000000,  4.3267487,  2.5198421,
622   4.3267487,  4.3267487,  4.3267487,  6.3496042,
623   6.3496042, -6.3496042,  6.3496042, -4.3267487,
624   6.3496042, -2.5198421,  6.3496042, -1.0000000,
625   6.3496042,  0.0000000,  6.3496042,  1.0000000,
626   6.3496042,  2.5198421,  6.3496042,  4.3267487,
627   6.3496042,  6.3496042,
628 };
629
630 static const DECLARE_ALIGNED(16, float, codebook_vector6)[128] = {
631   0.0000000,  0.0000000,  0.0000000,  1.0000000,
632   0.0000000,  2.5198421,  0.0000000,  4.3267487,
633   0.0000000,  6.3496042,  0.0000000,  8.5498797,
634   0.0000000, 10.9027236,  0.0000000, 13.3905183,
635   1.0000000,  0.0000000,  1.0000000,  1.0000000,
636   1.0000000,  2.5198421,  1.0000000,  4.3267487,
637   1.0000000,  6.3496042,  1.0000000,  8.5498797,
638   1.0000000, 10.9027236,  1.0000000, 13.3905183,
639   2.5198421,  0.0000000,  2.5198421,  1.0000000,
640   2.5198421,  2.5198421,  2.5198421,  4.3267487,
641   2.5198421,  6.3496042,  2.5198421,  8.5498797,
642   2.5198421, 10.9027236,  2.5198421, 13.3905183,
643   4.3267487,  0.0000000,  4.3267487,  1.0000000,
644   4.3267487,  2.5198421,  4.3267487,  4.3267487,
645   4.3267487,  6.3496042,  4.3267487,  8.5498797,
646   4.3267487, 10.9027236,  4.3267487, 13.3905183,
647   6.3496042,  0.0000000,  6.3496042,  1.0000000,
648   6.3496042,  2.5198421,  6.3496042,  4.3267487,
649   6.3496042,  6.3496042,  6.3496042,  8.5498797,
650   6.3496042, 10.9027236,  6.3496042, 13.3905183,
651   8.5498797,  0.0000000,  8.5498797,  1.0000000,
652   8.5498797,  2.5198421,  8.5498797,  4.3267487,
653   8.5498797,  6.3496042,  8.5498797,  8.5498797,
654   8.5498797, 10.9027236,  8.5498797, 13.3905183,
655  10.9027236,  0.0000000, 10.9027236,  1.0000000,
656  10.9027236,  2.5198421, 10.9027236,  4.3267487,
657  10.9027236,  6.3496042, 10.9027236,  8.5498797,
658  10.9027236, 10.9027236, 10.9027236, 13.3905183,
659  13.3905183,  0.0000000, 13.3905183,  1.0000000,
660  13.3905183,  2.5198421, 13.3905183,  4.3267487,
661  13.3905183,  6.3496042, 13.3905183,  8.5498797,
662  13.3905183, 10.9027236, 13.3905183, 13.3905183,
663 };
664
665 static const DECLARE_ALIGNED(16, float, codebook_vector8)[338] = {
666   0.0000000,  0.0000000,  0.0000000,  1.0000000,
667   0.0000000,  2.5198421,  0.0000000,  4.3267487,
668   0.0000000,  6.3496042,  0.0000000,  8.5498797,
669   0.0000000, 10.9027236,  0.0000000, 13.3905183,
670   0.0000000, 16.0000000,  0.0000000, 18.7207544,
671   0.0000000, 21.5443469,  0.0000000, 24.4637810,
672   0.0000000, 27.4731418,  1.0000000,  0.0000000,
673   1.0000000,  1.0000000,  1.0000000,  2.5198421,
674   1.0000000,  4.3267487,  1.0000000,  6.3496042,
675   1.0000000,  8.5498797,  1.0000000, 10.9027236,
676   1.0000000, 13.3905183,  1.0000000, 16.0000000,
677   1.0000000, 18.7207544,  1.0000000, 21.5443469,
678   1.0000000, 24.4637810,  1.0000000, 27.4731418,
679   2.5198421,  0.0000000,  2.5198421,  1.0000000,
680   2.5198421,  2.5198421,  2.5198421,  4.3267487,
681   2.5198421,  6.3496042,  2.5198421,  8.5498797,
682   2.5198421, 10.9027236,  2.5198421, 13.3905183,
683   2.5198421, 16.0000000,  2.5198421, 18.7207544,
684   2.5198421, 21.5443469,  2.5198421, 24.4637810,
685   2.5198421, 27.4731418,  4.3267487,  0.0000000,
686   4.3267487,  1.0000000,  4.3267487,  2.5198421,
687   4.3267487,  4.3267487,  4.3267487,  6.3496042,
688   4.3267487,  8.5498797,  4.3267487, 10.9027236,
689   4.3267487, 13.3905183,  4.3267487, 16.0000000,
690   4.3267487, 18.7207544,  4.3267487, 21.5443469,
691   4.3267487, 24.4637810,  4.3267487, 27.4731418,
692   6.3496042,  0.0000000,  6.3496042,  1.0000000,
693   6.3496042,  2.5198421,  6.3496042,  4.3267487,
694   6.3496042,  6.3496042,  6.3496042,  8.5498797,
695   6.3496042, 10.9027236,  6.3496042, 13.3905183,
696   6.3496042, 16.0000000,  6.3496042, 18.7207544,
697   6.3496042, 21.5443469,  6.3496042, 24.4637810,
698   6.3496042, 27.4731418,  8.5498797,  0.0000000,
699   8.5498797,  1.0000000,  8.5498797,  2.5198421,
700   8.5498797,  4.3267487,  8.5498797,  6.3496042,
701   8.5498797,  8.5498797,  8.5498797, 10.9027236,
702   8.5498797, 13.3905183,  8.5498797, 16.0000000,
703   8.5498797, 18.7207544,  8.5498797, 21.5443469,
704   8.5498797, 24.4637810,  8.5498797, 27.4731418,
705  10.9027236,  0.0000000, 10.9027236,  1.0000000,
706  10.9027236,  2.5198421, 10.9027236,  4.3267487,
707  10.9027236,  6.3496042, 10.9027236,  8.5498797,
708  10.9027236, 10.9027236, 10.9027236, 13.3905183,
709  10.9027236, 16.0000000, 10.9027236, 18.7207544,
710  10.9027236, 21.5443469, 10.9027236, 24.4637810,
711  10.9027236, 27.4731418, 13.3905183,  0.0000000,
712  13.3905183,  1.0000000, 13.3905183,  2.5198421,
713  13.3905183,  4.3267487, 13.3905183,  6.3496042,
714  13.3905183,  8.5498797, 13.3905183, 10.9027236,
715  13.3905183, 13.3905183, 13.3905183, 16.0000000,
716  13.3905183, 18.7207544, 13.3905183, 21.5443469,
717  13.3905183, 24.4637810, 13.3905183, 27.4731418,
718  16.0000000,  0.0000000, 16.0000000,  1.0000000,
719  16.0000000,  2.5198421, 16.0000000,  4.3267487,
720  16.0000000,  6.3496042, 16.0000000,  8.5498797,
721  16.0000000, 10.9027236, 16.0000000, 13.3905183,
722  16.0000000, 16.0000000, 16.0000000, 18.7207544,
723  16.0000000, 21.5443469, 16.0000000, 24.4637810,
724  16.0000000, 27.4731418, 18.7207544,  0.0000000,
725  18.7207544,  1.0000000, 18.7207544,  2.5198421,
726  18.7207544,  4.3267487, 18.7207544,  6.3496042,
727  18.7207544,  8.5498797, 18.7207544, 10.9027236,
728  18.7207544, 13.3905183, 18.7207544, 16.0000000,
729  18.7207544, 18.7207544, 18.7207544, 21.5443469,
730  18.7207544, 24.4637810, 18.7207544, 27.4731418,
731  21.5443469,  0.0000000, 21.5443469,  1.0000000,
732  21.5443469,  2.5198421, 21.5443469,  4.3267487,
733  21.5443469,  6.3496042, 21.5443469,  8.5498797,
734  21.5443469, 10.9027236, 21.5443469, 13.3905183,
735  21.5443469, 16.0000000, 21.5443469, 18.7207544,
736  21.5443469, 21.5443469, 21.5443469, 24.4637810,
737  21.5443469, 27.4731418, 24.4637810,  0.0000000,
738  24.4637810,  1.0000000, 24.4637810,  2.5198421,
739  24.4637810,  4.3267487, 24.4637810,  6.3496042,
740  24.4637810,  8.5498797, 24.4637810, 10.9027236,
741  24.4637810, 13.3905183, 24.4637810, 16.0000000,
742  24.4637810, 18.7207544, 24.4637810, 21.5443469,
743  24.4637810, 24.4637810, 24.4637810, 27.4731418,
744  27.4731418,  0.0000000, 27.4731418,  1.0000000,
745  27.4731418,  2.5198421, 27.4731418,  4.3267487,
746  27.4731418,  6.3496042, 27.4731418,  8.5498797,
747  27.4731418, 10.9027236, 27.4731418, 13.3905183,
748  27.4731418, 16.0000000, 27.4731418, 18.7207544,
749  27.4731418, 21.5443469, 27.4731418, 24.4637810,
750  27.4731418, 27.4731418,
751 };
752
753 static const DECLARE_ALIGNED(16, float, codebook_vector10)[578] = {
754   0.0000000,  0.0000000,  0.0000000,  1.0000000,
755   0.0000000,  2.5198421,  0.0000000,  4.3267487,
756   0.0000000,  6.3496042,  0.0000000,  8.5498797,
757   0.0000000, 10.9027236,  0.0000000, 13.3905183,
758   0.0000000, 16.0000000,  0.0000000, 18.7207544,
759   0.0000000, 21.5443469,  0.0000000, 24.4637810,
760   0.0000000, 27.4731418,  0.0000000, 30.5673509,
761   0.0000000, 33.7419917,  0.0000000, 36.9931811,
762   0.0000000,      64.0f,  1.0000000,  0.0000000,
763   1.0000000,  1.0000000,  1.0000000,  2.5198421,
764   1.0000000,  4.3267487,  1.0000000,  6.3496042,
765   1.0000000,  8.5498797,  1.0000000, 10.9027236,
766   1.0000000, 13.3905183,  1.0000000, 16.0000000,
767   1.0000000, 18.7207544,  1.0000000, 21.5443469,
768   1.0000000, 24.4637810,  1.0000000, 27.4731418,
769   1.0000000, 30.5673509,  1.0000000, 33.7419917,
770   1.0000000, 36.9931811,  1.0000000,      64.0f,
771   2.5198421,  0.0000000,  2.5198421,  1.0000000,
772   2.5198421,  2.5198421,  2.5198421,  4.3267487,
773   2.5198421,  6.3496042,  2.5198421,  8.5498797,
774   2.5198421, 10.9027236,  2.5198421, 13.3905183,
775   2.5198421, 16.0000000,  2.5198421, 18.7207544,
776   2.5198421, 21.5443469,  2.5198421, 24.4637810,
777   2.5198421, 27.4731418,  2.5198421, 30.5673509,
778   2.5198421, 33.7419917,  2.5198421, 36.9931811,
779   2.5198421,      64.0f,  4.3267487,  0.0000000,
780   4.3267487,  1.0000000,  4.3267487,  2.5198421,
781   4.3267487,  4.3267487,  4.3267487,  6.3496042,
782   4.3267487,  8.5498797,  4.3267487, 10.9027236,
783   4.3267487, 13.3905183,  4.3267487, 16.0000000,
784   4.3267487, 18.7207544,  4.3267487, 21.5443469,
785   4.3267487, 24.4637810,  4.3267487, 27.4731418,
786   4.3267487, 30.5673509,  4.3267487, 33.7419917,
787   4.3267487, 36.9931811,  4.3267487,      64.0f,
788   6.3496042,  0.0000000,  6.3496042,  1.0000000,
789   6.3496042,  2.5198421,  6.3496042,  4.3267487,
790   6.3496042,  6.3496042,  6.3496042,  8.5498797,
791   6.3496042, 10.9027236,  6.3496042, 13.3905183,
792   6.3496042, 16.0000000,  6.3496042, 18.7207544,
793   6.3496042, 21.5443469,  6.3496042, 24.4637810,
794   6.3496042, 27.4731418,  6.3496042, 30.5673509,
795   6.3496042, 33.7419917,  6.3496042, 36.9931811,
796   6.3496042,      64.0f,  8.5498797,  0.0000000,
797   8.5498797,  1.0000000,  8.5498797,  2.5198421,
798   8.5498797,  4.3267487,  8.5498797,  6.3496042,
799   8.5498797,  8.5498797,  8.5498797, 10.9027236,
800   8.5498797, 13.3905183,  8.5498797, 16.0000000,
801   8.5498797, 18.7207544,  8.5498797, 21.5443469,
802   8.5498797, 24.4637810,  8.5498797, 27.4731418,
803   8.5498797, 30.5673509,  8.5498797, 33.7419917,
804   8.5498797, 36.9931811,  8.5498797,      64.0f,
805  10.9027236,  0.0000000, 10.9027236,  1.0000000,
806  10.9027236,  2.5198421, 10.9027236,  4.3267487,
807  10.9027236,  6.3496042, 10.9027236,  8.5498797,
808  10.9027236, 10.9027236, 10.9027236, 13.3905183,
809  10.9027236, 16.0000000, 10.9027236, 18.7207544,
810  10.9027236, 21.5443469, 10.9027236, 24.4637810,
811  10.9027236, 27.4731418, 10.9027236, 30.5673509,
812  10.9027236, 33.7419917, 10.9027236, 36.9931811,
813  10.9027236,      64.0f, 13.3905183,  0.0000000,
814  13.3905183,  1.0000000, 13.3905183,  2.5198421,
815  13.3905183,  4.3267487, 13.3905183,  6.3496042,
816  13.3905183,  8.5498797, 13.3905183, 10.9027236,
817  13.3905183, 13.3905183, 13.3905183, 16.0000000,
818  13.3905183, 18.7207544, 13.3905183, 21.5443469,
819  13.3905183, 24.4637810, 13.3905183, 27.4731418,
820  13.3905183, 30.5673509, 13.3905183, 33.7419917,
821  13.3905183, 36.9931811, 13.3905183,      64.0f,
822  16.0000000,  0.0000000, 16.0000000,  1.0000000,
823  16.0000000,  2.5198421, 16.0000000,  4.3267487,
824  16.0000000,  6.3496042, 16.0000000,  8.5498797,
825  16.0000000, 10.9027236, 16.0000000, 13.3905183,
826  16.0000000, 16.0000000, 16.0000000, 18.7207544,
827  16.0000000, 21.5443469, 16.0000000, 24.4637810,
828  16.0000000, 27.4731418, 16.0000000, 30.5673509,
829  16.0000000, 33.7419917, 16.0000000, 36.9931811,
830  16.0000000,      64.0f, 18.7207544,  0.0000000,
831  18.7207544,  1.0000000, 18.7207544,  2.5198421,
832  18.7207544,  4.3267487, 18.7207544,  6.3496042,
833  18.7207544,  8.5498797, 18.7207544, 10.9027236,
834  18.7207544, 13.3905183, 18.7207544, 16.0000000,
835  18.7207544, 18.7207544, 18.7207544, 21.5443469,
836  18.7207544, 24.4637810, 18.7207544, 27.4731418,
837  18.7207544, 30.5673509, 18.7207544, 33.7419917,
838  18.7207544, 36.9931811, 18.7207544,      64.0f,
839  21.5443469,  0.0000000, 21.5443469,  1.0000000,
840  21.5443469,  2.5198421, 21.5443469,  4.3267487,
841  21.5443469,  6.3496042, 21.5443469,  8.5498797,
842  21.5443469, 10.9027236, 21.5443469, 13.3905183,
843  21.5443469, 16.0000000, 21.5443469, 18.7207544,
844  21.5443469, 21.5443469, 21.5443469, 24.4637810,
845  21.5443469, 27.4731418, 21.5443469, 30.5673509,
846  21.5443469, 33.7419917, 21.5443469, 36.9931811,
847  21.5443469,      64.0f, 24.4637810,  0.0000000,
848  24.4637810,  1.0000000, 24.4637810,  2.5198421,
849  24.4637810,  4.3267487, 24.4637810,  6.3496042,
850  24.4637810,  8.5498797, 24.4637810, 10.9027236,
851  24.4637810, 13.3905183, 24.4637810, 16.0000000,
852  24.4637810, 18.7207544, 24.4637810, 21.5443469,
853  24.4637810, 24.4637810, 24.4637810, 27.4731418,
854  24.4637810, 30.5673509, 24.4637810, 33.7419917,
855  24.4637810, 36.9931811, 24.4637810,      64.0f,
856  27.4731418,  0.0000000, 27.4731418,  1.0000000,
857  27.4731418,  2.5198421, 27.4731418,  4.3267487,
858  27.4731418,  6.3496042, 27.4731418,  8.5498797,
859  27.4731418, 10.9027236, 27.4731418, 13.3905183,
860  27.4731418, 16.0000000, 27.4731418, 18.7207544,
861  27.4731418, 21.5443469, 27.4731418, 24.4637810,
862  27.4731418, 27.4731418, 27.4731418, 30.5673509,
863  27.4731418, 33.7419917, 27.4731418, 36.9931811,
864  27.4731418,      64.0f, 30.5673509,  0.0000000,
865  30.5673509,  1.0000000, 30.5673509,  2.5198421,
866  30.5673509,  4.3267487, 30.5673509,  6.3496042,
867  30.5673509,  8.5498797, 30.5673509, 10.9027236,
868  30.5673509, 13.3905183, 30.5673509, 16.0000000,
869  30.5673509, 18.7207544, 30.5673509, 21.5443469,
870  30.5673509, 24.4637810, 30.5673509, 27.4731418,
871  30.5673509, 30.5673509, 30.5673509, 33.7419917,
872  30.5673509, 36.9931811, 30.5673509,      64.0f,
873  33.7419917,  0.0000000, 33.7419917,  1.0000000,
874  33.7419917,  2.5198421, 33.7419917,  4.3267487,
875  33.7419917,  6.3496042, 33.7419917,  8.5498797,
876  33.7419917, 10.9027236, 33.7419917, 13.3905183,
877  33.7419917, 16.0000000, 33.7419917, 18.7207544,
878  33.7419917, 21.5443469, 33.7419917, 24.4637810,
879  33.7419917, 27.4731418, 33.7419917, 30.5673509,
880  33.7419917, 33.7419917, 33.7419917, 36.9931811,
881  33.7419917,      64.0f, 36.9931811,  0.0000000,
882  36.9931811,  1.0000000, 36.9931811,  2.5198421,
883  36.9931811,  4.3267487, 36.9931811,  6.3496042,
884  36.9931811,  8.5498797, 36.9931811, 10.9027236,
885  36.9931811, 13.3905183, 36.9931811, 16.0000000,
886  36.9931811, 18.7207544, 36.9931811, 21.5443469,
887  36.9931811, 24.4637810, 36.9931811, 27.4731418,
888  36.9931811, 30.5673509, 36.9931811, 33.7419917,
889  36.9931811, 36.9931811, 36.9931811,      64.0f,
890       64.0f,  0.0000000,      64.0f,  1.0000000,
891       64.0f,  2.5198421,      64.0f,  4.3267487,
892       64.0f,  6.3496042,      64.0f,  8.5498797,
893       64.0f, 10.9027236,      64.0f, 13.3905183,
894       64.0f, 16.0000000,      64.0f, 18.7207544,
895       64.0f, 21.5443469,      64.0f, 24.4637810,
896       64.0f, 27.4731418,      64.0f, 30.5673509,
897       64.0f, 33.7419917,      64.0f, 36.9931811,
898       64.0f,      64.0f,
899 };
900
901 const float * const ff_aac_codebook_vectors[] = {
902     codebook_vector0, codebook_vector0, codebook_vector2,
903     codebook_vector2, codebook_vector4, codebook_vector4,
904     codebook_vector6, codebook_vector6, codebook_vector8,
905     codebook_vector8, codebook_vector10,
906 };
907
908 static const float codebook_vector0_vals[] = {
909    -1.0000000,  0.0000000,  1.0000000
910 };
911
912 /*
913  * bits  0:1, 2:3, 4:5, 6:7  index into _vals array
914  *       8:11                number of non-zero values
915  *      12:15                bit mask of non-zero values
916  */
917 static const uint16_t codebook_vector02_idx[] = {
918     0x0000, 0x8140, 0x8180, 0x4110, 0xc250, 0xc290, 0x4120, 0xc260, 0xc2a0,
919     0x2104, 0xa244, 0xa284, 0x6214, 0xe354, 0xe394, 0x6224, 0xe364, 0xe3a4,
920     0x2108, 0xa248, 0xa288, 0x6218, 0xe358, 0xe398, 0x6228, 0xe368, 0xe3a8,
921     0x1101, 0x9241, 0x9281, 0x5211, 0xd351, 0xd391, 0x5221, 0xd361, 0xd3a1,
922     0x3205, 0xb345, 0xb385, 0x7315, 0xf455, 0xf495, 0x7325, 0xf465, 0xf4a5,
923     0x3209, 0xb349, 0xb389, 0x7319, 0xf459, 0xf499, 0x7329, 0xf469, 0xf4a9,
924     0x1102, 0x9242, 0x9282, 0x5212, 0xd352, 0xd392, 0x5222, 0xd362, 0xd3a2,
925     0x3206, 0xb346, 0xb386, 0x7316, 0xf456, 0xf496, 0x7326, 0xf466, 0xf4a6,
926     0x320a, 0xb34a, 0xb38a, 0x731a, 0xf45a, 0xf49a, 0x732a, 0xf46a, 0xf4aa,
927 };
928
929 static const float codebook_vector4_vals[] = {
930    -6.3496042, -4.3267487,
931    -2.5198421, -1.0000000,
932     0.0000000,  1.0000000,
933     2.5198421,  4.3267487,
934     6.3496042,
935 };
936
937 /*
938  * bits  0:3, 4:7  index into _vals array
939  */
940 static const uint16_t codebook_vector4_idx[] = {
941     0x0000, 0x0010, 0x0020, 0x0030, 0x0040, 0x0050, 0x0060, 0x0070, 0x0080,
942     0x0001, 0x0011, 0x0021, 0x0031, 0x0041, 0x0051, 0x0061, 0x0071, 0x0081,
943     0x0002, 0x0012, 0x0022, 0x0032, 0x0042, 0x0052, 0x0062, 0x0072, 0x0082,
944     0x0003, 0x0013, 0x0023, 0x0033, 0x0043, 0x0053, 0x0063, 0x0073, 0x0083,
945     0x0004, 0x0014, 0x0024, 0x0034, 0x0044, 0x0054, 0x0064, 0x0074, 0x0084,
946     0x0005, 0x0015, 0x0025, 0x0035, 0x0045, 0x0055, 0x0065, 0x0075, 0x0085,
947     0x0006, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0076, 0x0086,
948     0x0007, 0x0017, 0x0027, 0x0037, 0x0047, 0x0057, 0x0067, 0x0077, 0x0087,
949     0x0008, 0x0018, 0x0028, 0x0038, 0x0048, 0x0058, 0x0068, 0x0078, 0x0088,
950 };
951
952 /*
953  * bits  0:3, 4:7  index into _vals array
954  *       8:11      number of non-zero values
955  *      12:15      1: only second value non-zero
956  *                 0: other cases
957  */
958 static const uint16_t codebook_vector6_idx[] = {
959     0x0000, 0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0160, 0x0170,
960     0x1101, 0x0211, 0x0221, 0x0231, 0x0241, 0x0251, 0x0261, 0x0271,
961     0x1102, 0x0212, 0x0222, 0x0232, 0x0242, 0x0252, 0x0262, 0x0272,
962     0x1103, 0x0213, 0x0223, 0x0233, 0x0243, 0x0253, 0x0263, 0x0273,
963     0x1104, 0x0214, 0x0224, 0x0234, 0x0244, 0x0254, 0x0264, 0x0274,
964     0x1105, 0x0215, 0x0225, 0x0235, 0x0245, 0x0255, 0x0265, 0x0275,
965     0x1106, 0x0216, 0x0226, 0x0236, 0x0246, 0x0256, 0x0266, 0x0276,
966     0x1107, 0x0217, 0x0227, 0x0237, 0x0247, 0x0257, 0x0267, 0x0277,
967 };
968
969 /*
970  * bits  0:3, 4:7  index into _vals array
971  *       8:11      number of non-zero values
972  *      12:15      1: only second value non-zero
973  *                 0: other cases
974  */
975 static const uint16_t codebook_vector8_idx[] = {
976   0x0000, 0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0160,
977   0x0170, 0x0180, 0x0190, 0x01a0, 0x01b0, 0x01c0,
978   0x1101, 0x0211, 0x0221, 0x0231, 0x0241, 0x0251, 0x0261,
979   0x0271, 0x0281, 0x0291, 0x02a1, 0x02b1, 0x02c1,
980   0x1102, 0x0212, 0x0222, 0x0232, 0x0242, 0x0252, 0x0262,
981   0x0272, 0x0282, 0x0292, 0x02a2, 0x02b2, 0x02c2,
982   0x1103, 0x0213, 0x0223, 0x0233, 0x0243, 0x0253, 0x0263,
983   0x0273, 0x0283, 0x0293, 0x02a3, 0x02b3, 0x02c3,
984   0x1104, 0x0214, 0x0224, 0x0234, 0x0244, 0x0254, 0x0264,
985   0x0274, 0x0284, 0x0294, 0x02a4, 0x02b4, 0x02c4,
986   0x1105, 0x0215, 0x0225, 0x0235, 0x0245, 0x0255, 0x0265,
987   0x0275, 0x0285, 0x0295, 0x02a5, 0x02b5, 0x02c5,
988   0x1106, 0x0216, 0x0226, 0x0236, 0x0246, 0x0256, 0x0266,
989   0x0276, 0x0286, 0x0296, 0x02a6, 0x02b6, 0x02c6,
990   0x1107, 0x0217, 0x0227, 0x0237, 0x0247, 0x0257, 0x0267,
991   0x0277, 0x0287, 0x0297, 0x02a7, 0x02b7, 0x02c7,
992   0x1108, 0x0218, 0x0228, 0x0238, 0x0248, 0x0258, 0x0268,
993   0x0278, 0x0288, 0x0298, 0x02a8, 0x02b8, 0x02c8,
994   0x1109, 0x0219, 0x0229, 0x0239, 0x0249, 0x0259, 0x0269,
995   0x0279, 0x0289, 0x0299, 0x02a9, 0x02b9, 0x02c9,
996   0x110a, 0x021a, 0x022a, 0x023a, 0x024a, 0x025a, 0x026a,
997   0x027a, 0x028a, 0x029a, 0x02aa, 0x02ba, 0x02ca,
998   0x110b, 0x021b, 0x022b, 0x023b, 0x024b, 0x025b, 0x026b,
999   0x027b, 0x028b, 0x029b, 0x02ab, 0x02bb, 0x02cb,
1000   0x110c, 0x021c, 0x022c, 0x023c, 0x024c, 0x025c, 0x026c,
1001   0x027c, 0x028c, 0x029c, 0x02ac, 0x02bc, 0x02cc,
1002 };
1003
1004 static const float codebook_vector10_vals[] = {
1005      0.0000000,  1.0000000,
1006      2.5198421,  4.3267487,
1007      6.3496042,  8.5498797,
1008     10.9027236, 13.3905183,
1009     16.0000000, 18.7207544,
1010     21.5443469, 24.4637810,
1011     27.4731418, 30.5673509,
1012     33.7419917, 36.9931811,
1013 };
1014
1015 /*
1016  * bits  0:3, 4:7  index into _vals array
1017  *       8:9       bit mask of escape-coded entries
1018  *      12:15      number of non-zero values
1019  */
1020 static const uint16_t codebook_vector10_idx[] = {
1021     0x0000, 0x1010, 0x1020, 0x1030, 0x1040, 0x1050, 0x1060, 0x1070,
1022     0x1080, 0x1090, 0x10a0, 0x10b0, 0x10c0, 0x10d0, 0x10e0, 0x10f0, 0x1200,
1023     0x1001, 0x2011, 0x2021, 0x2031, 0x2041, 0x2051, 0x2061, 0x2071,
1024     0x2081, 0x2091, 0x20a1, 0x20b1, 0x20c1, 0x20d1, 0x20e1, 0x20f1, 0x2201,
1025     0x1002, 0x2012, 0x2022, 0x2032, 0x2042, 0x2052, 0x2062, 0x2072,
1026     0x2082, 0x2092, 0x20a2, 0x20b2, 0x20c2, 0x20d2, 0x20e2, 0x20f2, 0x2202,
1027     0x1003, 0x2013, 0x2023, 0x2033, 0x2043, 0x2053, 0x2063, 0x2073,
1028     0x2083, 0x2093, 0x20a3, 0x20b3, 0x20c3, 0x20d3, 0x20e3, 0x20f3, 0x2203,
1029     0x1004, 0x2014, 0x2024, 0x2034, 0x2044, 0x2054, 0x2064, 0x2074,
1030     0x2084, 0x2094, 0x20a4, 0x20b4, 0x20c4, 0x20d4, 0x20e4, 0x20f4, 0x2204,
1031     0x1005, 0x2015, 0x2025, 0x2035, 0x2045, 0x2055, 0x2065, 0x2075,
1032     0x2085, 0x2095, 0x20a5, 0x20b5, 0x20c5, 0x20d5, 0x20e5, 0x20f5, 0x2205,
1033     0x1006, 0x2016, 0x2026, 0x2036, 0x2046, 0x2056, 0x2066, 0x2076,
1034     0x2086, 0x2096, 0x20a6, 0x20b6, 0x20c6, 0x20d6, 0x20e6, 0x20f6, 0x2206,
1035     0x1007, 0x2017, 0x2027, 0x2037, 0x2047, 0x2057, 0x2067, 0x2077,
1036     0x2087, 0x2097, 0x20a7, 0x20b7, 0x20c7, 0x20d7, 0x20e7, 0x20f7, 0x2207,
1037     0x1008, 0x2018, 0x2028, 0x2038, 0x2048, 0x2058, 0x2068, 0x2078,
1038     0x2088, 0x2098, 0x20a8, 0x20b8, 0x20c8, 0x20d8, 0x20e8, 0x20f8, 0x2208,
1039     0x1009, 0x2019, 0x2029, 0x2039, 0x2049, 0x2059, 0x2069, 0x2079,
1040     0x2089, 0x2099, 0x20a9, 0x20b9, 0x20c9, 0x20d9, 0x20e9, 0x20f9, 0x2209,
1041     0x100a, 0x201a, 0x202a, 0x203a, 0x204a, 0x205a, 0x206a, 0x207a,
1042     0x208a, 0x209a, 0x20aa, 0x20ba, 0x20ca, 0x20da, 0x20ea, 0x20fa, 0x220a,
1043     0x100b, 0x201b, 0x202b, 0x203b, 0x204b, 0x205b, 0x206b, 0x207b,
1044     0x208b, 0x209b, 0x20ab, 0x20bb, 0x20cb, 0x20db, 0x20eb, 0x20fb, 0x220b,
1045     0x100c, 0x201c, 0x202c, 0x203c, 0x204c, 0x205c, 0x206c, 0x207c,
1046     0x208c, 0x209c, 0x20ac, 0x20bc, 0x20cc, 0x20dc, 0x20ec, 0x20fc, 0x220c,
1047     0x100d, 0x201d, 0x202d, 0x203d, 0x204d, 0x205d, 0x206d, 0x207d,
1048     0x208d, 0x209d, 0x20ad, 0x20bd, 0x20cd, 0x20dd, 0x20ed, 0x20fd, 0x220d,
1049     0x100e, 0x201e, 0x202e, 0x203e, 0x204e, 0x205e, 0x206e, 0x207e,
1050     0x208e, 0x209e, 0x20ae, 0x20be, 0x20ce, 0x20de, 0x20ee, 0x20fe, 0x220e,
1051     0x100f, 0x201f, 0x202f, 0x203f, 0x204f, 0x205f, 0x206f, 0x207f,
1052     0x208f, 0x209f, 0x20af, 0x20bf, 0x20cf, 0x20df, 0x20ef, 0x20ff, 0x220f,
1053     0x1100, 0x2110, 0x2120, 0x2130, 0x2140, 0x2150, 0x2160, 0x2170,
1054     0x2180, 0x2190, 0x21a0, 0x21b0, 0x21c0, 0x21d0, 0x21e0, 0x21f0, 0x2300,
1055 };
1056
1057 const float *const ff_aac_codebook_vector_vals[] = {
1058     codebook_vector0_vals,  codebook_vector0_vals,
1059     codebook_vector10_vals, codebook_vector10_vals,
1060     codebook_vector4_vals,  codebook_vector4_vals,
1061     codebook_vector10_vals, codebook_vector10_vals,
1062     codebook_vector10_vals, codebook_vector10_vals,
1063     codebook_vector10_vals,
1064 };
1065
1066 const uint16_t *const ff_aac_codebook_vector_idx[] = {
1067     codebook_vector02_idx, codebook_vector02_idx,
1068     codebook_vector02_idx, codebook_vector02_idx,
1069     codebook_vector4_idx,  codebook_vector4_idx,
1070     codebook_vector6_idx,  codebook_vector6_idx,
1071     codebook_vector8_idx,  codebook_vector8_idx,
1072     codebook_vector10_idx,
1073 };
1074
1075 /* @name swb_offsets
1076  * Sample offset into the window indicating the beginning of a scalefactor
1077  * window band
1078  *
1079  * scalefactor window band - term for scalefactor bands within a window,
1080  * given in Table 4.110 to Table 4.128.
1081  *
1082  * scalefactor band - a set of spectral coefficients which are scaled by one
1083  * scalefactor. In case of EIGHT_SHORT_SEQUENCE and grouping a scalefactor band
1084  * may contain several scalefactor window bands of corresponding frequency. For
1085  * all other window_sequences scalefactor bands and scalefactor window bands are
1086  * identical.
1087  * @{
1088  */
1089
1090 static const uint16_t swb_offset_1024_96[] = {
1091       0,   4,   8,  12,  16,  20,  24,  28,
1092      32,  36,  40,  44,  48,  52,  56,  64,
1093      72,  80,  88,  96, 108, 120, 132, 144,
1094     156, 172, 188, 212, 240, 276, 320, 384,
1095     448, 512, 576, 640, 704, 768, 832, 896,
1096     960, 1024
1097 };
1098
1099 static const uint16_t swb_offset_128_96[] = {
1100     0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128
1101 };
1102
1103 static const uint16_t swb_offset_1024_64[] = {
1104       0,   4,   8,  12,  16,  20,  24,  28,
1105      32,  36,  40,  44,  48,  52,  56,  64,
1106      72,  80,  88, 100, 112, 124, 140, 156,
1107     172, 192, 216, 240, 268, 304, 344, 384,
1108     424, 464, 504, 544, 584, 624, 664, 704,
1109     744, 784, 824, 864, 904, 944, 984, 1024
1110 };
1111
1112 static const uint16_t swb_offset_1024_48[] = {
1113       0,   4,   8,  12,  16,  20,  24,  28,
1114      32,  36,  40,  48,  56,  64,  72,  80,
1115      88,  96, 108, 120, 132, 144, 160, 176,
1116     196, 216, 240, 264, 292, 320, 352, 384,
1117     416, 448, 480, 512, 544, 576, 608, 640,
1118     672, 704, 736, 768, 800, 832, 864, 896,
1119     928, 1024
1120 };
1121
1122 static const uint16_t swb_offset_512_48[] = {
1123       0,   4,   8,  12,  16,  20,  24,  28,
1124      32,  36,  40,  44,  48,  52,  56,  60,
1125      68,  76,  84,  92, 100, 112, 124, 136,
1126     148, 164, 184, 208, 236, 268, 300, 332,
1127     364, 396, 428, 460, 512
1128 };
1129
1130 static const uint16_t swb_offset_128_48[] = {
1131      0,   4,   8,  12,  16,  20,  28,  36,
1132     44,  56,  68,  80,  96, 112, 128
1133 };
1134
1135 static const uint16_t swb_offset_1024_32[] = {
1136       0,   4,   8,  12,  16,  20,  24,  28,
1137      32,  36,  40,  48,  56,  64,  72,  80,
1138      88,  96, 108, 120, 132, 144, 160, 176,
1139     196, 216, 240, 264, 292, 320, 352, 384,
1140     416, 448, 480, 512, 544, 576, 608, 640,
1141     672, 704, 736, 768, 800, 832, 864, 896,
1142     928, 960, 992, 1024
1143 };
1144
1145 static const uint16_t swb_offset_512_32[] = {
1146       0,   4,   8,  12,  16,  20,  24,  28,
1147      32,  36,  40,  44,  48,  52,  56,  64,
1148      72,  80,  88,  96, 108, 120, 132, 144,
1149     160, 176, 192, 212, 236, 260, 288, 320,
1150     352, 384, 416, 448, 480, 512
1151 };
1152
1153 static const uint16_t swb_offset_1024_24[] = {
1154       0,   4,   8,  12,  16,  20,  24,  28,
1155      32,  36,  40,  44,  52,  60,  68,  76,
1156      84,  92, 100, 108, 116, 124, 136, 148,
1157     160, 172, 188, 204, 220, 240, 260, 284,
1158     308, 336, 364, 396, 432, 468, 508, 552,
1159     600, 652, 704, 768, 832, 896, 960, 1024
1160 };
1161
1162 static const uint16_t swb_offset_512_24[] = {
1163       0,   4,   8,  12,  16,  20,  24,  28,
1164      32,  36,  40,  44,  52,  60,  68,  80,
1165      92, 104, 120, 140, 164, 192, 224, 256,
1166     288, 320, 352, 384, 416, 448, 480, 512,
1167 };
1168
1169 static const uint16_t swb_offset_128_24[] = {
1170      0,   4,   8,  12,  16,  20,  24,  28,
1171     36,  44,  52,  64,  76,  92, 108, 128
1172 };
1173
1174 static const uint16_t swb_offset_1024_16[] = {
1175       0,   8,  16,  24,  32,  40,  48,  56,
1176      64,  72,  80,  88, 100, 112, 124, 136,
1177     148, 160, 172, 184, 196, 212, 228, 244,
1178     260, 280, 300, 320, 344, 368, 396, 424,
1179     456, 492, 532, 572, 616, 664, 716, 772,
1180     832, 896, 960, 1024
1181 };
1182
1183 static const uint16_t swb_offset_128_16[] = {
1184      0,   4,   8,  12,  16,  20,  24,  28,
1185     32,  40,  48,  60,  72,  88, 108, 128
1186 };
1187
1188 static const uint16_t swb_offset_1024_8[] = {
1189       0,  12,  24,  36,  48,  60,  72,  84,
1190      96, 108, 120, 132, 144, 156, 172, 188,
1191     204, 220, 236, 252, 268, 288, 308, 328,
1192     348, 372, 396, 420, 448, 476, 508, 544,
1193     580, 620, 664, 712, 764, 820, 880, 944,
1194     1024
1195 };
1196
1197 static const uint16_t swb_offset_128_8[] = {
1198      0,   4,   8,  12,  16,  20,  24,  28,
1199     36,  44,  52,  60,  72,  88, 108, 128
1200 };
1201
1202 const uint16_t * const ff_swb_offset_1024[] = {
1203     swb_offset_1024_96, swb_offset_1024_96, swb_offset_1024_64,
1204     swb_offset_1024_48, swb_offset_1024_48, swb_offset_1024_32,
1205     swb_offset_1024_24, swb_offset_1024_24, swb_offset_1024_16,
1206     swb_offset_1024_16, swb_offset_1024_16, swb_offset_1024_8,
1207     swb_offset_1024_8
1208 };
1209
1210 const uint16_t * const ff_swb_offset_512[] = {
1211     NULL,               NULL,               NULL,
1212     swb_offset_512_48,  swb_offset_512_48,  swb_offset_512_32,
1213     swb_offset_512_24,  swb_offset_512_24,  NULL,
1214     NULL,               NULL,               NULL,
1215     NULL
1216 };
1217
1218 const uint16_t * const ff_swb_offset_128[] = {
1219     /* The last entry on the following row is swb_offset_128_64 but is a
1220        duplicate of swb_offset_128_96. */
1221     swb_offset_128_96, swb_offset_128_96, swb_offset_128_96,
1222     swb_offset_128_48, swb_offset_128_48, swb_offset_128_48,
1223     swb_offset_128_24, swb_offset_128_24, swb_offset_128_16,
1224     swb_offset_128_16, swb_offset_128_16, swb_offset_128_8,
1225     swb_offset_128_8
1226 };
1227
1228 // @}
1229
1230 /* @name ff_tns_max_bands
1231  * The maximum number of scalefactor bands on which TNS can operate for the long
1232  * and short transforms respectively. The index to these tables is related to
1233  * the sample rate of the audio.
1234  * @{
1235  */
1236 const uint8_t ff_tns_max_bands_1024[] = {
1237     31, 31, 34, 40, 42, 51, 46, 46, 42, 42, 42, 39, 39
1238 };
1239
1240 const uint8_t ff_tns_max_bands_512[] = {
1241     0, 0, 0, 31, 32, 37, 31, 31, 0, 0, 0, 0, 0
1242 };
1243
1244 const uint8_t ff_tns_max_bands_128[] = {
1245     9, 9, 10, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14
1246 };
1247 // @}
1248
1249 const DECLARE_ALIGNED(32, float, ff_aac_eld_window)[1920] = {
1250      0.00338834,  0.00567745,  0.00847677,  0.01172641,
1251      0.01532555,  0.01917664,  0.02318809,  0.02729259,
1252      0.03144503,  0.03560261,  0.03972499,  0.04379783,
1253      0.04783094,  0.05183357,  0.05581342,  0.05977723,
1254      0.06373173,  0.06768364,  0.07163937,  0.07559976,
1255      0.07956096,  0.08352024,  0.08747623,  0.09143035,
1256      0.09538618,  0.09934771,  0.10331917,  0.10730456,
1257      0.11130697,  0.11532867,  0.11937133,  0.12343922,
1258      0.12753911,  0.13167705,  0.13585812,  0.14008529,
1259      0.14435986,  0.14868291,  0.15305531,  0.15747594,
1260      0.16194193,  0.16645070,  0.17099991,  0.17558633,
1261      0.18020600,  0.18485548,  0.18953191,  0.19423322,
1262      0.19895800,  0.20370512,  0.20847374,  0.21326312,
1263      0.21807244,  0.22290083,  0.22774742,  0.23261210,
1264      0.23749542,  0.24239767,  0.24731889,  0.25225887,
1265      0.25721719,  0.26219330,  0.26718648,  0.27219630,
1266      0.27722262,  0.28226514,  0.28732336,  0.29239628,
1267      0.29748247,  0.30258055,  0.30768914,  0.31280508,
1268      0.31792385,  0.32304172,  0.32815579,  0.33326397,
1269      0.33836470,  0.34345661,  0.34853868,  0.35361188,
1270      0.35867865,  0.36374072,  0.36879900,  0.37385347,
1271      0.37890349,  0.38394836,  0.38898730,  0.39401912,
1272      0.39904236,  0.40405575,  0.40905820,  0.41404819,
1273      0.41902398,  0.42398423,  0.42892805,  0.43385441,
1274      0.43876210,  0.44365014,  0.44851786,  0.45336632,
1275      0.45819759,  0.46301302,  0.46781309,  0.47259722,
1276      0.47736435,  0.48211365,  0.48684450,  0.49155594,
1277      0.49624679,  0.50091636,  0.50556440,  0.51019132,
1278      0.51479771,  0.51938391,  0.52394998,  0.52849587,
1279      0.53302151,  0.53752680,  0.54201160,  0.54647575,
1280      0.55091916,  0.55534181,  0.55974376,  0.56412513,
1281      0.56848615,  0.57282710,  0.57714834,  0.58145030,
1282      0.58492489,  0.58918511,  0.59342326,  0.59763936,
1283      0.60183347,  0.60600561,  0.61015581,  0.61428412,
1284      0.61839056,  0.62247517,  0.62653799,  0.63057912,
1285      0.63459872,  0.63859697,  0.64257403,  0.64653001,
1286      0.65046495,  0.65437887,  0.65827181,  0.66214383,
1287      0.66599499,  0.66982535,  0.67363499,  0.67742394,
1288      0.68119219,  0.68493972,  0.68866653,  0.69237258,
1289      0.69605778,  0.69972207,  0.70336537,  0.70698758,
1290      0.71058862,  0.71416837,  0.71772674,  0.72126361,
1291      0.72477889,  0.72827246,  0.73174419,  0.73519392,
1292      0.73862141,  0.74202643,  0.74540874,  0.74876817,
1293      0.75210458,  0.75541785,  0.75870785,  0.76197437,
1294      0.76521709,  0.76843570,  0.77162988,  0.77479939,
1295      0.77794403,  0.78106359,  0.78415789,  0.78722670,
1296      0.79026979,  0.79328694,  0.79627791,  0.79924244,
1297      0.80218027,  0.80509112,  0.80797472,  0.81083081,
1298      0.81365915,  0.81645949,  0.81923160,  0.82197528,
1299      0.82469037,  0.82737673,  0.83003419,  0.83266262,
1300      0.83526186,  0.83783176,  0.84037217,  0.84288297,
1301      0.84536401,  0.84781517,  0.85023632,  0.85262739,
1302      0.85498836,  0.85731921,  0.85961993,  0.86189052,
1303      0.86413101,  0.86634140,  0.86852173,  0.87067211,
1304      0.87279275,  0.87488384,  0.87694559,  0.87897824,
1305      0.88098206,  0.88295729,  0.88490423,  0.88682332,
1306      0.88871519,  0.89058048,  0.89241983,  0.89423391,
1307      0.89602338,  0.89778893,  0.89953126,  0.90125142,
1308      0.90295086,  0.90463104,  0.90629341,  0.90793946,
1309      0.90957067,  0.91118856,  0.91279464,  0.91439073,
1310      0.91597898,  0.91756153,  0.91914049,  0.92071690,
1311      0.92229070,  0.92386182,  0.92542993,  0.92698946,
1312      0.92852960,  0.93003929,  0.93150727,  0.93291739,
1313      0.93424863,  0.93547974,  0.93658982,  0.93756587,
1314      0.93894072,  0.93922780,  0.93955477,  0.93991290,
1315      0.94029104,  0.94067794,  0.94106258,  0.94144084,
1316      0.94181549,  0.94218963,  0.94256628,  0.94294662,
1317      0.94332998,  0.94371562,  0.94410280,  0.94449122,
1318      0.94488106,  0.94527249,  0.94566568,  0.94606074,
1319      0.94645772,  0.94685665,  0.94725759,  0.94766054,
1320      0.94806547,  0.94847234,  0.94888115,  0.94929190,
1321      0.94970469,  0.95011960,  0.95053672,  0.95095604,
1322      0.95137751,  0.95180105,  0.95222658,  0.95265413,
1323      0.95308380,  0.95351571,  0.95394994,  0.95438653,
1324      0.95482538,  0.95526643,  0.95570958,  0.95615486,
1325      0.95660234,  0.95705214,  0.95750433,  0.95795892,
1326      0.95841582,  0.95887493,  0.95933616,  0.95979949,
1327      0.96026500,  0.96073277,  0.96120286,  0.96167526,
1328      0.96214986,  0.96262655,  0.96310522,  0.96358586,
1329      0.96406853,  0.96455330,  0.96504026,  0.96552936,
1330      0.96602051,  0.96651360,  0.96700850,  0.96750520,
1331      0.96800376,  0.96850424,  0.96900670,  0.96951112,
1332      0.97001738,  0.97052533,  0.97103488,  0.97154597,
1333      0.97205867,  0.97257304,  0.97308915,  0.97360694,
1334      0.97412631,  0.97464711,  0.97516923,  0.97569262,
1335      0.97621735,  0.97674350,  0.97727111,  0.97780016,
1336      0.97833051,  0.97886205,  0.97939463,  0.97992823,
1337      0.98046291,  0.98099875,  0.98153580,  0.98207405,
1338      0.98261337,  0.98315364,  0.98369474,  0.98423664,
1339      0.98477941,  0.98532311,  0.98586780,  0.98641348,
1340      0.98696003,  0.98750734,  0.98805530,  0.98860389,
1341      0.98915320,  0.98970328,  0.99025423,  0.99080602,
1342      0.99135855,  0.99191171,  0.99246541,  0.99301962,
1343      0.99357443,  0.99412992,  0.99468617,  0.99524320,
1344      0.99580092,  0.99635926,  0.99691814,  0.99747748,
1345      0.99803721,  0.99859725,  0.99915752,  0.99971793,
1346      1.00028215,  1.00084319,  1.00140472,  1.00196665,
1347      1.00252889,  1.00309139,  1.00365404,  1.00421679,
1348      1.00477954,  1.00534221,  1.00590474,  1.00646713,
1349      1.00702945,  1.00759179,  1.00815424,  1.00871678,
1350      1.00927930,  1.00984169,  1.01040384,  1.01096575,
1351      1.01152747,  1.01208910,  1.01265070,  1.01321226,
1352      1.01377365,  1.01433478,  1.01489551,  1.01545584,
1353      1.01601582,  1.01657553,  1.01713502,  1.01769427,
1354      1.01825316,  1.01881154,  1.01936929,  1.01992639,
1355      1.02048289,  1.02103888,  1.02159441,  1.02214945,
1356      1.02270387,  1.02325751,  1.02381025,  1.02436204,
1357      1.02491295,  1.02546304,  1.02601238,  1.02656092,
1358      1.02710853,  1.02765508,  1.02820041,  1.02874449,
1359      1.02928737,  1.02982913,  1.03036981,  1.03090937,
1360      1.03144768,  1.03198460,  1.03252000,  1.03305384,
1361      1.03358617,  1.03411707,  1.03464659,  1.03517470,
1362      1.03570128,  1.03622620,  1.03674934,  1.03727066,
1363      1.03779024,  1.03830815,  1.03882446,  1.03933914,
1364      1.03985206,  1.04036312,  1.04087217,  1.04137920,
1365      1.04188428,  1.04238748,  1.04288888,  1.04338845,
1366      1.04388610,  1.04438170,  1.04487515,  1.04536645,
1367      1.04585569,  1.04634297,  1.04682838,  1.04731192,
1368      1.04779350,  1.04827303,  1.04875042,  1.04922568,
1369      1.04969891,  1.05017022,  1.05063974,  1.05110746,
1370      1.05157332,  1.05203721,  1.05249907,  1.05295889,
1371      1.05341676,  1.05387277,  1.05432700,  1.05477948,
1372      1.05523018,  1.05567906,  1.05612608,  1.05657124,
1373      1.05701459,  1.05745616,  1.05789601,  1.05833426,
1374      1.05877109,  1.05920669,  1.05964125,  1.06007444,
1375      1.06050542,  1.06093335,  1.06135746,  1.06177909,
1376      1.06220164,  1.06262858,  1.06306309,  1.06350050,
1377      1.06392837,  1.06433391,  1.06470443,  1.06502996,
1378      1.06481076,  1.06469765,  1.06445004,  1.06408002,
1379      1.06361382,  1.06307719,  1.06249453,  1.06188365,
1380      1.06125612,  1.06062291,  1.05999418,  1.05937132,
1381      1.05874726,  1.05811486,  1.05746728,  1.05680000,
1382      1.05611070,  1.05539715,  1.05465735,  1.05389329,
1383      1.05311083,  1.05231578,  1.05151372,  1.05070811,
1384      1.04990044,  1.04909210,  1.04828434,  1.04747647,
1385      1.04666590,  1.04585003,  1.04502628,  1.04419009,
1386      1.04333499,  1.04245452,  1.04154244,  1.04059452,
1387      1.03960846,  1.03858207,  1.03751326,  1.03640189,
1388      1.03524976,  1.03405868,  1.03283047,  1.03156812,
1389      1.03027574,  1.02895743,  1.02761717,  1.02625804,
1390      1.02488222,  1.02349184,  1.02208892,  1.02067450,
1391      1.01924861,  1.01781123,  1.01636229,  1.01490045,
1392      1.01342315,  1.01192778,  1.01041175,  1.00887284,
1393      1.00730915,  1.00571882,  1.00409996,  1.00245032,
1394      1.00076734,  0.99904842,  0.99729101,  0.99549380,
1395      0.99365664,  0.99177946,  0.98986234,  0.98791024,
1396      0.98593294,  0.98394037,  0.98194226,  0.97994532,
1397      0.97795324,  0.97596955,  0.97399748,  0.97203326,
1398      0.97006624,  0.96808546,  0.96608018,  0.96404416,
1399      0.96197556,  0.95987276,  0.95773420,  0.95556018,
1400      0.95335291,  0.95111462,  0.94884764,  0.94655663,
1401      0.94424858,  0.94193055,  0.93960953,  0.93729154,
1402      0.93498157,  0.93268456,  0.93040503,  0.92813771,
1403      0.92586755,  0.92357910,  0.92125731,  0.91889642,
1404      0.91649998,  0.91407191,  0.91161623,  0.90913975,
1405      0.90665202,  0.90416271,  0.90168115,  0.89920934,
1406      0.89674189,  0.89427312,  0.89179743,  0.88931147,
1407      0.88681415,  0.88430445,  0.88178141,  0.87924528,
1408      0.87669753,  0.87413966,  0.87157318,  0.86899958,
1409      0.86642037,  0.86383703,  0.86125106,  0.85866393,
1410      0.85604236,  0.85344385,  0.85083093,  0.84820550,
1411      0.84556943,  0.84292458,  0.84027278,  0.83761586,
1412      0.83495565,  0.83229393,  0.82963243,  0.82697135,
1413      0.82430933,  0.82164496,  0.81897669,  0.81630017,
1414      0.81360822,  0.81089355,  0.80814924,  0.80537741,
1415      0.80258920,  0.79979611,  0.79700954,  0.79423813,
1416      0.79148780,  0.78876432,  0.78607290,  0.78340590,
1417      0.78074288,  0.77806279,  0.77534514,  0.77258187,
1418      0.76977737,  0.76693654,  0.76406441,  0.76116851,
1419      0.75825892,  0.75534582,  0.75243924,  0.74954634,
1420      0.74667135,  0.74381840,  0.74099145,  0.73819147,
1421      0.73541641,  0.73266408,  0.72993193,  0.72720913,
1422      0.72447661,  0.72171494,  0.71890515,  0.71603932,
1423      0.71312056,  0.71015250,  0.70713900,  0.70409084,
1424      0.70102565,  0.69796137,  0.69491556,  0.69189772,
1425      0.68890931,  0.68595141,  0.68302498,  0.68012852,
1426      0.67725801,  0.67440936,  0.67157841,  0.66876081,
1427      0.66595195,  0.66314722,  0.66034194,  0.65753027,
1428      0.65470525,  0.65185984,  0.64898709,  0.64608214,
1429      0.64314221,  0.64016460,  0.63714680,  0.63409034,
1430      0.63100082,  0.62788400,  0.62474577,  0.62159473,
1431      0.61844225,  0.61529977,  0.61217866,  0.60908811,
1432      0.60603510,  0.60302654,  0.60006916,  0.59716588,
1433      0.59431580,  0.59151787,  0.58877068,  0.58606495,
1434      0.58338353,  0.58070891,  0.57802356,  0.57530864,
1435      0.57254404,  0.56970958,  0.56678577,  0.56376860,
1436      0.56066951,  0.55750064,  0.55427451,  0.55101301,
1437      0.54774732,  0.54450907,  0.54132936,  0.53822744,
1438      0.53521072,  0.53228613,  0.52945979,  0.52671997,
1439      0.52403708,  0.52138072,  0.51872085,  0.51603570,
1440      0.51331170,  0.51053560,  0.50769466,  0.50478931,
1441      0.50183308,  0.49884001,  0.49582406,  0.49279905,
1442      0.48985748,  0.48679641,  0.48379429,  0.48085363,
1443      0.47796576,  0.47512151,  0.47231151,  0.46952402,
1444      0.46674486,  0.46395978,  0.46115496,  0.45832607,
1445      0.45547830,  0.45261727,  0.44974866,  0.44688011,
1446      0.44402125,  0.44118178,  0.43837094,  0.43558772,
1447      0.43282082,  0.43005847,  0.42728913,  0.42450572,
1448      0.42170567,  0.41888658,  0.41604633,  0.41318897,
1449      0.41032472,  0.40746405,  0.40461724,  0.40178943,
1450      0.39898066,  0.39619073,  0.39341940,  0.39066519,
1451      0.38792536,  0.38519713,  0.38247773,  0.37976476,
1452      0.37705620,  0.37435006,  0.37164438,  0.36893869,
1453      0.36623396,  0.36353124,  0.36083153,  0.35813533,
1454      0.35544262,  0.35275338,  0.35006755,  0.34738530,
1455      0.34470699,  0.34203296,  0.33936359,  0.33669922,
1456      0.33404027,  0.33138711,  0.32874013,  0.32609944,
1457      0.32346493,  0.32083645,  0.31821388,  0.31559703,
1458      0.31298573,  0.31037987,  0.30777941,  0.30518446,
1459      0.30259525,  0.30001202,  0.29743499,  0.29486428,
1460      0.29229989,  0.28974179,  0.28718997,  0.28464452,
1461      0.28210562,  0.27957346,  0.27704820,  0.27452992,
1462      0.27201854,  0.26951399,  0.26701622,  0.26452533,
1463      0.26204158,  0.25956526,  0.25709662,  0.25463583,
1464      0.25218294,  0.24973798,  0.24730100,  0.24487207,
1465      0.24245133,  0.24003893,  0.23763500,  0.23523959,
1466      0.23285262,  0.23047401,  0.22810369,  0.22574170,
1467      0.22338818,  0.22104329,  0.21870719,  0.21637986,
1468      0.21406117,  0.21175095,  0.20944904,  0.20715535,
1469      0.20486987,  0.20259261,  0.20032356,  0.19806259,
1470      0.19580944,  0.19356385,  0.19132556,  0.18909442,
1471      0.18687040,  0.18465350,  0.18244372,  0.18024164,
1472      0.17804841,  0.17586521,  0.17369322,  0.17153360,
1473      0.16938755,  0.16725622,  0.16514081,  0.16304247,
1474      0.16098974,  0.15896561,  0.15696026,  0.15497259,
1475      0.15300151,  0.15104590,  0.14910466,  0.14717666,
1476      0.14526081,  0.14335599,  0.14146111,  0.13957570,
1477      0.13769993,  0.13583399,  0.13397806,  0.13213229,
1478      0.13029682,  0.12847178,  0.12665729,  0.12485353,
1479      0.12306074,  0.12127916,  0.11950900,  0.11775043,
1480      0.11600347,  0.11426820,  0.11254464,  0.11083292,
1481      0.10913318,  0.10744559,  0.10577028,  0.10410733,
1482      0.10245672,  0.10081842,  0.09919240,  0.09757872,
1483      0.09597750,  0.09438884,  0.09281288,  0.09124964,
1484      0.08969907,  0.08816111,  0.08663570,  0.08512288,
1485      0.08362274,  0.08213540,  0.08066096,  0.07919944,
1486      0.07775076,  0.07631484,  0.07489161,  0.07348108,
1487      0.07208335,  0.07069851,  0.06932666,  0.06796781,
1488      0.06662187,  0.06528874,  0.06396833,  0.06266065,
1489      0.06136578,  0.06008380,  0.05881480,  0.05755876,
1490      0.05631557,  0.05508511,  0.05386728,  0.05266206,
1491      0.05146951,  0.05028971,  0.04912272,  0.04796855,
1492      0.04682709,  0.04569825,  0.04458194,  0.04347817,
1493      0.04238704,  0.04130868,  0.04024318,  0.03919056,
1494      0.03815071,  0.03712352,  0.03610890,  0.03510679,
1495      0.03411720,  0.03314013,  0.03217560,  0.03122343,
1496      0.03028332,  0.02935494,  0.02843799,  0.02753230,
1497      0.02663788,  0.02575472,  0.02488283,  0.02402232,
1498      0.02317341,  0.02233631,  0.02151124,  0.02069866,
1499      0.01989922,  0.01911359,  0.01834241,  0.01758563,
1500      0.01684248,  0.01611219,  0.01539397,  0.01468726,
1501      0.01399167,  0.01330687,  0.01263250,  0.01196871,
1502      0.01131609,  0.01067527,  0.01004684,  0.00943077,
1503      0.00882641,  0.00823307,  0.00765011,  0.00707735,
1504      0.00651513,  0.00596377,  0.00542364,  0.00489514,
1505      0.00437884,  0.00387530,  0.00338509,  0.00290795,
1506      0.00244282,  0.00198860,  0.00154417,  0.00110825,
1507      0.00067934,  0.00025589, -0.00016357, -0.00057897,
1508     -0.00098865, -0.00139089, -0.00178397, -0.00216547,
1509     -0.00253230, -0.00288133, -0.00320955, -0.00351626,
1510     -0.00380315, -0.00407198, -0.00432457, -0.00456373,
1511     -0.00479326, -0.00501699, -0.00523871, -0.00546066,
1512     -0.00568360, -0.00590821, -0.00613508, -0.00636311,
1513     -0.00658944, -0.00681117, -0.00702540, -0.00722982,
1514     -0.00742268, -0.00760226, -0.00776687, -0.00791580,
1515     -0.00804933, -0.00816774, -0.00827139, -0.00836122,
1516     -0.00843882, -0.00850583, -0.00856383, -0.00861430,
1517     -0.00865853, -0.00869781, -0.00873344, -0.00876633,
1518     -0.00879707, -0.00882622, -0.00885433, -0.00888132,
1519     -0.00890652, -0.00892925, -0.00894881, -0.00896446,
1520     -0.00897541, -0.00898088, -0.00898010, -0.00897234,
1521     -0.00895696, -0.00893330, -0.00890076, -0.00885914,
1522     -0.00880875, -0.00874987, -0.00868282, -0.00860825,
1523     -0.00852716, -0.00844055, -0.00834941, -0.00825485,
1524     -0.00815807, -0.00806025, -0.00796253, -0.00786519,
1525     -0.00776767, -0.00766937, -0.00756971, -0.00746790,
1526     -0.00736305, -0.00725422, -0.00714055, -0.00702161,
1527     -0.00689746, -0.00676816, -0.00663381, -0.00649489,
1528     -0.00635230, -0.00620694, -0.00605969, -0.00591116,
1529     -0.00576167, -0.00561155, -0.00546110, -0.00531037,
1530     -0.00515917, -0.00500732, -0.00485462, -0.00470075,
1531     -0.00454530, -0.00438786, -0.00422805, -0.00406594,
1532     -0.00390204, -0.00373686, -0.00357091, -0.00340448,
1533     -0.00323770, -0.00307066, -0.00290344, -0.00273610,
1534     -0.00256867, -0.00240117, -0.00223365, -0.00206614,
1535     -0.00189866, -0.00173123, -0.00156390, -0.00139674,
1536     -0.00122989, -0.00106351, -0.00089772, -0.00073267,
1537     -0.00056849, -0.00040530, -0.00024324, -0.00008241,
1538      0.00008214,  0.00024102,  0.00039922,  0.00055660,
1539      0.00071299,  0.00086826,  0.00102224,  0.00117480,
1540      0.00132579,  0.00147507,  0.00162252,  0.00176804,
1541      0.00191161,  0.00205319,  0.00219277,  0.00233029,
1542      0.00246567,  0.00259886,  0.00272975,  0.00285832,
1543      0.00298453,  0.00310839,  0.00322990,  0.00334886,
1544      0.00346494,  0.00357778,  0.00368706,  0.00379273,
1545      0.00389501,  0.00399411,  0.00409020,  0.00418350,
1546      0.00427419,  0.00436249,  0.00444858,  0.00453250,
1547      0.00461411,  0.00469328,  0.00476988,  0.00484356,
1548      0.00491375,  0.00497987,  0.00504139,  0.00509806,
1549      0.00514990,  0.00519693,  0.00523920,  0.00527700,
1550      0.00531083,  0.00534122,  0.00536864,  0.00539357,
1551      0.00541649,  0.00543785,  0.00545809,  0.00547713,
1552      0.00549441,  0.00550936,  0.00552146,  0.00553017,
1553      0.00553494,  0.00553524,  0.00553058,  0.00552065,
1554      0.00550536,  0.00548459,  0.00545828,  0.00542662,
1555      0.00539007,  0.00534910,  0.00530415,  0.00525568,
1556      0.00520417,  0.00515009,  0.00509387,  0.00503595,
1557      0.00497674,  0.00491665,  0.00485605,  0.00479503,
1558      0.00473336,  0.00467082,  0.00460721,  0.00454216,
1559      0.00447517,  0.00440575,  0.00433344,  0.00425768,
1560      0.00417786,  0.00409336,  0.00400363,  0.00390837,
1561      0.00380759,  0.00370130,  0.00358952,  0.00347268,
1562      0.00335157,  0.00322699,  0.00309975,  0.00297088,
1563      0.00284164,  0.00271328,  0.00258700,  0.00246328,
1564      0.00234195,  0.00222281,  0.00210562,  0.00198958,
1565      0.00187331,  0.00175546,  0.00163474,  0.00151020,
1566      0.00138130,  0.00124750,  0.00110831,  0.00096411,
1567      0.00081611,  0.00066554,  0.00051363,  0.00036134,
1568      0.00020940,  0.00005853, -0.00009058, -0.00023783,
1569     -0.00038368, -0.00052861, -0.00067310, -0.00081757,
1570     -0.00096237, -0.00110786, -0.00125442, -0.00140210,
1571     -0.00155065, -0.00169984, -0.00184940, -0.00199910,
1572     -0.00214872, -0.00229798, -0.00244664, -0.00259462,
1573     -0.00274205, -0.00288912, -0.00303596, -0.00318259,
1574     -0.00332890, -0.00347480, -0.00362024, -0.00376519,
1575     -0.00390962, -0.00405345, -0.00419658, -0.00433902,
1576     -0.00448085, -0.00462219, -0.00476309, -0.00490357,
1577     -0.00504361, -0.00518321, -0.00532243, -0.00546132,
1578     -0.00559988, -0.00573811, -0.00587602, -0.00601363,
1579     -0.00615094, -0.00628795, -0.00642466, -0.00656111,
1580     -0.00669737, -0.00683352, -0.00696963, -0.00710578,
1581     -0.00724208, -0.00737862, -0.00751554, -0.00765295,
1582     -0.00779098, -0.00792976, -0.00806941, -0.00821006,
1583     -0.00835183, -0.00849485, -0.00863926, -0.00878522,
1584     -0.00893293, -0.00908260, -0.00923444, -0.00938864,
1585     -0.00954537, -0.00970482, -0.00986715, -0.01003173,
1586     -0.01019711, -0.01036164, -0.01052357, -0.01068184,
1587     -0.01083622, -0.01098652, -0.01113252, -0.01127409,
1588     -0.01141114, -0.01154358, -0.01167135, -0.01179439,
1589     -0.01191268, -0.01202619, -0.01213493, -0.01223891,
1590     -0.01233817, -0.01243275, -0.01252272, -0.01260815,
1591     -0.01268915, -0.01276583, -0.01283832, -0.01290685,
1592     -0.01297171, -0.01303320, -0.01309168, -0.01314722,
1593     -0.01319969, -0.01324889, -0.01329466, -0.01333693,
1594     -0.01337577, -0.01341125, -0.01344345, -0.01347243,
1595     -0.01349823, -0.01352089, -0.01354045, -0.01355700,
1596     -0.01357068, -0.01358164, -0.01359003, -0.01359587,
1597     -0.01359901, -0.01359931, -0.01359661, -0.01359087,
1598     -0.01358219, -0.01357065, -0.01355637, -0.01353935,
1599     -0.01351949, -0.01349670, -0.01347088, -0.01344214,
1600     -0.01341078, -0.01337715, -0.01334158, -0.01330442,
1601     -0.01326601, -0.01322671, -0.01318689, -0.01314692,
1602     -0.01310123, -0.01306470, -0.01302556, -0.01298381,
1603     -0.01293948, -0.01289255, -0.01284305, -0.01279095,
1604     -0.01273625, -0.01267893, -0.01261897, -0.01255632,
1605     -0.01249096, -0.01242283, -0.01235190, -0.01227827,
1606     -0.01220213, -0.01212366, -0.01204304, -0.01196032,
1607     -0.01187543, -0.01178829, -0.01169884, -0.01160718,
1608     -0.01151352, -0.01141809, -0.01132111, -0.01122272,
1609     -0.01112304, -0.01102217, -0.01092022, -0.01081730,
1610     -0.01071355, -0.01060912, -0.01050411, -0.01039854,
1611     -0.01029227, -0.01018521, -0.01007727, -0.00996859,
1612     -0.00985959, -0.00975063, -0.00964208, -0.00953420,
1613     -0.00942723, -0.00932135, -0.00921677, -0.00911364,
1614     -0.00901208, -0.00891220, -0.00881412, -0.00871792,
1615     -0.00862369, -0.00853153, -0.00844149, -0.00835360,
1616     -0.00826785, -0.00818422, -0.00810267, -0.00802312,
1617     -0.00794547, -0.00786959, -0.00779533, -0.00772165,
1618     -0.00764673, -0.00756886, -0.00748649, -0.00739905,
1619     -0.00730681, -0.00721006, -0.00710910, -0.00700419,
1620     -0.00689559, -0.00678354, -0.00666829, -0.00655007,
1621     -0.00642916, -0.00630579, -0.00618022, -0.00605267,
1622     -0.00592333, -0.00579240, -0.00566006, -0.00552651,
1623     -0.00539194, -0.00525653, -0.00512047, -0.00498390,
1624     -0.00484693, -0.00470969, -0.00457228, -0.00443482,
1625     -0.00429746, -0.00416034, -0.00402359, -0.00388738,
1626     -0.00375185, -0.00361718, -0.00348350, -0.00335100,
1627     -0.00321991, -0.00309043, -0.00296276, -0.00283698,
1628     -0.00271307, -0.00259098, -0.00247066, -0.00235210,
1629     -0.00223531, -0.00212030, -0.00200709, -0.00189576,
1630     -0.00178647, -0.00167936, -0.00157457, -0.00147216,
1631     -0.00137205, -0.00127418, -0.00117849, -0.00108498,
1632     -0.00099375, -0.00090486, -0.00081840, -0.00073444,
1633     -0.00065309, -0.00057445, -0.00049860, -0.00042551,
1634     -0.00035503, -0.00028700, -0.00022125, -0.00015761,
1635     -0.00009588, -0.00003583,  0.00002272,  0.00007975,
1636      0.00013501,  0.00018828,  0.00023933,  0.00028784,
1637      0.00033342,  0.00037572,  0.00041438,  0.00044939,
1638      0.00048103,  0.00050958,  0.00053533,  0.00055869,
1639      0.00058015,  0.00060022,  0.00061935,  0.00063781,
1640      0.00065568,  0.00067303,  0.00068991,  0.00070619,
1641      0.00072155,  0.00073567,  0.00074826,  0.00075912,
1642      0.00076811,  0.00077509,  0.00077997,  0.00078275,
1643      0.00078351,  0.00078237,  0.00077943,  0.00077484,
1644      0.00076884,  0.00076160,  0.00075335,  0.00074423,
1645      0.00073442,  0.00072404,  0.00071323,  0.00070209,
1646      0.00069068,  0.00067906,  0.00066728,  0.00065534,
1647      0.00064321,  0.00063086,  0.00061824,  0.00060534,
1648      0.00059211,  0.00057855,  0.00056462,  0.00055033,
1649      0.00053566,  0.00052063,  0.00050522,  0.00048949,
1650      0.00047349,  0.00045728,  0.00044092,  0.00042447,
1651      0.00040803,  0.00039166,  0.00037544,  0.00035943,
1652      0.00034371,  0.00032833,  0.00031333,  0.00029874,
1653      0.00028452,  0.00027067,  0.00025715,  0.00024395,
1654      0.00023104,  0.00021842,  0.00020606,  0.00019398,
1655      0.00018218,  0.00017069,  0.00015953,  0.00014871,
1656      0.00013827,  0.00012823,  0.00011861,  0.00010942,
1657      0.00010067,  0.00009236,  0.00008448,  0.00007703,
1658      0.00006999,  0.00006337,  0.00005714,  0.00005129,
1659      0.00004583,  0.00004072,  0.00003597,  0.00003157,
1660      0.00002752,  0.00002380,  0.00002042,  0.00001736,
1661      0.00001461,  0.00001215,  0.00000998,  0.00000807,
1662      0.00000641,  0.00000499,  0.00000378,  0.00000278,
1663      0.00000196,  0.00000132,  0.00000082,  0.00000046,
1664      0.00000020,  0.00000005, -0.00000003, -0.00000006,
1665     -0.00000004, -0.00000001,  0.00000001,  0.00000001,
1666      0.00000001,  0.00000001, -0.00000001, -0.00000004,
1667     -0.00000005, -0.00000003,  0.00000005,  0.00000020,
1668      0.00000043,  0.00000077,  0.00000123,  0.00000183,
1669      0.00000257,  0.00000348,  0.00000455,  0.00000581,
1670      0.00000727,  0.00000893,  0.00001080,  0.00001290,
1671      0.00001522,  0.00001778,  0.00002057,  0.00002362,
1672      0.00002691,  0.00003044,  0.00003422,  0.00003824,
1673      0.00004250,  0.00004701,  0.00005176,  0.00005676,
1674      0.00006200,  0.00006749,  0.00007322,  0.00007920,
1675      0.00008541,  0.00009186,  0.00009854,  0.00010543,
1676      0.00011251,  0.00011975,  0.00012714,  0.00013465,
1677      0.00014227,  0.00014997,  0.00015775,  0.00016558,
1678      0.00017348,  0.00018144,  0.00018947,  0.00019756,
1679      0.00020573,  0.00021399,  0.00022233,  0.00023076,
1680      0.00023924,  0.00024773,  0.00025621,  0.00026462,
1681      0.00027293,  0.00028108,  0.00028904,  0.00029675,
1682      0.00030419,  0.00031132,  0.00031810,  0.00032453,
1683      0.00033061,  0.00033632,  0.00034169,  0.00034672,
1684      0.00035142,  0.00035580,  0.00035988,  0.00036369,
1685      0.00036723,  0.00037053,  0.00037361,  0.00037647,
1686      0.00037909,  0.00038145,  0.00038352,  0.00038527,
1687      0.00038663,  0.00038757,  0.00038801,  0.00038790,
1688      0.00038717,  0.00038572,  0.00038350,  0.00038044,
1689      0.00037651,  0.00037170,  0.00036597,  0.00035936,
1690      0.00035191,  0.00034370,  0.00033480,  0.00032531,
1691      0.00031537,  0.00030512,  0.00029470,  0.00028417,
1692      0.00027354,  0.00026279,  0.00025191,  0.00024081,
1693      0.00022933,  0.00021731,  0.00020458,  0.00019101,
1694      0.00017654,  0.00016106,  0.00014452,  0.00012694,
1695      0.00010848,  0.00008929,  0.00006953,  0.00004935,
1696      0.00002884,  0.00000813, -0.00001268, -0.00003357,
1697     -0.00005457, -0.00007574, -0.00009714, -0.00011882,
1698     -0.00014082, -0.00016318, -0.00018595, -0.00020912,
1699     -0.00023265, -0.00025650, -0.00028060, -0.00030492,
1700     -0.00032941, -0.00035400, -0.00037865, -0.00040333,
1701     -0.00042804, -0.00045279, -0.00047759, -0.00050243,
1702     -0.00052728, -0.00055209, -0.00057685, -0.00060153,
1703     -0.00062611, -0.00065056, -0.00067485, -0.00069895,
1704     -0.00072287, -0.00074660, -0.00077013, -0.00079345,
1705     -0.00081653, -0.00083936, -0.00086192, -0.00088421,
1706     -0.00090619, -0.00092786, -0.00094919, -0.00097017,
1707     -0.00099077, -0.00101098, -0.00103077, -0.00105012,
1708     -0.00106904, -0.00108750, -0.00110549, -0.00112301,
1709     -0.00114005, -0.00115660, -0.00117265, -0.00118821,
1710     -0.00120325, -0.00121779, -0.00123180, -0.00124528,
1711     -0.00125822, -0.00127061, -0.00128243, -0.00129368,
1712     -0.00130435, -0.00131445, -0.00132395, -0.00133285,
1713     -0.00134113, -0.00134878, -0.00135577, -0.00136215,
1714     -0.00136797, -0.00137333, -0.00137834, -0.00138305,
1715     -0.00138748, -0.00139163, -0.00139551, -0.00139913,
1716     -0.00140249, -0.00140559, -0.00140844, -0.00141102,
1717     -0.00141334, -0.00141538, -0.00141714, -0.00141861,
1718     -0.00141978, -0.00142064, -0.00142117, -0.00142138,
1719     -0.00142125, -0.00142077, -0.00141992, -0.00141870,
1720     -0.00141710, -0.00141510, -0.00141268, -0.00140986,
1721     -0.00140663, -0.00140301, -0.00139900, -0.00139460,
1722     -0.00138981, -0.00138464, -0.00137908, -0.00137313,
1723     -0.00136680, -0.00136010, -0.00135301, -0.00134555,
1724     -0.00133772, -0.00132952, -0.00132095, -0.00131201,
1725     -0.00130272, -0.00129307, -0.00128309, -0.00127277,
1726     -0.00126211, -0.00125113, -0.00123981, -0.00122817,
1727     -0.00121622, -0.00120397, -0.00119141, -0.00117859,
1728     -0.00116552, -0.00115223, -0.00113877, -0.00112517,
1729     -0.00111144, -0.00109764, -0.00108377, -0.00106989,
1730 };