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 http://www.xiph.org/ *
11 ********************************************************************
13 function: masking curve data for psychoacoustics
16 ********************************************************************/
21 /* more detailed ATH; the bass if flat to save stressing the floor
22 overly for only a bin or two of savings. */
25 static const float ATH[]={
26 /*15*/ -51, -52, -53, -54, -55, -56, -57, -58,
27 /*31*/ -59, -60, -61, -62, -63, -64, -65, -66,
28 /*63*/ -67, -68, -69, -70, -71, -72, -73, -74,
29 /*125*/ -75, -76, -77, -78, -80, -81, -82, -83,
30 /*250*/ -84, -85, -86, -87, -88, -88, -89, -89,
31 /*500*/ -90, -91, -91, -92, -93, -94, -95, -96,
32 /*1k*/ -96, -97, -98, -98, -99, -99,-100,-100,
33 /*2k*/ -101,-102,-103,-104,-106,-107,-107,-107,
34 /*4k*/ -107,-105,-103,-102,-101, -99, -98, -96,
35 /*8k*/ -95, -95, -96, -97, -96, -95, -93, -90,
36 /*16k*/ -80, -70, -50, -40, -30, -30, -30, -30
39 /* The tone masking curves from Ehmer's and Fielder's papers have been
40 replaced by an empirically collected data set. The previously
41 published values were, far too often, simply on crack. */
43 #define EHMER_OFFSET 16
46 /* masking tones from -50 to 0dB, 62.5 through 16kHz at half octaves
47 test tones from -2 octaves to +5 octaves sampled at eighth octaves */
48 /* (Vorbis 0dB, the loudest possible tone, is assumed to be ~100dB SPL
49 for collection of these curves) */
51 static const float tonemasks[P_BANDS][6][EHMER_MAX]={
53 {{ -60, -60, -60, -60, -60, -60, -60, -60,
54 -60, -60, -60, -60, -62, -62, -65, -73,
55 -69, -68, -68, -67, -70, -70, -72, -74,
56 -75, -79, -79, -80, -83, -88, -93, -100,
57 -110, -999, -999, -999, -999, -999, -999, -999,
58 -999, -999, -999, -999, -999, -999, -999, -999,
59 -999, -999, -999, -999, -999, -999, -999, -999},
60 { -48, -48, -48, -48, -48, -48, -48, -48,
61 -48, -48, -48, -48, -48, -53, -61, -66,
62 -66, -68, -67, -70, -76, -76, -72, -73,
63 -75, -76, -78, -79, -83, -88, -93, -100,
64 -110, -999, -999, -999, -999, -999, -999, -999,
65 -999, -999, -999, -999, -999, -999, -999, -999,
66 -999, -999, -999, -999, -999, -999, -999, -999},
67 { -37, -37, -37, -37, -37, -37, -37, -37,
68 -38, -40, -42, -46, -48, -53, -55, -62,
69 -65, -58, -56, -56, -61, -60, -65, -67,
70 -69, -71, -77, -77, -78, -80, -82, -84,
71 -88, -93, -98, -106, -112, -999, -999, -999,
72 -999, -999, -999, -999, -999, -999, -999, -999,
73 -999, -999, -999, -999, -999, -999, -999, -999},
74 { -25, -25, -25, -25, -25, -25, -25, -25,
75 -25, -26, -27, -29, -32, -38, -48, -52,
76 -52, -50, -48, -48, -51, -52, -54, -60,
77 -67, -67, -66, -68, -69, -73, -73, -76,
78 -80, -81, -81, -85, -85, -86, -88, -93,
79 -100, -110, -999, -999, -999, -999, -999, -999,
80 -999, -999, -999, -999, -999, -999, -999, -999},
81 { -16, -16, -16, -16, -16, -16, -16, -16,
82 -17, -19, -20, -22, -26, -28, -31, -40,
83 -47, -39, -39, -40, -42, -43, -47, -51,
84 -57, -52, -55, -55, -60, -58, -62, -63,
85 -70, -67, -69, -72, -73, -77, -80, -82,
86 -83, -87, -90, -94, -98, -104, -115, -999,
87 -999, -999, -999, -999, -999, -999, -999, -999},
88 { -8, -8, -8, -8, -8, -8, -8, -8,
89 -8, -8, -10, -11, -15, -19, -25, -30,
90 -34, -31, -30, -31, -29, -32, -35, -42,
91 -48, -42, -44, -46, -50, -50, -51, -52,
92 -59, -54, -55, -55, -58, -62, -63, -66,
93 -72, -73, -76, -75, -78, -80, -80, -81,
94 -84, -88, -90, -94, -98, -101, -106, -110}},
96 {{ -66, -66, -66, -66, -66, -66, -66, -66,
97 -66, -66, -66, -66, -66, -67, -67, -67,
98 -76, -72, -71, -74, -76, -76, -75, -78,
99 -79, -79, -81, -83, -86, -89, -93, -97,
100 -100, -105, -110, -999, -999, -999, -999, -999,
101 -999, -999, -999, -999, -999, -999, -999, -999,
102 -999, -999, -999, -999, -999, -999, -999, -999},
103 { -47, -47, -47, -47, -47, -47, -47, -47,
104 -47, -47, -47, -48, -51, -55, -59, -66,
105 -66, -66, -67, -66, -68, -69, -70, -74,
106 -79, -77, -77, -78, -80, -81, -82, -84,
107 -86, -88, -91, -95, -100, -108, -116, -999,
108 -999, -999, -999, -999, -999, -999, -999, -999,
109 -999, -999, -999, -999, -999, -999, -999, -999},
110 { -36, -36, -36, -36, -36, -36, -36, -36,
111 -36, -37, -37, -41, -44, -48, -51, -58,
112 -62, -60, -57, -59, -59, -60, -63, -65,
113 -72, -71, -70, -72, -74, -77, -76, -78,
114 -81, -81, -80, -83, -86, -91, -96, -100,
115 -105, -110, -999, -999, -999, -999, -999, -999,
116 -999, -999, -999, -999, -999, -999, -999, -999},
117 { -28, -28, -28, -28, -28, -28, -28, -28,
118 -28, -30, -32, -32, -33, -35, -41, -49,
119 -50, -49, -47, -48, -48, -52, -51, -57,
120 -65, -61, -59, -61, -64, -69, -70, -74,
121 -77, -77, -78, -81, -84, -85, -87, -90,
122 -92, -96, -100, -107, -112, -999, -999, -999,
123 -999, -999, -999, -999, -999, -999, -999, -999},
124 { -19, -19, -19, -19, -19, -19, -19, -19,
125 -20, -21, -23, -27, -30, -35, -36, -41,
126 -46, -44, -42, -40, -41, -41, -43, -48,
127 -55, -53, -52, -53, -56, -59, -58, -60,
128 -67, -66, -69, -71, -72, -75, -79, -81,
129 -84, -87, -90, -93, -97, -101, -107, -114,
130 -999, -999, -999, -999, -999, -999, -999, -999},
131 { -9, -9, -9, -9, -9, -9, -9, -9,
132 -11, -12, -12, -15, -16, -20, -23, -30,
133 -37, -34, -33, -34, -31, -32, -32, -38,
134 -47, -44, -41, -40, -47, -49, -46, -46,
135 -58, -50, -50, -54, -58, -62, -64, -67,
136 -67, -70, -72, -76, -79, -83, -87, -91,
137 -96, -100, -104, -110, -999, -999, -999, -999}},
139 {{ -62, -62, -62, -62, -62, -62, -62, -62,
140 -62, -62, -63, -64, -66, -67, -66, -68,
141 -75, -72, -76, -75, -76, -78, -79, -82,
142 -84, -85, -90, -94, -101, -110, -999, -999,
143 -999, -999, -999, -999, -999, -999, -999, -999,
144 -999, -999, -999, -999, -999, -999, -999, -999,
145 -999, -999, -999, -999, -999, -999, -999, -999},
146 { -59, -59, -59, -59, -59, -59, -59, -59,
147 -59, -59, -59, -60, -60, -61, -63, -66,
148 -71, -68, -70, -70, -71, -72, -72, -75,
149 -81, -78, -79, -82, -83, -86, -90, -97,
150 -103, -113, -999, -999, -999, -999, -999, -999,
151 -999, -999, -999, -999, -999, -999, -999, -999,
152 -999, -999, -999, -999, -999, -999, -999, -999},
153 { -53, -53, -53, -53, -53, -53, -53, -53,
154 -53, -54, -55, -57, -56, -57, -55, -61,
155 -65, -60, -60, -62, -63, -63, -66, -68,
156 -74, -73, -75, -75, -78, -80, -80, -82,
157 -85, -90, -96, -101, -108, -999, -999, -999,
158 -999, -999, -999, -999, -999, -999, -999, -999,
159 -999, -999, -999, -999, -999, -999, -999, -999},
160 { -46, -46, -46, -46, -46, -46, -46, -46,
161 -46, -46, -47, -47, -47, -47, -48, -51,
162 -57, -51, -49, -50, -51, -53, -54, -59,
163 -66, -60, -62, -67, -67, -70, -72, -75,
164 -76, -78, -81, -85, -88, -94, -97, -104,
165 -112, -999, -999, -999, -999, -999, -999, -999,
166 -999, -999, -999, -999, -999, -999, -999, -999},
167 { -36, -36, -36, -36, -36, -36, -36, -36,
168 -39, -41, -42, -42, -39, -38, -41, -43,
169 -52, -44, -40, -39, -37, -37, -40, -47,
170 -54, -50, -48, -50, -55, -61, -59, -62,
171 -66, -66, -66, -69, -69, -73, -74, -74,
172 -75, -77, -79, -82, -87, -91, -95, -100,
173 -108, -115, -999, -999, -999, -999, -999, -999},
174 { -28, -26, -24, -22, -20, -20, -23, -29,
175 -30, -31, -28, -27, -28, -28, -28, -35,
176 -40, -33, -32, -29, -30, -30, -30, -37,
177 -45, -41, -37, -38, -45, -47, -47, -48,
178 -53, -49, -48, -50, -49, -49, -51, -52,
179 -58, -56, -57, -56, -60, -61, -62, -70,
180 -72, -74, -78, -83, -88, -93, -100, -106}},
182 {{-999, -999, -999, -999, -999, -999, -999, -999,
183 -999, -110, -105, -100, -95, -91, -87, -83,
184 -80, -78, -76, -78, -78, -81, -83, -85,
185 -86, -85, -86, -87, -90, -97, -107, -999,
186 -999, -999, -999, -999, -999, -999, -999, -999,
187 -999, -999, -999, -999, -999, -999, -999, -999,
188 -999, -999, -999, -999, -999, -999, -999, -999},
189 {-999, -999, -999, -110, -105, -100, -95, -90,
190 -85, -81, -77, -73, -70, -67, -67, -68,
191 -75, -73, -70, -69, -70, -72, -75, -79,
192 -84, -83, -84, -86, -88, -89, -89, -93,
193 -98, -105, -112, -999, -999, -999, -999, -999,
194 -999, -999, -999, -999, -999, -999, -999, -999,
195 -999, -999, -999, -999, -999, -999, -999, -999},
196 {-105, -100, -95, -90, -85, -80, -76, -71,
197 -68, -68, -65, -63, -63, -62, -62, -64,
198 -65, -64, -61, -62, -63, -64, -66, -68,
199 -73, -73, -74, -75, -76, -81, -83, -85,
200 -88, -89, -92, -95, -100, -108, -999, -999,
201 -999, -999, -999, -999, -999, -999, -999, -999,
202 -999, -999, -999, -999, -999, -999, -999, -999},
203 { -80, -75, -71, -68, -65, -63, -62, -61,
204 -61, -61, -61, -59, -56, -57, -53, -50,
205 -58, -52, -50, -50, -52, -53, -54, -58,
206 -67, -63, -67, -68, -72, -75, -78, -80,
207 -81, -81, -82, -85, -89, -90, -93, -97,
208 -101, -107, -114, -999, -999, -999, -999, -999,
209 -999, -999, -999, -999, -999, -999, -999, -999},
210 { -65, -61, -59, -57, -56, -55, -55, -56,
211 -56, -57, -55, -53, -52, -47, -44, -44,
212 -50, -44, -41, -39, -39, -42, -40, -46,
213 -51, -49, -50, -53, -54, -63, -60, -61,
214 -62, -66, -66, -66, -70, -73, -74, -75,
215 -76, -75, -79, -85, -89, -91, -96, -102,
216 -110, -999, -999, -999, -999, -999, -999, -999},
217 { -52, -50, -49, -49, -48, -48, -48, -49,
218 -50, -50, -49, -46, -43, -39, -35, -33,
219 -38, -36, -32, -29, -32, -32, -32, -35,
220 -44, -39, -38, -38, -46, -50, -45, -46,
221 -53, -50, -50, -50, -54, -54, -53, -53,
222 -56, -57, -59, -66, -70, -72, -74, -79,
223 -83, -85, -90, -97, -114, -999, -999, -999}},
225 {{-999, -999, -999, -999, -999, -999, -110, -105,
226 -100, -95, -90, -86, -80, -75, -75, -79,
227 -80, -79, -80, -81, -82, -88, -95, -103,
228 -110, -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, -999, -999, -999, -999},
232 {-999, -999, -999, -999, -108, -103, -98, -93,
233 -88, -83, -79, -78, -75, -71, -67, -68,
234 -73, -73, -72, -73, -75, -77, -80, -82,
235 -88, -93, -100, -107, -114, -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, -999, -999, -999, -999, -999},
239 {-999, -999, -999, -110, -105, -101, -96, -90,
240 -86, -81, -77, -73, -69, -66, -61, -62,
241 -66, -64, -62, -65, -66, -70, -72, -76,
242 -81, -80, -84, -90, -95, -102, -110, -999,
243 -999, -999, -999, -999, -999, -999, -999, -999,
244 -999, -999, -999, -999, -999, -999, -999, -999,
245 -999, -999, -999, -999, -999, -999, -999, -999},
246 {-999, -999, -999, -107, -103, -97, -92, -88,
247 -83, -79, -74, -70, -66, -59, -53, -58,
248 -62, -55, -54, -54, -54, -58, -61, -62,
249 -72, -70, -72, -75, -78, -80, -81, -80,
250 -83, -83, -88, -93, -100, -107, -115, -999,
251 -999, -999, -999, -999, -999, -999, -999, -999,
252 -999, -999, -999, -999, -999, -999, -999, -999},
253 {-999, -999, -999, -105, -100, -95, -90, -85,
254 -80, -75, -70, -66, -62, -56, -48, -44,
255 -48, -46, -46, -43, -46, -48, -48, -51,
256 -58, -58, -59, -60, -62, -62, -61, -61,
257 -65, -64, -65, -68, -70, -74, -75, -78,
258 -81, -86, -95, -110, -999, -999, -999, -999,
259 -999, -999, -999, -999, -999, -999, -999, -999},
260 {-999, -999, -105, -100, -95, -90, -85, -80,
261 -75, -70, -65, -61, -55, -49, -39, -33,
262 -40, -35, -32, -38, -40, -33, -35, -37,
263 -46, -41, -45, -44, -46, -42, -45, -46,
264 -52, -50, -50, -50, -54, -54, -55, -57,
265 -62, -64, -66, -68, -70, -76, -81, -90,
266 -100, -110, -999, -999, -999, -999, -999, -999}},
268 {{-999, -999, -999, -999, -999, -999, -999, -999,
269 -105, -98, -90, -85, -82, -83, -80, -78,
270 -84, -79, -80, -83, -87, -89, -91, -93,
271 -99, -106, -117, -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 {-999, -999, -999, -999, -999, -999, -999, -999,
276 -105, -98, -90, -85, -80, -75, -70, -68,
277 -74, -72, -74, -77, -80, -82, -85, -87,
278 -92, -89, -91, -95, -100, -106, -112, -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 {-999, -999, -999, -999, -999, -999, -999, -999,
283 -105, -98, -90, -83, -75, -71, -63, -64,
284 -67, -62, -64, -67, -70, -73, -77, -81,
285 -84, -83, -85, -89, -90, -93, -98, -104,
286 -109, -114, -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 {-999, -999, -999, -999, -999, -999, -999, -999,
290 -103, -96, -88, -81, -75, -68, -58, -54,
291 -56, -54, -56, -56, -58, -60, -63, -66,
292 -74, -69, -72, -72, -75, -74, -77, -81,
293 -81, -82, -84, -87, -93, -96, -99, -104,
294 -110, -999, -999, -999, -999, -999, -999, -999,
295 -999, -999, -999, -999, -999, -999, -999, -999},
296 {-999, -999, -999, -999, -999, -108, -102, -96,
297 -91, -85, -80, -74, -68, -60, -51, -46,
298 -48, -46, -43, -45, -47, -47, -49, -48,
299 -56, -53, -55, -58, -57, -63, -58, -60,
300 -66, -64, -67, -70, -70, -74, -77, -84,
301 -86, -89, -91, -93, -94, -101, -109, -118,
302 -999, -999, -999, -999, -999, -999, -999, -999},
303 {-999, -999, -999, -108, -103, -98, -93, -88,
304 -83, -78, -73, -68, -60, -53, -44, -35,
305 -38, -38, -34, -34, -36, -40, -41, -44,
306 -51, -45, -46, -47, -46, -54, -50, -49,
307 -50, -50, -50, -51, -54, -57, -58, -60,
308 -66, -66, -66, -64, -65, -68, -77, -82,
309 -87, -95, -110, -999, -999, -999, -999, -999}},
311 {{-999, -999, -999, -999, -999, -999, -999, -999,
312 -107, -102, -97, -92, -87, -83, -78, -75,
313 -82, -79, -83, -85, -89, -92, -95, -98,
314 -101, -105, -109, -113, -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, -999},
318 {-999, -999, -999, -999, -999, -999, -999, -106,
319 -100, -95, -90, -86, -81, -78, -74, -69,
320 -74, -74, -76, -79, -83, -84, -86, -89,
321 -92, -97, -93, -100, -103, -107, -110, -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, -999, -999},
325 {-999, -999, -999, -999, -999, -999, -106, -100,
326 -95, -90, -87, -83, -80, -75, -69, -60,
327 -66, -66, -68, -70, -74, -78, -79, -81,
328 -81, -83, -84, -87, -93, -96, -99, -103,
329 -107, -110, -999, -999, -999, -999, -999, -999,
330 -999, -999, -999, -999, -999, -999, -999, -999,
331 -999, -999, -999, -999, -999, -999, -999, -999},
332 {-999, -999, -999, -999, -999, -108, -103, -98,
333 -93, -89, -85, -82, -78, -71, -62, -55,
334 -58, -58, -54, -54, -55, -59, -61, -62,
335 -70, -66, -66, -67, -70, -72, -75, -78,
336 -84, -84, -84, -88, -91, -90, -95, -98,
337 -102, -103, -106, -110, -999, -999, -999, -999,
338 -999, -999, -999, -999, -999, -999, -999, -999},
339 {-999, -999, -999, -999, -108, -103, -98, -94,
340 -90, -87, -82, -79, -73, -67, -58, -47,
341 -50, -45, -41, -45, -48, -44, -44, -49,
342 -54, -51, -48, -47, -49, -50, -51, -57,
343 -58, -60, -63, -69, -70, -69, -71, -74,
344 -78, -82, -90, -95, -101, -105, -110, -999,
345 -999, -999, -999, -999, -999, -999, -999, -999},
346 {-999, -999, -999, -105, -101, -97, -93, -90,
347 -85, -80, -77, -72, -65, -56, -48, -37,
348 -40, -36, -34, -40, -50, -47, -38, -41,
349 -47, -38, -35, -39, -38, -43, -40, -45,
350 -50, -45, -44, -47, -50, -55, -48, -48,
351 -52, -66, -70, -76, -82, -90, -97, -105,
352 -110, -999, -999, -999, -999, -999, -999, -999}},
354 {{-999, -999, -999, -999, -999, -999, -999, -999,
355 -999, -108, -103, -98, -93, -86, -79, -76,
356 -83, -81, -85, -87, -89, -93, -98, -102,
357 -107, -112, -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, -999, -999, -999, -999, -999, -999, -999,
362 -999, -108, -103, -98, -93, -86, -79, -71,
363 -77, -74, -77, -79, -81, -84, -85, -90,
364 -92, -93, -92, -98, -101, -108, -112, -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 {-999, -999, -999, -999, -999, -999, -999, -999,
369 -108, -103, -98, -93, -87, -78, -68, -65,
370 -66, -62, -65, -67, -70, -73, -75, -78,
371 -82, -82, -83, -84, -91, -93, -98, -102,
372 -106, -110, -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 {-999, -999, -999, -999, -999, -999, -999, -999,
376 -105, -100, -95, -90, -82, -74, -62, -57,
377 -58, -56, -51, -52, -52, -54, -54, -58,
378 -66, -59, -60, -63, -66, -69, -73, -79,
379 -83, -84, -80, -81, -81, -82, -88, -92,
380 -98, -105, -113, -999, -999, -999, -999, -999,
381 -999, -999, -999, -999, -999, -999, -999, -999},
382 {-999, -999, -999, -999, -999, -999, -999, -107,
383 -102, -97, -92, -84, -79, -69, -57, -47,
384 -52, -47, -44, -45, -50, -52, -42, -42,
385 -53, -43, -43, -48, -51, -56, -55, -52,
386 -57, -59, -61, -62, -67, -71, -78, -83,
387 -86, -94, -98, -103, -110, -999, -999, -999,
388 -999, -999, -999, -999, -999, -999, -999, -999},
389 {-999, -999, -999, -999, -999, -999, -105, -100,
390 -95, -90, -84, -78, -70, -61, -51, -41,
391 -40, -38, -40, -46, -52, -51, -41, -40,
392 -46, -40, -38, -38, -41, -46, -41, -46,
393 -47, -43, -43, -45, -41, -45, -56, -67,
394 -68, -83, -87, -90, -95, -102, -107, -113,
395 -999, -999, -999, -999, -999, -999, -999, -999}},
397 {{-999, -999, -999, -999, -999, -999, -999, -999,
398 -999, -109, -105, -101, -96, -91, -84, -77,
399 -82, -82, -85, -89, -94, -100, -106, -110,
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, -999, -999, -999, -999, -999, -999, -999,
405 -999, -106, -103, -98, -92, -85, -80, -71,
406 -75, -72, -76, -80, -84, -86, -89, -93,
407 -100, -107, -113, -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, -999},
411 {-999, -999, -999, -999, -999, -999, -999, -107,
412 -104, -101, -97, -92, -88, -84, -80, -64,
413 -66, -63, -64, -66, -69, -73, -77, -83,
414 -83, -86, -91, -98, -104, -111, -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, -999},
418 {-999, -999, -999, -999, -999, -999, -999, -107,
419 -104, -101, -97, -92, -90, -84, -74, -57,
420 -58, -52, -55, -54, -50, -52, -50, -52,
421 -63, -62, -69, -76, -77, -78, -78, -79,
422 -82, -88, -94, -100, -106, -111, -999, -999,
423 -999, -999, -999, -999, -999, -999, -999, -999,
424 -999, -999, -999, -999, -999, -999, -999, -999},
425 {-999, -999, -999, -999, -999, -999, -106, -102,
426 -98, -95, -90, -85, -83, -78, -70, -50,
427 -50, -41, -44, -49, -47, -50, -50, -44,
428 -55, -46, -47, -48, -48, -54, -49, -49,
429 -58, -62, -71, -81, -87, -92, -97, -102,
430 -108, -114, -999, -999, -999, -999, -999, -999,
431 -999, -999, -999, -999, -999, -999, -999, -999},
432 {-999, -999, -999, -999, -999, -999, -106, -102,
433 -98, -95, -90, -85, -83, -78, -70, -45,
434 -43, -41, -47, -50, -51, -50, -49, -45,
435 -47, -41, -44, -41, -39, -43, -38, -37,
436 -40, -41, -44, -50, -58, -65, -73, -79,
437 -85, -92, -97, -101, -105, -109, -113, -999,
438 -999, -999, -999, -999, -999, -999, -999, -999}},
440 {{-999, -999, -999, -999, -999, -999, -999, -999,
441 -999, -999, -999, -107, -100, -95, -87, -81,
442 -85, -83, -88, -93, -100, -107, -114, -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, -999, -999, -999, -999, -999, -999,
448 -999, -999, -107, -101, -95, -88, -83, -76,
449 -73, -72, -79, -84, -90, -95, -100, -105,
450 -110, -115, -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, -999, -999, -999, -999, -999, -999,
455 -999, -999, -104, -98, -92, -87, -81, -70,
456 -65, -62, -67, -71, -74, -80, -85, -91,
457 -95, -99, -103, -108, -111, -114, -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, -999, -999, -999, -999, -999, -999,
462 -999, -999, -103, -97, -90, -85, -76, -60,
463 -56, -54, -60, -62, -61, -56, -63, -65,
464 -73, -74, -77, -75, -78, -81, -86, -87,
465 -88, -91, -94, -98, -103, -110, -999, -999,
466 -999, -999, -999, -999, -999, -999, -999, -999,
467 -999, -999, -999, -999, -999, -999, -999, -999},
468 {-999, -999, -999, -999, -999, -999, -999, -105,
469 -100, -97, -92, -86, -81, -79, -70, -57,
470 -51, -47, -51, -58, -60, -56, -53, -50,
471 -58, -52, -50, -50, -53, -55, -64, -69,
472 -71, -85, -82, -78, -81, -85, -95, -102,
473 -112, -999, -999, -999, -999, -999, -999, -999,
474 -999, -999, -999, -999, -999, -999, -999, -999},
475 {-999, -999, -999, -999, -999, -999, -999, -105,
476 -100, -97, -92, -85, -83, -79, -72, -49,
477 -40, -43, -43, -54, -56, -51, -50, -40,
478 -43, -38, -36, -35, -37, -38, -37, -44,
479 -54, -60, -57, -60, -70, -75, -84, -92,
480 -103, -112, -999, -999, -999, -999, -999, -999,
481 -999, -999, -999, -999, -999, -999, -999, -999}},
483 {{-999, -999, -999, -999, -999, -999, -999, -999,
484 -999, -999, -999, -110, -102, -95, -89, -82,
485 -83, -84, -90, -92, -99, -107, -113, -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, -999, -999, -999, -999, -999, -999,
491 -999, -999, -107, -101, -95, -89, -83, -72,
492 -74, -78, -85, -88, -88, -90, -92, -98,
493 -105, -111, -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, -999, -999, -999, -999, -999, -999, -999,
498 -999, -109, -103, -97, -93, -87, -81, -70,
499 -70, -67, -75, -73, -76, -79, -81, -83,
500 -88, -89, -97, -103, -110, -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, -999, -999, -999, -999, -999, -999, -999,
505 -999, -107, -100, -94, -88, -83, -75, -63,
506 -59, -59, -63, -66, -60, -62, -67, -67,
507 -77, -76, -81, -88, -86, -92, -96, -102,
508 -109, -116, -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, -999, -999, -999, -999, -999, -999, -999,
512 -999, -105, -98, -92, -86, -81, -73, -56,
513 -52, -47, -55, -60, -58, -52, -51, -45,
514 -49, -50, -53, -54, -61, -71, -70, -69,
515 -78, -79, -87, -90, -96, -104, -112, -999,
516 -999, -999, -999, -999, -999, -999, -999, -999,
517 -999, -999, -999, -999, -999, -999, -999, -999},
518 {-999, -999, -999, -999, -999, -999, -999, -999,
519 -999, -103, -96, -90, -86, -78, -70, -51,
520 -42, -47, -48, -55, -54, -54, -53, -42,
521 -35, -28, -33, -38, -37, -44, -47, -49,
522 -54, -63, -68, -78, -82, -89, -94, -99,
523 -104, -109, -114, -999, -999, -999, -999, -999,
524 -999, -999, -999, -999, -999, -999, -999, -999}},
526 {{-999, -999, -999, -999, -999, -999, -999, -999,
527 -999, -999, -999, -999, -110, -100, -90, -79,
528 -85, -81, -82, -82, -89, -94, -99, -103,
529 -109, -115, -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, -999, -999, -999, -999,
534 -999, -999, -999, -999, -105, -97, -85, -72,
535 -74, -70, -70, -70, -76, -85, -91, -93,
536 -97, -103, -109, -115, -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, -999, -999, -999, -999,
541 -999, -999, -999, -999, -112, -93, -81, -68,
542 -62, -60, -60, -57, -63, -70, -77, -82,
543 -90, -93, -98, -104, -109, -113, -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, -999, -999, -999, -999, -999,
548 -999, -999, -999, -113, -100, -93, -84, -63,
549 -58, -48, -53, -54, -52, -52, -57, -64,
550 -66, -76, -83, -81, -85, -85, -90, -95,
551 -98, -101, -103, -106, -108, -111, -999, -999,
552 -999, -999, -999, -999, -999, -999, -999, -999,
553 -999, -999, -999, -999, -999, -999, -999, -999},
554 {-999, -999, -999, -999, -999, -999, -999, -999,
555 -999, -999, -999, -105, -95, -86, -74, -53,
556 -50, -38, -43, -49, -43, -42, -39, -39,
557 -46, -52, -57, -56, -72, -69, -74, -81,
558 -87, -92, -94, -97, -99, -102, -105, -108,
559 -999, -999, -999, -999, -999, -999, -999, -999,
560 -999, -999, -999, -999, -999, -999, -999, -999},
561 {-999, -999, -999, -999, -999, -999, -999, -999,
562 -999, -999, -108, -99, -90, -76, -66, -45,
563 -43, -41, -44, -47, -43, -47, -40, -30,
564 -31, -31, -39, -33, -40, -41, -43, -53,
565 -59, -70, -73, -77, -79, -82, -84, -87,
566 -999, -999, -999, -999, -999, -999, -999, -999,
567 -999, -999, -999, -999, -999, -999, -999, -999}},
569 {{-999, -999, -999, -999, -999, -999, -999, -999,
570 -999, -999, -999, -999, -999, -110, -91, -76,
571 -75, -85, -93, -98, -104, -110, -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, -999, -999, -999,
577 -999, -999, -999, -999, -999, -110, -91, -70,
578 -70, -75, -86, -89, -94, -98, -101, -106,
579 -110, -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, -999, -999, -999, -999,
584 -999, -999, -999, -999, -110, -95, -80, -60,
585 -65, -64, -74, -83, -88, -91, -95, -99,
586 -103, -107, -110, -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, -999, -999, -999, -999,
591 -999, -999, -999, -999, -110, -95, -80, -58,
592 -55, -49, -66, -68, -71, -78, -78, -80,
593 -88, -85, -89, -97, -100, -105, -110, -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, -999, -999, -999, -999,
598 -999, -999, -999, -999, -110, -95, -80, -53,
599 -52, -41, -59, -59, -49, -58, -56, -63,
600 -86, -79, -90, -93, -98, -103, -107, -112,
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, -999, -999, -999, -999, -999,
605 -999, -999, -999, -110, -97, -91, -73, -45,
606 -40, -33, -53, -61, -49, -54, -50, -50,
607 -60, -52, -67, -74, -81, -92, -96, -100,
608 -105, -110, -999, -999, -999, -999, -999, -999,
609 -999, -999, -999, -999, -999, -999, -999, -999,
610 -999, -999, -999, -999, -999, -999, -999, -999}},
612 {{-999, -999, -999, -999, -999, -999, -999, -999,
613 -999, -999, -999, -113, -106, -99, -92, -77,
614 -80, -88, -97, -106, -115, -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, -999, -999, -999, -999, -999, -999,
620 -999, -999, -116, -109, -102, -95, -89, -74,
621 -72, -88, -87, -95, -102, -109, -116, -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, -999, -999, -999, -999, -999, -999,
627 -999, -999, -116, -109, -102, -95, -89, -75,
628 -66, -74, -77, -78, -86, -87, -90, -96,
629 -105, -115, -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, -999, -999, -999, -999, -999, -999,
634 -999, -999, -115, -108, -101, -94, -88, -66,
635 -56, -61, -70, -65, -78, -72, -83, -84,
636 -93, -98, -105, -110, -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, -999, -999, -999, -999, -999, -999,
641 -999, -999, -110, -105, -95, -89, -82, -57,
642 -52, -52, -59, -56, -59, -58, -69, -67,
643 -88, -82, -82, -89, -94, -100, -108, -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, -999, -999, -999, -999, -999, -999, -999,
648 -999, -110, -101, -96, -90, -83, -77, -54,
649 -43, -38, -50, -48, -52, -48, -42, -42,
650 -51, -52, -53, -59, -65, -71, -78, -85,
651 -95, -999, -999, -999, -999, -999, -999, -999,
652 -999, -999, -999, -999, -999, -999, -999, -999,
653 -999, -999, -999, -999, -999, -999, -999, -999}},
655 {{-999, -999, -999, -999, -999, -999, -999, -999,
656 -999, -999, -999, -999, -120, -105, -86, -68,
657 -78, -79, -90, -100, -110, -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, -999, -999, -999, -999,
663 -999, -999, -999, -999, -120, -105, -86, -66,
664 -73, -77, -88, -96, -105, -115, -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, -999, -999, -999, -999, -999,
670 -999, -999, -999, -120, -105, -92, -80, -61,
671 -64, -68, -80, -87, -92, -100, -110, -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, -999, -999, -999, -999, -999,
677 -999, -999, -999, -120, -104, -91, -79, -52,
678 -60, -54, -64, -69, -77, -80, -82, -84,
679 -85, -87, -88, -90, -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, -999, -999, -999, -999, -999,
684 -999, -999, -999, -118, -100, -87, -77, -49,
685 -50, -44, -58, -61, -61, -67, -65, -62,
686 -62, -62, -65, -68, -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, -999, -999, -999, -999, -999,
691 -999, -999, -999, -115, -98, -84, -62, -49,
692 -44, -38, -46, -49, -49, -46, -39, -37,
693 -39, -40, -42, -43, -999, -999, -999, -999,
694 -999, -999, -999, -999, -999, -999, -999, -999,
695 -999, -999, -999, -999, -999, -999, -999, -999,
696 -999, -999, -999, -999, -999, -999, -999, -999}},
698 {{-999, -999, -999, -999, -999, -999, -999, -999,
699 -999, -999, -999, -999, -999, -110, -88, -74,
700 -77, -82, -82, -85, -90, -94, -99, -104,
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, -999, -999, -999,
706 -999, -999, -999, -999, -999, -110, -88, -66,
707 -70, -81, -80, -81, -84, -88, -91, -93,
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, -999, -999, -999,
713 -999, -999, -999, -999, -999, -110, -88, -61,
714 -63, -70, -71, -74, -77, -80, -83, -85,
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, -999, -999, -999,
720 -999, -999, -999, -999, -999, -110, -86, -62,
721 -63, -62, -62, -58, -52, -50, -50, -52,
722 -54, -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, -999, -999, -999, -999,
727 -999, -999, -999, -999, -118, -108, -84, -53,
728 -50, -50, -50, -55, -47, -45, -40, -40,
729 -40, -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, -999, -999, -999, -999,
734 -999, -999, -999, -999, -118, -100, -73, -43,
735 -37, -42, -43, -53, -38, -37, -35, -35,
736 -38, -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,
739 -999, -999, -999, -999, -999, -999, -999, -999}},
741 {{-999, -999, -999, -999, -999, -999, -999, -999,
742 -999, -999, -999, -110, -100, -91, -84, -74,
743 -80, -80, -80, -80, -80, -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, -999, -999, -999, -999, -999,
749 -999, -999, -999, -110, -100, -91, -84, -74,
750 -68, -68, -68, -68, -68, -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, -999, -999, -999, -999, -999,
756 -999, -999, -999, -110, -100, -86, -78, -70,
757 -60, -45, -30, -21, -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, -999, -999, -999, -999, -999,
763 -999, -999, -999, -110, -100, -87, -78, -67,
764 -48, -38, -29, -21, -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, -999, -999, -999, -999, -999,
770 -999, -999, -999, -110, -100, -86, -69, -56,
771 -45, -35, -33, -29, -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, -999, -999, -999, -999, -999,
777 -999, -999, -999, -110, -100, -83, -71, -48,
778 -27, -38, -37, -34, -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,
782 -999, -999, -999, -999, -999, -999, -999, -999}}