2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these libraries and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $XConsortium: ContentType.C /main/5 1996/08/21 15:57:45 drk $
25 * (c) Copyright 1996 Digital Equipment Corporation.
26 * (c) Copyright 1996 Hewlett-Packard Company.
27 * (c) Copyright 1996 International Business Machines Corp.
28 * (c) Copyright 1996 Sun Microsystems, Inc.
29 * (c) Copyright 1996 Novell, Inc.
30 * (c) Copyright 1996 FUJITSU LIMITED.
31 * (c) Copyright 1996 Hitachi.
34 /* A lexical scanner generated by flex */
36 /* scanner skeleton version:
37 * $Header: /proj/.cde-1/programs/dtinfo/dtinfogen/infolib/etc/ContentType.C /main/5 1996/08/21 15:57:45 drk $
45 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
57 #if !defined(linux) && !defined(CSRG_BASED) && !defined(sun)
61 /* use prototypes in function declarations */
62 #define ol_data_USE_PROTOS
64 /* the "const" storage-class-modifier is valid */
65 #define ol_data_USE_CONST
67 #else /* ! __cplusplus */
73 void *malloc( size_t );
79 #define ol_data_USE_PROTOS
80 #define ol_data_USE_CONST
83 #endif /* ! __cplusplus */
87 #define ol_data_USE_CONST
91 #ifndef ol_data_USE_CONST
96 #ifdef ol_data_USE_PROTOS
97 #define ol_data_PROTO(proto) proto
99 #define ol_data_PROTO(proto) ()
100 /* we can't get here if it's an ANSI C compiler, or a C++ compiler,
101 * so it's got to be a K&R compiler, and therefore there's no standard
102 * place from which to include these definitions
110 /* amount of stuff to slurp up with each read */
111 #ifndef ol_data_READ_BUF_SIZE
112 #define ol_data_READ_BUF_SIZE 8192
115 /* returned upon end-of-file */
116 #define ol_data_END_TOK 0
118 /* copy whatever the last rule matched to the standard output */
120 /* cast to (char *) is because for 8-bit chars, ol_datatext is (unsigned char *) */
121 /* this used to be an fputs(), but since the string might contain NUL's,
122 * we now use fwrite()
124 #define ECHO (void) fwrite( (char *) ol_datatext, ol_dataleng, 1, ol_dataout )
126 /* gets input and stuffs it into "buf". number of characters read, or ol_data_NULL,
127 * is returned in "result".
129 #define ol_data_INPUT(buf,result,max_size) \
130 if ( (result = read( fileno(ol_datain), (char *) buf, max_size )) < 0 ) \
131 ol_data_FATAL_ERROR( "read() in flex scanner failed" );
132 #define ol_data_NULL 0
134 /* no semi-colon after return; correct usage is to write "ol_dataterminate();" -
135 * we don't want an extra ';' after the "return" because that will cause
136 * some compilers to complain about unreachable statements.
138 #define ol_dataterminate() return ( ol_data_NULL )
140 /* report a fatal error */
142 /* The funky do-while is used to turn this macro definition into
143 * a single C statement (which needs a semi-colon terminator).
144 * This avoids problems with code like:
146 * if ( something_happens )
147 * ol_data_FATAL_ERROR( "oops, the something happened" );
151 * Prior to using the do-while the compiler would get upset at the
152 * "else" because it interpreted the "if" statement as being all
153 * done when it reached the ';' after the ol_data_FATAL_ERROR() call.
156 #define ol_data_FATAL_ERROR(msg) \
159 (void) fputs( msg, stderr ); \
160 (void) putc( '\n', stderr ); \
165 /* default ol_datawrap function - always treat EOF as an EOF */
166 #define ol_datawrap() 1
168 /* enter a start condition. This macro really ought to take a parameter,
169 * but we do it the disgusting crufty way forced on us by the ()-less
170 * definition of BEGIN
172 #define BEGIN ol_data_start = 1 + 2 *
174 /* action number for EOF rule of a given start state */
175 #define ol_data_STATE_EOF(state) (ol_data_END_OF_BUFFER + state + 1)
177 /* special action meaning "start processing a new file" */
178 #define ol_data_NEW_FILE \
181 ol_data_init_buffer( ol_data_current_buffer, ol_datain ); \
182 ol_data_load_buffer_state(); \
186 /* default declaration of generated scanner - a define so the user can
187 * easily add parameters
189 #define ol_data_DECL int ol_datalex ol_data_PROTO(( void ))
191 /* code executed at the end of each rule */
192 #define ol_data_BREAK break;
194 #define ol_data_END_OF_BUFFER_CHAR 0
196 #ifndef ol_data_BUF_SIZE
197 #define ol_data_BUF_SIZE (ol_data_READ_BUF_SIZE * 2) /* size of default input buffer */
200 typedef struct ol_data_buffer_state *ol_data_BUFFER_STATE;
202 #define ol_data_CHAR unsigned char
213 #include "Exceptions.hh"
216 #include "SGMLName.h"
217 #include "ExprList.h"
218 #include "Expression.h"
219 #include "OL_DataExpr.tab.h"
220 #include "ContentType.h"
221 #include "api/utility.h"
223 /* CurrentContentPtr is used as the communication media between
224 * ol_dataparse and ContentType::Parse()
227 ContentType *CurrentContentPtr;
230 * Forward declaration for my_input
232 static int my_input ( char *, int );
233 extern int ol_dataparse();
237 #define ol_data_INPUT(b, r, ms ) ( r=my_input( ( char *)b,ms) )
239 static char *myinput;
240 static char *myinputptr;
241 static char *myinputlim;
245 #define DBG(level) if ( dbgLevel >= level)
247 #define DBG(level) if (0)
250 static int dbgLevel = -1;
252 static short int ol_data_nxt[][256] =
254 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
255 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
256 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
257 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
258 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
259 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
260 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
261 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
262 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
263 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
265 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
266 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
267 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
268 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
269 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
270 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
271 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
272 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
273 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
274 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
276 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
277 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
278 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
279 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
280 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
283 { 3, 4, 4, 4, 4, 4, 4, 4, 4, 5,
284 6, 4, 4, 4, 4, 4, 4, 4, 4, 4,
285 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
286 4, 4, 5, 4, 7, 8, 4, 4, 4, 9,
287 10, 10, 4, 4, 10, 4, 4, 4, 4, 4,
288 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
289 4, 4, 4, 4, 11, 12, 4, 13, 4, 4,
290 14, 4, 4, 4, 4, 4, 4, 4, 4, 4,
291 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
292 4, 4, 4, 4, 4, 4, 4, 12, 4, 13,
294 4, 4, 14, 4, 4, 4, 4, 4, 4, 4,
295 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
296 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
297 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
298 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
299 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
300 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
301 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
302 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
303 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
305 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
306 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
307 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
308 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
309 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
312 { 3, 4, 4, 4, 4, 4, 4, 4, 4, 5,
313 6, 4, 4, 4, 4, 4, 4, 4, 4, 4,
314 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
315 4, 4, 5, 4, 7, 8, 4, 4, 4, 9,
316 10, 10, 4, 4, 10, 4, 4, 4, 4, 4,
317 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
318 4, 4, 4, 4, 11, 12, 4, 13, 4, 4,
319 14, 4, 4, 4, 4, 4, 4, 4, 4, 4,
320 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
321 4, 4, 4, 4, 4, 4, 4, 12, 4, 13,
323 4, 4, 14, 4, 4, 4, 4, 4, 4, 4,
324 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
325 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
326 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
327 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
328 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
329 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
330 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
331 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
332 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
334 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
335 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
336 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
337 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
338 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
341 { -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
342 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
343 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
344 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
345 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
346 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
347 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
348 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
349 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
350 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
352 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
353 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
354 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
355 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
356 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
357 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
358 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
359 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
360 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
361 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
363 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
364 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
365 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
366 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
367 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
368 -3, -3, -3, -3, -3, -3 },
370 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -4,
371 -4, 15, 15, 15, 15, 15, 15, 15, 15, 15,
372 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
373 15, 15, -4, 15, 15, 15, 15, 15, 15, 15,
374 -4, -4, 15, 15, -4, 15, 15, 15, 15, 15,
375 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
376 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
377 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
378 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
379 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
381 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
382 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
383 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
384 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
385 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
386 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
387 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
388 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
389 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
390 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
392 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
393 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
394 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
395 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
396 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
397 15, 15, 15, 15, 15, 15 },
399 { 3, -5, -5, -5, -5, -5, -5, -5, -5, 16,
400 16, -5, -5, -5, -5, -5, -5, -5, -5, -5,
401 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
402 -5, -5, 16, -5, -5, -5, -5, -5, -5, -5,
403 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
404 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
405 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
406 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
407 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
408 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
410 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
411 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
412 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
413 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
414 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
415 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
416 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
417 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
418 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
419 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
421 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
422 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
423 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
424 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
425 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
426 -5, -5, -5, -5, -5, -5 },
428 { 3, -6, -6, -6, -6, -6, -6, -6, -6, 16,
429 16, -6, -6, -6, -6, -6, -6, -6, -6, -6,
430 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
431 -6, -6, 16, -6, -6, -6, -6, -6, -6, -6,
432 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
433 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
434 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
435 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
436 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
437 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
439 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
440 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
441 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
442 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
443 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
444 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
445 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
446 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
447 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
448 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
450 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
451 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
452 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
453 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
454 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
455 -6, -6, -6, -6, -6, -6 },
457 { 3, 17, 17, 17, 17, 17, 17, 17, 17, 18,
458 18, 17, 17, 17, 17, 17, 17, 17, 17, 17,
459 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
460 17, 17, 18, 17, 19, 17, 17, 17, 17, 17,
461 18, 18, 17, 17, 18, 17, 17, 17, 17, 17,
462 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
463 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
464 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
465 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
466 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
468 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
469 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
470 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
471 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
472 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
473 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
474 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
475 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
476 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
477 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
479 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
480 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
481 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
482 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
483 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
484 17, 17, 17, 17, 17, 17 },
486 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -8,
487 -8, 15, 15, 15, 15, 15, 15, 15, 15, 15,
488 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
489 15, 15, -8, 15, 15, 15, 15, 15, 15, 15,
490 -8, -8, 15, 15, -8, 15, 15, 15, 15, 15,
491 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
492 15, 15, 15, 15, 15, 15, 15, 20, 15, 15,
493 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
494 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
495 15, 15, 15, 15, 15, 15, 15, 15, 15, 20,
497 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
498 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
499 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
500 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
501 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
502 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
503 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
504 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
505 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
506 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
508 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
509 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
510 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
511 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
512 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
513 15, 15, 15, 15, 15, 15 },
515 { 3, 21, 21, 21, 21, 21, 21, 21, 21, 22,
516 22, 21, 21, 21, 21, 21, 21, 21, 21, 21,
517 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
518 21, 21, 22, 21, 21, 21, 21, 21, 21, 23,
519 22, 22, 21, 21, 22, 21, 21, 21, 21, 21,
520 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
521 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
522 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
523 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
524 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
526 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
527 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
528 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
529 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
530 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
531 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
532 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
533 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
534 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
535 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
537 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
538 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
539 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
540 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
541 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
542 21, 21, 21, 21, 21, 21 },
544 { 3, -10, -10, -10, -10, -10, -10, -10, -10, -10,
545 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
546 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
547 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
548 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
549 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
550 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
551 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
552 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
553 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
555 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
556 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
557 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
558 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
559 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
560 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
561 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
562 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
563 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
564 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
566 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
567 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
568 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
569 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
570 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
571 -10, -10, -10, -10, -10, -10 },
573 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -11,
574 -11, 15, 15, 15, 15, 15, 15, 15, 15, 15,
575 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
576 15, 15, -11, 15, 15, 15, 15, 15, 15, 15,
577 -11, -11, 15, 15, -11, 15, 15, 15, 24, 24,
578 24, 24, 24, 24, 24, 24, 24, 24, 15, 15,
579 15, 15, 15, 15, 15, 24, 24, 24, 24, 24,
580 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
581 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
582 24, 15, 15, 15, 15, 15, 15, 24, 24, 24,
584 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
585 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
586 24, 24, 24, 15, 15, 15, 15, 15, 15, 15,
587 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
588 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
589 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
590 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
591 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
592 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
593 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
595 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
596 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
597 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
598 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
599 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
600 15, 15, 15, 15, 15, 15 },
602 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -12,
603 -12, 15, 15, 15, 15, 15, 15, 15, 15, 15,
604 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
605 15, 15, -12, 15, 15, 15, 15, 15, 15, 15,
606 -12, -12, 15, 15, -12, 15, 15, 15, 15, 15,
607 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
608 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
609 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
610 15, 15, 15, 15, 25, 15, 15, 15, 15, 15,
611 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
613 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
614 15, 15, 15, 15, 15, 15, 25, 15, 15, 15,
615 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
616 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
617 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
618 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
619 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
620 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
621 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
622 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
624 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
625 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
626 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
627 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
628 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
629 15, 15, 15, 15, 15, 15 },
631 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -13,
632 -13, 15, 15, 15, 15, 15, 15, 15, 15, 15,
633 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
634 15, 15, -13, 15, 15, 15, 15, 15, 15, 15,
635 -13, -13, 15, 15, -13, 15, 15, 15, 15, 15,
636 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
637 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
638 15, 15, 15, 15, 15, 15, 15, 15, 15, 26,
639 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
640 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
642 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
643 15, 26, 15, 15, 15, 15, 15, 15, 15, 15,
644 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
645 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
646 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
647 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
648 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
649 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
650 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
651 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
653 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
654 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
655 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
656 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
657 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
658 15, 15, 15, 15, 15, 15 },
660 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -14,
661 -14, 15, 15, 15, 15, 15, 15, 15, 15, 15,
662 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
663 15, 15, -14, 15, 15, 15, 15, 15, 15, 15,
664 -14, -14, 15, 15, -14, 15, 15, 15, 15, 15,
665 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
666 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
667 15, 15, 15, 27, 15, 15, 15, 15, 15, 15,
668 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
669 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
671 15, 15, 15, 15, 15, 27, 15, 15, 15, 15,
672 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
673 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
674 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
675 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
676 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
677 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
678 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
679 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
680 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
682 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
683 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
684 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
685 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
686 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
687 15, 15, 15, 15, 15, 15 },
689 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -15,
690 -15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
691 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
692 15, 15, -15, 15, 15, 15, 15, 15, 15, 15,
693 -15, -15, 15, 15, -15, 15, 15, 15, 15, 15,
694 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
695 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
696 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
697 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
698 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
700 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
701 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
702 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
703 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
704 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
705 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
706 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
707 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
708 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
709 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
711 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
712 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
713 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
714 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
715 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
716 15, 15, 15, 15, 15, 15 },
718 { 3, -16, -16, -16, -16, -16, -16, -16, -16, 16,
719 16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
720 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
721 -16, -16, 16, -16, -16, -16, -16, -16, -16, -16,
722 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
723 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
724 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
725 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
726 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
727 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
729 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
730 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
731 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
732 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
733 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
734 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
735 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
736 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
737 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
738 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
740 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
741 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
742 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
743 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
744 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
745 -16, -16, -16, -16, -16, -16 },
747 { 3, 17, 17, 17, 17, 17, 17, 17, 17, 18,
748 18, 17, 17, 17, 17, 17, 17, 17, 17, 17,
749 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
750 17, 17, 18, 17, 19, 17, 17, 17, 17, 17,
751 18, 18, 17, 17, 18, 17, 17, 17, 17, 17,
752 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
753 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
754 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
755 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
756 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
758 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
759 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
760 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
761 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
762 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
763 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
764 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
765 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
766 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
767 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
769 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
770 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
771 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
772 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
773 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
774 17, 17, 17, 17, 17, 17 },
776 { 3, 18, 18, 18, 18, 18, 18, 18, 18, 18,
777 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
778 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
779 18, 18, 18, 18, 28, 18, 18, 18, 18, 18,
780 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
781 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
782 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
783 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
784 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
785 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
787 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
788 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
789 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
790 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
791 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
792 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
793 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
794 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
795 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
796 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
798 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
799 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
800 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
801 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
802 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
803 18, 18, 18, 18, 18, 18 },
805 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -19,
806 -19, 15, 15, 15, 15, 15, 15, 15, 15, 15,
807 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
808 15, 15, -19, 15, 15, 15, 15, 15, 15, 15,
809 -19, -19, 15, 15, -19, 15, 15, 15, 15, 15,
810 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
811 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
812 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
813 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
814 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
816 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
817 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
818 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
819 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
820 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
821 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
822 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
823 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
824 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
825 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
827 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
828 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
829 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
830 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
831 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
832 15, 15, 15, 15, 15, 15 },
834 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -20,
835 -20, 15, 15, 15, 15, 15, 15, 15, 15, 15,
836 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
837 15, 15, -20, 15, 15, 15, 15, 15, 15, 15,
838 -20, -20, 15, 15, -20, 15, 15, 15, 15, 15,
839 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
840 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
841 15, 15, 15, 15, 15, 15, 15, 15, 15, 29,
842 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
843 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
845 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
846 15, 29, 15, 15, 15, 15, 15, 15, 15, 15,
847 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
848 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
849 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
850 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
851 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
852 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
853 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
854 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
856 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
857 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
858 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
859 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
860 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
861 15, 15, 15, 15, 15, 15 },
863 { 3, 21, 21, 21, 21, 21, 21, 21, 21, 22,
864 22, 21, 21, 21, 21, 21, 21, 21, 21, 21,
865 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
866 21, 21, 22, 21, 21, 21, 21, 21, 21, 23,
867 22, 22, 21, 21, 22, 21, 21, 21, 21, 21,
868 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
869 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
870 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
871 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
872 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
874 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
875 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
876 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
877 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
878 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
879 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
880 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
881 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
882 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
883 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
885 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
886 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
887 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
888 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
889 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
890 21, 21, 21, 21, 21, 21 },
892 { 3, 22, 22, 22, 22, 22, 22, 22, 22, 22,
893 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
894 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
895 22, 22, 22, 22, 22, 22, 22, 22, 22, 30,
896 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
897 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
898 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
899 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
900 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
901 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
903 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
904 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
905 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
906 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
907 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
908 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
909 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
910 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
911 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
912 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
914 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
915 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
916 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
917 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
918 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
919 22, 22, 22, 22, 22, 22 },
921 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -23,
922 -23, 15, 15, 15, 15, 15, 15, 15, 15, 15,
923 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
924 15, 15, -23, 15, 15, 15, 15, 15, 15, 15,
925 -23, -23, 15, 15, -23, 15, 15, 15, 15, 15,
926 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
927 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
928 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
929 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
930 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
932 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
933 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
934 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
935 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
936 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
937 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
938 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
939 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
940 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
941 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
943 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
944 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
945 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
946 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
947 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
948 15, 15, 15, 15, 15, 15 },
950 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -24,
951 -24, 15, 15, 15, 15, 15, 15, 15, 15, 15,
952 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
953 15, 15, -24, 15, 15, 15, 15, 15, 15, 15,
954 -24, -24, 15, 15, -24, 15, 15, 15, 24, 24,
955 24, 24, 24, 24, 24, 24, 24, 24, 15, 15,
956 15, 15, 15, 15, 15, 24, 24, 24, 24, 24,
957 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
958 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
959 24, 15, 15, 15, 15, 15, 15, 24, 24, 24,
961 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
962 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
963 24, 24, 24, 15, 15, 15, 15, 15, 15, 15,
964 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
965 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
966 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
967 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
968 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
969 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
970 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
972 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
973 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
974 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
975 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
976 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
977 15, 15, 15, 15, 15, 15 },
979 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -25,
980 -25, 15, 15, 15, 15, 15, 15, 15, 15, 15,
981 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
982 15, 15, -25, 15, 15, 15, 15, 15, 15, 15,
983 -25, -25, 15, 15, -25, 15, 15, 15, 15, 15,
984 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
985 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
986 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
987 15, 15, 15, 15, 31, 15, 15, 15, 15, 15,
988 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
990 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
991 15, 15, 15, 15, 15, 15, 31, 15, 15, 15,
992 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
993 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
994 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
995 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
996 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
997 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
998 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
999 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1001 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1002 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1003 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1004 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1005 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1006 15, 15, 15, 15, 15, 15 },
1008 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -26,
1009 -26, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1010 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1011 15, 15, -26, 15, 15, 15, 15, 15, 15, 15,
1012 -26, -26, 15, 15, -26, 15, 15, 15, 15, 15,
1013 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1014 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1015 15, 15, 15, 15, 15, 15, 15, 15, 32, 15,
1016 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1017 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1019 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1020 32, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1021 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1022 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1023 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1024 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1025 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1026 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1027 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1028 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1030 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1031 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1032 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1033 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1034 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1035 15, 15, 15, 15, 15, 15 },
1037 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -27,
1038 -27, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1039 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1040 15, 15, -27, 15, 15, 15, 15, 15, 15, 15,
1041 -27, -27, 15, 15, -27, 15, 15, 15, 15, 15,
1042 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1043 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1044 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1045 15, 15, 33, 15, 15, 15, 15, 15, 15, 15,
1046 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1048 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1049 15, 15, 15, 15, 33, 15, 15, 15, 15, 15,
1050 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1051 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1052 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1053 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1054 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1055 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1056 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1057 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1059 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1060 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1061 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1062 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1063 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1064 15, 15, 15, 15, 15, 15 },
1066 { 3, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1067 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1068 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1069 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1070 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1071 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1072 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1073 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1074 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1075 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1077 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1078 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1079 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1080 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1081 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1082 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1083 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1084 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1085 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1086 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1088 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1089 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1090 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1091 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1092 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1093 -28, -28, -28, -28, -28, -28 },
1095 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -29,
1096 -29, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1097 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1098 15, 15, -29, 15, 15, 15, 15, 15, 15, 15,
1099 -29, -29, 15, 15, -29, 15, 15, 15, 15, 15,
1100 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1101 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1102 15, 15, 15, 15, 15, 15, 15, 15, 34, 15,
1103 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1104 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1106 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1107 34, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1108 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1109 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1110 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1111 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1112 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1113 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1114 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1115 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1117 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1118 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1119 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1120 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1121 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1122 15, 15, 15, 15, 15, 15 },
1124 { 3, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1125 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1126 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1127 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1128 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1129 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1130 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1131 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1132 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1133 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1135 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1136 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1137 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1138 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1139 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1140 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1141 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1142 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1143 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1144 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1146 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1147 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1148 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1149 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1150 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1151 -30, -30, -30, -30, -30, -30 },
1153 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -31,
1154 -31, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1155 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1156 15, 15, -31, 15, 15, 15, 15, 15, 15, 15,
1157 -31, -31, 15, 15, -31, 15, 15, 15, 15, 15,
1158 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1159 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1160 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1161 15, 15, 35, 15, 15, 15, 15, 15, 15, 15,
1162 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1164 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1165 15, 15, 15, 15, 35, 15, 15, 15, 15, 15,
1166 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1167 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1168 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1169 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1170 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1171 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1172 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1173 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1175 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1176 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1177 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1178 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1179 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1180 15, 15, 15, 15, 15, 15 },
1182 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -32,
1183 -32, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1184 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1185 15, 15, -32, 15, 15, 15, 15, 15, 15, 15,
1186 -32, -32, 15, 15, -32, 15, 15, 15, 15, 15,
1187 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1188 15, 15, 15, 15, 15, 15, 15, 36, 15, 15,
1189 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1190 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1191 15, 15, 15, 15, 15, 15, 15, 15, 15, 36,
1193 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1194 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1195 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1196 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1197 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1198 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1199 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1200 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1201 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1202 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1204 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1205 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1206 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1207 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1208 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1209 15, 15, 15, 15, 15, 15 },
1211 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -33,
1212 -33, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1213 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1214 15, 15, -33, 15, 15, 15, 15, 15, 15, 15,
1215 -33, -33, 15, 15, -33, 15, 15, 15, 15, 15,
1216 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1217 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1218 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1219 15, 15, 15, 37, 15, 15, 15, 15, 15, 15,
1220 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1222 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1223 15, 15, 15, 15, 15, 37, 15, 15, 15, 15,
1224 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1225 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1226 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1227 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1228 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1229 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1230 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1231 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1233 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1234 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1235 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1236 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1237 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1238 15, 15, 15, 15, 15, 15 },
1240 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -34,
1241 -34, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1242 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1243 15, 15, -34, 15, 15, 15, 15, 15, 15, 15,
1244 -34, -34, 15, 15, -34, 15, 15, 15, 15, 15,
1245 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1246 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1247 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1248 15, 15, 15, 15, 38, 15, 15, 15, 15, 15,
1249 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1251 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1252 15, 15, 15, 15, 15, 15, 38, 15, 15, 15,
1253 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1254 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1255 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1256 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1257 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1258 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1259 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1260 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1262 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1263 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1264 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1265 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1266 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1267 15, 15, 15, 15, 15, 15 },
1269 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -35,
1270 -35, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1271 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1272 15, 15, -35, 15, 15, 15, 15, 15, 15, 15,
1273 -35, -35, 15, 15, -35, 15, 15, 15, 15, 15,
1274 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1275 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1276 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1277 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1278 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1280 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1281 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1282 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1283 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1284 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1285 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1286 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1287 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1288 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1289 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1291 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1292 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1293 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1294 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1295 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1296 15, 15, 15, 15, 15, 15 },
1298 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -36,
1299 -36, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1300 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1301 15, 15, -36, 15, 15, 15, 15, 15, 15, 15,
1302 -36, -36, 15, 15, -36, 15, 15, 15, 15, 15,
1303 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1304 15, 15, 15, 15, 15, 39, 15, 15, 15, 15,
1305 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1306 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1307 15, 15, 15, 15, 15, 15, 15, 39, 15, 15,
1309 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1310 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1311 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1312 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1313 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1314 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1315 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1316 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1317 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1318 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1320 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1321 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1322 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1323 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1324 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1325 15, 15, 15, 15, 15, 15 },
1327 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -37,
1328 -37, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1329 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1330 15, 15, -37, 15, 15, 15, 15, 15, 15, 15,
1331 -37, -37, 15, 15, -37, 15, 15, 15, 15, 15,
1332 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1333 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1334 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1335 15, 15, 15, 15, 40, 15, 15, 15, 15, 15,
1336 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1338 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1339 15, 15, 15, 15, 15, 15, 40, 15, 15, 15,
1340 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1341 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1342 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1343 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1344 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1345 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1346 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1347 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1349 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1350 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1351 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1352 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1353 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1354 15, 15, 15, 15, 15, 15 },
1356 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -38,
1357 -38, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1358 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1359 15, 15, -38, 15, 15, 15, 15, 15, 15, 15,
1360 -38, -38, 15, 15, -38, 15, 15, 15, 15, 15,
1361 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1362 15, 15, 15, 15, 15, 15, 15, 15, 15, 41,
1363 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1364 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1365 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1367 15, 41, 15, 15, 15, 15, 15, 15, 15, 15,
1368 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1369 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1370 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1371 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1372 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1373 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1374 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1375 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1376 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1378 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1379 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1380 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1381 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1382 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1383 15, 15, 15, 15, 15, 15 },
1385 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -39,
1386 -39, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1387 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1388 15, 15, -39, 15, 15, 15, 15, 15, 15, 15,
1389 -39, -39, 15, 15, -39, 15, 15, 15, 15, 15,
1390 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1391 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1392 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1393 15, 15, 15, 15, 42, 15, 15, 15, 15, 15,
1394 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1396 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1397 15, 15, 15, 15, 15, 15, 42, 15, 15, 15,
1398 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1399 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1400 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1401 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1402 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1403 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1404 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1405 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1407 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1408 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1409 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1410 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1411 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1412 15, 15, 15, 15, 15, 15 },
1414 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -40,
1415 -40, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1416 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1417 15, 15, -40, 15, 15, 15, 15, 15, 15, 15,
1418 -40, -40, 15, 15, -40, 15, 15, 15, 15, 15,
1419 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1420 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1421 15, 15, 15, 15, 15, 15, 15, 15, 15, 43,
1422 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1423 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1425 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1426 15, 43, 15, 15, 15, 15, 15, 15, 15, 15,
1427 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1428 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1429 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1430 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1431 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1432 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1433 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1434 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1436 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1437 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1438 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1439 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1440 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1441 15, 15, 15, 15, 15, 15 },
1443 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -41,
1444 -41, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1445 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1446 15, 15, -41, 15, 15, 15, 15, 15, 15, 15,
1447 -41, -41, 15, 15, -41, 15, 15, 15, 15, 15,
1448 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1449 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1450 15, 15, 15, 15, 15, 15, 15, 15, 44, 15,
1451 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1452 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1454 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1455 44, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1456 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1457 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1458 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1459 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1460 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1461 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1462 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1463 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1465 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1466 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1467 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1468 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1469 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1470 15, 15, 15, 15, 15, 15 },
1472 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -42,
1473 -42, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1474 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1475 15, 15, -42, 15, 15, 15, 15, 15, 15, 15,
1476 -42, -42, 15, 15, -42, 15, 15, 15, 15, 15,
1477 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1478 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1479 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1480 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1481 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1483 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1484 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1485 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1486 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1487 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1488 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1489 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1490 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1491 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1492 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1494 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1495 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1496 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1497 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1498 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1499 15, 15, 15, 15, 15, 15 },
1501 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -43,
1502 -43, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1503 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1504 15, 15, -43, 15, 15, 15, 15, 15, 15, 15,
1505 -43, -43, 15, 15, -43, 15, 15, 15, 15, 15,
1506 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1507 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1508 45, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1509 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1510 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1512 15, 15, 45, 15, 15, 15, 15, 15, 15, 15,
1513 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1514 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1515 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1516 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1517 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1518 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1519 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1520 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1521 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1523 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1524 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1525 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1526 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1527 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1528 15, 15, 15, 15, 15, 15 },
1530 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -44,
1531 -44, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1532 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1533 15, 15, -44, 15, 15, 15, 15, 15, 15, 15,
1534 -44, -44, 15, 15, -44, 15, 15, 15, 15, 15,
1535 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1536 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1537 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1538 15, 15, 15, 15, 46, 15, 15, 15, 15, 15,
1539 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1541 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1542 15, 15, 15, 15, 15, 15, 46, 15, 15, 15,
1543 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1544 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1545 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1546 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1547 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1548 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1549 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1550 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1552 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1553 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1554 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1555 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1556 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1557 15, 15, 15, 15, 15, 15 },
1559 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -45,
1560 -45, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1561 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1562 15, 15, -45, 15, 15, 15, 15, 15, 15, 15,
1563 -45, -45, 15, 15, -45, 15, 15, 15, 15, 15,
1564 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1565 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1566 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1567 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1568 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1570 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1571 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1572 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1573 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1574 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1575 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1576 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1577 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1578 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1579 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1581 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1582 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1583 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1584 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1585 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1586 15, 15, 15, 15, 15, 15 },
1588 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -46,
1589 -46, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1590 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1591 15, 15, -46, 15, 15, 15, 15, 15, 15, 15,
1592 -46, -46, 15, 15, -46, 15, 15, 15, 15, 15,
1593 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1594 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1595 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1596 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1597 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1599 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1600 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1601 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1602 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1603 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1604 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1605 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1606 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1607 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1608 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1610 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1611 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1612 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1613 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1614 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1615 15, 15, 15, 15, 15, 15 }
1620 /* done after the current pattern has been matched and before the
1621 * corresponding action - sets up ol_datatext
1623 #define ol_data_DO_BEFORE_ACTION \
1624 ol_datatext = ol_data_bp; \
1625 ol_dataleng = ol_data_cp - ol_data_bp; \
1626 ol_data_hold_char = *ol_data_cp; \
1627 *ol_data_cp = '\0'; \
1628 ol_data_c_buf_p = ol_data_cp;
1630 #define EOB_ACT_CONTINUE_SCAN 0
1631 #define EOB_ACT_END_OF_FILE 1
1632 #define EOB_ACT_LAST_MATCH 2
1634 /* return all but the first 'n' matched characters back to the input stream */
1635 #define ol_dataless(n) \
1638 /* undo effects of setting up ol_datatext */ \
1639 *ol_data_cp = ol_data_hold_char; \
1640 ol_data_c_buf_p = ol_data_cp = ol_data_bp + n; \
1641 ol_data_DO_BEFORE_ACTION; /* set up ol_datatext again */ \
1645 #define unput(c) ol_dataunput( c, ol_datatext )
1648 struct ol_data_buffer_state
1650 FILE *ol_data_input_file;
1652 ol_data_CHAR *ol_data_ch_buf; /* input buffer */
1653 ol_data_CHAR *ol_data_buf_pos; /* current position in input buffer */
1655 /* size of input buffer in bytes, not including room for EOB characters*/
1656 int ol_data_buf_size;
1658 /* number of characters read into ol_data_ch_buf, not including EOB characters */
1659 int ol_data_n_chars;
1661 int ol_data_eof_status; /* whether we've seen an EOF on this buffer */
1662 #define EOF_NOT_SEEN 0
1663 /* "pending" happens when the EOF has been seen but there's still
1666 #define EOF_PENDING 1
1670 static ol_data_BUFFER_STATE ol_data_current_buffer;
1672 /* we provide macros for accessing buffer states in case in the
1673 * future we want to put the buffer states in a more general
1676 #define ol_data_CURRENT_BUFFER ol_data_current_buffer
1679 /* ol_data_hold_char holds the character lost when ol_datatext is formed */
1680 static ol_data_CHAR ol_data_hold_char;
1682 static int ol_data_n_chars; /* number of characters read into ol_data_ch_buf */
1686 #ifndef ol_data_USER_ACTION
1687 #define ol_data_USER_ACTION
1690 #ifndef ol_data_USER_INIT
1691 #define ol_data_USER_INIT
1694 extern ol_data_CHAR *ol_datatext;
1695 extern int ol_dataleng;
1696 extern FILE *ol_datain, *ol_dataout;
1698 ol_data_CHAR *ol_datatext;
1701 FILE *ol_datain = (FILE *) 0, *ol_dataout = (FILE *) 0;
1703 #define ol_data_END_OF_BUFFER 13
1704 typedef int ol_data_state_type;
1705 static const short int ol_data_accept[47] =
1707 0, 0, 13, 8, 10, 10, 8, 8, 8, 9,
1708 8, 8, 8, 8, 8, 10, 8, 0, 2, 8,
1709 8, 0, 3, 1, 8, 8, 8, 2, 8, 3,
1710 8, 8, 8, 8, 4, 8, 8, 8, 8, 8,
1714 static ol_data_state_type ol_data_last_accepting_state;
1715 static ol_data_CHAR *ol_data_last_accepting_cpos;
1717 static const ol_data_state_type ol_data_NUL_trans[47] =
1719 4, 4, 0, 15, 0, 0, 17, 15, 21, 0,
1720 15, 15, 15, 15, 15, 0, 17, 18, 15, 15,
1721 21, 22, 15, 15, 15, 15, 15, 0, 15, 0,
1722 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1723 15, 15, 15, 15, 15, 15
1726 /* the intent behind this definition is that it'll catch
1727 * any uses of REJECT which flex missed
1729 #define REJECT reject_used_but_not_detected
1730 #define ol_datamore() ol_datamore_used_but_not_detected
1731 #define ol_data_MORE_ADJ 0
1733 /* these variables are all declared out here so that section 3 code can
1736 /* points to current character in buffer */
1737 static ol_data_CHAR *ol_data_c_buf_p = (ol_data_CHAR *) 0;
1738 static int ol_data_init = 1; /* whether we need to initialize */
1739 static int ol_data_start = 0; /* start state number */
1741 /* flag which is used to allow ol_datawrap()'s to do buffer switches
1742 * instead of setting up a fresh ol_datain. A bit of a hack ...
1744 static int ol_data_did_buffer_switch_on_eof;
1746 static ol_data_state_type ol_data_get_previous_state ol_data_PROTO(( void ));
1747 static ol_data_state_type ol_data_try_NUL_trans ol_data_PROTO(( ol_data_state_type current_state ));
1748 static int ol_data_get_next_buffer ol_data_PROTO(( void ));
1750 static void ol_dataunput ol_data_PROTO(( ol_data_CHAR c, ol_data_CHAR *buf_ptr ));
1752 void ol_datarestart ol_data_PROTO(( FILE *input_file ));
1753 void ol_data_switch_to_buffer ol_data_PROTO(( ol_data_BUFFER_STATE new_buffer ));
1754 void ol_data_load_buffer_state ol_data_PROTO(( void ));
1755 ol_data_BUFFER_STATE ol_data_create_buffer ol_data_PROTO(( FILE *file, int size ));
1756 void ol_data_delete_buffer ol_data_PROTO(( ol_data_BUFFER_STATE b ));
1757 void ol_data_init_buffer ol_data_PROTO(( ol_data_BUFFER_STATE b, FILE *file ));
1759 #define ol_data_new_buffer ol_data_create_buffer
1763 static int ol_datainput ol_data_PROTO(( void ));
1765 static int input ol_data_PROTO(( void ));
1771 register ol_data_state_type ol_data_current_state;
1772 register ol_data_CHAR *ol_data_cp, *ol_data_bp;
1773 register int ol_data_act;
1782 if ( ! ol_data_start )
1783 ol_data_start = 1; /* first start state */
1789 ol_dataout = stdout;
1791 if ( ol_data_current_buffer )
1792 ol_data_init_buffer( ol_data_current_buffer, ol_datain );
1794 ol_data_current_buffer = ol_data_create_buffer( ol_datain, ol_data_BUF_SIZE );
1796 ol_data_load_buffer_state();
1801 while ( 1 ) /* loops until end-of-file is reached */
1803 ol_data_cp = ol_data_c_buf_p;
1805 /* support of ol_datatext */
1806 *ol_data_cp = ol_data_hold_char;
1808 /* ol_data_bp points to the position in ol_data_ch_buf of the start of the
1811 ol_data_bp = ol_data_cp;
1813 ol_data_current_state = ol_data_start;
1815 while ( (ol_data_current_state = ol_data_nxt[ol_data_current_state][*ol_data_cp]) > 0 )
1817 if ( ol_data_accept[ol_data_current_state] )
1819 ol_data_last_accepting_state = ol_data_current_state;
1820 ol_data_last_accepting_cpos = ol_data_cp;
1826 ol_data_current_state = -ol_data_current_state;
1828 ol_data_find_action:
1829 ol_data_act = ol_data_accept[ol_data_current_state];
1831 ol_data_DO_BEFORE_ACTION;
1832 ol_data_USER_ACTION;
1834 do_action: /* this label is used only to access EOF actions */
1837 switch ( ol_data_act )
1839 case 0: /* must backtrack */
1840 /* undo the effects of ol_data_DO_BEFORE_ACTION */
1841 *ol_data_cp = ol_data_hold_char;
1842 ol_data_cp = ol_data_last_accepting_cpos + 1;
1843 ol_data_current_state = ol_data_last_accepting_state;
1844 goto ol_data_find_action;
1848 ol_datalval.name = SGMLName::intern((const char *)ol_datatext+1 ,1);
1849 return( Reference );
1854 if ( *(ol_datatext + 1) != '"' ) {
1855 // get rid of the 2 quotes
1856 int len = strlen(( const char *)ol_datatext)-2;
1857 char *lit_str = new char [ len + 1 ];
1858 *((char *) memcpy(lit_str,
1859 (const char *)ol_datatext + 1,
1861 ol_datalval.string = lit_str;
1864 ol_datalval.string = 0;
1867 DBG(50) cerr << "(DEBUG) literal \"string\" = "
1868 << ol_datalval.string << endl;
1875 if ( *(ol_datatext + 1) != '\'' ) {
1876 // get rid of the 2 quotes
1877 int len = strlen(( const char *)ol_datatext)-2;
1878 char *lit_str = new char [ len + 1 ];
1879 *((char *) memcpy(lit_str,
1880 (const char *)ol_datatext + 1,
1882 ol_datalval.string = lit_str;
1886 ol_datalval.string = 0;
1889 DBG(50) cerr << "(DEBUG) literal 'string' = "
1890 << ol_datalval.string << endl;
1899 { return( Concat ); }
1902 { return( FirstOf); }
1905 { return( Content ); }
1909 ol_datalval.name = SGMLName::intern((const char *)ol_datatext,1);
1910 DBG(10) cerr << "(DEBUG) matches"
1911 << (char *)SGMLName::lookup(ol_datalval.name)
1918 DBG(10) cerr << "(DEBUG) matches"
1919 << (char *)ol_datatext
1921 return ( ol_datatext[0] );
1930 "Syntax error in value expression"));
1935 ol_data_FATAL_ERROR( "flex scanner jammed" );
1937 case ol_data_STATE_EOF(INITIAL):
1940 case ol_data_END_OF_BUFFER:
1942 /* amount of text matched not including the EOB char */
1943 int ol_data_amount_of_matched_text = ol_data_cp - ol_datatext - 1;
1945 /* undo the effects of ol_data_DO_BEFORE_ACTION */
1946 *ol_data_cp = ol_data_hold_char;
1948 /* note that here we test for ol_data_c_buf_p "<=" to the position
1949 * of the first EOB in the buffer, since ol_data_c_buf_p will
1950 * already have been incremented past the NUL character
1951 * (since all states make transitions on EOB to the end-
1952 * of-buffer state). Contrast this with the test in ol_datainput().
1954 if ( ol_data_c_buf_p <= &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars] )
1955 /* this was really a NUL */
1957 ol_data_state_type ol_data_next_state;
1959 ol_data_c_buf_p = ol_datatext + ol_data_amount_of_matched_text;
1961 ol_data_current_state = ol_data_get_previous_state();
1963 /* okay, we're now positioned to make the
1964 * NUL transition. We couldn't have
1965 * ol_data_get_previous_state() go ahead and do it
1966 * for us because it doesn't know how to deal
1967 * with the possibility of jamming (and we
1968 * don't want to build jamming into it because
1969 * then it will run more slowly)
1972 ol_data_next_state = ol_data_try_NUL_trans( ol_data_current_state );
1974 ol_data_bp = ol_datatext + ol_data_MORE_ADJ;
1976 if ( ol_data_next_state )
1978 /* consume the NUL */
1979 ol_data_cp = ++ol_data_c_buf_p;
1980 ol_data_current_state = ol_data_next_state;
1986 ol_data_cp = ol_data_c_buf_p;
1987 goto ol_data_find_action;
1991 else switch ( ol_data_get_next_buffer() )
1993 case EOB_ACT_END_OF_FILE:
1995 ol_data_did_buffer_switch_on_eof = 0;
1997 if ( ol_datawrap() )
1999 /* note: because we've taken care in
2000 * ol_data_get_next_buffer() to have set up ol_datatext,
2001 * we can now set up ol_data_c_buf_p so that if some
2002 * total hoser (like flex itself) wants
2003 * to call the scanner after we return the
2004 * ol_data_NULL, it'll still work - another ol_data_NULL
2005 * will get returned.
2007 ol_data_c_buf_p = ol_datatext + ol_data_MORE_ADJ;
2009 ol_data_act = ol_data_STATE_EOF((ol_data_start - 1) / 2);
2015 if ( ! ol_data_did_buffer_switch_on_eof )
2021 case EOB_ACT_CONTINUE_SCAN:
2022 ol_data_c_buf_p = ol_datatext + ol_data_amount_of_matched_text;
2024 ol_data_current_state = ol_data_get_previous_state();
2026 ol_data_cp = ol_data_c_buf_p;
2027 ol_data_bp = ol_datatext + ol_data_MORE_ADJ;
2030 case EOB_ACT_LAST_MATCH:
2032 &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars];
2034 ol_data_current_state = ol_data_get_previous_state();
2036 ol_data_cp = ol_data_c_buf_p;
2037 ol_data_bp = ol_datatext + ol_data_MORE_ADJ;
2038 goto ol_data_find_action;
2045 printf( "action # %d\n", ol_data_act );
2047 ol_data_FATAL_ERROR(
2048 "fatal flex scanner internal error--no action found" );
2054 /* ol_data_get_next_buffer - try to read in a new buffer
2057 * int ol_data_get_next_buffer();
2059 * returns a code representing an action
2060 * EOB_ACT_LAST_MATCH -
2061 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2062 * EOB_ACT_END_OF_FILE - end of file
2065 static int ol_data_get_next_buffer()
2068 register ol_data_CHAR *dest = ol_data_current_buffer->ol_data_ch_buf;
2069 register ol_data_CHAR *source = ol_datatext - 1; /* copy prev. char, too */
2070 register int number_to_move, i;
2073 if ( ol_data_c_buf_p > &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars + 1] )
2074 ol_data_FATAL_ERROR(
2075 "fatal flex scanner internal error--end of buffer missed" );
2077 /* try to read more data */
2079 /* first move last chars to start of buffer */
2080 number_to_move = ol_data_c_buf_p - ol_datatext;
2082 for ( i = 0; i < number_to_move; ++i )
2083 *(dest++) = *(source++);
2085 if ( ol_data_current_buffer->ol_data_eof_status != EOF_NOT_SEEN )
2086 /* don't do the read, it's not guaranteed to return an EOF,
2089 ol_data_n_chars = 0;
2093 int num_to_read = ol_data_current_buffer->ol_data_buf_size - number_to_move - 1;
2095 if ( num_to_read > ol_data_READ_BUF_SIZE )
2096 num_to_read = ol_data_READ_BUF_SIZE;
2098 else if ( num_to_read <= 0 )
2099 ol_data_FATAL_ERROR( "fatal error - scanner input buffer overflow" );
2101 /* read in more data */
2102 ol_data_INPUT( (&ol_data_current_buffer->ol_data_ch_buf[number_to_move]),
2103 ol_data_n_chars, num_to_read );
2106 if ( ol_data_n_chars == 0 )
2108 if ( number_to_move == 1 )
2110 ret_val = EOB_ACT_END_OF_FILE;
2111 ol_data_current_buffer->ol_data_eof_status = EOF_DONE;
2116 ret_val = EOB_ACT_LAST_MATCH;
2117 ol_data_current_buffer->ol_data_eof_status = EOF_PENDING;
2122 ret_val = EOB_ACT_CONTINUE_SCAN;
2124 ol_data_n_chars += number_to_move;
2125 ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars] = ol_data_END_OF_BUFFER_CHAR;
2126 ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars + 1] = ol_data_END_OF_BUFFER_CHAR;
2128 /* ol_datatext begins at the second character in ol_data_ch_buf; the first
2129 * character is the one which preceded it before reading in the latest
2130 * buffer; it needs to be kept around in case it's a newline, so
2131 * ol_data_get_previous_state() will have with '^' rules active
2134 ol_datatext = &ol_data_current_buffer->ol_data_ch_buf[1];
2140 /* ol_data_get_previous_state - get the state just before the EOB char was reached
2143 * ol_data_state_type ol_data_get_previous_state();
2146 static ol_data_state_type ol_data_get_previous_state()
2149 register ol_data_state_type ol_data_current_state;
2150 register ol_data_CHAR *ol_data_cp;
2152 ol_data_current_state = ol_data_start;
2154 for ( ol_data_cp = ol_datatext + ol_data_MORE_ADJ; ol_data_cp < ol_data_c_buf_p; ++ol_data_cp )
2158 ol_data_current_state = ol_data_nxt[ol_data_current_state][*ol_data_cp];
2161 ol_data_current_state = ol_data_NUL_trans[ol_data_current_state];
2162 if ( ol_data_accept[ol_data_current_state] )
2164 ol_data_last_accepting_state = ol_data_current_state;
2165 ol_data_last_accepting_cpos = ol_data_cp;
2169 return ( ol_data_current_state );
2173 /* ol_data_try_NUL_trans - try to make a transition on the NUL character
2176 * next_state = ol_data_try_NUL_trans( current_state );
2179 #ifdef ol_data_USE_PROTOS
2180 static ol_data_state_type ol_data_try_NUL_trans( register ol_data_state_type ol_data_current_state )
2182 static ol_data_state_type ol_data_try_NUL_trans( ol_data_current_state )
2183 register ol_data_state_type ol_data_current_state;
2187 register int ol_data_is_jam;
2188 register ol_data_CHAR *ol_data_cp = ol_data_c_buf_p;
2190 ol_data_current_state = ol_data_NUL_trans[ol_data_current_state];
2191 ol_data_is_jam = (ol_data_current_state == 0);
2193 if ( ! ol_data_is_jam )
2195 if ( ol_data_accept[ol_data_current_state] )
2197 ol_data_last_accepting_state = ol_data_current_state;
2198 ol_data_last_accepting_cpos = ol_data_cp;
2202 return ( ol_data_is_jam ? 0 : ol_data_current_state );
2207 #ifdef ol_data_USE_PROTOS
2208 static void ol_dataunput( ol_data_CHAR c, register ol_data_CHAR *ol_data_bp )
2210 static void ol_dataunput( c, ol_data_bp )
2212 register ol_data_CHAR *ol_data_bp;
2216 register ol_data_CHAR *ol_data_cp = ol_data_c_buf_p;
2218 /* undo effects of setting up ol_datatext */
2219 *ol_data_cp = ol_data_hold_char;
2221 if ( ol_data_cp < ol_data_current_buffer->ol_data_ch_buf + 2 )
2222 { /* need to shift things up to make room */
2223 register int number_to_move = ol_data_n_chars + 2; /* +2 for EOB chars */
2224 register ol_data_CHAR *dest =
2225 &ol_data_current_buffer->ol_data_ch_buf[ol_data_current_buffer->ol_data_buf_size + 2];
2226 register ol_data_CHAR *source =
2227 &ol_data_current_buffer->ol_data_ch_buf[number_to_move];
2229 while ( source > ol_data_current_buffer->ol_data_ch_buf )
2230 *--dest = *--source;
2232 ol_data_cp += dest - source;
2233 ol_data_bp += dest - source;
2234 ol_data_n_chars = ol_data_current_buffer->ol_data_buf_size;
2236 if ( ol_data_cp < ol_data_current_buffer->ol_data_ch_buf + 2 )
2237 ol_data_FATAL_ERROR( "flex scanner push-back overflow" );
2240 if ( ol_data_cp > ol_data_bp && ol_data_cp[-1] == '\n' )
2241 ol_data_cp[-2] = '\n';
2245 /* note: the formal parameter *must* be called "ol_data_bp" for this
2246 * macro to now work correctly
2248 ol_data_DO_BEFORE_ACTION; /* set up ol_datatext again */
2255 static int ol_datainput()
2262 ol_data_CHAR *ol_data_cp = ol_data_c_buf_p;
2264 *ol_data_cp = ol_data_hold_char;
2266 if ( *ol_data_c_buf_p == ol_data_END_OF_BUFFER_CHAR )
2268 /* ol_data_c_buf_p now points to the character we want to return.
2269 * If this occurs *before* the EOB characters, then it's a
2270 * valid NUL; if not, then we've hit the end of the buffer.
2272 if ( ol_data_c_buf_p < &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars] )
2273 /* this was really a NUL */
2274 *ol_data_c_buf_p = '\0';
2277 { /* need more input */
2278 ol_datatext = ol_data_c_buf_p;
2281 switch ( ol_data_get_next_buffer() )
2283 case EOB_ACT_END_OF_FILE:
2285 if ( ol_datawrap() )
2287 ol_data_c_buf_p = ol_datatext + ol_data_MORE_ADJ;
2294 return ( ol_datainput() );
2301 case EOB_ACT_CONTINUE_SCAN:
2302 ol_data_c_buf_p = ol_datatext + ol_data_MORE_ADJ;
2305 case EOB_ACT_LAST_MATCH:
2307 ol_data_FATAL_ERROR( "unexpected last match in ol_datainput()" );
2309 ol_data_FATAL_ERROR( "unexpected last match in input()" );
2315 c = *ol_data_c_buf_p;
2316 ol_data_hold_char = *++ol_data_c_buf_p;
2323 #ifdef ol_data_USE_PROTOS
2324 void ol_datarestart( FILE *input_file )
2326 void ol_datarestart( input_file )
2331 ol_data_init_buffer( ol_data_current_buffer, input_file );
2332 ol_data_load_buffer_state();
2336 #ifdef ol_data_USE_PROTOS
2337 void ol_data_switch_to_buffer( ol_data_BUFFER_STATE new_buffer )
2339 void ol_data_switch_to_buffer( new_buffer )
2340 ol_data_BUFFER_STATE new_buffer;
2344 if ( ol_data_current_buffer == new_buffer )
2347 if ( ol_data_current_buffer )
2349 /* flush out information for old buffer */
2350 *ol_data_c_buf_p = ol_data_hold_char;
2351 ol_data_current_buffer->ol_data_buf_pos = ol_data_c_buf_p;
2352 ol_data_current_buffer->ol_data_n_chars = ol_data_n_chars;
2355 ol_data_current_buffer = new_buffer;
2356 ol_data_load_buffer_state();
2358 /* we don't actually know whether we did this switch during
2359 * EOF (ol_datawrap()) processing, but the only time this flag
2360 * is looked at is after ol_datawrap() is called, so it's safe
2361 * to go ahead and always set it.
2363 ol_data_did_buffer_switch_on_eof = 1;
2367 #ifdef ol_data_USE_PROTOS
2368 void ol_data_load_buffer_state( void )
2370 void ol_data_load_buffer_state()
2374 ol_data_n_chars = ol_data_current_buffer->ol_data_n_chars;
2375 ol_datatext = ol_data_c_buf_p = ol_data_current_buffer->ol_data_buf_pos;
2376 ol_datain = ol_data_current_buffer->ol_data_input_file;
2377 ol_data_hold_char = *ol_data_c_buf_p;
2381 #ifdef ol_data_USE_PROTOS
2382 ol_data_BUFFER_STATE ol_data_create_buffer( FILE *file, int size )
2384 ol_data_BUFFER_STATE ol_data_create_buffer( file, size )
2390 ol_data_BUFFER_STATE b;
2392 b = (ol_data_BUFFER_STATE) malloc( sizeof( struct ol_data_buffer_state ) );
2395 ol_data_FATAL_ERROR( "out of dynamic memory in ol_data_create_buffer()" );
2397 b->ol_data_buf_size = size;
2399 /* ol_data_ch_buf has to be 2 characters longer than the size given because
2400 * we need to put in 2 end-of-buffer characters.
2402 b->ol_data_ch_buf = (ol_data_CHAR *) malloc( (unsigned) (b->ol_data_buf_size + 2) );
2404 if ( ! b->ol_data_ch_buf )
2405 ol_data_FATAL_ERROR( "out of dynamic memory in ol_data_create_buffer()" );
2407 ol_data_init_buffer( b, file );
2413 #ifdef ol_data_USE_PROTOS
2414 void ol_data_delete_buffer( ol_data_BUFFER_STATE b )
2416 void ol_data_delete_buffer( b )
2417 ol_data_BUFFER_STATE b;
2421 if ( b == ol_data_current_buffer )
2422 ol_data_current_buffer = (ol_data_BUFFER_STATE) 0;
2424 free( (char *) b->ol_data_ch_buf );
2429 #ifdef ol_data_USE_PROTOS
2430 void ol_data_init_buffer( ol_data_BUFFER_STATE b, FILE *file )
2432 void ol_data_init_buffer( b, file )
2433 ol_data_BUFFER_STATE b;
2438 b->ol_data_input_file = file;
2440 /* we put in the '\n' and start reading from [1] so that an
2441 * initial match-at-newline will be true.
2444 b->ol_data_ch_buf[0] = '\n';
2445 b->ol_data_n_chars = 1;
2447 /* we always need two end-of-buffer characters. The first causes
2448 * a transition to the end-of-buffer state. The second causes
2449 * a jam in that state.
2451 b->ol_data_ch_buf[1] = ol_data_END_OF_BUFFER_CHAR;
2452 b->ol_data_ch_buf[2] = ol_data_END_OF_BUFFER_CHAR;
2454 b->ol_data_buf_pos = &b->ol_data_ch_buf[1];
2456 b->ol_data_eof_status = EOF_NOT_SEEN;
2461 my_input ( char *buf, int max_size )
2464 int remain = myinputlim - myinputptr;
2465 int n = ( max_size > remain ? remain : max_size );
2468 memcpy ( buf, myinputptr, n );
2474 //--------------------------------------------------------------
2476 ol_dataerror(char *str)
2478 throw(Unexpected(form("Syntax error in %s", myinput)));
2481 //--------------------------------------------------------------
2482 ContentType::ContentType()
2485 dbgStr = getenv ("OL_DEBUG");
2486 dbgLevel = ( dbgStr ? atoi ( dbgStr ) : 0 );
2490 //--------------------------------------------------------------
2491 ContentType::~ContentType()
2494 OL_Expression *eptr = exprlist;
2496 OL_Expression *tmp = eptr;
2502 //--------------------------------------------------------------
2504 ContentType::Parse( char *str )
2507 DBG(10) cerr << "(DEBUG) ContentType::Parse() str = " << str << endl;
2511 myinputlim = str + strlen(str);
2513 CurrentContentPtr = this;
2518 ol_datarestart(NULL);
2521 //--------------------------------------------------------------
2523 ContentType::init( OL_Expression *expr )
2525 assert(expr != NULL);
2529 * The same as CONCAT
2531 ExprList *elist = new ExprList( expr );
2532 OL_Expression *new_expr = new OL_Expression ( CONCAT, -1, elist );
2533 assert(new_expr != NULL);
2535 exprlist = new_expr;