1 /********************************************************************
3 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
4 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
5 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
6 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
8 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
9 * by the Xiph.Org Foundation https://xiph.org/ *
11 ********************************************************************
13 function: masking curve data for psychoacoustics
15 ********************************************************************/
20 /* more detailed ATH; the bass if flat to save stressing the floor
21 overly for only a bin or two of savings. */
24 static const float ATH[]={
25 /*15*/ -51, -52, -53, -54, -55, -56, -57, -58,
26 /*31*/ -59, -60, -61, -62, -63, -64, -65, -66,
27 /*63*/ -67, -68, -69, -70, -71, -72, -73, -74,
28 /*125*/ -75, -76, -77, -78, -80, -81, -82, -83,
29 /*250*/ -84, -85, -86, -87, -88, -88, -89, -89,
30 /*500*/ -90, -91, -91, -92, -93, -94, -95, -96,
31 /*1k*/ -96, -97, -98, -98, -99, -99,-100,-100,
32 /*2k*/ -101,-102,-103,-104,-106,-107,-107,-107,
33 /*4k*/ -107,-105,-103,-102,-101, -99, -98, -96,
34 /*8k*/ -95, -95, -96, -97, -96, -95, -93, -90,
35 /*16k*/ -80, -70, -50, -40, -30, -30, -30, -30
38 /* The tone masking curves from Ehmer's and Fielder's papers have been
39 replaced by an empirically collected data set. The previously
40 published values were, far too often, simply on crack. */
42 #define EHMER_OFFSET 16
45 /* masking tones from -50 to 0dB, 62.5 through 16kHz at half octaves
46 test tones from -2 octaves to +5 octaves sampled at eighth octaves */
47 /* (Vorbis 0dB, the loudest possible tone, is assumed to be ~100dB SPL
48 for collection of these curves) */
50 static const float tonemasks[P_BANDS][6][EHMER_MAX]={
52 {{ -60, -60, -60, -60, -60, -60, -60, -60,
53 -60, -60, -60, -60, -62, -62, -65, -73,
54 -69, -68, -68, -67, -70, -70, -72, -74,
55 -75, -79, -79, -80, -83, -88, -93, -100,
56 -110, -999, -999, -999, -999, -999, -999, -999,
57 -999, -999, -999, -999, -999, -999, -999, -999,
58 -999, -999, -999, -999, -999, -999, -999, -999},
59 { -48, -48, -48, -48, -48, -48, -48, -48,
60 -48, -48, -48, -48, -48, -53, -61, -66,
61 -66, -68, -67, -70, -76, -76, -72, -73,
62 -75, -76, -78, -79, -83, -88, -93, -100,
63 -110, -999, -999, -999, -999, -999, -999, -999,
64 -999, -999, -999, -999, -999, -999, -999, -999,
65 -999, -999, -999, -999, -999, -999, -999, -999},
66 { -37, -37, -37, -37, -37, -37, -37, -37,
67 -38, -40, -42, -46, -48, -53, -55, -62,
68 -65, -58, -56, -56, -61, -60, -65, -67,
69 -69, -71, -77, -77, -78, -80, -82, -84,
70 -88, -93, -98, -106, -112, -999, -999, -999,
71 -999, -999, -999, -999, -999, -999, -999, -999,
72 -999, -999, -999, -999, -999, -999, -999, -999},
73 { -25, -25, -25, -25, -25, -25, -25, -25,
74 -25, -26, -27, -29, -32, -38, -48, -52,
75 -52, -50, -48, -48, -51, -52, -54, -60,
76 -67, -67, -66, -68, -69, -73, -73, -76,
77 -80, -81, -81, -85, -85, -86, -88, -93,
78 -100, -110, -999, -999, -999, -999, -999, -999,
79 -999, -999, -999, -999, -999, -999, -999, -999},
80 { -16, -16, -16, -16, -16, -16, -16, -16,
81 -17, -19, -20, -22, -26, -28, -31, -40,
82 -47, -39, -39, -40, -42, -43, -47, -51,
83 -57, -52, -55, -55, -60, -58, -62, -63,
84 -70, -67, -69, -72, -73, -77, -80, -82,
85 -83, -87, -90, -94, -98, -104, -115, -999,
86 -999, -999, -999, -999, -999, -999, -999, -999},
87 { -8, -8, -8, -8, -8, -8, -8, -8,
88 -8, -8, -10, -11, -15, -19, -25, -30,
89 -34, -31, -30, -31, -29, -32, -35, -42,
90 -48, -42, -44, -46, -50, -50, -51, -52,
91 -59, -54, -55, -55, -58, -62, -63, -66,
92 -72, -73, -76, -75, -78, -80, -80, -81,
93 -84, -88, -90, -94, -98, -101, -106, -110}},
95 {{ -66, -66, -66, -66, -66, -66, -66, -66,
96 -66, -66, -66, -66, -66, -67, -67, -67,
97 -76, -72, -71, -74, -76, -76, -75, -78,
98 -79, -79, -81, -83, -86, -89, -93, -97,
99 -100, -105, -110, -999, -999, -999, -999, -999,
100 -999, -999, -999, -999, -999, -999, -999, -999,
101 -999, -999, -999, -999, -999, -999, -999, -999},
102 { -47, -47, -47, -47, -47, -47, -47, -47,
103 -47, -47, -47, -48, -51, -55, -59, -66,
104 -66, -66, -67, -66, -68, -69, -70, -74,
105 -79, -77, -77, -78, -80, -81, -82, -84,
106 -86, -88, -91, -95, -100, -108, -116, -999,
107 -999, -999, -999, -999, -999, -999, -999, -999,
108 -999, -999, -999, -999, -999, -999, -999, -999},
109 { -36, -36, -36, -36, -36, -36, -36, -36,
110 -36, -37, -37, -41, -44, -48, -51, -58,
111 -62, -60, -57, -59, -59, -60, -63, -65,
112 -72, -71, -70, -72, -74, -77, -76, -78,
113 -81, -81, -80, -83, -86, -91, -96, -100,
114 -105, -110, -999, -999, -999, -999, -999, -999,
115 -999, -999, -999, -999, -999, -999, -999, -999},
116 { -28, -28, -28, -28, -28, -28, -28, -28,
117 -28, -30, -32, -32, -33, -35, -41, -49,
118 -50, -49, -47, -48, -48, -52, -51, -57,
119 -65, -61, -59, -61, -64, -69, -70, -74,
120 -77, -77, -78, -81, -84, -85, -87, -90,
121 -92, -96, -100, -107, -112, -999, -999, -999,
122 -999, -999, -999, -999, -999, -999, -999, -999},
123 { -19, -19, -19, -19, -19, -19, -19, -19,
124 -20, -21, -23, -27, -30, -35, -36, -41,
125 -46, -44, -42, -40, -41, -41, -43, -48,
126 -55, -53, -52, -53, -56, -59, -58, -60,
127 -67, -66, -69, -71, -72, -75, -79, -81,
128 -84, -87, -90, -93, -97, -101, -107, -114,
129 -999, -999, -999, -999, -999, -999, -999, -999},
130 { -9, -9, -9, -9, -9, -9, -9, -9,
131 -11, -12, -12, -15, -16, -20, -23, -30,
132 -37, -34, -33, -34, -31, -32, -32, -38,
133 -47, -44, -41, -40, -47, -49, -46, -46,
134 -58, -50, -50, -54, -58, -62, -64, -67,
135 -67, -70, -72, -76, -79, -83, -87, -91,
136 -96, -100, -104, -110, -999, -999, -999, -999}},
138 {{ -62, -62, -62, -62, -62, -62, -62, -62,
139 -62, -62, -63, -64, -66, -67, -66, -68,
140 -75, -72, -76, -75, -76, -78, -79, -82,
141 -84, -85, -90, -94, -101, -110, -999, -999,
142 -999, -999, -999, -999, -999, -999, -999, -999,
143 -999, -999, -999, -999, -999, -999, -999, -999,
144 -999, -999, -999, -999, -999, -999, -999, -999},
145 { -59, -59, -59, -59, -59, -59, -59, -59,
146 -59, -59, -59, -60, -60, -61, -63, -66,
147 -71, -68, -70, -70, -71, -72, -72, -75,
148 -81, -78, -79, -82, -83, -86, -90, -97,
149 -103, -113, -999, -999, -999, -999, -999, -999,
150 -999, -999, -999, -999, -999, -999, -999, -999,
151 -999, -999, -999, -999, -999, -999, -999, -999},
152 { -53, -53, -53, -53, -53, -53, -53, -53,
153 -53, -54, -55, -57, -56, -57, -55, -61,
154 -65, -60, -60, -62, -63, -63, -66, -68,
155 -74, -73, -75, -75, -78, -80, -80, -82,
156 -85, -90, -96, -101, -108, -999, -999, -999,
157 -999, -999, -999, -999, -999, -999, -999, -999,
158 -999, -999, -999, -999, -999, -999, -999, -999},
159 { -46, -46, -46, -46, -46, -46, -46, -46,
160 -46, -46, -47, -47, -47, -47, -48, -51,
161 -57, -51, -49, -50, -51, -53, -54, -59,
162 -66, -60, -62, -67, -67, -70, -72, -75,
163 -76, -78, -81, -85, -88, -94, -97, -104,
164 -112, -999, -999, -999, -999, -999, -999, -999,
165 -999, -999, -999, -999, -999, -999, -999, -999},
166 { -36, -36, -36, -36, -36, -36, -36, -36,
167 -39, -41, -42, -42, -39, -38, -41, -43,
168 -52, -44, -40, -39, -37, -37, -40, -47,
169 -54, -50, -48, -50, -55, -61, -59, -62,
170 -66, -66, -66, -69, -69, -73, -74, -74,
171 -75, -77, -79, -82, -87, -91, -95, -100,
172 -108, -115, -999, -999, -999, -999, -999, -999},
173 { -28, -26, -24, -22, -20, -20, -23, -29,
174 -30, -31, -28, -27, -28, -28, -28, -35,
175 -40, -33, -32, -29, -30, -30, -30, -37,
176 -45, -41, -37, -38, -45, -47, -47, -48,
177 -53, -49, -48, -50, -49, -49, -51, -52,
178 -58, -56, -57, -56, -60, -61, -62, -70,
179 -72, -74, -78, -83, -88, -93, -100, -106}},
181 {{-999, -999, -999, -999, -999, -999, -999, -999,
182 -999, -110, -105, -100, -95, -91, -87, -83,
183 -80, -78, -76, -78, -78, -81, -83, -85,
184 -86, -85, -86, -87, -90, -97, -107, -999,
185 -999, -999, -999, -999, -999, -999, -999, -999,
186 -999, -999, -999, -999, -999, -999, -999, -999,
187 -999, -999, -999, -999, -999, -999, -999, -999},
188 {-999, -999, -999, -110, -105, -100, -95, -90,
189 -85, -81, -77, -73, -70, -67, -67, -68,
190 -75, -73, -70, -69, -70, -72, -75, -79,
191 -84, -83, -84, -86, -88, -89, -89, -93,
192 -98, -105, -112, -999, -999, -999, -999, -999,
193 -999, -999, -999, -999, -999, -999, -999, -999,
194 -999, -999, -999, -999, -999, -999, -999, -999},
195 {-105, -100, -95, -90, -85, -80, -76, -71,
196 -68, -68, -65, -63, -63, -62, -62, -64,
197 -65, -64, -61, -62, -63, -64, -66, -68,
198 -73, -73, -74, -75, -76, -81, -83, -85,
199 -88, -89, -92, -95, -100, -108, -999, -999,
200 -999, -999, -999, -999, -999, -999, -999, -999,
201 -999, -999, -999, -999, -999, -999, -999, -999},
202 { -80, -75, -71, -68, -65, -63, -62, -61,
203 -61, -61, -61, -59, -56, -57, -53, -50,
204 -58, -52, -50, -50, -52, -53, -54, -58,
205 -67, -63, -67, -68, -72, -75, -78, -80,
206 -81, -81, -82, -85, -89, -90, -93, -97,
207 -101, -107, -114, -999, -999, -999, -999, -999,
208 -999, -999, -999, -999, -999, -999, -999, -999},
209 { -65, -61, -59, -57, -56, -55, -55, -56,
210 -56, -57, -55, -53, -52, -47, -44, -44,
211 -50, -44, -41, -39, -39, -42, -40, -46,
212 -51, -49, -50, -53, -54, -63, -60, -61,
213 -62, -66, -66, -66, -70, -73, -74, -75,
214 -76, -75, -79, -85, -89, -91, -96, -102,
215 -110, -999, -999, -999, -999, -999, -999, -999},
216 { -52, -50, -49, -49, -48, -48, -48, -49,
217 -50, -50, -49, -46, -43, -39, -35, -33,
218 -38, -36, -32, -29, -32, -32, -32, -35,
219 -44, -39, -38, -38, -46, -50, -45, -46,
220 -53, -50, -50, -50, -54, -54, -53, -53,
221 -56, -57, -59, -66, -70, -72, -74, -79,
222 -83, -85, -90, -97, -114, -999, -999, -999}},
224 {{-999, -999, -999, -999, -999, -999, -110, -105,
225 -100, -95, -90, -86, -80, -75, -75, -79,
226 -80, -79, -80, -81, -82, -88, -95, -103,
227 -110, -999, -999, -999, -999, -999, -999, -999,
228 -999, -999, -999, -999, -999, -999, -999, -999,
229 -999, -999, -999, -999, -999, -999, -999, -999,
230 -999, -999, -999, -999, -999, -999, -999, -999},
231 {-999, -999, -999, -999, -108, -103, -98, -93,
232 -88, -83, -79, -78, -75, -71, -67, -68,
233 -73, -73, -72, -73, -75, -77, -80, -82,
234 -88, -93, -100, -107, -114, -999, -999, -999,
235 -999, -999, -999, -999, -999, -999, -999, -999,
236 -999, -999, -999, -999, -999, -999, -999, -999,
237 -999, -999, -999, -999, -999, -999, -999, -999},
238 {-999, -999, -999, -110, -105, -101, -96, -90,
239 -86, -81, -77, -73, -69, -66, -61, -62,
240 -66, -64, -62, -65, -66, -70, -72, -76,
241 -81, -80, -84, -90, -95, -102, -110, -999,
242 -999, -999, -999, -999, -999, -999, -999, -999,
243 -999, -999, -999, -999, -999, -999, -999, -999,
244 -999, -999, -999, -999, -999, -999, -999, -999},
245 {-999, -999, -999, -107, -103, -97, -92, -88,
246 -83, -79, -74, -70, -66, -59, -53, -58,
247 -62, -55, -54, -54, -54, -58, -61, -62,
248 -72, -70, -72, -75, -78, -80, -81, -80,
249 -83, -83, -88, -93, -100, -107, -115, -999,
250 -999, -999, -999, -999, -999, -999, -999, -999,
251 -999, -999, -999, -999, -999, -999, -999, -999},
252 {-999, -999, -999, -105, -100, -95, -90, -85,
253 -80, -75, -70, -66, -62, -56, -48, -44,
254 -48, -46, -46, -43, -46, -48, -48, -51,
255 -58, -58, -59, -60, -62, -62, -61, -61,
256 -65, -64, -65, -68, -70, -74, -75, -78,
257 -81, -86, -95, -110, -999, -999, -999, -999,
258 -999, -999, -999, -999, -999, -999, -999, -999},
259 {-999, -999, -105, -100, -95, -90, -85, -80,
260 -75, -70, -65, -61, -55, -49, -39, -33,
261 -40, -35, -32, -38, -40, -33, -35, -37,
262 -46, -41, -45, -44, -46, -42, -45, -46,
263 -52, -50, -50, -50, -54, -54, -55, -57,
264 -62, -64, -66, -68, -70, -76, -81, -90,
265 -100, -110, -999, -999, -999, -999, -999, -999}},
267 {{-999, -999, -999, -999, -999, -999, -999, -999,
268 -105, -98, -90, -85, -82, -83, -80, -78,
269 -84, -79, -80, -83, -87, -89, -91, -93,
270 -99, -106, -117, -999, -999, -999, -999, -999,
271 -999, -999, -999, -999, -999, -999, -999, -999,
272 -999, -999, -999, -999, -999, -999, -999, -999,
273 -999, -999, -999, -999, -999, -999, -999, -999},
274 {-999, -999, -999, -999, -999, -999, -999, -999,
275 -105, -98, -90, -85, -80, -75, -70, -68,
276 -74, -72, -74, -77, -80, -82, -85, -87,
277 -92, -89, -91, -95, -100, -106, -112, -999,
278 -999, -999, -999, -999, -999, -999, -999, -999,
279 -999, -999, -999, -999, -999, -999, -999, -999,
280 -999, -999, -999, -999, -999, -999, -999, -999},
281 {-999, -999, -999, -999, -999, -999, -999, -999,
282 -105, -98, -90, -83, -75, -71, -63, -64,
283 -67, -62, -64, -67, -70, -73, -77, -81,
284 -84, -83, -85, -89, -90, -93, -98, -104,
285 -109, -114, -999, -999, -999, -999, -999, -999,
286 -999, -999, -999, -999, -999, -999, -999, -999,
287 -999, -999, -999, -999, -999, -999, -999, -999},
288 {-999, -999, -999, -999, -999, -999, -999, -999,
289 -103, -96, -88, -81, -75, -68, -58, -54,
290 -56, -54, -56, -56, -58, -60, -63, -66,
291 -74, -69, -72, -72, -75, -74, -77, -81,
292 -81, -82, -84, -87, -93, -96, -99, -104,
293 -110, -999, -999, -999, -999, -999, -999, -999,
294 -999, -999, -999, -999, -999, -999, -999, -999},
295 {-999, -999, -999, -999, -999, -108, -102, -96,
296 -91, -85, -80, -74, -68, -60, -51, -46,
297 -48, -46, -43, -45, -47, -47, -49, -48,
298 -56, -53, -55, -58, -57, -63, -58, -60,
299 -66, -64, -67, -70, -70, -74, -77, -84,
300 -86, -89, -91, -93, -94, -101, -109, -118,
301 -999, -999, -999, -999, -999, -999, -999, -999},
302 {-999, -999, -999, -108, -103, -98, -93, -88,
303 -83, -78, -73, -68, -60, -53, -44, -35,
304 -38, -38, -34, -34, -36, -40, -41, -44,
305 -51, -45, -46, -47, -46, -54, -50, -49,
306 -50, -50, -50, -51, -54, -57, -58, -60,
307 -66, -66, -66, -64, -65, -68, -77, -82,
308 -87, -95, -110, -999, -999, -999, -999, -999}},
310 {{-999, -999, -999, -999, -999, -999, -999, -999,
311 -107, -102, -97, -92, -87, -83, -78, -75,
312 -82, -79, -83, -85, -89, -92, -95, -98,
313 -101, -105, -109, -113, -999, -999, -999, -999,
314 -999, -999, -999, -999, -999, -999, -999, -999,
315 -999, -999, -999, -999, -999, -999, -999, -999,
316 -999, -999, -999, -999, -999, -999, -999, -999},
317 {-999, -999, -999, -999, -999, -999, -999, -106,
318 -100, -95, -90, -86, -81, -78, -74, -69,
319 -74, -74, -76, -79, -83, -84, -86, -89,
320 -92, -97, -93, -100, -103, -107, -110, -999,
321 -999, -999, -999, -999, -999, -999, -999, -999,
322 -999, -999, -999, -999, -999, -999, -999, -999,
323 -999, -999, -999, -999, -999, -999, -999, -999},
324 {-999, -999, -999, -999, -999, -999, -106, -100,
325 -95, -90, -87, -83, -80, -75, -69, -60,
326 -66, -66, -68, -70, -74, -78, -79, -81,
327 -81, -83, -84, -87, -93, -96, -99, -103,
328 -107, -110, -999, -999, -999, -999, -999, -999,
329 -999, -999, -999, -999, -999, -999, -999, -999,
330 -999, -999, -999, -999, -999, -999, -999, -999},
331 {-999, -999, -999, -999, -999, -108, -103, -98,
332 -93, -89, -85, -82, -78, -71, -62, -55,
333 -58, -58, -54, -54, -55, -59, -61, -62,
334 -70, -66, -66, -67, -70, -72, -75, -78,
335 -84, -84, -84, -88, -91, -90, -95, -98,
336 -102, -103, -106, -110, -999, -999, -999, -999,
337 -999, -999, -999, -999, -999, -999, -999, -999},
338 {-999, -999, -999, -999, -108, -103, -98, -94,
339 -90, -87, -82, -79, -73, -67, -58, -47,
340 -50, -45, -41, -45, -48, -44, -44, -49,
341 -54, -51, -48, -47, -49, -50, -51, -57,
342 -58, -60, -63, -69, -70, -69, -71, -74,
343 -78, -82, -90, -95, -101, -105, -110, -999,
344 -999, -999, -999, -999, -999, -999, -999, -999},
345 {-999, -999, -999, -105, -101, -97, -93, -90,
346 -85, -80, -77, -72, -65, -56, -48, -37,
347 -40, -36, -34, -40, -50, -47, -38, -41,
348 -47, -38, -35, -39, -38, -43, -40, -45,
349 -50, -45, -44, -47, -50, -55, -48, -48,
350 -52, -66, -70, -76, -82, -90, -97, -105,
351 -110, -999, -999, -999, -999, -999, -999, -999}},
353 {{-999, -999, -999, -999, -999, -999, -999, -999,
354 -999, -108, -103, -98, -93, -86, -79, -76,
355 -83, -81, -85, -87, -89, -93, -98, -102,
356 -107, -112, -999, -999, -999, -999, -999, -999,
357 -999, -999, -999, -999, -999, -999, -999, -999,
358 -999, -999, -999, -999, -999, -999, -999, -999,
359 -999, -999, -999, -999, -999, -999, -999, -999},
360 {-999, -999, -999, -999, -999, -999, -999, -999,
361 -999, -108, -103, -98, -93, -86, -79, -71,
362 -77, -74, -77, -79, -81, -84, -85, -90,
363 -92, -93, -92, -98, -101, -108, -112, -999,
364 -999, -999, -999, -999, -999, -999, -999, -999,
365 -999, -999, -999, -999, -999, -999, -999, -999,
366 -999, -999, -999, -999, -999, -999, -999, -999},
367 {-999, -999, -999, -999, -999, -999, -999, -999,
368 -108, -103, -98, -93, -87, -78, -68, -65,
369 -66, -62, -65, -67, -70, -73, -75, -78,
370 -82, -82, -83, -84, -91, -93, -98, -102,
371 -106, -110, -999, -999, -999, -999, -999, -999,
372 -999, -999, -999, -999, -999, -999, -999, -999,
373 -999, -999, -999, -999, -999, -999, -999, -999},
374 {-999, -999, -999, -999, -999, -999, -999, -999,
375 -105, -100, -95, -90, -82, -74, -62, -57,
376 -58, -56, -51, -52, -52, -54, -54, -58,
377 -66, -59, -60, -63, -66, -69, -73, -79,
378 -83, -84, -80, -81, -81, -82, -88, -92,
379 -98, -105, -113, -999, -999, -999, -999, -999,
380 -999, -999, -999, -999, -999, -999, -999, -999},
381 {-999, -999, -999, -999, -999, -999, -999, -107,
382 -102, -97, -92, -84, -79, -69, -57, -47,
383 -52, -47, -44, -45, -50, -52, -42, -42,
384 -53, -43, -43, -48, -51, -56, -55, -52,
385 -57, -59, -61, -62, -67, -71, -78, -83,
386 -86, -94, -98, -103, -110, -999, -999, -999,
387 -999, -999, -999, -999, -999, -999, -999, -999},
388 {-999, -999, -999, -999, -999, -999, -105, -100,
389 -95, -90, -84, -78, -70, -61, -51, -41,
390 -40, -38, -40, -46, -52, -51, -41, -40,
391 -46, -40, -38, -38, -41, -46, -41, -46,
392 -47, -43, -43, -45, -41, -45, -56, -67,
393 -68, -83, -87, -90, -95, -102, -107, -113,
394 -999, -999, -999, -999, -999, -999, -999, -999}},
396 {{-999, -999, -999, -999, -999, -999, -999, -999,
397 -999, -109, -105, -101, -96, -91, -84, -77,
398 -82, -82, -85, -89, -94, -100, -106, -110,
399 -999, -999, -999, -999, -999, -999, -999, -999,
400 -999, -999, -999, -999, -999, -999, -999, -999,
401 -999, -999, -999, -999, -999, -999, -999, -999,
402 -999, -999, -999, -999, -999, -999, -999, -999},
403 {-999, -999, -999, -999, -999, -999, -999, -999,
404 -999, -106, -103, -98, -92, -85, -80, -71,
405 -75, -72, -76, -80, -84, -86, -89, -93,
406 -100, -107, -113, -999, -999, -999, -999, -999,
407 -999, -999, -999, -999, -999, -999, -999, -999,
408 -999, -999, -999, -999, -999, -999, -999, -999,
409 -999, -999, -999, -999, -999, -999, -999, -999},
410 {-999, -999, -999, -999, -999, -999, -999, -107,
411 -104, -101, -97, -92, -88, -84, -80, -64,
412 -66, -63, -64, -66, -69, -73, -77, -83,
413 -83, -86, -91, -98, -104, -111, -999, -999,
414 -999, -999, -999, -999, -999, -999, -999, -999,
415 -999, -999, -999, -999, -999, -999, -999, -999,
416 -999, -999, -999, -999, -999, -999, -999, -999},
417 {-999, -999, -999, -999, -999, -999, -999, -107,
418 -104, -101, -97, -92, -90, -84, -74, -57,
419 -58, -52, -55, -54, -50, -52, -50, -52,
420 -63, -62, -69, -76, -77, -78, -78, -79,
421 -82, -88, -94, -100, -106, -111, -999, -999,
422 -999, -999, -999, -999, -999, -999, -999, -999,
423 -999, -999, -999, -999, -999, -999, -999, -999},
424 {-999, -999, -999, -999, -999, -999, -106, -102,
425 -98, -95, -90, -85, -83, -78, -70, -50,
426 -50, -41, -44, -49, -47, -50, -50, -44,
427 -55, -46, -47, -48, -48, -54, -49, -49,
428 -58, -62, -71, -81, -87, -92, -97, -102,
429 -108, -114, -999, -999, -999, -999, -999, -999,
430 -999, -999, -999, -999, -999, -999, -999, -999},
431 {-999, -999, -999, -999, -999, -999, -106, -102,
432 -98, -95, -90, -85, -83, -78, -70, -45,
433 -43, -41, -47, -50, -51, -50, -49, -45,
434 -47, -41, -44, -41, -39, -43, -38, -37,
435 -40, -41, -44, -50, -58, -65, -73, -79,
436 -85, -92, -97, -101, -105, -109, -113, -999,
437 -999, -999, -999, -999, -999, -999, -999, -999}},
439 {{-999, -999, -999, -999, -999, -999, -999, -999,
440 -999, -999, -999, -107, -100, -95, -87, -81,
441 -85, -83, -88, -93, -100, -107, -114, -999,
442 -999, -999, -999, -999, -999, -999, -999, -999,
443 -999, -999, -999, -999, -999, -999, -999, -999,
444 -999, -999, -999, -999, -999, -999, -999, -999,
445 -999, -999, -999, -999, -999, -999, -999, -999},
446 {-999, -999, -999, -999, -999, -999, -999, -999,
447 -999, -999, -107, -101, -95, -88, -83, -76,
448 -73, -72, -79, -84, -90, -95, -100, -105,
449 -110, -115, -999, -999, -999, -999, -999, -999,
450 -999, -999, -999, -999, -999, -999, -999, -999,
451 -999, -999, -999, -999, -999, -999, -999, -999,
452 -999, -999, -999, -999, -999, -999, -999, -999},
453 {-999, -999, -999, -999, -999, -999, -999, -999,
454 -999, -999, -104, -98, -92, -87, -81, -70,
455 -65, -62, -67, -71, -74, -80, -85, -91,
456 -95, -99, -103, -108, -111, -114, -999, -999,
457 -999, -999, -999, -999, -999, -999, -999, -999,
458 -999, -999, -999, -999, -999, -999, -999, -999,
459 -999, -999, -999, -999, -999, -999, -999, -999},
460 {-999, -999, -999, -999, -999, -999, -999, -999,
461 -999, -999, -103, -97, -90, -85, -76, -60,
462 -56, -54, -60, -62, -61, -56, -63, -65,
463 -73, -74, -77, -75, -78, -81, -86, -87,
464 -88, -91, -94, -98, -103, -110, -999, -999,
465 -999, -999, -999, -999, -999, -999, -999, -999,
466 -999, -999, -999, -999, -999, -999, -999, -999},
467 {-999, -999, -999, -999, -999, -999, -999, -105,
468 -100, -97, -92, -86, -81, -79, -70, -57,
469 -51, -47, -51, -58, -60, -56, -53, -50,
470 -58, -52, -50, -50, -53, -55, -64, -69,
471 -71, -85, -82, -78, -81, -85, -95, -102,
472 -112, -999, -999, -999, -999, -999, -999, -999,
473 -999, -999, -999, -999, -999, -999, -999, -999},
474 {-999, -999, -999, -999, -999, -999, -999, -105,
475 -100, -97, -92, -85, -83, -79, -72, -49,
476 -40, -43, -43, -54, -56, -51, -50, -40,
477 -43, -38, -36, -35, -37, -38, -37, -44,
478 -54, -60, -57, -60, -70, -75, -84, -92,
479 -103, -112, -999, -999, -999, -999, -999, -999,
480 -999, -999, -999, -999, -999, -999, -999, -999}},
482 {{-999, -999, -999, -999, -999, -999, -999, -999,
483 -999, -999, -999, -110, -102, -95, -89, -82,
484 -83, -84, -90, -92, -99, -107, -113, -999,
485 -999, -999, -999, -999, -999, -999, -999, -999,
486 -999, -999, -999, -999, -999, -999, -999, -999,
487 -999, -999, -999, -999, -999, -999, -999, -999,
488 -999, -999, -999, -999, -999, -999, -999, -999},
489 {-999, -999, -999, -999, -999, -999, -999, -999,
490 -999, -999, -107, -101, -95, -89, -83, -72,
491 -74, -78, -85, -88, -88, -90, -92, -98,
492 -105, -111, -999, -999, -999, -999, -999, -999,
493 -999, -999, -999, -999, -999, -999, -999, -999,
494 -999, -999, -999, -999, -999, -999, -999, -999,
495 -999, -999, -999, -999, -999, -999, -999, -999},
496 {-999, -999, -999, -999, -999, -999, -999, -999,
497 -999, -109, -103, -97, -93, -87, -81, -70,
498 -70, -67, -75, -73, -76, -79, -81, -83,
499 -88, -89, -97, -103, -110, -999, -999, -999,
500 -999, -999, -999, -999, -999, -999, -999, -999,
501 -999, -999, -999, -999, -999, -999, -999, -999,
502 -999, -999, -999, -999, -999, -999, -999, -999},
503 {-999, -999, -999, -999, -999, -999, -999, -999,
504 -999, -107, -100, -94, -88, -83, -75, -63,
505 -59, -59, -63, -66, -60, -62, -67, -67,
506 -77, -76, -81, -88, -86, -92, -96, -102,
507 -109, -116, -999, -999, -999, -999, -999, -999,
508 -999, -999, -999, -999, -999, -999, -999, -999,
509 -999, -999, -999, -999, -999, -999, -999, -999},
510 {-999, -999, -999, -999, -999, -999, -999, -999,
511 -999, -105, -98, -92, -86, -81, -73, -56,
512 -52, -47, -55, -60, -58, -52, -51, -45,
513 -49, -50, -53, -54, -61, -71, -70, -69,
514 -78, -79, -87, -90, -96, -104, -112, -999,
515 -999, -999, -999, -999, -999, -999, -999, -999,
516 -999, -999, -999, -999, -999, -999, -999, -999},
517 {-999, -999, -999, -999, -999, -999, -999, -999,
518 -999, -103, -96, -90, -86, -78, -70, -51,
519 -42, -47, -48, -55, -54, -54, -53, -42,
520 -35, -28, -33, -38, -37, -44, -47, -49,
521 -54, -63, -68, -78, -82, -89, -94, -99,
522 -104, -109, -114, -999, -999, -999, -999, -999,
523 -999, -999, -999, -999, -999, -999, -999, -999}},
525 {{-999, -999, -999, -999, -999, -999, -999, -999,
526 -999, -999, -999, -999, -110, -100, -90, -79,
527 -85, -81, -82, -82, -89, -94, -99, -103,
528 -109, -115, -999, -999, -999, -999, -999, -999,
529 -999, -999, -999, -999, -999, -999, -999, -999,
530 -999, -999, -999, -999, -999, -999, -999, -999,
531 -999, -999, -999, -999, -999, -999, -999, -999},
532 {-999, -999, -999, -999, -999, -999, -999, -999,
533 -999, -999, -999, -999, -105, -97, -85, -72,
534 -74, -70, -70, -70, -76, -85, -91, -93,
535 -97, -103, -109, -115, -999, -999, -999, -999,
536 -999, -999, -999, -999, -999, -999, -999, -999,
537 -999, -999, -999, -999, -999, -999, -999, -999,
538 -999, -999, -999, -999, -999, -999, -999, -999},
539 {-999, -999, -999, -999, -999, -999, -999, -999,
540 -999, -999, -999, -999, -112, -93, -81, -68,
541 -62, -60, -60, -57, -63, -70, -77, -82,
542 -90, -93, -98, -104, -109, -113, -999, -999,
543 -999, -999, -999, -999, -999, -999, -999, -999,
544 -999, -999, -999, -999, -999, -999, -999, -999,
545 -999, -999, -999, -999, -999, -999, -999, -999},
546 {-999, -999, -999, -999, -999, -999, -999, -999,
547 -999, -999, -999, -113, -100, -93, -84, -63,
548 -58, -48, -53, -54, -52, -52, -57, -64,
549 -66, -76, -83, -81, -85, -85, -90, -95,
550 -98, -101, -103, -106, -108, -111, -999, -999,
551 -999, -999, -999, -999, -999, -999, -999, -999,
552 -999, -999, -999, -999, -999, -999, -999, -999},
553 {-999, -999, -999, -999, -999, -999, -999, -999,
554 -999, -999, -999, -105, -95, -86, -74, -53,
555 -50, -38, -43, -49, -43, -42, -39, -39,
556 -46, -52, -57, -56, -72, -69, -74, -81,
557 -87, -92, -94, -97, -99, -102, -105, -108,
558 -999, -999, -999, -999, -999, -999, -999, -999,
559 -999, -999, -999, -999, -999, -999, -999, -999},
560 {-999, -999, -999, -999, -999, -999, -999, -999,
561 -999, -999, -108, -99, -90, -76, -66, -45,
562 -43, -41, -44, -47, -43, -47, -40, -30,
563 -31, -31, -39, -33, -40, -41, -43, -53,
564 -59, -70, -73, -77, -79, -82, -84, -87,
565 -999, -999, -999, -999, -999, -999, -999, -999,
566 -999, -999, -999, -999, -999, -999, -999, -999}},
568 {{-999, -999, -999, -999, -999, -999, -999, -999,
569 -999, -999, -999, -999, -999, -110, -91, -76,
570 -75, -85, -93, -98, -104, -110, -999, -999,
571 -999, -999, -999, -999, -999, -999, -999, -999,
572 -999, -999, -999, -999, -999, -999, -999, -999,
573 -999, -999, -999, -999, -999, -999, -999, -999,
574 -999, -999, -999, -999, -999, -999, -999, -999},
575 {-999, -999, -999, -999, -999, -999, -999, -999,
576 -999, -999, -999, -999, -999, -110, -91, -70,
577 -70, -75, -86, -89, -94, -98, -101, -106,
578 -110, -999, -999, -999, -999, -999, -999, -999,
579 -999, -999, -999, -999, -999, -999, -999, -999,
580 -999, -999, -999, -999, -999, -999, -999, -999,
581 -999, -999, -999, -999, -999, -999, -999, -999},
582 {-999, -999, -999, -999, -999, -999, -999, -999,
583 -999, -999, -999, -999, -110, -95, -80, -60,
584 -65, -64, -74, -83, -88, -91, -95, -99,
585 -103, -107, -110, -999, -999, -999, -999, -999,
586 -999, -999, -999, -999, -999, -999, -999, -999,
587 -999, -999, -999, -999, -999, -999, -999, -999,
588 -999, -999, -999, -999, -999, -999, -999, -999},
589 {-999, -999, -999, -999, -999, -999, -999, -999,
590 -999, -999, -999, -999, -110, -95, -80, -58,
591 -55, -49, -66, -68, -71, -78, -78, -80,
592 -88, -85, -89, -97, -100, -105, -110, -999,
593 -999, -999, -999, -999, -999, -999, -999, -999,
594 -999, -999, -999, -999, -999, -999, -999, -999,
595 -999, -999, -999, -999, -999, -999, -999, -999},
596 {-999, -999, -999, -999, -999, -999, -999, -999,
597 -999, -999, -999, -999, -110, -95, -80, -53,
598 -52, -41, -59, -59, -49, -58, -56, -63,
599 -86, -79, -90, -93, -98, -103, -107, -112,
600 -999, -999, -999, -999, -999, -999, -999, -999,
601 -999, -999, -999, -999, -999, -999, -999, -999,
602 -999, -999, -999, -999, -999, -999, -999, -999},
603 {-999, -999, -999, -999, -999, -999, -999, -999,
604 -999, -999, -999, -110, -97, -91, -73, -45,
605 -40, -33, -53, -61, -49, -54, -50, -50,
606 -60, -52, -67, -74, -81, -92, -96, -100,
607 -105, -110, -999, -999, -999, -999, -999, -999,
608 -999, -999, -999, -999, -999, -999, -999, -999,
609 -999, -999, -999, -999, -999, -999, -999, -999}},
611 {{-999, -999, -999, -999, -999, -999, -999, -999,
612 -999, -999, -999, -113, -106, -99, -92, -77,
613 -80, -88, -97, -106, -115, -999, -999, -999,
614 -999, -999, -999, -999, -999, -999, -999, -999,
615 -999, -999, -999, -999, -999, -999, -999, -999,
616 -999, -999, -999, -999, -999, -999, -999, -999,
617 -999, -999, -999, -999, -999, -999, -999, -999},
618 {-999, -999, -999, -999, -999, -999, -999, -999,
619 -999, -999, -116, -109, -102, -95, -89, -74,
620 -72, -88, -87, -95, -102, -109, -116, -999,
621 -999, -999, -999, -999, -999, -999, -999, -999,
622 -999, -999, -999, -999, -999, -999, -999, -999,
623 -999, -999, -999, -999, -999, -999, -999, -999,
624 -999, -999, -999, -999, -999, -999, -999, -999},
625 {-999, -999, -999, -999, -999, -999, -999, -999,
626 -999, -999, -116, -109, -102, -95, -89, -75,
627 -66, -74, -77, -78, -86, -87, -90, -96,
628 -105, -115, -999, -999, -999, -999, -999, -999,
629 -999, -999, -999, -999, -999, -999, -999, -999,
630 -999, -999, -999, -999, -999, -999, -999, -999,
631 -999, -999, -999, -999, -999, -999, -999, -999},
632 {-999, -999, -999, -999, -999, -999, -999, -999,
633 -999, -999, -115, -108, -101, -94, -88, -66,
634 -56, -61, -70, -65, -78, -72, -83, -84,
635 -93, -98, -105, -110, -999, -999, -999, -999,
636 -999, -999, -999, -999, -999, -999, -999, -999,
637 -999, -999, -999, -999, -999, -999, -999, -999,
638 -999, -999, -999, -999, -999, -999, -999, -999},
639 {-999, -999, -999, -999, -999, -999, -999, -999,
640 -999, -999, -110, -105, -95, -89, -82, -57,
641 -52, -52, -59, -56, -59, -58, -69, -67,
642 -88, -82, -82, -89, -94, -100, -108, -999,
643 -999, -999, -999, -999, -999, -999, -999, -999,
644 -999, -999, -999, -999, -999, -999, -999, -999,
645 -999, -999, -999, -999, -999, -999, -999, -999},
646 {-999, -999, -999, -999, -999, -999, -999, -999,
647 -999, -110, -101, -96, -90, -83, -77, -54,
648 -43, -38, -50, -48, -52, -48, -42, -42,
649 -51, -52, -53, -59, -65, -71, -78, -85,
650 -95, -999, -999, -999, -999, -999, -999, -999,
651 -999, -999, -999, -999, -999, -999, -999, -999,
652 -999, -999, -999, -999, -999, -999, -999, -999}},
654 {{-999, -999, -999, -999, -999, -999, -999, -999,
655 -999, -999, -999, -999, -120, -105, -86, -68,
656 -78, -79, -90, -100, -110, -999, -999, -999,
657 -999, -999, -999, -999, -999, -999, -999, -999,
658 -999, -999, -999, -999, -999, -999, -999, -999,
659 -999, -999, -999, -999, -999, -999, -999, -999,
660 -999, -999, -999, -999, -999, -999, -999, -999},
661 {-999, -999, -999, -999, -999, -999, -999, -999,
662 -999, -999, -999, -999, -120, -105, -86, -66,
663 -73, -77, -88, -96, -105, -115, -999, -999,
664 -999, -999, -999, -999, -999, -999, -999, -999,
665 -999, -999, -999, -999, -999, -999, -999, -999,
666 -999, -999, -999, -999, -999, -999, -999, -999,
667 -999, -999, -999, -999, -999, -999, -999, -999},
668 {-999, -999, -999, -999, -999, -999, -999, -999,
669 -999, -999, -999, -120, -105, -92, -80, -61,
670 -64, -68, -80, -87, -92, -100, -110, -999,
671 -999, -999, -999, -999, -999, -999, -999, -999,
672 -999, -999, -999, -999, -999, -999, -999, -999,
673 -999, -999, -999, -999, -999, -999, -999, -999,
674 -999, -999, -999, -999, -999, -999, -999, -999},
675 {-999, -999, -999, -999, -999, -999, -999, -999,
676 -999, -999, -999, -120, -104, -91, -79, -52,
677 -60, -54, -64, -69, -77, -80, -82, -84,
678 -85, -87, -88, -90, -999, -999, -999, -999,
679 -999, -999, -999, -999, -999, -999, -999, -999,
680 -999, -999, -999, -999, -999, -999, -999, -999,
681 -999, -999, -999, -999, -999, -999, -999, -999},
682 {-999, -999, -999, -999, -999, -999, -999, -999,
683 -999, -999, -999, -118, -100, -87, -77, -49,
684 -50, -44, -58, -61, -61, -67, -65, -62,
685 -62, -62, -65, -68, -999, -999, -999, -999,
686 -999, -999, -999, -999, -999, -999, -999, -999,
687 -999, -999, -999, -999, -999, -999, -999, -999,
688 -999, -999, -999, -999, -999, -999, -999, -999},
689 {-999, -999, -999, -999, -999, -999, -999, -999,
690 -999, -999, -999, -115, -98, -84, -62, -49,
691 -44, -38, -46, -49, -49, -46, -39, -37,
692 -39, -40, -42, -43, -999, -999, -999, -999,
693 -999, -999, -999, -999, -999, -999, -999, -999,
694 -999, -999, -999, -999, -999, -999, -999, -999,
695 -999, -999, -999, -999, -999, -999, -999, -999}},
697 {{-999, -999, -999, -999, -999, -999, -999, -999,
698 -999, -999, -999, -999, -999, -110, -88, -74,
699 -77, -82, -82, -85, -90, -94, -99, -104,
700 -999, -999, -999, -999, -999, -999, -999, -999,
701 -999, -999, -999, -999, -999, -999, -999, -999,
702 -999, -999, -999, -999, -999, -999, -999, -999,
703 -999, -999, -999, -999, -999, -999, -999, -999},
704 {-999, -999, -999, -999, -999, -999, -999, -999,
705 -999, -999, -999, -999, -999, -110, -88, -66,
706 -70, -81, -80, -81, -84, -88, -91, -93,
707 -999, -999, -999, -999, -999, -999, -999, -999,
708 -999, -999, -999, -999, -999, -999, -999, -999,
709 -999, -999, -999, -999, -999, -999, -999, -999,
710 -999, -999, -999, -999, -999, -999, -999, -999},
711 {-999, -999, -999, -999, -999, -999, -999, -999,
712 -999, -999, -999, -999, -999, -110, -88, -61,
713 -63, -70, -71, -74, -77, -80, -83, -85,
714 -999, -999, -999, -999, -999, -999, -999, -999,
715 -999, -999, -999, -999, -999, -999, -999, -999,
716 -999, -999, -999, -999, -999, -999, -999, -999,
717 -999, -999, -999, -999, -999, -999, -999, -999},
718 {-999, -999, -999, -999, -999, -999, -999, -999,
719 -999, -999, -999, -999, -999, -110, -86, -62,
720 -63, -62, -62, -58, -52, -50, -50, -52,
721 -54, -999, -999, -999, -999, -999, -999, -999,
722 -999, -999, -999, -999, -999, -999, -999, -999,
723 -999, -999, -999, -999, -999, -999, -999, -999,
724 -999, -999, -999, -999, -999, -999, -999, -999},
725 {-999, -999, -999, -999, -999, -999, -999, -999,
726 -999, -999, -999, -999, -118, -108, -84, -53,
727 -50, -50, -50, -55, -47, -45, -40, -40,
728 -40, -999, -999, -999, -999, -999, -999, -999,
729 -999, -999, -999, -999, -999, -999, -999, -999,
730 -999, -999, -999, -999, -999, -999, -999, -999,
731 -999, -999, -999, -999, -999, -999, -999, -999},
732 {-999, -999, -999, -999, -999, -999, -999, -999,
733 -999, -999, -999, -999, -118, -100, -73, -43,
734 -37, -42, -43, -53, -38, -37, -35, -35,
735 -38, -999, -999, -999, -999, -999, -999, -999,
736 -999, -999, -999, -999, -999, -999, -999, -999,
737 -999, -999, -999, -999, -999, -999, -999, -999,
738 -999, -999, -999, -999, -999, -999, -999, -999}},
740 {{-999, -999, -999, -999, -999, -999, -999, -999,
741 -999, -999, -999, -110, -100, -91, -84, -74,
742 -80, -80, -80, -80, -80, -999, -999, -999,
743 -999, -999, -999, -999, -999, -999, -999, -999,
744 -999, -999, -999, -999, -999, -999, -999, -999,
745 -999, -999, -999, -999, -999, -999, -999, -999,
746 -999, -999, -999, -999, -999, -999, -999, -999},
747 {-999, -999, -999, -999, -999, -999, -999, -999,
748 -999, -999, -999, -110, -100, -91, -84, -74,
749 -68, -68, -68, -68, -68, -999, -999, -999,
750 -999, -999, -999, -999, -999, -999, -999, -999,
751 -999, -999, -999, -999, -999, -999, -999, -999,
752 -999, -999, -999, -999, -999, -999, -999, -999,
753 -999, -999, -999, -999, -999, -999, -999, -999},
754 {-999, -999, -999, -999, -999, -999, -999, -999,
755 -999, -999, -999, -110, -100, -86, -78, -70,
756 -60, -45, -30, -21, -999, -999, -999, -999,
757 -999, -999, -999, -999, -999, -999, -999, -999,
758 -999, -999, -999, -999, -999, -999, -999, -999,
759 -999, -999, -999, -999, -999, -999, -999, -999,
760 -999, -999, -999, -999, -999, -999, -999, -999},
761 {-999, -999, -999, -999, -999, -999, -999, -999,
762 -999, -999, -999, -110, -100, -87, -78, -67,
763 -48, -38, -29, -21, -999, -999, -999, -999,
764 -999, -999, -999, -999, -999, -999, -999, -999,
765 -999, -999, -999, -999, -999, -999, -999, -999,
766 -999, -999, -999, -999, -999, -999, -999, -999,
767 -999, -999, -999, -999, -999, -999, -999, -999},
768 {-999, -999, -999, -999, -999, -999, -999, -999,
769 -999, -999, -999, -110, -100, -86, -69, -56,
770 -45, -35, -33, -29, -999, -999, -999, -999,
771 -999, -999, -999, -999, -999, -999, -999, -999,
772 -999, -999, -999, -999, -999, -999, -999, -999,
773 -999, -999, -999, -999, -999, -999, -999, -999,
774 -999, -999, -999, -999, -999, -999, -999, -999},
775 {-999, -999, -999, -999, -999, -999, -999, -999,
776 -999, -999, -999, -110, -100, -83, -71, -48,
777 -27, -38, -37, -34, -999, -999, -999, -999,
778 -999, -999, -999, -999, -999, -999, -999, -999,
779 -999, -999, -999, -999, -999, -999, -999, -999,
780 -999, -999, -999, -999, -999, -999, -999, -999,
781 -999, -999, -999, -999, -999, -999, -999, -999}}