1 /* A lexical scanner generated by flex */
3 /* Scanner skeleton version:
8 #define YY_FLEX_MAJOR_VERSION 2
9 #define YY_FLEX_MINOR_VERSION 5
14 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
27 /* Use prototypes in function declarations. */
30 /* The "const" storage-class-modifier is valid. */
33 #else /* ! __cplusplus */
41 #endif /* ! __cplusplus */
60 #define YY_PROTO(proto) proto
62 #define YY_PROTO(proto) ()
65 /* Returned upon end-of-file. */
68 /* Promotes a possibly negative, possibly signed char to an unsigned
69 * integer for use as an array index. If the signed char is negative,
70 * we want to instead treat it as an 8-bit unsigned char, hence the
73 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
75 /* Enter a start condition. This macro really ought to take a parameter,
76 * but we do it the disgusting crufty way forced on us by the ()-less
77 * definition of BEGIN.
79 #define BEGIN yy_start = 1 + 2 *
81 /* Translate the current start state into a value that can be later handed
82 * to BEGIN to return to the state. The YYSTATE alias is for lex
85 #define YY_START ((yy_start - 1) / 2)
86 #define YYSTATE YY_START
88 /* Action number for EOF rule of a given start state. */
89 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
91 /* Special action meaning "start processing a new file". */
92 #define YY_NEW_FILE yyrestart( yyin )
94 #define YY_END_OF_BUFFER_CHAR 0
96 /* Size of default input buffer. */
97 #define YY_BUF_SIZE 16384
99 typedef struct yy_buffer_state *YY_BUFFER_STATE;
102 extern FILE *yyin, *yyout;
104 #define EOB_ACT_CONTINUE_SCAN 0
105 #define EOB_ACT_END_OF_FILE 1
106 #define EOB_ACT_LAST_MATCH 2
108 /* The funky do-while in the following #define is used to turn the definition
109 * int a single C statement (which needs a semi-colon terminator). This
110 * avoids problems with code like:
112 * if ( condition_holds )
115 * do_something_else();
117 * Prior to using the do-while the compiler would get upset at the
118 * "else" because it interpreted the "if" statement as being all
119 * done when it reached the ';' after the yyless() call.
122 /* Return all but the first 'n' matched characters back to the input stream. */
127 /* Undo effects of setting up yytext. */ \
128 *yy_cp = yy_hold_char; \
129 YY_RESTORE_YY_MORE_OFFSET \
130 yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
131 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
135 #define unput(c) yyunput( c, yytext_ptr )
137 /* The following is because we cannot portably get our hands on size_t
138 * (without autoconf's help, which isn't available because we want
139 * flex-generated scanners to compile on their own).
141 typedef unsigned int yy_size_t;
144 struct yy_buffer_state
148 char *yy_ch_buf; /* input buffer */
149 char *yy_buf_pos; /* current position in input buffer */
151 /* Size of input buffer in bytes, not including room for EOB
154 yy_size_t yy_buf_size;
156 /* Number of characters read into yy_ch_buf, not including EOB
161 /* Whether we "own" the buffer - i.e., we know we created it,
162 * and can realloc() it to grow it, and should free() it to
165 int yy_is_our_buffer;
167 /* Whether this is an "interactive" input source; if so, and
168 * if we're using stdio for input, then we want to use getc()
169 * instead of fread(), to make sure we stop fetching input after
172 int yy_is_interactive;
174 /* Whether we're considered to be at the beginning of a line.
175 * If so, '^' rules will be active on the next match, otherwise
180 /* Whether to try to fill the input buffer when we reach the
185 int yy_buffer_status;
186 #define YY_BUFFER_NEW 0
187 #define YY_BUFFER_NORMAL 1
188 /* When an EOF's been seen but there's still some text to process
189 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
190 * shouldn't try reading from the input source any more. We might
191 * still have a bunch of tokens to match, though, because of
192 * possible backing-up.
194 * When we actually see the EOF, we change the status to "new"
195 * (via yyrestart()), so that the user can continue scanning by
196 * just pointing yyin at a new input file.
198 #define YY_BUFFER_EOF_PENDING 2
201 static YY_BUFFER_STATE yy_current_buffer = 0;
203 /* We provide macros for accessing buffer states in case in the
204 * future we want to put the buffer states in a more general
207 #define YY_CURRENT_BUFFER yy_current_buffer
210 /* yy_hold_char holds the character lost when yytext is formed. */
211 static char yy_hold_char;
213 static int yy_n_chars; /* number of characters read into yy_ch_buf */
218 /* Points to current character in buffer. */
219 static char *yy_c_buf_p = (char *) 0;
220 static int yy_init = 1; /* whether we need to initialize */
221 static int yy_start = 0; /* start state number */
223 /* Flag which is used to allow yywrap()'s to do buffer switches
224 * instead of setting up a fresh yyin. A bit of a hack ...
226 static int yy_did_buffer_switch_on_eof;
228 void yyrestart YY_PROTO(( FILE *input_file ));
230 void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
231 void yy_load_buffer_state YY_PROTO(( void ));
232 YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
233 void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
234 void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
235 void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
236 #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
238 YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
239 YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
240 YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
242 static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
243 static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
244 static void yy_flex_free YY_PROTO(( void * ));
246 #define yy_new_buffer yy_create_buffer
248 #define yy_set_interactive(is_interactive) \
250 if ( ! yy_current_buffer ) \
251 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
252 yy_current_buffer->yy_is_interactive = is_interactive; \
255 #define yy_set_bol(at_bol) \
257 if ( ! yy_current_buffer ) \
258 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
259 yy_current_buffer->yy_at_bol = at_bol; \
262 #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
265 #define YY_USES_REJECT
266 typedef unsigned char YY_CHAR;
267 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
268 typedef int yy_state_type;
270 #define yytext_ptr yytext
272 static yy_state_type yy_get_previous_state YY_PROTO(( void ));
273 static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
274 static int yy_get_next_buffer YY_PROTO(( void ));
275 static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
277 /* Done after the current pattern has been matched and before the
278 * corresponding action - sets up yytext.
280 #define YY_DO_BEFORE_ACTION \
281 yytext_ptr = yy_bp; \
282 yyleng = (int) (yy_cp - yy_bp); \
283 yy_hold_char = *yy_cp; \
287 #define YY_NUM_RULES 42
288 #define YY_END_OF_BUFFER 43
289 static yyconst short int yy_acclist[661] =
291 43, 41, 42, 41, 42, 41, 42, 40, 41, 42,
292 41, 42, 25, 41, 42, 41, 42, 40, 41, 42,
293 40, 41, 42,16410, 40, 41, 42,16410, 41, 42,
294 40, 41, 42, 40, 41, 42, 40, 41, 42, 40,
295 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
296 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
297 40, 41, 42, 40, 41, 42, 40, 41, 42, 41,
298 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
299 40, 41, 42, 40, 41, 42, 40, 41, 42, 40,
300 41, 42, 40, 41, 42, 40, 41, 42, 41, 42,
302 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
303 42,16410, 40, 41, 42,16410, 41, 42, 40, 41,
304 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
305 40, 41, 42, 40, 41, 42, 40, 41, 42, 40,
306 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
307 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
308 40, 41, 42, 40, 41, 42, 40, 41, 42, 40,
309 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
310 42, 40, 41, 42, 41, 42, 33, 40, 17, 40,
311 9, 40, 40, 40,16410, 8218, 40, 35, 40, 40,
313 40, 40, 40, 40, 40, 40, 40, 40, 40, 9,
314 40, 40, 40, 40, 40, 40, 36, 40, 3, 40,
315 40, 40, 4, 40, 40, 3, 40, 40, 4, 40,
316 40, 40, 40, 9, 40, 34, 40, 40, 9, 40,
317 40, 40,16410, 8218, 40, 40, 40, 40, 40, 40,
318 40, 40, 40, 40, 40, 40, 9, 40, 40, 40,
319 40, 40, 40, 40, 3, 40, 40, 40, 4, 40,
320 40, 3, 40, 40, 4, 40, 40, 40, 40, 9,
321 40, 15, 9, 40, 23, 40, 23, 8, 40, 8218,
322 22, 40, 22, 24, 40, 40, 40, 6, 40, 40,
324 40, 40, 40, 40, 40, 9, 40, 40, 40, 40,
325 40, 20, 40, 4, 40, 40, 3, 40, 40, 3,
326 40, 4, 5, 40, 4, 40, 40, 4, 40, 40,
327 40, 3, 40, 4, 4, 40, 5, 6, 40, 4,
328 40, 40, 9, 40, 34, 39, 9, 40, 23, 40,
329 8, 40, 22, 40, 35, 40, 40, 40, 6, 40,
330 40, 40, 40, 40, 40, 40, 9, 40, 40, 40,
331 40, 40, 20, 40, 4, 40, 40, 3, 40, 40,
332 3, 40, 5, 40, 4, 40, 40, 4, 40, 40,
333 40, 3, 40, 4, 40, 5, 6, 40, 4, 40,
335 40, 9, 40, 38, 38, 37, 25, 25, 40, 6,
336 40, 7, 40, 6, 10, 40, 40, 40, 40, 19,
337 40, 40, 21, 40, 16, 40, 40, 40, 40, 40,
338 20, 20, 40, 20, 40, 36, 3, 3, 2, 40,
339 5, 4, 5, 40, 40, 4, 4, 40, 2, 7,
340 40, 5, 6, 5, 6, 40, 5, 40, 40, 40,
341 25, 39, 40, 6, 40, 7, 40, 40, 40, 40,
342 40, 19, 40, 40, 21, 40, 16, 40, 40, 40,
343 40, 40, 20, 40, 20, 20, 40, 2, 40, 5,
344 40, 40, 4, 40, 2, 7, 40, 5, 6, 40,
346 5, 40, 40, 40, 7, 1, 40, 40, 40, 19,
347 40, 40, 40, 21, 21, 40, 21, 40, 40, 40,
348 40, 30, 36, 2, 2, 40, 5, 4, 5, 5,
349 40, 2, 7, 39, 1, 40, 40, 40, 19, 40,
350 40, 40, 21, 40, 21, 21, 40, 40, 40, 40,
351 20, 39, 2, 40, 5, 40, 27, 38, 23, 23,
352 22, 22, 24, 24, 20, 21, 1, 1, 40, 40,
353 40, 40, 11, 40, 40, 28, 36, 30, 2, 2,
354 5, 27, 34, 39, 39, 1, 40, 40, 40, 40,
355 21, 39, 11, 40, 40, 20, 39, 18, 24, 20,
357 21, 1, 1, 19, 40, 40, 40, 11, 40, 40,
358 40, 40, 21, 39, 40, 11, 40, 40, 12, 40,
359 40, 40, 40, 12, 40, 40, 14, 40, 40, 40,
360 14, 40, 40, 40, 39, 40, 40, 40, 40, 39,
361 39, 40, 40, 31, 40, 39, 39, 31, 40, 13,
362 31, 32, 32, 35, 39, 39, 31, 39, 34, 29
365 static yyconst short int yy_accept[712] =
367 1, 1, 1, 2, 4, 6, 8, 11, 13, 16,
368 18, 21, 25, 29, 31, 34, 37, 40, 43, 46,
369 49, 52, 55, 58, 61, 64, 67, 70, 72, 75,
370 78, 81, 84, 87, 90, 93, 96, 99, 101, 103,
371 106, 109, 113, 117, 119, 122, 125, 128, 131, 134,
372 137, 140, 143, 146, 149, 152, 155, 158, 161, 164,
373 167, 170, 173, 176, 179, 182, 185, 187, 187, 188,
374 189, 189, 189, 189, 189, 190, 190, 190, 191, 191,
375 193, 193, 193, 193, 194, 194, 194, 196, 196, 198,
376 198, 199, 199, 200, 200, 201, 201, 201, 202, 203,
378 204, 205, 206, 207, 208, 209, 210, 212, 213, 214,
379 215, 216, 217, 217, 217, 217, 217, 218, 219, 221,
380 221, 222, 223, 225, 226, 228, 228, 229, 231, 232,
381 233, 234, 236, 236, 236, 236, 237, 237, 238, 238,
382 239, 241, 241, 242, 244, 244, 246, 246, 247, 248,
383 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
384 259, 260, 261, 262, 263, 264, 265, 267, 267, 268,
385 269, 271, 272, 274, 274, 275, 277, 278, 279, 280,
386 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
387 282, 282, 283, 283, 283, 283, 285, 287, 288, 290,
389 291, 291, 291, 291, 293, 294, 295, 295, 295, 295,
390 295, 296, 296, 297, 297, 298, 298, 298, 300, 301,
391 302, 303, 304, 305, 306, 308, 309, 310, 311, 312,
392 314, 314, 314, 314, 314, 316, 316, 317, 317, 317,
393 319, 320, 322, 323, 325, 325, 325, 327, 328, 330,
394 331, 331, 332, 334, 335, 337, 340, 342, 343, 345,
395 346, 346, 346, 346, 346, 347, 349, 351, 353, 355,
396 355, 356, 356, 357, 358, 358, 359, 361, 362, 363,
397 364, 365, 366, 367, 369, 370, 371, 372, 373, 375,
398 377, 378, 378, 380, 381, 383, 385, 387, 388, 390,
400 391, 391, 392, 394, 396, 399, 401, 402, 404, 404,
401 404, 405, 406, 406, 406, 407, 407, 407, 408, 408,
402 409, 409, 409, 409, 410, 410, 410, 410, 410, 410,
403 410, 410, 410, 410, 410, 410, 412, 412, 412, 414,
404 415, 416, 417, 417, 418, 419, 420, 422, 422, 423,
405 425, 427, 428, 429, 430, 431, 432, 434, 436, 436,
406 436, 436, 436, 437, 438, 438, 439, 441, 442, 443,
407 443, 443, 443, 445, 446, 447, 447, 449, 449, 452,
408 454, 457, 459, 460, 461, 461, 462, 462, 462, 462,
409 462, 463, 463, 464, 464, 464, 466, 468, 469, 469,
411 470, 471, 472, 474, 475, 477, 479, 480, 481, 482,
412 483, 485, 486, 488, 490, 492, 493, 495, 498, 501,
413 503, 504, 505, 505, 505, 505, 505, 505, 505, 505,
414 505, 505, 505, 505, 505, 505, 505, 505, 505, 505,
415 506, 508, 509, 510, 510, 512, 512, 513, 514, 515,
416 517, 519, 520, 521, 522, 522, 522, 524, 524, 524,
417 525, 525, 525, 527, 528, 528, 529, 530, 530, 532,
418 532, 534, 534, 534, 534, 534, 534, 534, 535, 535,
419 535, 537, 538, 539, 541, 542, 543, 545, 546, 548,
420 549, 550, 551, 553, 555, 557, 557, 557, 559, 559,
422 559, 560, 560, 561, 561, 562, 562, 563, 563, 564,
423 564, 565, 565, 565, 565, 565, 567, 567, 568, 568,
424 568, 570, 571, 571, 571, 571, 571, 571, 572, 573,
425 575, 576, 578, 578, 579, 580, 581, 582, 582, 582,
426 584, 584, 584, 585, 586, 586, 586, 588, 589, 590,
427 591, 593, 595, 596, 598, 598, 599, 599, 599, 599,
428 600, 600, 600, 600, 602, 602, 603, 604, 604, 605,
429 605, 605, 605, 605, 606, 607, 608, 610, 611, 611,
430 611, 611, 611, 611, 612, 613, 615, 616, 618, 619,
431 619, 619, 619, 619, 619, 619, 620, 620, 620, 620,
433 620, 621, 622, 622, 622, 622, 622, 623, 624, 624,
434 624, 624, 624, 625, 625, 625, 625, 626, 627, 629,
435 629, 629, 629, 629, 630, 630, 631, 633, 633, 633,
436 633, 633, 634, 635, 635, 635, 635, 635, 636, 637,
437 638, 638, 638, 638, 638, 638, 639, 640, 640, 640,
438 640, 640, 641, 642, 643, 644, 644, 644, 644, 644,
439 644, 646, 646, 646, 646, 646, 647, 648, 650, 650,
440 650, 651, 651, 652, 652, 653, 653, 653, 655, 655,
441 656, 657, 657, 657, 657, 657, 659, 659, 659, 659,
442 659, 659, 659, 659, 659, 659, 659, 659, 659, 659,
444 659, 659, 659, 659, 659, 659, 659, 659, 660, 661,
448 static yyconst int yy_ec[256] =
450 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
451 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
452 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
453 1, 4, 1, 5, 6, 7, 8, 1, 9, 10,
454 11, 12, 13, 1, 14, 15, 16, 17, 18, 19,
455 20, 20, 20, 20, 20, 20, 21, 22, 23, 1,
456 24, 1, 1, 25, 26, 27, 28, 29, 30, 31,
457 32, 33, 34, 34, 35, 36, 37, 38, 39, 40,
458 41, 42, 43, 34, 44, 34, 45, 46, 34, 34,
459 47, 1, 48, 1, 49, 1, 50, 51, 52, 53,
461 54, 55, 56, 57, 58, 34, 59, 60, 61, 62,
462 63, 64, 41, 65, 66, 67, 68, 34, 69, 46,
463 70, 34, 71, 1, 72, 1, 1, 1, 1, 1,
464 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
465 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
466 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
467 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
468 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
469 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
470 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
472 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
473 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
474 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
475 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
476 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
480 static yyconst int yy_meta[73] =
482 1, 2, 3, 2, 1, 1, 1, 1, 4, 5,
483 6, 1, 1, 7, 1, 1, 4, 8, 8, 8,
484 4, 9, 1, 10, 1, 4, 11, 4, 4, 4,
485 4, 4, 4, 4, 11, 4, 4, 11, 12, 12,
486 11, 11, 4, 4, 4, 7, 1, 1, 1, 13,
487 14, 13, 13, 15, 13, 13, 13, 4, 11, 4,
488 4, 11, 12, 12, 11, 4, 4, 4, 4, 4,
492 static yyconst short int yy_base[787] =
494 0, 72, 2588, 4394, 119, 129, 0, 141, 2583, 139,
495 150, 171, 238, 2583, 257, 2527, 2518, 117, 159, 2518,
496 2530, 190, 142, 233, 191, 2512, 239, 317, 376, 420,
497 125, 205, 193, 114, 243, 120, 204, 331, 2574, 174,
498 353, 476, 258, 260, 543, 244, 282, 346, 311, 334,
499 256, 312, 365, 595, 331, 351, 354, 644, 688, 242,
500 348, 327, 365, 386, 303, 392, 552, 2521, 432, 0,
501 2566, 258, 557, 282, 4394, 2562, 393, 320, 2556, 2554,
502 2552, 342, 442, 2551, 457, 364, 605, 2550, 0, 2562,
503 4394, 576, 530, 617, 732, 625, 661, 449, 2514, 2509,
505 2512, 2517, 2492, 2493, 2490, 2517, 2515, 463, 572, 2503,
506 2494, 2489, 2502, 789, 372, 861, 4394, 669, 924, 705,
507 713, 468, 980, 765, 1032, 773, 789, 1076, 481, 637,
508 2486, 2485, 390, 2475, 830, 2542, 2541, 383, 2540, 617,
509 593, 546, 858, 874, 406, 579, 432, 865, 1120, 1005,
510 505, 683, 726, 727, 621, 872, 870, 876, 603, 873,
511 905, 665, 891, 884, 882, 973, 1168, 1013, 1049, 936,
512 1225, 1057, 1277, 1093, 1101, 1321, 641, 983, 928, 930,
513 896, 2478, 538, 543, 612, 2531, 622, 1030, 1221, 2528,
514 2466, 4394, 2532, 2531, 2529, 2518, 2527, 2526, 0, 4394,
516 2525, 2524, 2523, 2521, 2520, 443, 2465, 2459, 2471, 2466,
517 668, 709, 594, 1218, 732, 753, 756, 1365, 2467, 2466,
518 2446, 803, 906, 2460, 2498, 0, 2453, 2449, 2441, 1422,
519 689, 1069, 172, 1494, 790, 1251, 1294, 1302, 1415, 2496,
520 838, 976, 1288, 1557, 1413, 1449, 678, 629, 910, 1338,
521 1346, 992, 1105, 1502, 1057, 1609, 1182, 1100, 2492, 4394,
522 1510, 996, 2501, 191, 2501, 1172, 960, 962, 1158, 831,
523 2499, 1132, 1237, 889, 1482, 1300, 1653, 1176, 1228, 1010,
524 1273, 1315, 1175, 1190, 0, 1204, 1531, 1071, 1710, 1774,
525 1550, 1582, 1242, 1443, 1551, 1830, 1272, 1239, 1121, 1493,
527 1590, 1606, 1659, 1141, 1882, 1673, 1721, 1427, 1504, 2447,
528 4394, 843, 1025, 2489, 4394, 1727, 2487, 2485, 2423, 2422,
529 2475, 2474, 2473, 2473, 1010, 2472, 539, 2471, 1290, 1541,
530 610, 2421, 2421, 2414, 2414, 0, 939, 1197, 0, 4394,
531 4394, 1699, 1710, 1344, 2420, 2419, 885, 879, 1130, 1939,
532 0, 2438, 2420, 2421, 2420, 0, 2011, 2083, 733, 949,
533 1131, 1410, 2468, 2461, 1365, 4394, 2146, 1356, 1154, 689,
534 1752, 1796, 1157, 715, 2417, 2406, 0, 1386, 0, 1564,
535 2202, 1802, 1633, 2406, 1857, 2464, 1571, 1672, 2417, 2403,
536 2462, 1187, 1451, 1003, 894, 1295, 1470, 1718, 1855, 1823,
538 1555, 1665, 1782, 1796, 2267, 1574, 1588, 1826, 1647, 1674,
539 2339, 2460, 2411, 2475, 1840, 1858, 1608, 0, 2531, 1905,
540 1956, 1857, 1728, 2409, 2451, 1639, 2450, 2385, 2445, 2383,
541 2443, 2381, 2434, 1281, 2399, 2395, 2395, 2390, 1389, 4394,
542 2587, 2443, 1146, 1916, 2442, 1281, 2415, 2390, 0, 2652,
543 2724, 2378, 2378, 2428, 1322, 1883, 4394, 2426, 1966, 1457,
544 2002, 2076, 2419, 1428, 952, 4394, 2375, 2364, 0, 2410,
545 1544, 1774, 2396, 1877, 2392, 2347, 2341, 1521, 1030, 1255,
546 2787, 1676, 1881, 1788, 1891, 1861, 2852, 2402, 2924, 1963,
547 1841, 1944, 2402, 1691, 1649, 1816, 1235, 4394, 1979, 2393,
549 2392, 2330, 2329, 2389, 2388, 2326, 2325, 2385, 2381, 2319,
550 2318, 2366, 2362, 2315, 2323, 1377, 2320, 1778, 2004, 2102,
551 2355, 2310, 2348, 2304, 2287, 2326, 2288, 2289, 2264, 1524,
552 2279, 4394, 1980, 4394, 2317, 4394, 4394, 2312, 2053, 2319,
553 2268, 2261, 2315, 1999, 1555, 548, 1908, 1982, 1951, 1786,
554 2301, 2043, 2029, 2297, 2054, 4394, 2243, 2158, 2289, 2284,
555 2219, 2205, 2209, 4394, 2198, 2239, 4394, 2235, 2228, 2174,
556 2228, 2182, 2157, 2174, 2105, 2086, 0, 2061, 2130, 2120,
557 2054, 1040, 358, 2032, 2091, 2073, 2093, 1970, 2136, 2120,
558 1988, 2029, 1542, 1985, 1941, 1941, 1923, 884, 1858, 1831,
560 2996, 1815, 1772, 1768, 1617, 651, 3068, 2150, 2149, 1757,
561 1745, 1725, 4394, 1623, 1924, 2045, 3140, 2054, 0, 1631,
562 1594, 1302, 1202, 3212, 2158, 2066, 2040, 2177, 1577, 1531,
563 2110, 1524, 1496, 1455, 1427, 1308, 1895, 2162, 1448, 1422,
564 2179, 1319, 1298, 2163, 2154, 1285, 1115, 1083, 1117, 1726,
565 1576, 2196, 2198, 1062, 984, 2193, 2056, 930, 2153, 2166,
566 0, 902, 804, 803, 1618, 2210, 2238, 0, 2213, 583,
567 4394, 497, 2199, 486, 4394, 426, 460, 4394, 2116, 2203,
568 2254, 2231, 392, 317, 1804, 2255, 2281, 239, 2027, 829,
569 2006, 2117, 2293, 2295, 2298, 2299, 2303, 2317, 2321, 2322,
571 2323, 2365, 2366, 2369, 2370, 2371, 2233, 154, 4394, 4394,
572 3281, 3296, 3311, 3326, 3341, 3353, 3368, 3383, 3397, 3412,
573 3427, 3442, 3457, 3472, 3487, 3502, 3517, 3532, 3547, 3562,
574 3577, 3592, 3607, 3622, 3633, 3648, 3663, 3678, 3693, 3708,
575 3723, 3738, 3753, 3768, 3783, 3792, 3807, 3822, 3837, 3852,
576 3867, 3882, 3897, 3908, 3923, 3938, 3953, 3968, 3983, 3998,
577 4013, 4028, 4043, 4058, 4073, 4088, 4103, 4118, 4133, 4148,
578 4163, 4174, 4188, 4203, 4218, 4233, 4244, 4258, 4273, 4288,
579 4303, 4318, 4333, 4348, 4363, 4378
582 static yyconst short int yy_def[787] =
584 710, 710, 710, 710, 710, 710, 711, 712, 710, 710,
585 711, 710, 12, 713, 711, 711, 711, 711, 15, 711,
586 711, 15, 711, 711, 15, 711, 711, 714, 711, 15,
587 29, 29, 29, 29, 29, 29, 711, 715, 710, 716,
588 716, 710, 42, 713, 716, 716, 716, 716, 45, 716,
589 716, 45, 716, 716, 45, 716, 716, 716, 45, 58,
590 58, 58, 58, 58, 58, 716, 715, 710, 710, 711,
591 717, 718, 717, 710, 710, 710, 710, 711, 710, 711,
592 710, 719, 719, 711, 719, 710, 12, 710, 711, 713,
593 710, 710, 711, 710, 711, 710, 710, 95, 711, 711,
595 711, 711, 711, 711, 711, 711, 711, 711, 95, 711,
596 711, 711, 720, 714, 720, 721, 710, 711, 711, 710,
597 711, 711, 711, 711, 119, 710, 711, 123, 95, 711,
598 711, 711, 715, 722, 715, 710, 723, 716, 710, 716,
599 716, 710, 716, 42, 710, 716, 724, 716, 148, 710,
600 149, 716, 716, 716, 716, 716, 716, 716, 716, 716,
601 716, 149, 716, 716, 716, 148, 148, 710, 148, 716,
602 716, 148, 167, 710, 148, 171, 149, 716, 716, 716,
603 715, 710, 717, 725, 725, 726, 727, 717, 717, 728,
604 729, 710, 710, 710, 710, 711, 711, 710, 711, 710,
606 710, 710, 710, 711, 710, 710, 710, 710, 710, 710,
607 711, 710, 95, 710, 711, 710, 710, 711, 711, 711,
608 711, 711, 711, 711, 711, 218, 711, 711, 711, 730,
609 731, 732, 733, 734, 123, 710, 711, 710, 710, 711,
610 711, 711, 735, 711, 710, 710, 711, 711, 123, 711,
611 710, 711, 711, 735, 123, 244, 711, 711, 711, 710,
612 715, 710, 736, 710, 737, 716, 716, 716, 716, 738,
613 736, 739, 716, 149, 710, 716, 149, 716, 716, 716,
614 716, 716, 716, 716, 277, 716, 716, 716, 740, 716,
615 716, 710, 716, 716, 716, 290, 716, 716, 290, 291,
617 710, 716, 716, 290, 296, 716, 716, 716, 715, 710,
618 710, 741, 741, 742, 710, 743, 744, 744, 745, 745,
619 710, 710, 710, 711, 710, 710, 710, 710, 710, 710,
620 710, 710, 710, 710, 710, 711, 746, 710, 711, 710,
621 710, 711, 710, 711, 711, 711, 711, 710, 711, 747,
622 711, 711, 711, 711, 711, 748, 749, 749, 750, 750,
623 751, 752, 753, 710, 710, 710, 711, 754, 710, 710,
624 710, 710, 711, 711, 710, 710, 711, 710, 367, 754,
625 367, 711, 711, 711, 715, 710, 710, 710, 710, 710,
626 755, 710, 716, 756, 756, 716, 716, 291, 710, 716,
628 716, 716, 716, 716, 757, 716, 716, 716, 716, 716,
629 758, 748, 758, 716, 716, 716, 716, 414, 414, 716,
630 716, 716, 715, 710, 759, 760, 761, 762, 763, 764,
631 765, 766, 710, 710, 710, 710, 710, 710, 710, 710,
632 711, 711, 711, 710, 711, 710, 711, 711, 767, 768,
633 768, 711, 711, 711, 769, 770, 710, 771, 710, 772,
634 710, 710, 711, 710, 710, 710, 710, 710, 711, 710,
635 772, 715, 710, 710, 710, 710, 710, 773, 774, 774,
636 414, 716, 716, 716, 716, 716, 775, 767, 775, 716,
637 716, 716, 776, 716, 716, 715, 710, 710, 760, 761,
639 761, 762, 762, 763, 763, 764, 764, 765, 765, 766,
640 766, 710, 710, 710, 710, 710, 710, 777, 710, 710,
641 711, 711, 778, 710, 710, 710, 710, 711, 711, 711,
642 711, 710, 710, 710, 710, 710, 710, 710, 715, 710,
643 710, 710, 773, 773, 774, 774, 716, 716, 716, 716,
644 779, 716, 716, 776, 715, 710, 710, 760, 710, 710,
645 710, 710, 710, 710, 710, 710, 710, 778, 778, 710,
646 710, 710, 710, 711, 711, 711, 711, 711, 715, 710,
647 710, 774, 774, 716, 716, 779, 716, 716, 716, 715,
648 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
650 780, 711, 710, 710, 774, 774, 781, 716, 715, 710,
651 710, 710, 710, 710, 782, 782, 780, 617, 711, 710,
652 710, 774, 774, 781, 782, 624, 716, 715, 710, 710,
653 782, 617, 617, 710, 710, 774, 774, 783, 624, 624,
654 715, 710, 710, 782, 782, 617, 617, 710, 710, 774,
655 774, 783, 783, 624, 624, 715, 710, 710, 782, 782,
656 617, 784, 710, 785, 774, 783, 783, 624, 715, 710,
657 710, 710, 782, 784, 710, 710, 785, 710, 774, 783,
658 783, 715, 710, 710, 774, 783, 715, 710, 774, 715,
659 786, 786, 786, 786, 786, 786, 786, 786, 786, 786,
661 786, 786, 786, 786, 786, 786, 786, 710, 710, 0,
662 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
663 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
664 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
665 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
666 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
667 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
668 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
669 710, 710, 710, 710, 710, 710
672 static yyconst short int yy_nxt[4467] =
674 4, 4, 4, 5, 4, 4, 6, 4, 7, 8,
675 4, 9, 10, 7, 4, 4, 11, 12, 13, 13,
676 13, 4, 14, 4, 4, 7, 15, 16, 17, 7,
677 7, 18, 7, 7, 19, 20, 21, 22, 23, 24,
678 22, 25, 26, 7, 27, 7, 28, 4, 4, 29,
679 30, 31, 32, 33, 34, 35, 36, 7, 19, 20,
680 21, 22, 37, 24, 25, 26, 7, 7, 27, 7,
681 38, 4, 4, 4, 4, 5, 4, 39, 6, 39,
682 7, 8, 4, 9, 10, 40, 4, 4, 41, 42,
683 43, 43, 43, 4, 44, 4, 4, 40, 45, 46,
685 47, 40, 40, 48, 40, 40, 49, 50, 51, 52,
686 53, 54, 52, 55, 56, 40, 57, 40, 28, 4,
687 4, 58, 59, 60, 61, 62, 63, 64, 65, 40,
688 49, 50, 51, 52, 66, 54, 55, 56, 40, 40,
689 57, 40, 67, 4, 68, 69, 69, 69, 69, 69,
690 72, 75, 76, 77, 102, 106, 709, 73, 73, 73,
691 73, 73, 710, 78, 122, 79, 80, 123, 68, 123,
692 122, 81, 82, 82, 83, 123, 362, 123, 103, 70,
693 107, 130, 70, 710, 84, 85, 86, 87, 87, 87,
694 87, 87, 88, 710, 710, 139, 70, 89, 70, 70,
696 70, 70, 70, 70, 70, 89, 70, 70, 89, 89,
697 89, 89, 89, 70, 70, 70, 70, 131, 70, 363,
698 89, 89, 89, 89, 89, 89, 89, 89, 70, 89,
699 70, 70, 89, 89, 89, 89, 70, 70, 70, 70,
700 70, 82, 92, 122, 109, 123, 389, 123, 94, 70,
701 70, 70, 70, 710, 390, 122, 123, 97, 123, 710,
702 92, 82, 91, 147, 70, 139, 132, 186, 187, 101,
703 93, 138, 94, 710, 95, 95, 95, 139, 96, 139,
704 102, 97, 108, 108, 108, 108, 108, 108, 108, 108,
705 70, 190, 662, 122, 171, 111, 112, 123, 178, 123,
707 153, 112, 93, 139, 103, 158, 98, 98, 98, 98,
708 98, 98, 98, 98, 710, 710, 99, 113, 114, 114,
709 114, 113, 113, 113, 113, 113, 113, 113, 113, 113,
710 115, 113, 113, 134, 710, 710, 196, 197, 113, 113,
711 113, 113, 70, 82, 82, 82, 154, 135, 135, 135,
712 135, 135, 191, 170, 70, 139, 77, 92, 171, 70,
713 91, 70, 70, 113, 117, 113, 140, 139, 79, 141,
714 138, 138, 139, 70, 142, 139, 688, 170, 159, 171,
715 205, 171, 206, 155, 162, 231, 139, 113, 113, 118,
716 138, 70, 134, 119, 119, 119, 157, 120, 170, 171,
718 70, 171, 136, 160, 139, 179, 193, 156, 194, 265,
719 164, 165, 154, 139, 195, 170, 165, 163, 171, 117,
720 171, 121, 205, 155, 606, 122, 123, 122, 122, 122,
721 122, 122, 122, 124, 271, 272, 170, 125, 125, 125,
722 171, 126, 171, 82, 82, 82, 330, 156, 69, 69,
723 69, 69, 69, 556, 180, 201, 331, 202, 82, 82,
724 82, 136, 678, 203, 331, 127, 218, 218, 218, 128,
725 129, 128, 129, 129, 129, 129, 129, 82, 82, 83,
726 226, 226, 226, 684, 70, 244, 244, 244, 675, 143,
727 85, 86, 144, 144, 144, 144, 144, 145, 256, 256,
729 256, 138, 146, 138, 138, 138, 138, 138, 138, 138,
730 146, 138, 138, 146, 146, 146, 146, 146, 138, 138,
731 138, 138, 277, 277, 277, 146, 146, 146, 146, 146,
732 146, 146, 146, 138, 146, 138, 138, 146, 146, 146,
733 146, 138, 138, 138, 138, 138, 92, 184, 311, 265,
734 91, 70, 186, 312, 134, 205, 148, 206, 94, 683,
735 149, 149, 149, 198, 150, 181, 184, 97, 135, 135,
736 135, 135, 135, 188, 188, 188, 188, 188, 189, 211,
737 211, 211, 211, 211, 211, 211, 211, 70, 148, 218,
738 218, 218, 151, 151, 151, 151, 151, 151, 151, 151,
740 139, 70, 152, 70, 207, 583, 208, 70, 82, 268,
741 94, 70, 209, 433, 139, 710, 139, 210, 70, 97,
742 710, 186, 312, 136, 139, 70, 710, 434, 207, 70,
743 208, 314, 315, 266, 267, 671, 209, 227, 139, 70,
744 210, 284, 139, 376, 161, 161, 161, 161, 161, 161,
745 161, 161, 70, 91, 244, 244, 244, 166, 305, 305,
746 305, 167, 167, 167, 281, 168, 212, 212, 212, 212,
747 212, 212, 212, 212, 216, 216, 216, 216, 216, 216,
748 216, 216, 277, 277, 277, 336, 336, 336, 375, 169,
749 220, 70, 377, 170, 171, 170, 170, 170, 170, 170,
751 170, 172, 360, 376, 139, 173, 173, 173, 623, 174,
752 217, 217, 217, 217, 217, 217, 217, 217, 235, 235,
753 235, 235, 235, 235, 235, 235, 337, 337, 337, 468,
754 286, 248, 278, 175, 70, 70, 117, 176, 177, 176,
755 177, 177, 177, 177, 177, 213, 360, 139, 139, 339,
756 339, 339, 466, 214, 243, 243, 243, 243, 243, 243,
757 243, 243, 123, 123, 123, 123, 123, 123, 123, 123,
758 340, 340, 340, 341, 341, 341, 280, 213, 469, 279,
759 117, 215, 215, 215, 215, 215, 215, 215, 215, 113,
760 114, 114, 114, 113, 113, 113, 113, 113, 113, 113,
762 113, 113, 113, 113, 113, 678, 348, 70, 70, 70,
763 113, 113, 113, 113, 249, 249, 249, 249, 249, 249,
764 249, 249, 254, 254, 254, 254, 254, 254, 254, 254,
765 349, 691, 134, 271, 272, 113, 117, 113, 255, 255,
766 255, 255, 255, 255, 255, 255, 135, 135, 135, 135,
767 135, 261, 314, 315, 349, 367, 367, 367, 676, 113,
768 113, 113, 232, 232, 232, 233, 70, 113, 113, 113,
769 113, 113, 113, 70, 269, 113, 113, 82, 70, 139,
770 70, 70, 113, 113, 70, 113, 139, 138, 444, 710,
771 70, 139, 70, 139, 139, 139, 91, 139, 134, 70,
773 136, 136, 138, 139, 675, 139, 446, 113, 117, 309,
774 139, 268, 139, 70, 273, 273, 273, 273, 273, 273,
775 273, 273, 285, 285, 285, 524, 139, 336, 336, 336,
776 446, 113, 113, 236, 138, 282, 70, 237, 70, 281,
777 287, 288, 283, 289, 70, 238, 445, 239, 524, 139,
778 240, 139, 343, 296, 296, 296, 480, 139, 240, 350,
779 343, 240, 455, 325, 240, 240, 468, 136, 70, 237,
780 70, 350, 350, 241, 242, 241, 241, 241, 241, 241,
781 241, 139, 240, 139, 343, 240, 366, 672, 240, 245,
782 308, 70, 268, 367, 367, 367, 117, 244, 244, 244,
784 296, 296, 296, 246, 139, 91, 247, 386, 265, 379,
785 379, 379, 387, 388, 247, 537, 265, 247, 70, 427,
786 247, 247, 290, 290, 290, 290, 290, 290, 290, 290,
787 247, 139, 91, 248, 314, 315, 279, 668, 247, 184,
788 311, 247, 91, 605, 247, 250, 188, 188, 188, 188,
789 188, 189, 479, 251, 216, 216, 216, 216, 216, 216,
790 216, 216, 243, 243, 243, 243, 243, 243, 243, 243,
791 232, 232, 232, 233, 381, 381, 381, 250, 403, 70,
792 428, 252, 253, 252, 252, 252, 252, 252, 252, 213,
793 545, 668, 139, 256, 256, 256, 265, 214, 171, 171,
795 171, 171, 171, 171, 171, 171, 299, 299, 299, 299,
796 299, 299, 299, 299, 376, 366, 117, 339, 339, 339,
797 663, 213, 379, 379, 379, 215, 257, 215, 215, 258,
798 215, 215, 215, 274, 91, 362, 662, 410, 396, 396,
799 396, 275, 254, 254, 254, 254, 254, 254, 254, 254,
800 304, 304, 304, 304, 304, 304, 304, 304, 419, 419,
801 419, 329, 447, 377, 375, 274, 70, 467, 661, 276,
802 276, 276, 276, 276, 276, 276, 276, 236, 363, 139,
803 70, 291, 522, 70, 70, 393, 448, 394, 478, 292,
804 478, 239, 375, 139, 293, 395, 139, 139, 70, 339,
806 339, 339, 293, 407, 91, 293, 522, 370, 293, 293,
807 374, 139, 70, 291, 440, 440, 440, 294, 295, 294,
808 294, 294, 294, 294, 294, 139, 293, 401, 406, 293,
809 184, 311, 293, 70, 245, 248, 70, 316, 316, 316,
810 316, 316, 296, 296, 296, 70, 139, 70, 246, 139,
811 70, 297, 366, 376, 396, 396, 396, 91, 139, 297,
812 139, 408, 297, 139, 637, 297, 297, 338, 338, 338,
813 338, 338, 338, 338, 338, 297, 348, 364, 298, 402,
814 70, 70, 375, 297, 512, 364, 297, 556, 364, 297,
815 300, 364, 364, 139, 139, 557, 513, 245, 301, 429,
817 404, 364, 417, 70, 91, 368, 368, 368, 70, 364,
818 91, 246, 364, 526, 661, 364, 139, 397, 397, 397,
819 546, 139, 300, 70, 404, 298, 302, 303, 302, 302,
820 302, 302, 302, 302, 274, 455, 139, 527, 305, 305,
821 305, 370, 275, 241, 241, 241, 241, 241, 241, 241,
822 241, 365, 365, 365, 365, 365, 365, 365, 365, 636,
823 430, 441, 441, 441, 658, 371, 274, 650, 405, 532,
824 276, 306, 276, 276, 307, 276, 276, 276, 342, 372,
825 405, 405, 460, 460, 460, 657, 343, 252, 252, 252,
826 252, 252, 252, 252, 252, 378, 378, 378, 378, 378,
828 378, 378, 378, 471, 471, 471, 518, 518, 518, 465,
829 342, 456, 456, 456, 344, 344, 344, 344, 344, 344,
830 344, 344, 356, 356, 236, 356, 356, 356, 356, 356,
831 563, 356, 356, 356, 356, 70, 356, 356, 467, 369,
832 422, 364, 564, 356, 356, 356, 356, 369, 139, 364,
833 369, 70, 364, 369, 369, 364, 364, 457, 245, 70,
834 414, 414, 414, 369, 139, 364, 461, 268, 356, 356,
835 356, 369, 139, 364, 369, 369, 364, 369, 70, 364,
836 462, 465, 655, 369, 654, 265, 369, 358, 649, 369,
837 369, 139, 356, 356, 113, 232, 232, 232, 233, 369,
839 113, 113, 113, 113, 113, 113, 134, 369, 113, 113,
840 369, 245, 134, 369, 648, 113, 113, 423, 113, 380,
841 380, 380, 544, 392, 544, 246, 385, 385, 385, 385,
842 385, 338, 338, 338, 338, 338, 338, 338, 338, 70,
843 113, 117, 302, 302, 302, 302, 302, 302, 302, 302,
844 431, 431, 139, 461, 331, 370, 647, 91, 70, 70,
845 646, 366, 331, 70, 113, 113, 371, 462, 414, 414,
846 414, 139, 139, 371, 77, 136, 139, 576, 91, 665,
847 372, 136, 70, 373, 473, 265, 79, 372, 643, 577,
848 409, 373, 81, 265, 373, 139, 70, 373, 373, 294,
850 294, 294, 294, 294, 294, 294, 294, 373, 582, 139,
851 374, 432, 432, 482, 70, 373, 70, 465, 373, 91,
852 91, 373, 342, 418, 418, 418, 268, 139, 642, 139,
853 343, 365, 365, 365, 365, 365, 365, 365, 365, 378,
854 378, 378, 378, 378, 378, 378, 378, 468, 184, 498,
855 441, 441, 441, 499, 342, 70, 635, 70, 344, 382,
856 344, 344, 383, 344, 344, 344, 398, 70, 139, 366,
857 139, 622, 679, 70, 399, 474, 418, 418, 418, 92,
858 139, 70, 70, 375, 70, 475, 139, 86, 634, 630,
859 397, 397, 397, 88, 139, 139, 469, 139, 398, 70,
861 491, 536, 400, 400, 400, 400, 400, 400, 400, 400,
862 356, 356, 139, 356, 356, 356, 356, 356, 357, 356,
863 356, 356, 356, 483, 356, 356, 298, 492, 91, 70,
864 134, 412, 356, 356, 356, 376, 184, 311, 397, 397,
865 397, 496, 139, 426, 426, 426, 426, 426, 344, 344,
866 344, 344, 344, 344, 344, 344, 356, 356, 356, 439,
867 439, 439, 439, 439, 439, 439, 439, 400, 400, 400,
868 400, 400, 400, 400, 400, 413, 134, 613, 464, 664,
869 356, 356, 70, 245, 417, 444, 464, 519, 539, 464,
870 70, 444, 464, 464, 70, 139, 70, 246, 629, 136,
872 297, 520, 464, 139, 70, 371, 91, 139, 297, 139,
873 464, 297, 467, 464, 297, 297, 464, 139, 134, 441,
874 441, 441, 464, 556, 297, 621, 620, 298, 485, 555,
875 464, 70, 297, 464, 70, 297, 464, 464, 297, 371,
876 481, 481, 481, 484, 139, 540, 464, 139, 70, 70,
877 467, 585, 486, 372, 464, 374, 415, 464, 265, 134,
878 464, 139, 139, 689, 415, 70, 70, 415, 619, 70,
879 415, 415, 468, 472, 472, 472, 472, 472, 139, 139,
880 415, 490, 139, 416, 456, 456, 456, 136, 415, 70,
881 201, 415, 202, 416, 415, 398, 615, 91, 203, 70,
883 615, 553, 139, 399, 439, 439, 439, 439, 439, 439,
884 439, 439, 139, 70, 550, 467, 70, 548, 567, 268,
885 549, 495, 481, 481, 481, 523, 139, 398, 136, 139,
886 457, 400, 420, 400, 400, 421, 400, 400, 400, 449,
887 449, 548, 449, 449, 449, 449, 449, 92, 449, 449,
888 449, 449, 70, 449, 449, 631, 651, 524, 416, 70,
889 449, 449, 449, 449, 70, 139, 525, 533, 533, 533,
890 468, 70, 139, 481, 481, 481, 614, 139, 70, 631,
891 524, 533, 533, 533, 139, 449, 449, 449, 184, 311,
892 70, 139, 451, 584, 612, 558, 558, 558, 558, 558,
894 544, 392, 544, 139, 451, 451, 613, 596, 693, 449,
895 449, 356, 356, 534, 356, 356, 356, 356, 356, 495,
896 356, 356, 356, 356, 552, 356, 356, 534, 535, 91,
897 566, 158, 356, 356, 356, 356, 535, 70, 566, 535,
898 70, 566, 535, 535, 566, 566, 611, 560, 70, 610,
899 139, 70, 535, 139, 566, 134, 134, 356, 356, 356,
900 535, 139, 566, 535, 139, 566, 535, 590, 566, 579,
901 579, 579, 579, 579, 607, 392, 631, 260, 589, 632,
902 664, 356, 356, 356, 356, 461, 356, 356, 356, 356,
903 356, 639, 356, 356, 356, 356, 587, 356, 356, 70,
905 631, 70, 535, 633, 356, 356, 356, 356, 588, 670,
906 535, 519, 139, 535, 139, 640, 535, 535, 91, 693,
907 604, 671, 134, 603, 136, 136, 535, 602, 566, 356,
908 356, 356, 134, 609, 535, 644, 566, 535, 577, 566,
909 535, 631, 566, 566, 70, 588, 579, 579, 579, 579,
910 579, 134, 566, 356, 356, 461, 607, 139, 70, 645,
911 566, 638, 628, 566, 392, 631, 566, 184, 498, 462,
912 601, 139, 463, 685, 558, 558, 558, 558, 558, 134,
913 463, 134, 673, 463, 631, 631, 463, 463, 260, 631,
914 641, 136, 656, 653, 631, 134, 463, 631, 392, 659,
916 392, 540, 608, 627, 463, 392, 669, 463, 631, 631,
917 463, 371, 392, 631, 660, 134, 601, 653, 631, 673,
918 136, 631, 600, 666, 599, 372, 682, 653, 373, 653,
919 631, 598, 686, 134, 653, 693, 373, 597, 569, 373,
920 392, 653, 373, 373, 687, 569, 680, 667, 136, 567,
921 136, 653, 373, 653, 631, 374, 392, 392, 653, 596,
922 373, 564, 595, 373, 136, 653, 373, 449, 449, 653,
923 449, 449, 449, 449, 449, 450, 449, 449, 449, 449,
924 594, 449, 449, 134, 136, 653, 653, 593, 488, 449,
925 449, 449, 592, 653, 690, 693, 591, 693, 681, 392,
927 693, 693, 136, 392, 708, 693, 694, 686, 695, 653,
928 653, 696, 697, 449, 449, 449, 698, 392, 581, 693,
929 489, 580, 262, 693, 693, 693, 537, 536, 578, 575,
930 699, 574, 489, 489, 700, 701, 702, 449, 449, 356,
931 356, 573, 356, 356, 356, 356, 356, 357, 356, 356,
932 356, 356, 136, 356, 356, 572, 571, 570, 569, 105,
933 412, 356, 356, 356, 260, 567, 260, 693, 693, 260,
934 260, 693, 693, 693, 260, 565, 562, 561, 703, 704,
935 560, 559, 705, 706, 707, 356, 356, 356, 260, 511,
936 511, 509, 260, 260, 260, 509, 507, 507, 505, 505,
938 503, 503, 501, 501, 392, 551, 542, 541, 205, 356,
939 356, 356, 356, 198, 356, 356, 356, 356, 356, 357,
940 356, 356, 356, 356, 466, 356, 356, 538, 465, 536,
941 459, 92, 412, 356, 356, 356, 260, 260, 531, 530,
942 260, 260, 260, 529, 528, 444, 92, 517, 516, 515,
943 514, 434, 511, 509, 507, 505, 503, 356, 356, 356,
944 501, 187, 497, 493, 392, 477, 476, 74, 199, 470,
945 370, 366, 459, 454, 453, 452, 199, 443, 442, 438,
946 437, 356, 356, 70, 461, 436, 435, 205, 205, 199,
947 198, 198, 198, 320, 320, 318, 139, 318, 462, 187,
949 424, 494, 264, 392, 264, 384, 366, 355, 354, 494,
950 353, 352, 494, 351, 347, 494, 494, 346, 345, 335,
951 334, 333, 332, 329, 329, 494, 328, 327, 326, 325,
952 325, 324, 323, 494, 322, 321, 494, 320, 318, 494,
953 371, 311, 310, 265, 264, 262, 260, 199, 259, 117,
954 230, 229, 228, 199, 372, 225, 224, 415, 223, 222,
955 222, 221, 220, 219, 91, 415, 205, 204, 415, 198,
956 199, 415, 415, 198, 192, 184, 182, 137, 110, 105,
957 104, 415, 101, 100, 416, 91, 74, 710, 710, 415,
958 710, 710, 415, 710, 710, 415, 519, 710, 710, 710,
960 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
961 520, 710, 710, 521, 710, 710, 710, 710, 710, 710,
962 710, 521, 710, 710, 521, 710, 710, 521, 521, 710,
963 710, 710, 710, 710, 710, 710, 710, 521, 710, 710,
964 710, 710, 710, 710, 710, 521, 710, 710, 521, 710,
965 710, 521, 449, 449, 710, 449, 449, 449, 449, 449,
966 710, 449, 449, 449, 449, 710, 449, 449, 710, 710,
967 710, 710, 710, 449, 449, 449, 449, 710, 710, 710,
968 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
969 710, 710, 710, 710, 710, 710, 710, 710, 449, 449,
971 449, 710, 710, 710, 710, 710, 710, 710, 710, 710,
972 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
973 710, 710, 449, 449, 449, 449, 710, 449, 449, 449,
974 449, 449, 710, 449, 449, 449, 449, 710, 449, 449,
975 710, 710, 710, 710, 710, 449, 449, 449, 449, 710,
976 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
977 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
978 449, 449, 449, 710, 710, 710, 710, 451, 710, 710,
979 710, 710, 710, 710, 710, 710, 710, 710, 710, 451,
980 451, 710, 710, 710, 449, 449, 519, 710, 710, 710,
982 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
983 520, 710, 710, 547, 710, 710, 710, 710, 710, 710,
984 710, 547, 710, 710, 547, 710, 710, 547, 547, 710,
985 710, 710, 710, 710, 710, 710, 710, 547, 710, 710,
986 710, 710, 710, 710, 710, 547, 710, 710, 547, 710,
987 710, 547, 449, 449, 710, 449, 449, 449, 449, 449,
988 450, 449, 449, 449, 449, 710, 449, 449, 710, 710,
989 710, 710, 710, 488, 449, 449, 449, 710, 710, 710,
990 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
991 710, 710, 710, 710, 710, 710, 710, 710, 449, 449,
993 449, 710, 710, 710, 710, 710, 710, 710, 710, 710,
994 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
995 710, 710, 449, 449, 449, 449, 710, 449, 449, 449,
996 449, 449, 450, 449, 449, 449, 449, 710, 449, 449,
997 710, 710, 710, 710, 710, 488, 449, 449, 449, 710,
998 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
999 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1000 449, 449, 449, 710, 710, 710, 710, 489, 710, 710,
1001 710, 710, 710, 710, 710, 710, 710, 710, 710, 489,
1002 489, 710, 710, 710, 449, 449, 616, 616, 710, 616,
1004 616, 616, 616, 616, 710, 616, 616, 616, 616, 710,
1005 616, 616, 710, 710, 710, 710, 710, 616, 616, 616,
1006 616, 710, 710, 710, 710, 710, 710, 618, 710, 710,
1007 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1008 710, 710, 616, 616, 616, 710, 710, 710, 710, 710,
1009 710, 618, 710, 710, 710, 710, 710, 710, 710, 710,
1010 710, 710, 710, 710, 710, 710, 616, 616, 616, 616,
1011 710, 616, 616, 616, 616, 616, 617, 616, 616, 616,
1012 616, 710, 616, 616, 710, 710, 710, 710, 710, 625,
1013 616, 616, 616, 710, 710, 710, 710, 710, 710, 626,
1015 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1016 710, 710, 710, 710, 616, 616, 616, 710, 710, 710,
1017 710, 710, 710, 626, 710, 710, 710, 710, 710, 710,
1018 710, 710, 710, 710, 710, 710, 710, 710, 616, 616,
1019 616, 616, 710, 616, 616, 616, 616, 616, 710, 616,
1020 616, 616, 616, 710, 616, 616, 710, 710, 710, 710,
1021 710, 616, 616, 616, 616, 710, 710, 710, 710, 710,
1022 710, 618, 710, 710, 710, 710, 710, 710, 710, 710,
1023 710, 710, 710, 710, 710, 710, 616, 616, 616, 710,
1024 710, 710, 710, 710, 710, 618, 710, 710, 710, 710,
1026 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1027 616, 616, 616, 616, 710, 616, 616, 616, 616, 616,
1028 617, 616, 616, 616, 616, 710, 616, 616, 710, 710,
1029 710, 710, 710, 625, 616, 616, 616, 710, 710, 710,
1030 710, 710, 710, 626, 710, 710, 710, 710, 710, 710,
1031 710, 710, 710, 710, 710, 710, 710, 710, 616, 616,
1032 616, 710, 710, 710, 710, 710, 710, 626, 710, 710,
1033 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1034 710, 710, 616, 616, 70, 710, 710, 70, 70, 710,
1035 710, 70, 70, 70, 70, 70, 71, 71, 71, 71,
1037 71, 710, 71, 71, 71, 71, 71, 71, 71, 71,
1038 71, 90, 90, 90, 90, 90, 90, 90, 90, 90,
1039 90, 90, 90, 90, 90, 90, 116, 116, 116, 116,
1040 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
1041 116, 133, 133, 133, 133, 133, 133, 133, 133, 133,
1042 133, 133, 133, 133, 133, 133, 138, 710, 710, 138,
1043 138, 138, 710, 138, 138, 138, 138, 138, 183, 183,
1044 183, 183, 183, 710, 183, 183, 183, 183, 183, 183,
1045 183, 183, 183, 185, 185, 185, 185, 185, 185, 185,
1046 185, 185, 185, 185, 185, 185, 185, 185, 200, 200,
1048 710, 710, 710, 710, 710, 710, 710, 200, 200, 200,
1049 200, 200, 113, 113, 113, 113, 113, 113, 113, 113,
1050 113, 113, 113, 113, 113, 113, 113, 234, 234, 234,
1051 234, 234, 234, 234, 234, 234, 234, 234, 234, 234,
1052 234, 234, 134, 134, 134, 134, 134, 134, 134, 134,
1053 134, 134, 134, 134, 134, 134, 134, 263, 263, 263,
1054 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
1055 263, 263, 270, 270, 270, 270, 270, 270, 270, 270,
1056 270, 270, 270, 270, 270, 270, 270, 185, 185, 185,
1057 185, 185, 185, 185, 185, 185, 185, 185, 185, 185,
1059 185, 185, 186, 186, 186, 186, 186, 186, 186, 186,
1060 186, 186, 186, 186, 186, 186, 186, 313, 313, 313,
1061 313, 313, 313, 313, 313, 313, 313, 313, 313, 313,
1062 313, 313, 317, 317, 710, 317, 317, 317, 317, 317,
1063 317, 317, 317, 317, 317, 317, 317, 319, 319, 710,
1064 319, 319, 319, 319, 319, 319, 319, 319, 319, 319,
1065 319, 319, 357, 357, 710, 357, 357, 357, 357, 357,
1066 357, 357, 357, 357, 357, 357, 357, 359, 359, 359,
1067 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
1068 359, 359, 113, 113, 113, 113, 113, 113, 113, 113,
1070 113, 113, 113, 113, 113, 113, 113, 361, 361, 361,
1071 361, 361, 361, 361, 361, 361, 361, 361, 361, 361,
1072 361, 361, 234, 234, 234, 234, 234, 234, 234, 234,
1073 234, 234, 234, 234, 234, 234, 234, 369, 710, 710,
1074 369, 710, 369, 369, 710, 710, 369, 369, 263, 263,
1075 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
1076 263, 263, 263, 391, 391, 391, 391, 391, 391, 391,
1077 391, 391, 391, 391, 391, 391, 391, 391, 270, 270,
1078 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
1079 270, 270, 270, 90, 90, 90, 90, 90, 90, 90,
1081 90, 90, 90, 90, 90, 90, 90, 90, 411, 411,
1082 710, 411, 411, 411, 411, 411, 411, 411, 411, 411,
1083 411, 411, 411, 313, 313, 313, 313, 313, 313, 313,
1084 313, 313, 313, 313, 313, 313, 313, 313, 425, 425,
1085 425, 425, 710, 425, 425, 425, 425, 425, 425, 425,
1086 425, 425, 425, 183, 183, 183, 183, 183, 183, 183,
1087 183, 183, 183, 183, 183, 183, 183, 183, 317, 317,
1088 710, 317, 317, 317, 317, 317, 317, 317, 317, 317,
1089 317, 317, 317, 319, 319, 710, 319, 319, 319, 319,
1090 319, 319, 319, 319, 319, 319, 319, 319, 439, 710,
1092 439, 710, 710, 710, 439, 439, 439, 450, 450, 710,
1093 450, 450, 450, 450, 450, 450, 450, 450, 450, 450,
1094 450, 450, 356, 356, 710, 356, 356, 356, 356, 356,
1095 356, 356, 356, 356, 356, 356, 356, 357, 357, 710,
1096 357, 357, 357, 357, 357, 357, 357, 357, 357, 357,
1097 357, 357, 359, 359, 359, 359, 359, 359, 359, 359,
1098 359, 359, 359, 359, 359, 359, 359, 361, 361, 361,
1099 361, 361, 361, 361, 361, 361, 361, 361, 361, 361,
1100 361, 361, 113, 113, 113, 113, 113, 113, 113, 113,
1101 113, 113, 113, 113, 113, 113, 113, 458, 458, 458,
1103 458, 458, 458, 458, 458, 458, 458, 458, 458, 458,
1104 458, 458, 464, 710, 710, 710, 710, 464, 464, 710,
1105 710, 464, 464, 391, 391, 391, 391, 391, 391, 391,
1106 391, 391, 391, 391, 391, 391, 391, 391, 90, 90,
1107 90, 90, 90, 90, 90, 90, 90, 90, 90, 90,
1108 90, 90, 90, 487, 487, 710, 487, 487, 487, 487,
1109 487, 487, 487, 487, 487, 487, 487, 487, 411, 411,
1110 710, 411, 411, 411, 411, 411, 411, 411, 411, 411,
1111 411, 411, 411, 425, 425, 425, 425, 710, 425, 425,
1112 425, 425, 425, 425, 425, 425, 425, 425, 183, 183,
1114 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
1115 183, 183, 183, 500, 500, 710, 500, 500, 500, 500,
1116 500, 500, 500, 500, 500, 500, 500, 500, 502, 502,
1117 710, 502, 502, 502, 502, 502, 502, 502, 502, 502,
1118 502, 502, 502, 504, 504, 710, 504, 504, 504, 504,
1119 504, 504, 504, 504, 504, 504, 504, 504, 506, 506,
1120 710, 506, 506, 506, 506, 506, 506, 506, 506, 506,
1121 506, 506, 506, 508, 508, 710, 508, 508, 508, 508,
1122 508, 508, 508, 508, 508, 508, 508, 508, 510, 510,
1123 710, 510, 510, 510, 510, 510, 510, 510, 510, 510,
1125 510, 510, 510, 449, 449, 710, 449, 449, 449, 449,
1126 449, 449, 449, 449, 449, 449, 449, 449, 450, 450,
1127 710, 450, 450, 450, 450, 450, 450, 450, 450, 450,
1128 450, 450, 450, 359, 359, 359, 359, 359, 359, 359,
1129 359, 359, 359, 359, 359, 359, 359, 359, 113, 113,
1130 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
1131 113, 113, 113, 458, 458, 458, 458, 458, 458, 458,
1132 458, 458, 458, 458, 458, 458, 458, 458, 535, 710,
1133 710, 710, 710, 535, 535, 710, 710, 535, 543, 543,
1134 543, 543, 543, 543, 543, 543, 543, 543, 543, 543,
1136 543, 543, 543, 90, 90, 90, 90, 90, 90, 90,
1137 90, 90, 90, 90, 90, 90, 90, 90, 487, 487,
1138 710, 487, 487, 487, 487, 487, 487, 487, 487, 487,
1139 487, 487, 487, 554, 554, 554, 554, 554, 554, 554,
1140 554, 554, 554, 554, 554, 554, 554, 554, 566, 710,
1141 710, 710, 710, 566, 566, 710, 710, 566, 568, 568,
1142 710, 568, 568, 568, 568, 568, 568, 568, 568, 568,
1143 568, 568, 568, 586, 586, 586, 586, 586, 586, 586,
1144 586, 586, 586, 586, 586, 586, 586, 586, 617, 617,
1145 710, 617, 617, 617, 617, 617, 617, 617, 617, 617,
1147 617, 617, 617, 624, 624, 710, 624, 624, 624, 624,
1148 624, 624, 624, 624, 624, 624, 624, 624, 616, 616,
1149 710, 616, 616, 616, 616, 616, 616, 616, 616, 616,
1150 616, 616, 616, 652, 652, 652, 652, 652, 652, 652,
1151 652, 652, 652, 652, 652, 652, 652, 652, 674, 674,
1152 674, 674, 674, 674, 674, 674, 674, 674, 674, 674,
1153 674, 674, 674, 677, 677, 677, 677, 677, 677, 677,
1154 677, 677, 677, 677, 677, 677, 677, 677, 692, 692,
1155 692, 692, 692, 692, 692, 692, 692, 692, 692, 692,
1156 692, 692, 692, 3, 710, 710, 710, 710, 710, 710,
1158 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1159 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1160 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1161 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1162 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1163 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1164 710, 710, 710, 710, 710, 710
1167 static yyconst short int yy_chk[4467] =
1169 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1170 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1171 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1172 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1173 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1174 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1175 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1176 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
1177 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1178 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1180 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1181 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1182 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1183 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1184 2, 2, 2, 2, 5, 6, 6, 6, 6, 6,
1185 8, 10, 10, 11, 18, 23, 708, 8, 8, 8,
1186 8, 8, 19, 11, 34, 11, 11, 34, 5, 34,
1187 36, 11, 12, 12, 12, 36, 233, 31, 18, 12,
1188 23, 31, 40, 19, 12, 12, 12, 12, 12, 12,
1189 12, 12, 12, 22, 25, 40, 12, 12, 12, 12,
1191 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
1192 12, 12, 12, 12, 12, 12, 12, 37, 19, 233,
1193 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
1194 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
1195 12, 13, 27, 33, 25, 33, 264, 33, 24, 22,
1196 25, 13, 46, 13, 264, 32, 32, 24, 32, 13,
1197 15, 43, 44, 44, 51, 46, 37, 72, 72, 32,
1198 15, 43, 15, 43, 15, 15, 15, 51, 15, 43,
1199 35, 15, 24, 24, 24, 24, 24, 24, 24, 24,
1200 47, 74, 688, 35, 60, 27, 27, 35, 60, 35,
1202 46, 27, 15, 47, 35, 51, 15, 15, 15, 15,
1203 15, 15, 15, 15, 49, 52, 15, 28, 28, 28,
1204 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
1205 28, 28, 28, 38, 55, 49, 78, 78, 28, 28,
1206 28, 28, 50, 82, 82, 82, 47, 38, 38, 38,
1207 38, 38, 74, 65, 48, 50, 41, 57, 65, 56,
1208 583, 41, 57, 28, 28, 28, 41, 48, 41, 41,
1209 49, 52, 56, 53, 41, 57, 684, 62, 53, 62,
1210 86, 62, 86, 48, 55, 115, 53, 28, 28, 29,
1211 55, 138, 133, 29, 29, 29, 50, 29, 61, 61,
1213 66, 61, 38, 53, 138, 66, 77, 48, 77, 145,
1214 57, 57, 61, 66, 77, 63, 57, 56, 63, 115,
1215 63, 29, 145, 64, 583, 29, 29, 29, 29, 29,
1216 29, 29, 29, 30, 147, 147, 64, 30, 30, 30,
1217 64, 30, 64, 83, 83, 83, 206, 64, 69, 69,
1218 69, 69, 69, 683, 66, 83, 206, 83, 85, 85,
1219 85, 133, 677, 83, 206, 30, 98, 98, 98, 30,
1220 30, 30, 30, 30, 30, 30, 30, 42, 42, 42,
1221 108, 108, 108, 676, 42, 122, 122, 122, 674, 42,
1222 42, 42, 42, 42, 42, 42, 42, 42, 129, 129,
1224 129, 42, 42, 42, 42, 42, 42, 42, 42, 42,
1225 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
1226 42, 42, 151, 151, 151, 42, 42, 42, 42, 42,
1227 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
1228 42, 42, 42, 42, 42, 42, 45, 183, 183, 142,
1229 546, 45, 184, 184, 67, 327, 45, 327, 45, 672,
1230 45, 45, 45, 142, 45, 67, 73, 45, 67, 67,
1231 67, 67, 67, 73, 73, 73, 73, 73, 73, 93,
1232 93, 93, 93, 93, 93, 93, 93, 146, 45, 109,
1233 109, 109, 45, 45, 45, 45, 45, 45, 45, 45,
1235 146, 141, 45, 54, 92, 546, 92, 213, 87, 141,
1236 54, 159, 92, 331, 141, 213, 54, 92, 87, 54,
1237 87, 185, 185, 67, 159, 140, 87, 331, 92, 155,
1238 92, 187, 187, 140, 140, 670, 92, 109, 140, 213,
1239 92, 159, 155, 248, 54, 54, 54, 54, 54, 54,
1240 54, 54, 58, 606, 130, 130, 130, 58, 177, 177,
1241 177, 58, 58, 58, 155, 58, 94, 94, 94, 94,
1242 94, 94, 94, 94, 96, 96, 96, 96, 96, 96,
1243 96, 96, 162, 162, 162, 211, 211, 211, 247, 58,
1244 130, 152, 248, 58, 58, 58, 58, 58, 58, 58,
1246 58, 59, 231, 370, 152, 59, 59, 59, 606, 59,
1247 97, 97, 97, 97, 97, 97, 97, 97, 118, 118,
1248 118, 118, 118, 118, 118, 118, 212, 212, 212, 374,
1249 162, 247, 152, 59, 153, 154, 231, 59, 59, 59,
1250 59, 59, 59, 59, 59, 95, 359, 153, 154, 215,
1251 215, 215, 370, 95, 120, 120, 120, 120, 120, 120,
1252 120, 120, 121, 121, 121, 121, 121, 121, 121, 121,
1253 216, 216, 216, 217, 217, 217, 154, 95, 374, 153,
1254 359, 95, 95, 95, 95, 95, 95, 95, 95, 114,
1255 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
1257 114, 114, 114, 114, 114, 664, 222, 235, 235, 235,
1258 114, 114, 114, 114, 124, 124, 124, 124, 124, 124,
1259 124, 124, 126, 126, 126, 126, 126, 126, 126, 126,
1260 222, 690, 135, 270, 270, 114, 114, 114, 127, 127,
1261 127, 127, 127, 127, 127, 127, 135, 135, 135, 135,
1262 135, 135, 312, 312, 222, 241, 241, 241, 663, 114,
1263 114, 116, 116, 116, 116, 116, 143, 116, 116, 116,
1264 116, 116, 116, 148, 143, 116, 116, 144, 157, 143,
1265 156, 160, 116, 116, 158, 116, 148, 144, 347, 144,
1266 165, 157, 164, 156, 160, 144, 395, 158, 181, 163,
1268 690, 135, 274, 165, 662, 164, 348, 116, 116, 181,
1269 274, 160, 163, 161, 148, 148, 148, 148, 148, 148,
1270 148, 148, 161, 161, 161, 598, 161, 249, 249, 249,
1271 348, 116, 116, 119, 274, 157, 179, 119, 180, 156,
1272 163, 164, 158, 165, 170, 119, 347, 119, 598, 179,
1273 119, 180, 337, 170, 170, 170, 395, 170, 119, 223,
1274 337, 119, 360, 267, 119, 119, 465, 181, 267, 119,
1275 268, 223, 223, 119, 119, 119, 119, 119, 119, 119,
1276 119, 267, 119, 268, 337, 119, 242, 658, 119, 123,
1277 179, 178, 180, 242, 242, 242, 360, 123, 123, 123,
1279 178, 178, 178, 123, 178, 394, 123, 262, 150, 252,
1280 252, 252, 262, 262, 123, 465, 168, 123, 280, 325,
1281 123, 123, 166, 166, 166, 166, 166, 166, 166, 166,
1282 123, 280, 479, 123, 313, 313, 178, 655, 123, 188,
1283 188, 123, 582, 582, 123, 125, 188, 188, 188, 188,
1284 188, 188, 394, 125, 150, 150, 150, 150, 150, 150,
1285 150, 150, 168, 168, 168, 168, 168, 168, 168, 168,
1286 232, 232, 232, 232, 255, 255, 255, 125, 280, 288,
1287 325, 125, 125, 125, 125, 125, 125, 125, 125, 128,
1288 479, 654, 288, 128, 128, 128, 174, 128, 169, 169,
1290 169, 169, 169, 169, 169, 169, 172, 172, 172, 172,
1291 172, 172, 172, 172, 258, 253, 232, 258, 258, 258,
1292 649, 128, 253, 253, 253, 128, 128, 128, 128, 128,
1293 128, 128, 128, 149, 272, 361, 648, 288, 299, 299,
1294 299, 149, 174, 174, 174, 174, 174, 174, 174, 174,
1295 175, 175, 175, 175, 175, 175, 175, 175, 304, 304,
1296 304, 269, 349, 258, 369, 149, 269, 373, 647, 149,
1297 149, 149, 149, 149, 149, 149, 149, 167, 361, 269,
1298 266, 167, 443, 283, 278, 266, 349, 272, 392, 167,
1299 392, 167, 257, 266, 167, 272, 283, 278, 284, 257,
1301 257, 257, 167, 284, 623, 167, 443, 369, 167, 167,
1302 373, 284, 286, 167, 338, 338, 338, 167, 167, 167,
1303 167, 167, 167, 167, 167, 286, 167, 278, 283, 167,
1304 189, 189, 167, 171, 171, 257, 279, 189, 189, 189,
1305 189, 189, 171, 171, 171, 273, 171, 298, 171, 279,
1306 293, 171, 293, 298, 273, 273, 273, 480, 273, 171,
1307 298, 286, 171, 293, 623, 171, 171, 214, 214, 214,
1308 214, 214, 214, 214, 214, 171, 281, 236, 171, 279,
1309 297, 281, 297, 171, 434, 236, 171, 497, 236, 171,
1310 173, 236, 236, 297, 281, 497, 434, 243, 173, 329,
1312 281, 236, 298, 396, 622, 243, 243, 243, 276, 236,
1313 636, 243, 236, 446, 646, 236, 396, 276, 276, 276,
1314 480, 276, 173, 282, 281, 297, 173, 173, 173, 173,
1315 173, 173, 173, 173, 176, 455, 282, 446, 176, 176,
1316 176, 243, 176, 237, 237, 237, 237, 237, 237, 237,
1317 237, 238, 238, 238, 238, 238, 238, 238, 238, 622,
1318 329, 344, 344, 344, 643, 368, 176, 636, 282, 455,
1319 176, 176, 176, 176, 176, 176, 176, 176, 218, 368,
1320 282, 282, 365, 365, 365, 642, 218, 250, 250, 250,
1321 250, 250, 250, 250, 250, 251, 251, 251, 251, 251,
1323 251, 251, 251, 378, 378, 378, 439, 439, 439, 368,
1324 218, 362, 362, 362, 218, 218, 218, 218, 218, 218,
1325 218, 218, 230, 230, 239, 230, 230, 230, 230, 230,
1326 516, 230, 230, 230, 230, 308, 230, 230, 464, 245,
1327 308, 239, 516, 230, 230, 230, 230, 245, 308, 239,
1328 245, 294, 239, 245, 245, 239, 239, 362, 246, 393,
1329 294, 294, 294, 245, 294, 239, 460, 393, 230, 230,
1330 230, 245, 393, 239, 245, 246, 239, 245, 397, 239,
1331 460, 464, 640, 246, 639, 275, 246, 230, 635, 246,
1332 246, 397, 230, 230, 234, 234, 234, 234, 234, 246,
1334 234, 234, 234, 234, 234, 234, 309, 246, 234, 234,
1335 246, 254, 261, 246, 634, 234, 234, 309, 234, 254,
1336 254, 254, 478, 478, 478, 254, 261, 261, 261, 261,
1337 261, 275, 275, 275, 275, 275, 275, 275, 275, 287,
1338 234, 234, 300, 300, 300, 300, 300, 300, 300, 300,
1339 330, 593, 287, 471, 330, 254, 633, 545, 291, 295,
1340 632, 295, 330, 401, 234, 234, 244, 471, 295, 295,
1341 295, 291, 295, 380, 387, 309, 401, 530, 651, 651,
1342 244, 261, 406, 244, 387, 292, 387, 380, 630, 530,
1343 287, 244, 387, 301, 244, 406, 407, 244, 244, 291,
1345 291, 291, 291, 291, 291, 291, 291, 244, 545, 407,
1346 244, 330, 593, 401, 302, 244, 417, 380, 244, 605,
1347 665, 244, 256, 302, 302, 302, 407, 302, 629, 417,
1348 256, 292, 292, 292, 292, 292, 292, 292, 292, 301,
1349 301, 301, 301, 301, 301, 301, 301, 383, 426, 426,
1350 383, 383, 383, 426, 256, 409, 621, 495, 256, 256,
1351 256, 256, 256, 256, 256, 256, 277, 303, 409, 303,
1352 495, 605, 665, 402, 277, 388, 303, 303, 303, 482,
1353 303, 306, 410, 306, 482, 388, 402, 388, 620, 614,
1354 306, 306, 306, 388, 306, 410, 383, 482, 277, 494,
1356 409, 494, 277, 277, 277, 277, 277, 277, 277, 277,
1357 289, 289, 494, 289, 289, 289, 289, 289, 289, 289,
1358 289, 289, 289, 402, 289, 289, 306, 410, 650, 307,
1359 423, 289, 289, 289, 289, 307, 316, 316, 307, 307,
1360 307, 423, 307, 316, 316, 316, 316, 316, 342, 342,
1361 342, 342, 342, 342, 342, 342, 289, 289, 289, 343,
1362 343, 343, 343, 343, 343, 343, 343, 398, 398, 398,
1363 398, 398, 398, 398, 398, 289, 472, 612, 371, 650,
1364 289, 289, 290, 290, 307, 403, 371, 518, 472, 371,
1365 403, 484, 371, 371, 550, 290, 484, 290, 611, 423,
1367 290, 518, 371, 403, 404, 372, 685, 550, 290, 484,
1368 371, 290, 382, 371, 290, 290, 371, 404, 496, 382,
1369 382, 382, 372, 610, 290, 604, 603, 290, 404, 496,
1370 372, 400, 290, 372, 408, 290, 372, 372, 290, 296,
1371 400, 400, 400, 403, 400, 472, 372, 408, 415, 491,
1372 415, 550, 404, 296, 372, 382, 296, 372, 399, 385,
1373 372, 415, 491, 685, 296, 422, 416, 296, 602, 486,
1374 296, 296, 416, 385, 385, 385, 385, 385, 422, 416,
1375 296, 408, 486, 296, 456, 456, 456, 496, 296, 483,
1376 474, 296, 474, 415, 296, 305, 600, 637, 474, 485,
1378 599, 491, 483, 305, 399, 399, 399, 399, 399, 399,
1379 399, 399, 485, 420, 486, 420, 547, 483, 547, 422,
1380 485, 416, 420, 420, 420, 444, 420, 305, 385, 547,
1381 456, 305, 305, 305, 305, 305, 305, 305, 305, 350,
1382 350, 483, 350, 350, 350, 350, 350, 492, 350, 350,
1383 350, 350, 492, 350, 350, 615, 637, 444, 420, 549,
1384 350, 350, 350, 350, 421, 492, 444, 459, 459, 459,
1385 421, 490, 549, 421, 421, 421, 597, 421, 588, 615,
1386 444, 533, 533, 533, 490, 350, 350, 350, 499, 499,
1387 548, 588, 350, 549, 596, 499, 499, 499, 499, 499,
1389 544, 544, 544, 548, 350, 350, 596, 595, 691, 350,
1390 350, 357, 357, 459, 357, 357, 357, 357, 357, 421,
1391 357, 357, 357, 357, 490, 357, 357, 533, 461, 689,
1392 519, 548, 357, 357, 357, 357, 461, 553, 519, 461,
1393 584, 519, 461, 461, 519, 519, 594, 592, 627, 591,
1394 553, 552, 461, 584, 519, 539, 555, 357, 357, 357,
1395 461, 627, 519, 461, 552, 519, 461, 555, 519, 539,
1396 539, 539, 539, 539, 584, 586, 616, 691, 553, 618,
1397 689, 357, 357, 358, 358, 462, 358, 358, 358, 358,
1398 358, 626, 358, 358, 358, 358, 552, 358, 358, 585,
1400 616, 587, 462, 618, 358, 358, 358, 358, 552, 657,
1401 462, 520, 585, 462, 587, 626, 462, 462, 679, 692,
1402 581, 657, 590, 580, 539, 555, 462, 578, 520, 358,
1403 358, 358, 579, 590, 462, 631, 520, 462, 576, 520,
1404 462, 631, 520, 520, 589, 587, 579, 579, 579, 579,
1405 579, 609, 520, 358, 358, 367, 585, 589, 608, 631,
1406 520, 625, 609, 520, 638, 631, 520, 558, 558, 367,
1407 575, 608, 367, 679, 558, 558, 558, 558, 558, 628,
1408 367, 641, 659, 367, 659, 645, 367, 367, 692, 625,
1409 628, 590, 641, 638, 644, 656, 367, 660, 652, 644,
1411 653, 579, 589, 608, 367, 680, 656, 367, 659, 645,
1412 367, 381, 666, 625, 645, 669, 574, 638, 644, 660,
1413 609, 660, 573, 653, 572, 381, 669, 652, 381, 653,
1414 673, 571, 680, 682, 680, 707, 381, 570, 569, 381,
1415 667, 666, 381, 381, 682, 568, 666, 653, 628, 566,
1416 641, 652, 381, 653, 673, 381, 681, 686, 680, 565,
1417 381, 563, 562, 381, 656, 666, 381, 405, 405, 667,
1418 405, 405, 405, 405, 405, 405, 405, 405, 405, 405,
1419 561, 405, 405, 687, 669, 681, 686, 560, 405, 405,
1420 405, 405, 559, 667, 687, 693, 557, 694, 667, 554,
1422 695, 696, 682, 551, 707, 697, 693, 681, 694, 681,
1423 686, 695, 696, 405, 405, 405, 697, 543, 542, 698,
1424 405, 541, 540, 699, 700, 701, 538, 535, 531, 529,
1425 698, 528, 405, 405, 699, 700, 701, 405, 405, 411,
1426 411, 527, 411, 411, 411, 411, 411, 411, 411, 411,
1427 411, 411, 687, 411, 411, 526, 525, 524, 523, 522,
1428 411, 411, 411, 411, 693, 521, 694, 702, 703, 695,
1429 696, 704, 705, 706, 697, 517, 515, 514, 702, 703,
1430 513, 512, 704, 705, 706, 411, 411, 411, 698, 511,
1431 510, 509, 699, 700, 701, 508, 507, 506, 505, 504,
1433 503, 502, 501, 500, 493, 488, 477, 476, 475, 411,
1434 411, 413, 413, 473, 413, 413, 413, 413, 413, 413,
1435 413, 413, 413, 413, 470, 413, 413, 468, 467, 463,
1436 458, 454, 413, 413, 413, 413, 702, 703, 453, 452,
1437 704, 705, 706, 448, 447, 445, 442, 438, 437, 436,
1438 435, 433, 432, 431, 430, 429, 428, 413, 413, 413,
1439 427, 425, 424, 412, 391, 390, 389, 386, 384, 376,
1440 375, 364, 363, 355, 354, 353, 352, 346, 345, 335,
1441 334, 413, 413, 414, 414, 333, 332, 328, 326, 324,
1442 323, 322, 321, 320, 319, 318, 414, 317, 414, 314,
1444 310, 414, 271, 265, 263, 259, 240, 229, 228, 414,
1445 227, 225, 414, 224, 221, 414, 414, 220, 219, 210,
1446 209, 208, 207, 205, 204, 414, 203, 202, 201, 198,
1447 197, 196, 195, 414, 194, 193, 414, 191, 190, 414,
1448 419, 186, 182, 139, 137, 136, 134, 132, 131, 113,
1449 112, 111, 110, 107, 419, 106, 105, 419, 104, 103,
1450 102, 101, 100, 99, 90, 419, 88, 84, 419, 81,
1451 80, 419, 419, 79, 76, 71, 68, 39, 26, 21,
1452 20, 419, 17, 16, 419, 14, 9, 3, 0, 419,
1453 0, 0, 419, 0, 0, 419, 441, 0, 0, 0,
1455 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1456 441, 0, 0, 441, 0, 0, 0, 0, 0, 0,
1457 0, 441, 0, 0, 441, 0, 0, 441, 441, 0,
1458 0, 0, 0, 0, 0, 0, 0, 441, 0, 0,
1459 0, 0, 0, 0, 0, 441, 0, 0, 441, 0,
1460 0, 441, 450, 450, 0, 450, 450, 450, 450, 450,
1461 0, 450, 450, 450, 450, 0, 450, 450, 0, 0,
1462 0, 0, 0, 450, 450, 450, 450, 0, 0, 0,
1463 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1464 0, 0, 0, 0, 0, 0, 0, 0, 450, 450,
1466 450, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1467 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1468 0, 0, 450, 450, 451, 451, 0, 451, 451, 451,
1469 451, 451, 0, 451, 451, 451, 451, 0, 451, 451,
1470 0, 0, 0, 0, 0, 451, 451, 451, 451, 0,
1471 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1472 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1473 451, 451, 451, 0, 0, 0, 0, 451, 0, 0,
1474 0, 0, 0, 0, 0, 0, 0, 0, 0, 451,
1475 451, 0, 0, 0, 451, 451, 481, 0, 0, 0,
1477 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1478 481, 0, 0, 481, 0, 0, 0, 0, 0, 0,
1479 0, 481, 0, 0, 481, 0, 0, 481, 481, 0,
1480 0, 0, 0, 0, 0, 0, 0, 481, 0, 0,
1481 0, 0, 0, 0, 0, 481, 0, 0, 481, 0,
1482 0, 481, 487, 487, 0, 487, 487, 487, 487, 487,
1483 487, 487, 487, 487, 487, 0, 487, 487, 0, 0,
1484 0, 0, 0, 487, 487, 487, 487, 0, 0, 0,
1485 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1486 0, 0, 0, 0, 0, 0, 0, 0, 487, 487,
1488 487, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1489 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1490 0, 0, 487, 487, 489, 489, 0, 489, 489, 489,
1491 489, 489, 489, 489, 489, 489, 489, 0, 489, 489,
1492 0, 0, 0, 0, 0, 489, 489, 489, 489, 0,
1493 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1494 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1495 489, 489, 489, 0, 0, 0, 0, 489, 0, 0,
1496 0, 0, 0, 0, 0, 0, 0, 0, 0, 489,
1497 489, 0, 0, 0, 489, 489, 601, 601, 0, 601,
1499 601, 601, 601, 601, 0, 601, 601, 601, 601, 0,
1500 601, 601, 0, 0, 0, 0, 0, 601, 601, 601,
1501 601, 0, 0, 0, 0, 0, 0, 601, 0, 0,
1502 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1503 0, 0, 601, 601, 601, 0, 0, 0, 0, 0,
1504 0, 601, 0, 0, 0, 0, 0, 0, 0, 0,
1505 0, 0, 0, 0, 0, 0, 601, 601, 607, 607,
1506 0, 607, 607, 607, 607, 607, 607, 607, 607, 607,
1507 607, 0, 607, 607, 0, 0, 0, 0, 0, 607,
1508 607, 607, 607, 0, 0, 0, 0, 0, 0, 607,
1510 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1511 0, 0, 0, 0, 607, 607, 607, 0, 0, 0,
1512 0, 0, 0, 607, 0, 0, 0, 0, 0, 0,
1513 0, 0, 0, 0, 0, 0, 0, 0, 607, 607,
1514 617, 617, 0, 617, 617, 617, 617, 617, 0, 617,
1515 617, 617, 617, 0, 617, 617, 0, 0, 0, 0,
1516 0, 617, 617, 617, 617, 0, 0, 0, 0, 0,
1517 0, 617, 0, 0, 0, 0, 0, 0, 0, 0,
1518 0, 0, 0, 0, 0, 0, 617, 617, 617, 0,
1519 0, 0, 0, 0, 0, 617, 0, 0, 0, 0,
1521 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1522 617, 617, 624, 624, 0, 624, 624, 624, 624, 624,
1523 624, 624, 624, 624, 624, 0, 624, 624, 0, 0,
1524 0, 0, 0, 624, 624, 624, 624, 0, 0, 0,
1525 0, 0, 0, 624, 0, 0, 0, 0, 0, 0,
1526 0, 0, 0, 0, 0, 0, 0, 0, 624, 624,
1527 624, 0, 0, 0, 0, 0, 0, 624, 0, 0,
1528 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1529 0, 0, 624, 624, 711, 0, 0, 711, 711, 0,
1530 0, 711, 711, 711, 711, 711, 712, 712, 712, 712,
1532 712, 0, 712, 712, 712, 712, 712, 712, 712, 712,
1533 712, 713, 713, 713, 713, 713, 713, 713, 713, 713,
1534 713, 713, 713, 713, 713, 713, 714, 714, 714, 714,
1535 714, 714, 714, 714, 714, 714, 714, 714, 714, 714,
1536 714, 715, 715, 715, 715, 715, 715, 715, 715, 715,
1537 715, 715, 715, 715, 715, 715, 716, 0, 0, 716,
1538 716, 716, 0, 716, 716, 716, 716, 716, 717, 717,
1539 717, 717, 717, 0, 717, 717, 717, 717, 717, 717,
1540 717, 717, 717, 718, 718, 718, 718, 718, 718, 718,
1541 718, 718, 718, 718, 718, 718, 718, 718, 719, 719,
1543 0, 0, 0, 0, 0, 0, 0, 719, 719, 719,
1544 719, 719, 720, 720, 720, 720, 720, 720, 720, 720,
1545 720, 720, 720, 720, 720, 720, 720, 721, 721, 721,
1546 721, 721, 721, 721, 721, 721, 721, 721, 721, 721,
1547 721, 721, 722, 722, 722, 722, 722, 722, 722, 722,
1548 722, 722, 722, 722, 722, 722, 722, 723, 723, 723,
1549 723, 723, 723, 723, 723, 723, 723, 723, 723, 723,
1550 723, 723, 724, 724, 724, 724, 724, 724, 724, 724,
1551 724, 724, 724, 724, 724, 724, 724, 725, 725, 725,
1552 725, 725, 725, 725, 725, 725, 725, 725, 725, 725,
1554 725, 725, 726, 726, 726, 726, 726, 726, 726, 726,
1555 726, 726, 726, 726, 726, 726, 726, 727, 727, 727,
1556 727, 727, 727, 727, 727, 727, 727, 727, 727, 727,
1557 727, 727, 728, 728, 0, 728, 728, 728, 728, 728,
1558 728, 728, 728, 728, 728, 728, 728, 729, 729, 0,
1559 729, 729, 729, 729, 729, 729, 729, 729, 729, 729,
1560 729, 729, 730, 730, 0, 730, 730, 730, 730, 730,
1561 730, 730, 730, 730, 730, 730, 730, 731, 731, 731,
1562 731, 731, 731, 731, 731, 731, 731, 731, 731, 731,
1563 731, 731, 732, 732, 732, 732, 732, 732, 732, 732,
1565 732, 732, 732, 732, 732, 732, 732, 733, 733, 733,
1566 733, 733, 733, 733, 733, 733, 733, 733, 733, 733,
1567 733, 733, 734, 734, 734, 734, 734, 734, 734, 734,
1568 734, 734, 734, 734, 734, 734, 734, 735, 0, 0,
1569 735, 0, 735, 735, 0, 0, 735, 735, 736, 736,
1570 736, 736, 736, 736, 736, 736, 736, 736, 736, 736,
1571 736, 736, 736, 737, 737, 737, 737, 737, 737, 737,
1572 737, 737, 737, 737, 737, 737, 737, 737, 738, 738,
1573 738, 738, 738, 738, 738, 738, 738, 738, 738, 738,
1574 738, 738, 738, 739, 739, 739, 739, 739, 739, 739,
1576 739, 739, 739, 739, 739, 739, 739, 739, 740, 740,
1577 0, 740, 740, 740, 740, 740, 740, 740, 740, 740,
1578 740, 740, 740, 741, 741, 741, 741, 741, 741, 741,
1579 741, 741, 741, 741, 741, 741, 741, 741, 742, 742,
1580 742, 742, 0, 742, 742, 742, 742, 742, 742, 742,
1581 742, 742, 742, 743, 743, 743, 743, 743, 743, 743,
1582 743, 743, 743, 743, 743, 743, 743, 743, 744, 744,
1583 0, 744, 744, 744, 744, 744, 744, 744, 744, 744,
1584 744, 744, 744, 745, 745, 0, 745, 745, 745, 745,
1585 745, 745, 745, 745, 745, 745, 745, 745, 746, 0,
1587 746, 0, 0, 0, 746, 746, 746, 747, 747, 0,
1588 747, 747, 747, 747, 747, 747, 747, 747, 747, 747,
1589 747, 747, 748, 748, 0, 748, 748, 748, 748, 748,
1590 748, 748, 748, 748, 748, 748, 748, 749, 749, 0,
1591 749, 749, 749, 749, 749, 749, 749, 749, 749, 749,
1592 749, 749, 750, 750, 750, 750, 750, 750, 750, 750,
1593 750, 750, 750, 750, 750, 750, 750, 751, 751, 751,
1594 751, 751, 751, 751, 751, 751, 751, 751, 751, 751,
1595 751, 751, 752, 752, 752, 752, 752, 752, 752, 752,
1596 752, 752, 752, 752, 752, 752, 752, 753, 753, 753,
1598 753, 753, 753, 753, 753, 753, 753, 753, 753, 753,
1599 753, 753, 754, 0, 0, 0, 0, 754, 754, 0,
1600 0, 754, 754, 755, 755, 755, 755, 755, 755, 755,
1601 755, 755, 755, 755, 755, 755, 755, 755, 756, 756,
1602 756, 756, 756, 756, 756, 756, 756, 756, 756, 756,
1603 756, 756, 756, 757, 757, 0, 757, 757, 757, 757,
1604 757, 757, 757, 757, 757, 757, 757, 757, 758, 758,
1605 0, 758, 758, 758, 758, 758, 758, 758, 758, 758,
1606 758, 758, 758, 759, 759, 759, 759, 0, 759, 759,
1607 759, 759, 759, 759, 759, 759, 759, 759, 760, 760,
1609 760, 760, 760, 760, 760, 760, 760, 760, 760, 760,
1610 760, 760, 760, 761, 761, 0, 761, 761, 761, 761,
1611 761, 761, 761, 761, 761, 761, 761, 761, 762, 762,
1612 0, 762, 762, 762, 762, 762, 762, 762, 762, 762,
1613 762, 762, 762, 763, 763, 0, 763, 763, 763, 763,
1614 763, 763, 763, 763, 763, 763, 763, 763, 764, 764,
1615 0, 764, 764, 764, 764, 764, 764, 764, 764, 764,
1616 764, 764, 764, 765, 765, 0, 765, 765, 765, 765,
1617 765, 765, 765, 765, 765, 765, 765, 765, 766, 766,
1618 0, 766, 766, 766, 766, 766, 766, 766, 766, 766,
1620 766, 766, 766, 767, 767, 0, 767, 767, 767, 767,
1621 767, 767, 767, 767, 767, 767, 767, 767, 768, 768,
1622 0, 768, 768, 768, 768, 768, 768, 768, 768, 768,
1623 768, 768, 768, 769, 769, 769, 769, 769, 769, 769,
1624 769, 769, 769, 769, 769, 769, 769, 769, 770, 770,
1625 770, 770, 770, 770, 770, 770, 770, 770, 770, 770,
1626 770, 770, 770, 771, 771, 771, 771, 771, 771, 771,
1627 771, 771, 771, 771, 771, 771, 771, 771, 772, 0,
1628 0, 0, 0, 772, 772, 0, 0, 772, 773, 773,
1629 773, 773, 773, 773, 773, 773, 773, 773, 773, 773,
1631 773, 773, 773, 774, 774, 774, 774, 774, 774, 774,
1632 774, 774, 774, 774, 774, 774, 774, 774, 775, 775,
1633 0, 775, 775, 775, 775, 775, 775, 775, 775, 775,
1634 775, 775, 775, 776, 776, 776, 776, 776, 776, 776,
1635 776, 776, 776, 776, 776, 776, 776, 776, 777, 0,
1636 0, 0, 0, 777, 777, 0, 0, 777, 778, 778,
1637 0, 778, 778, 778, 778, 778, 778, 778, 778, 778,
1638 778, 778, 778, 779, 779, 779, 779, 779, 779, 779,
1639 779, 779, 779, 779, 779, 779, 779, 779, 780, 780,
1640 0, 780, 780, 780, 780, 780, 780, 780, 780, 780,
1642 780, 780, 780, 781, 781, 0, 781, 781, 781, 781,
1643 781, 781, 781, 781, 781, 781, 781, 781, 782, 782,
1644 0, 782, 782, 782, 782, 782, 782, 782, 782, 782,
1645 782, 782, 782, 783, 783, 783, 783, 783, 783, 783,
1646 783, 783, 783, 783, 783, 783, 783, 783, 784, 784,
1647 784, 784, 784, 784, 784, 784, 784, 784, 784, 784,
1648 784, 784, 784, 785, 785, 785, 785, 785, 785, 785,
1649 785, 785, 785, 785, 785, 785, 785, 785, 786, 786,
1650 786, 786, 786, 786, 786, 786, 786, 786, 786, 786,
1651 786, 786, 786, 710, 710, 710, 710, 710, 710, 710,
1653 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1654 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1655 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1656 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1657 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1658 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1659 710, 710, 710, 710, 710, 710
1662 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
1663 static char *yy_full_match;
1665 static int yy_looking_for_trail_begin = 0;
1666 static int yy_full_lp;
1667 static int *yy_full_state;
1668 #define YY_TRAILING_MASK 0x2000
1669 #define YY_TRAILING_HEAD_MASK 0x4000
1672 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
1673 yy_cp = yy_full_match; /* restore poss. backed-over text */ \
1674 yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \
1675 yy_state_ptr = yy_full_state; /* restore orig. state */ \
1676 yy_current_state = *yy_state_ptr; /* restore curr. state */ \
1680 #define yymore() yymore_used_but_not_detected
1681 #define YY_MORE_ADJ 0
1682 #define YY_RESTORE_YY_MORE_OFFSET
1686 * parser.l -- lex parser of algebraic chess moves for XBoard
1689 * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
1690 * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
1692 * The following terms apply to Digital Equipment Corporation's copyright
1693 * interest in XBoard:
1694 * ------------------------------------------------------------------------
1695 * All Rights Reserved
1697 * Permission to use, copy, modify, and distribute this software and its
1698 * documentation for any purpose and without fee is hereby granted,
1699 * provided that the above copyright notice appear in all copies and that
1700 * both that copyright notice and this permission notice appear in
1701 * supporting documentation, and that the name of Digital not be
1702 * used in advertising or publicity pertaining to distribution of the
1703 * software without specific, written prior permission.
1705 * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
1706 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
1707 * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
1708 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
1709 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
1710 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
1712 * ------------------------------------------------------------------------
1714 * The following terms apply to the enhanced version of XBoard distributed
1715 * by the Free Software Foundation:
1716 * ------------------------------------------------------------------------
1717 * This program is free software; you can redistribute it and/or modify
1718 * it under the terms of the GNU General Public License as published by
1719 * the Free Software Foundation; either version 2 of the License, or
1720 * (at your option) any later version.
1722 * This program is distributed in the hope that it will be useful,
1723 * but WITHOUT ANY WARRANTY; without even the implied warranty of
1724 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1725 * GNU General Public License for more details.
1727 * You should have received a copy of the GNU General Public License
1728 * along with this program; if not, write to the Free Software
1729 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1730 * ------------------------------------------------------------------------
1733 /* This parser handles all forms of promotion.
1734 * The parser resolves ambiguous moves by searching and check-testing.
1735 * It also parses comments of the form [anything] or (anything).
1740 #define NO_CONSTRAINT -1
1743 #define UNPUT_BUF_SIZE YYLMAX
1746 /* yytext is probably a char*, but could be a char[]. yy_text is set
1747 in YY_DECL below, because if yytext is a char*, its value is not
1750 #else /*!FLEX_SCANNER*/
1751 /* yytext is definitely a char[], so yy_text can be set here, statically. */
1752 char *yy_text = (char *) yytext;
1758 #define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
1761 int _yylex YY_PROTO((void)); \
1762 int yylex YY_PROTO((void)) \
1764 int result = _yylex(); \
1765 yy_text = (char *) yytext; \
1768 int _yylex YY_PROTO((void))
1776 /* The includes must be here, below the #undef input */
1781 # include <stdlib.h>
1782 # include <string.h>
1783 #else /* not STDC_HEADERS */
1785 # include <string.h>
1786 # else /* not HAVE_STRING_H */
1787 # include <strings.h>
1788 # endif /* not HAVE_STRING_H */
1789 #endif /* not STDC_HEADERS */
1792 # include <unistd.h>
1795 #if defined(_amigados)
1798 # include <fcntl.h> /* isatty() prototype */
1799 # endif /* HAVE_FCNTL_H */
1800 #endif /* defined(_amigados) */
1803 #include "backend.h"
1804 #include "frontend.h"
1808 extern int PosFlags P((int));
1810 extern Board boards[MAX_MOVES];
1812 int yyskipmoves = FALSE;
1813 char currentMoveString[YYLMAX];
1814 #ifndef FLEX_SCANNER
1815 char unputBuffer[UNPUT_BUF_SIZE];
1820 void my_yy_input P((char *buf, int *result, int max_size));
1821 #else /*!FLEX_SCANNER*/
1822 static int input P((void));
1823 static void output P((int ch));
1824 static void unput P((int ch));
1825 int yylook P((void));
1826 int yyback P((int *, int));
1829 int yywrap P((void));
1830 extern void CopyBoard P((Board to, Board from));
1833 /* Macros after this point can all be overridden by user definitions in
1837 #ifndef YY_SKIP_YYWRAP
1839 extern "C" int yywrap YY_PROTO(( void ));
1841 extern int yywrap YY_PROTO(( void ));
1846 static void yyunput YY_PROTO(( int c, char *buf_ptr ));
1850 static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
1853 #ifdef YY_NEED_STRLEN
1854 static int yy_flex_strlen YY_PROTO(( yyconst char * ));
1859 static int yyinput YY_PROTO(( void ));
1861 static int input YY_PROTO(( void ));
1866 static int yy_start_stack_ptr = 0;
1867 static int yy_start_stack_depth = 0;
1868 static int *yy_start_stack = 0;
1869 #ifndef YY_NO_PUSH_STATE
1870 static void yy_push_state YY_PROTO(( int new_state ));
1872 #ifndef YY_NO_POP_STATE
1873 static void yy_pop_state YY_PROTO(( void ));
1875 #ifndef YY_NO_TOP_STATE
1876 static int yy_top_state YY_PROTO(( void ));
1880 #define YY_NO_PUSH_STATE 1
1881 #define YY_NO_POP_STATE 1
1882 #define YY_NO_TOP_STATE 1
1885 #ifdef YY_MALLOC_DECL
1893 /* Just try to get by without declaring the routines. This will fail
1894 * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
1895 * or sizeof(void*) != sizeof(int).
1900 /* Amount of stuff to slurp up with each read. */
1901 #ifndef YY_READ_BUF_SIZE
1902 #define YY_READ_BUF_SIZE 8192
1905 /* Copy whatever the last rule matched to the standard output. */
1908 /* This used to be an fputs(), but since the string might contain NUL's,
1909 * we now use fwrite().
1911 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
1914 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
1915 * is returned in "result".
1918 #define YY_INPUT(buf,result,max_size) \
1919 if ( yy_current_buffer->yy_is_interactive ) \
1922 for ( n = 0; n < max_size && \
1923 (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1924 buf[n] = (char) c; \
1926 buf[n++] = (char) c; \
1927 if ( c == EOF && ferror( yyin ) ) \
1928 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1931 else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
1932 && ferror( yyin ) ) \
1933 YY_FATAL_ERROR( "input in flex scanner failed" );
1936 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1937 * we don't want an extra ';' after the "return" because that will cause
1938 * some compilers to complain about unreachable statements.
1941 #define yyterminate() return YY_NULL
1944 /* Number of entries by which start-condition stack grows. */
1945 #ifndef YY_START_STACK_INCR
1946 #define YY_START_STACK_INCR 25
1949 /* Report a fatal error. */
1950 #ifndef YY_FATAL_ERROR
1951 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
1954 /* Default declaration of generated scanner - a define so the user can
1955 * easily add parameters.
1958 #define YY_DECL int yylex YY_PROTO(( void ))
1961 /* Code executed at the beginning of each rule, after yytext and yyleng
1964 #ifndef YY_USER_ACTION
1965 #define YY_USER_ACTION
1968 /* Code executed at the end of each rule. */
1970 #define YY_BREAK break;
1973 #define YY_RULE_SETUP \
1975 yy_current_buffer->yy_at_bol = \
1976 (yytext[yyleng - 1] == '\n'); \
1981 register yy_state_type yy_current_state;
1982 register char *yy_cp, *yy_bp;
1983 register int yy_act;
1997 yy_start = 1; /* first start state */
2005 if ( ! yy_current_buffer )
2007 yy_create_buffer( yyin, YY_BUF_SIZE );
2009 yy_load_buffer_state();
2012 while ( 1 ) /* loops until end-of-file is reached */
2016 /* Support of yytext. */
2017 *yy_cp = yy_hold_char;
2019 /* yy_bp points to the position in yy_ch_buf of the start of
2024 yy_current_state = yy_start;
2025 yy_current_state += YY_AT_BOL();
2026 yy_state_ptr = yy_state_buf;
2027 *yy_state_ptr++ = yy_current_state;
2031 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
2032 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2034 yy_current_state = (int) yy_def[yy_current_state];
2035 if ( yy_current_state >= 711 )
2036 yy_c = yy_meta[(unsigned int) yy_c];
2038 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2039 *yy_state_ptr++ = yy_current_state;
2042 while ( yy_base[yy_current_state] != 4394 );
2045 yy_current_state = *--yy_state_ptr;
2046 yy_lp = yy_accept[yy_current_state];
2047 find_rule: /* we branch to this label when backing up */
2048 for ( ; ; ) /* until we find what rule we matched */
2050 if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
2052 yy_act = yy_acclist[yy_lp];
2053 if ( yy_act & YY_TRAILING_HEAD_MASK ||
2054 yy_looking_for_trail_begin )
2056 if ( yy_act == yy_looking_for_trail_begin )
2058 yy_looking_for_trail_begin = 0;
2059 yy_act &= ~YY_TRAILING_HEAD_MASK;
2063 else if ( yy_act & YY_TRAILING_MASK )
2065 yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
2066 yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
2070 yy_full_match = yy_cp;
2071 yy_full_state = yy_state_ptr;
2079 yy_current_state = *--yy_state_ptr;
2080 yy_lp = yy_accept[yy_current_state];
2083 YY_DO_BEFORE_ACTION;
2086 do_action: /* This label is used only to access EOF actions. */
2090 { /* beginning of action switch */
2095 * Fully-qualified algebraic move, possibly with promotion
2097 int skip1 = 0, skip2 = 0;
2101 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2104 if (yytext[1] == '/') skip1 = 1;
2106 /* remove the [xX:-] */
2107 if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
2108 (yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
2110 currentMoveString[0] = yytext[1+skip1];
2111 currentMoveString[1] = yytext[2+skip1];
2112 currentMoveString[2] = yytext[3+skip1+skip2];
2113 currentMoveString[3] = yytext[4+skip1+skip2];
2114 currentMoveString[4] = NULLCHAR;
2116 if (yyleng-skip1-skip2 > 5) {
2117 if (yytext[yyleng-1] == ')') {
2118 currentMoveString[4] = ToLower(yytext[yyleng-2]);
2120 currentMoveString[4] = ToLower(yytext[yyleng-1]);
2122 currentMoveString[5] = NULLCHAR;
2125 piece = boards[yyboardindex]
2126 [currentMoveString[1] - '1'][currentMoveString[0] - 'a'];
2127 if (ToLower(yytext[0]) != ToLower(PieceToChar(piece)))
2128 return (int) IllegalMove;
2130 result = LegalityTest(boards[yyboardindex],
2131 PosFlags(yyboardindex), EP_UNKNOWN,
2132 currentMoveString[1] - '1',
2133 currentMoveString[0] - 'a',
2134 currentMoveString[3] - '1',
2135 currentMoveString[2] - 'a',
2136 currentMoveString[4]);
2138 if (currentMoveString[4] == NULLCHAR &&
2139 (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2140 currentMoveString[4] = 'q';
2141 currentMoveString[5] = NULLCHAR;
2144 return (int) result;
2151 * Simple algebraic move, possibly with promotion
2156 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2158 /* remove the [xX:-] */
2159 if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
2160 (yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
2162 currentMoveString[0] = yytext[0];
2163 currentMoveString[1] = yytext[1];
2164 currentMoveString[2] = yytext[2+skip];
2165 currentMoveString[3] = yytext[3+skip];
2166 currentMoveString[4] = NULLCHAR;
2168 if (yyleng-skip > 4) {
2169 if (yytext[yyleng-1] == ')') {
2170 currentMoveString[4] = ToLower(yytext[yyleng-2]);
2172 currentMoveString[4] = ToLower(yytext[yyleng-1]);
2174 currentMoveString[5] = NULLCHAR;
2177 result = LegalityTest(boards[yyboardindex],
2178 PosFlags(yyboardindex), EP_UNKNOWN,
2179 currentMoveString[1] - '1',
2180 currentMoveString[0] - 'a',
2181 currentMoveString[3] - '1',
2182 currentMoveString[2] - 'a',
2183 currentMoveString[4]);
2185 if (currentMoveString[4] == NULLCHAR &&
2186 (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2187 currentMoveString[4] = 'q';
2188 currentMoveString[5] = NULLCHAR;
2191 return (int) result;
2198 * Pawn move, possibly with promotion
2200 DisambiguateClosure cl;
2203 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2205 /* remove the =() */
2206 if (yytext[2] == '=') skip++;
2207 if (yytext[2+skip] == '(') skip++;
2209 cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2211 cl.ffIn = yytext[0] - 'a';
2212 cl.rtIn = yytext[1] - '1';
2213 cl.ftIn = yytext[0] - 'a';
2214 cl.promoCharIn = yytext[2+skip];
2215 Disambiguate(boards[yyboardindex],
2216 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2218 currentMoveString[0] = cl.ff + 'a';
2219 currentMoveString[1] = cl.rf + '1';
2220 currentMoveString[2] = cl.ft + 'a';
2221 currentMoveString[3] = cl.rt + '1';
2222 currentMoveString[4] = cl.promoChar;
2223 currentMoveString[5] = NULLCHAR;
2225 return (int) cl.kind;
2232 * Pawn capture, possibly with promotion, possibly ambiguous
2234 DisambiguateClosure cl;
2235 int skip1 = 0, skip2 = 0;
2237 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2239 /* remove trailing ep or e.p. (nonstandard PGN) */
2240 if (yytext[yyleng-1] == 'p') {
2242 yytext[yyleng] = NULLCHAR;
2243 } else if (yytext[yyleng-1] == '.') {
2245 yytext[yyleng] = NULLCHAR;
2248 /* remove the [xX:-] and =() */
2249 if ((yytext[1] == 'x') || (yytext[1] == 'X')
2250 || (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
2251 if (yytext[2+skip1] == '=') skip2++;
2252 if (yytext[2+skip1+skip2] == '(') skip2++;
2254 cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2256 cl.ffIn = yytext[0] - 'a';
2258 cl.ftIn = yytext[1+skip1] - 'a';
2259 cl.promoCharIn = yytext[2+skip1+skip2];
2260 Disambiguate(boards[yyboardindex],
2261 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2263 currentMoveString[0] = cl.ff + 'a';
2264 currentMoveString[1] = cl.rf + '1';
2265 currentMoveString[2] = cl.ft + 'a';
2266 currentMoveString[3] = cl.rt + '1';
2267 currentMoveString[4] = cl.promoChar;
2268 currentMoveString[5] = NULLCHAR;
2270 return (int) cl.kind;
2277 * unambiguously abbreviated Pawn capture, possibly with promotion
2282 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2284 /* remove trailing ep or e.p. (nonstandard PGN) */
2285 if (yytext[yyleng-1] == 'p') {
2287 yytext[yyleng] = NULLCHAR;
2288 } else if (yytext[yyleng-1] == '.') {
2290 yytext[yyleng] = NULLCHAR;
2293 /* remove the [xX:-] */
2294 if ((yytext[1] == 'x') || (yytext[1] == 'X')
2295 || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
2297 currentMoveString[0] = yytext[0];
2298 currentMoveString[2] = yytext[1+skip];
2299 currentMoveString[3] = yytext[2+skip];
2300 if (WhiteOnMove(yyboardindex)) {
2301 if (yytext[2+skip] == '1') return (int) ImpossibleMove;
2302 currentMoveString[1] = yytext[2+skip] - 1;
2304 if (yytext[2+skip] == '8') return (int) ImpossibleMove;
2305 currentMoveString[1] = yytext[2+skip] + 1;
2307 if (yyleng-skip > 3) {
2308 if (yytext[yyleng-1] == ')')
2309 currentMoveString[4] = ToLower(yytext[yyleng-2]);
2311 currentMoveString[4] = ToLower(yytext[yyleng-1]);
2312 currentMoveString[5] = NULLCHAR;
2314 currentMoveString[4] = NULLCHAR;
2317 result = LegalityTest(boards[yyboardindex],
2318 PosFlags(yyboardindex), EP_UNKNOWN,
2319 currentMoveString[1] - '1',
2320 currentMoveString[0] - 'a',
2321 currentMoveString[3] - '1',
2322 currentMoveString[2] - 'a',
2323 currentMoveString[4]);
2325 if (currentMoveString[4] == NULLCHAR &&
2326 (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2327 currentMoveString[4] = 'q';
2328 currentMoveString[5] = NULLCHAR;
2331 if (result != IllegalMove) return (int) result;
2333 /* Special case: improperly written en passant capture */
2334 if (WhiteOnMove(yyboardindex)) {
2335 if (currentMoveString[3] == '5') {
2336 currentMoveString[1] = '5';
2337 currentMoveString[3] = '6';
2339 return (int) IllegalMove;
2342 if (currentMoveString[3] == '4') {
2343 currentMoveString[1] = '4';
2344 currentMoveString[3] = '3';
2346 return (int) IllegalMove;
2350 result = LegalityTest(boards[yyboardindex],
2351 PosFlags(yyboardindex), EP_UNKNOWN,
2352 currentMoveString[1] - '1',
2353 currentMoveString[0] - 'a',
2354 currentMoveString[3] - '1',
2355 currentMoveString[2] - 'a',
2356 currentMoveString[4]);
2358 if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
2359 return (int) result;
2361 return (int) IllegalMove;
2368 * piece move, possibly ambiguous
2370 DisambiguateClosure cl;
2373 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2375 /* remove the [xX:-] */
2376 if ((yytext[1] == 'x') || (yytext[1] == 'X')
2377 || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
2379 if (WhiteOnMove(yyboardindex)) {
2380 cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
2382 cl.pieceIn = CharToPiece(ToLower(yytext[0]));
2386 cl.rtIn = yytext[2+skip] - '1';
2387 cl.ftIn = yytext[1+skip] - 'a';
2388 cl.promoCharIn = NULLCHAR;
2389 Disambiguate(boards[yyboardindex],
2390 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2392 currentMoveString[0] = cl.ff + 'a';
2393 currentMoveString[1] = cl.rf + '1';
2394 currentMoveString[2] = cl.ft + 'a';
2395 currentMoveString[3] = cl.rt + '1';
2396 currentMoveString[4] = cl.promoChar;
2397 currentMoveString[5] = NULLCHAR;
2399 return (int) cl.kind;
2406 * piece move with rank or file disambiguator
2408 DisambiguateClosure cl;
2411 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2413 /* remove the [xX:-] */
2414 if ((yytext[2] == 'x') || (yytext[2] == 'X')
2415 || (yytext[2] == ':') || (yytext[2] == '-')) skip = 1;
2417 if (WhiteOnMove(yyboardindex)) {
2418 cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
2420 cl.pieceIn = CharToPiece(ToLower(yytext[0]));
2422 if (isalpha(yytext[1])) {
2424 cl.ffIn = yytext[1] - 'a';
2426 cl.rfIn = yytext[1] - '1';
2429 cl.rtIn = yytext[3+skip] - '1';
2430 cl.ftIn = yytext[2+skip] - 'a';
2431 cl.promoCharIn = NULLCHAR;
2432 Disambiguate(boards[yyboardindex],
2433 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2435 currentMoveString[0] = cl.ff + 'a';
2436 currentMoveString[1] = cl.rf + '1';
2437 currentMoveString[2] = cl.ft + 'a';
2438 currentMoveString[3] = cl.rt + '1';
2439 currentMoveString[4] = cl.promoChar;
2440 currentMoveString[5] = NULLCHAR;
2442 return (int) cl.kind;
2450 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2452 if (WhiteOnMove(yyboardindex)) {
2453 if (boards[yyboardindex][0][3] == WhiteKing) {
2454 /* ICS wild castling */
2455 strcpy(currentMoveString, "d1f1");
2461 strcpy(currentMoveString, "e1c1");
2468 if (boards[yyboardindex][7][3] == BlackKing) {
2469 /* ICS wild castling */
2470 strcpy(currentMoveString, "d8f8");
2476 strcpy(currentMoveString, "e8c8");
2483 return (int) LegalityTest(boards[yyboardindex],
2484 PosFlags(yyboardindex), EP_UNKNOWN,
2485 rf, ff, rt, ft, NULLCHAR);
2493 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2495 if (WhiteOnMove(yyboardindex)) {
2496 if (boards[yyboardindex][0][3] == WhiteKing) {
2497 /* ICS wild castling */
2498 strcpy(currentMoveString, "d1b1");
2504 strcpy(currentMoveString, "e1g1");
2511 if (boards[yyboardindex][7][3] == BlackKing) {
2512 /* ICS wild castling */
2513 strcpy(currentMoveString, "d8b8");
2519 strcpy(currentMoveString, "e8g8");
2526 return (int) LegalityTest(boards[yyboardindex],
2527 PosFlags(yyboardindex), EP_UNKNOWN,
2528 rf, ff, rt, ft, NULLCHAR);
2534 /* Bughouse piece drop. No legality checking for now. */
2535 currentMoveString[1] = '@';
2536 currentMoveString[2] = yytext[2];
2537 currentMoveString[3] = yytext[3];
2538 currentMoveString[4] = NULLCHAR;
2539 if (WhiteOnMove(yyboardindex)) {
2540 currentMoveString[0] = ToUpper(yytext[0]);
2541 return (int) WhiteDrop;
2543 currentMoveString[0] = ToLower(yytext[0]);
2544 return (int) BlackDrop;
2551 if (WhiteOnMove(yyboardindex))
2552 return (int) BlackWins;
2554 return (int) WhiteWins;
2560 return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2566 return (int) GameUnfinished;
2572 return (int) GameIsDrawn;
2578 return (int) GameIsDrawn;
2584 if (WhiteOnMove(yyboardindex))
2585 return (int) BlackWins;
2587 return (int) WhiteWins;
2593 if (WhiteOnMove(yyboardindex))
2594 return (int) BlackWins;
2596 return (int) WhiteWins;
2602 return (int) GameIsDrawn;
2608 return (int) GameIsDrawn;
2614 return (int) (ToUpper(yytext[0]) == 'W' ? WhiteWins : BlackWins);
2620 return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2626 return (int) WhiteWins;
2632 return (int) BlackWins;
2638 return (int) GameIsDrawn;
2644 return (int) GameUnfinished;
2651 if ((yyleng == 1) && (yytext[0] == '1'))
2652 return (int) MoveNumberOne;
2658 /* elapsed time indication, e.g. (0:12) or {10:21.071} */
2659 return (int) ElapsedTime;
2665 /* position diagram enclosed in [-- --] */
2666 return (int) PositionDiagram;
2670 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2671 yy_c_buf_p = yy_cp -= 1;
2672 YY_DO_BEFORE_ACTION; /* set up yytext again */
2675 /* position diagram enclosed in {-- --} */
2676 return (int) PositionDiagram;
2682 return (int) PGNTag;
2688 return (int) GNUChessGame;
2692 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2693 yy_c_buf_p = yy_cp -= 1;
2694 YY_DO_BEFORE_ACTION; /* set up yytext again */
2697 return (int) XBoardGame;
2702 { /* numeric annotation glyph */
2708 { /* anything in {} */
2709 return (int) Comment;
2713 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2714 yy_c_buf_p = yy_cp -= 1;
2715 YY_DO_BEFORE_ACTION; /* set up yytext again */
2717 { /* ; to end of line */
2718 return (int) Comment;
2723 { /* anything in [] */
2724 return (int) Comment;
2730 return (int) Comment;
2735 { /* >=2 chars in () */
2736 return (int) Comment;
2742 /* Skip mail headers */
2748 /* Skip random words */
2754 /* Skip everything else */
2761 case YY_STATE_EOF(INITIAL):
2764 case YY_END_OF_BUFFER:
2766 /* Amount of text matched not including the EOB char. */
2767 int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
2769 /* Undo the effects of YY_DO_BEFORE_ACTION. */
2770 *yy_cp = yy_hold_char;
2771 YY_RESTORE_YY_MORE_OFFSET
2773 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
2775 /* We're scanning a new file or input source. It's
2776 * possible that this happened because the user
2777 * just pointed yyin at a new source and called
2778 * yylex(). If so, then we have to assure
2779 * consistency between yy_current_buffer and our
2780 * globals. Here is the right place to do so, because
2781 * this is the first action (other than possibly a
2782 * back-up) that will match for the new input source.
2784 yy_n_chars = yy_current_buffer->yy_n_chars;
2785 yy_current_buffer->yy_input_file = yyin;
2786 yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
2789 /* Note that here we test for yy_c_buf_p "<=" to the position
2790 * of the first EOB in the buffer, since yy_c_buf_p will
2791 * already have been incremented past the NUL character
2792 * (since all states make transitions on EOB to the
2793 * end-of-buffer state). Contrast this with the test
2796 if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
2797 { /* This was really a NUL. */
2798 yy_state_type yy_next_state;
2800 yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
2802 yy_current_state = yy_get_previous_state();
2804 /* Okay, we're now positioned to make the NUL
2805 * transition. We couldn't have
2806 * yy_get_previous_state() go ahead and do it
2807 * for us because it doesn't know how to deal
2808 * with the possibility of jamming (and we don't
2809 * want to build jamming into it because then it
2810 * will run more slowly).
2813 yy_next_state = yy_try_NUL_trans( yy_current_state );
2815 yy_bp = yytext_ptr + YY_MORE_ADJ;
2817 if ( yy_next_state )
2819 /* Consume the NUL. */
2820 yy_cp = ++yy_c_buf_p;
2821 yy_current_state = yy_next_state;
2828 goto yy_find_action;
2832 else switch ( yy_get_next_buffer() )
2834 case EOB_ACT_END_OF_FILE:
2836 yy_did_buffer_switch_on_eof = 0;
2840 /* Note: because we've taken care in
2841 * yy_get_next_buffer() to have set up
2842 * yytext, we can now set up
2843 * yy_c_buf_p so that if some total
2844 * hoser (like flex itself) wants to
2845 * call the scanner after we return the
2846 * YY_NULL, it'll still work - another
2847 * YY_NULL will get returned.
2849 yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
2851 yy_act = YY_STATE_EOF(YY_START);
2857 if ( ! yy_did_buffer_switch_on_eof )
2863 case EOB_ACT_CONTINUE_SCAN:
2865 yytext_ptr + yy_amount_of_matched_text;
2867 yy_current_state = yy_get_previous_state();
2870 yy_bp = yytext_ptr + YY_MORE_ADJ;
2873 case EOB_ACT_LAST_MATCH:
2875 &yy_current_buffer->yy_ch_buf[yy_n_chars];
2877 yy_current_state = yy_get_previous_state();
2880 yy_bp = yytext_ptr + YY_MORE_ADJ;
2881 goto yy_find_action;
2888 "fatal flex scanner internal error--no action found" );
2889 } /* end of action switch */
2890 } /* end of scanning one token */
2891 } /* end of yylex */
2894 /* yy_get_next_buffer - try to read in a new buffer
2896 * Returns a code representing an action:
2897 * EOB_ACT_LAST_MATCH -
2898 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2899 * EOB_ACT_END_OF_FILE - end of file
2902 static int yy_get_next_buffer()
2904 register char *dest = yy_current_buffer->yy_ch_buf;
2905 register char *source = yytext_ptr;
2906 register int number_to_move, i;
2909 if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
2911 "fatal flex scanner internal error--end of buffer missed" );
2913 if ( yy_current_buffer->yy_fill_buffer == 0 )
2914 { /* Don't try to fill the buffer, so this is an EOF. */
2915 if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
2917 /* We matched a single character, the EOB, so
2918 * treat this as a final EOF.
2920 return EOB_ACT_END_OF_FILE;
2925 /* We matched some text prior to the EOB, first
2928 return EOB_ACT_LAST_MATCH;
2932 /* Try to read more data. */
2934 /* First move last chars to start of buffer. */
2935 number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
2937 for ( i = 0; i < number_to_move; ++i )
2938 *(dest++) = *(source++);
2940 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
2941 /* don't do the read, it's not guaranteed to return an EOF,
2944 yy_current_buffer->yy_n_chars = yy_n_chars = 0;
2949 yy_current_buffer->yy_buf_size - number_to_move - 1;
2951 while ( num_to_read <= 0 )
2952 { /* Not enough room in the buffer - grow it. */
2953 #ifdef YY_USES_REJECT
2955 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
2958 /* just a shorter name for the current buffer */
2959 YY_BUFFER_STATE b = yy_current_buffer;
2961 int yy_c_buf_p_offset =
2962 (int) (yy_c_buf_p - b->yy_ch_buf);
2964 if ( b->yy_is_our_buffer )
2966 int new_size = b->yy_buf_size * 2;
2968 if ( new_size <= 0 )
2969 b->yy_buf_size += b->yy_buf_size / 8;
2971 b->yy_buf_size *= 2;
2973 b->yy_ch_buf = (char *)
2974 /* Include room in for 2 EOB chars. */
2975 yy_flex_realloc( (void *) b->yy_ch_buf,
2976 b->yy_buf_size + 2 );
2979 /* Can't grow it, we don't own it. */
2982 if ( ! b->yy_ch_buf )
2984 "fatal error - scanner input buffer overflow" );
2986 yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
2988 num_to_read = yy_current_buffer->yy_buf_size -
2993 if ( num_to_read > YY_READ_BUF_SIZE )
2994 num_to_read = YY_READ_BUF_SIZE;
2996 /* Read in more data. */
2997 YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
2998 yy_n_chars, num_to_read );
3000 yy_current_buffer->yy_n_chars = yy_n_chars;
3003 if ( yy_n_chars == 0 )
3005 if ( number_to_move == YY_MORE_ADJ )
3007 ret_val = EOB_ACT_END_OF_FILE;
3013 ret_val = EOB_ACT_LAST_MATCH;
3014 yy_current_buffer->yy_buffer_status =
3015 YY_BUFFER_EOF_PENDING;
3020 ret_val = EOB_ACT_CONTINUE_SCAN;
3022 yy_n_chars += number_to_move;
3023 yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
3024 yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
3026 yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
3032 /* yy_get_previous_state - get the state just before the EOB char was reached */
3034 static yy_state_type yy_get_previous_state()
3036 register yy_state_type yy_current_state;
3037 register char *yy_cp;
3039 yy_current_state = yy_start;
3040 yy_current_state += YY_AT_BOL();
3041 yy_state_ptr = yy_state_buf;
3042 *yy_state_ptr++ = yy_current_state;
3044 for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
3046 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
3047 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3049 yy_current_state = (int) yy_def[yy_current_state];
3050 if ( yy_current_state >= 711 )
3051 yy_c = yy_meta[(unsigned int) yy_c];
3053 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3054 *yy_state_ptr++ = yy_current_state;
3057 return yy_current_state;
3061 /* yy_try_NUL_trans - try to make a transition on the NUL character
3064 * next_state = yy_try_NUL_trans( current_state );
3067 #ifdef YY_USE_PROTOS
3068 static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
3070 static yy_state_type yy_try_NUL_trans( yy_current_state )
3071 yy_state_type yy_current_state;
3074 register int yy_is_jam;
3076 register YY_CHAR yy_c = 1;
3077 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3079 yy_current_state = (int) yy_def[yy_current_state];
3080 if ( yy_current_state >= 711 )
3081 yy_c = yy_meta[(unsigned int) yy_c];
3083 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3084 yy_is_jam = (yy_current_state == 710);
3086 *yy_state_ptr++ = yy_current_state;
3088 return yy_is_jam ? 0 : yy_current_state;
3093 #ifdef YY_USE_PROTOS
3094 static void yyunput( int c, register char *yy_bp )
3096 static void yyunput( c, yy_bp )
3098 register char *yy_bp;
3101 register char *yy_cp = yy_c_buf_p;
3103 /* undo effects of setting up yytext */
3104 *yy_cp = yy_hold_char;
3106 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3107 { /* need to shift things up to make room */
3108 /* +2 for EOB chars. */
3109 register int number_to_move = yy_n_chars + 2;
3110 register char *dest = &yy_current_buffer->yy_ch_buf[
3111 yy_current_buffer->yy_buf_size + 2];
3112 register char *source =
3113 &yy_current_buffer->yy_ch_buf[number_to_move];
3115 while ( source > yy_current_buffer->yy_ch_buf )
3116 *--dest = *--source;
3118 yy_cp += (int) (dest - source);
3119 yy_bp += (int) (dest - source);
3120 yy_current_buffer->yy_n_chars =
3121 yy_n_chars = yy_current_buffer->yy_buf_size;
3123 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3124 YY_FATAL_ERROR( "flex scanner push-back overflow" );
3127 *--yy_cp = (char) c;
3131 yy_hold_char = *yy_cp;
3134 #endif /* ifndef YY_NO_UNPUT */
3138 static int yyinput()
3145 *yy_c_buf_p = yy_hold_char;
3147 if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
3149 /* yy_c_buf_p now points to the character we want to return.
3150 * If this occurs *before* the EOB characters, then it's a
3151 * valid NUL; if not, then we've hit the end of the buffer.
3153 if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
3154 /* This was really a NUL. */
3158 { /* need more input */
3159 int offset = yy_c_buf_p - yytext_ptr;
3162 switch ( yy_get_next_buffer() )
3164 case EOB_ACT_LAST_MATCH:
3165 /* This happens because yy_g_n_b()
3166 * sees that we've accumulated a
3167 * token and flags that we need to
3168 * try matching the token before
3169 * proceeding. But for input(),
3170 * there's no matching to consider.
3171 * So convert the EOB_ACT_LAST_MATCH
3172 * to EOB_ACT_END_OF_FILE.
3175 /* Reset buffer status. */
3180 case EOB_ACT_END_OF_FILE:
3185 if ( ! yy_did_buffer_switch_on_eof )
3194 case EOB_ACT_CONTINUE_SCAN:
3195 yy_c_buf_p = yytext_ptr + offset;
3201 c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
3202 *yy_c_buf_p = '\0'; /* preserve yytext */
3203 yy_hold_char = *++yy_c_buf_p;
3205 yy_current_buffer->yy_at_bol = (c == '\n');
3211 #ifdef YY_USE_PROTOS
3212 void yyrestart( FILE *input_file )
3214 void yyrestart( input_file )
3218 if ( ! yy_current_buffer )
3219 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
3221 yy_init_buffer( yy_current_buffer, input_file );
3222 yy_load_buffer_state();
3226 #ifdef YY_USE_PROTOS
3227 void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
3229 void yy_switch_to_buffer( new_buffer )
3230 YY_BUFFER_STATE new_buffer;
3233 if ( yy_current_buffer == new_buffer )
3236 if ( yy_current_buffer )
3238 /* Flush out information for old buffer. */
3239 *yy_c_buf_p = yy_hold_char;
3240 yy_current_buffer->yy_buf_pos = yy_c_buf_p;
3241 yy_current_buffer->yy_n_chars = yy_n_chars;
3244 yy_current_buffer = new_buffer;
3245 yy_load_buffer_state();
3247 /* We don't actually know whether we did this switch during
3248 * EOF (yywrap()) processing, but the only time this flag
3249 * is looked at is after yywrap() is called, so it's safe
3250 * to go ahead and always set it.
3252 yy_did_buffer_switch_on_eof = 1;
3256 #ifdef YY_USE_PROTOS
3257 void yy_load_buffer_state( void )
3259 void yy_load_buffer_state()
3262 yy_n_chars = yy_current_buffer->yy_n_chars;
3263 yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
3264 yyin = yy_current_buffer->yy_input_file;
3265 yy_hold_char = *yy_c_buf_p;
3269 #ifdef YY_USE_PROTOS
3270 YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
3272 YY_BUFFER_STATE yy_create_buffer( file, size )
3279 b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3281 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3283 b->yy_buf_size = size;
3285 /* yy_ch_buf has to be 2 characters longer than the size given because
3286 * we need to put in 2 end-of-buffer characters.
3288 b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
3289 if ( ! b->yy_ch_buf )
3290 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3292 b->yy_is_our_buffer = 1;
3294 yy_init_buffer( b, file );
3300 #ifdef YY_USE_PROTOS
3301 void yy_delete_buffer( YY_BUFFER_STATE b )
3303 void yy_delete_buffer( b )
3310 if ( b == yy_current_buffer )
3311 yy_current_buffer = (YY_BUFFER_STATE) 0;
3313 if ( b->yy_is_our_buffer )
3314 yy_flex_free( (void *) b->yy_ch_buf );
3316 yy_flex_free( (void *) b );
3320 #ifndef YY_ALWAYS_INTERACTIVE
3321 #ifndef YY_NEVER_INTERACTIVE
3322 extern int isatty YY_PROTO(( int ));
3326 #ifdef YY_USE_PROTOS
3327 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
3329 void yy_init_buffer( b, file )
3336 yy_flush_buffer( b );
3338 b->yy_input_file = file;
3339 b->yy_fill_buffer = 1;
3341 #if YY_ALWAYS_INTERACTIVE
3342 b->yy_is_interactive = 1;
3344 #if YY_NEVER_INTERACTIVE
3345 b->yy_is_interactive = 0;
3347 b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
3353 #ifdef YY_USE_PROTOS
3354 void yy_flush_buffer( YY_BUFFER_STATE b )
3356 void yy_flush_buffer( b )
3366 /* We always need two end-of-buffer characters. The first causes
3367 * a transition to the end-of-buffer state. The second causes
3368 * a jam in that state.
3370 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
3371 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
3373 b->yy_buf_pos = &b->yy_ch_buf[0];
3376 b->yy_buffer_status = YY_BUFFER_NEW;
3378 if ( b == yy_current_buffer )
3379 yy_load_buffer_state();
3383 #ifndef YY_NO_SCAN_BUFFER
3384 #ifdef YY_USE_PROTOS
3385 YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
3387 YY_BUFFER_STATE yy_scan_buffer( base, size )
3395 base[size-2] != YY_END_OF_BUFFER_CHAR ||
3396 base[size-1] != YY_END_OF_BUFFER_CHAR )
3397 /* They forgot to leave room for the EOB's. */
3400 b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3402 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
3404 b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
3405 b->yy_buf_pos = b->yy_ch_buf = base;
3406 b->yy_is_our_buffer = 0;
3407 b->yy_input_file = 0;
3408 b->yy_n_chars = b->yy_buf_size;
3409 b->yy_is_interactive = 0;
3411 b->yy_fill_buffer = 0;
3412 b->yy_buffer_status = YY_BUFFER_NEW;
3414 yy_switch_to_buffer( b );
3421 #ifndef YY_NO_SCAN_STRING
3422 #ifdef YY_USE_PROTOS
3423 YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
3425 YY_BUFFER_STATE yy_scan_string( yy_str )
3426 yyconst char *yy_str;
3430 for ( len = 0; yy_str[len]; ++len )
3433 return yy_scan_bytes( yy_str, len );
3438 #ifndef YY_NO_SCAN_BYTES
3439 #ifdef YY_USE_PROTOS
3440 YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
3442 YY_BUFFER_STATE yy_scan_bytes( bytes, len )
3443 yyconst char *bytes;
3452 /* Get memory for full buffer, including space for trailing EOB's. */
3454 buf = (char *) yy_flex_alloc( n );
3456 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
3458 for ( i = 0; i < len; ++i )
3461 buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
3463 b = yy_scan_buffer( buf, n );
3465 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
3467 /* It's okay to grow etc. this buffer, and we should throw it
3468 * away when we're done.
3470 b->yy_is_our_buffer = 1;
3477 #ifndef YY_NO_PUSH_STATE
3478 #ifdef YY_USE_PROTOS
3479 static void yy_push_state( int new_state )
3481 static void yy_push_state( new_state )
3485 if ( yy_start_stack_ptr >= yy_start_stack_depth )
3489 yy_start_stack_depth += YY_START_STACK_INCR;
3490 new_size = yy_start_stack_depth * sizeof( int );
3492 if ( ! yy_start_stack )
3493 yy_start_stack = (int *) yy_flex_alloc( new_size );
3496 yy_start_stack = (int *) yy_flex_realloc(
3497 (void *) yy_start_stack, new_size );
3499 if ( ! yy_start_stack )
3501 "out of memory expanding start-condition stack" );
3504 yy_start_stack[yy_start_stack_ptr++] = YY_START;
3511 #ifndef YY_NO_POP_STATE
3512 static void yy_pop_state()
3514 if ( --yy_start_stack_ptr < 0 )
3515 YY_FATAL_ERROR( "start-condition stack underflow" );
3517 BEGIN(yy_start_stack[yy_start_stack_ptr]);
3522 #ifndef YY_NO_TOP_STATE
3523 static int yy_top_state()
3525 return yy_start_stack[yy_start_stack_ptr - 1];
3529 #ifndef YY_EXIT_FAILURE
3530 #define YY_EXIT_FAILURE 2
3533 #ifdef YY_USE_PROTOS
3534 static void yy_fatal_error( yyconst char msg[] )
3536 static void yy_fatal_error( msg )
3540 (void) fprintf( stderr, "%s\n", msg );
3541 exit( YY_EXIT_FAILURE );
3546 /* Redefine yyless() so it works in section 3 code. */
3552 /* Undo effects of setting up yytext. */ \
3553 yytext[yyleng] = yy_hold_char; \
3554 yy_c_buf_p = yytext + n; \
3555 yy_hold_char = *yy_c_buf_p; \
3556 *yy_c_buf_p = '\0'; \
3562 /* Internal utility routines. */
3565 #ifdef YY_USE_PROTOS
3566 static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
3568 static void yy_flex_strncpy( s1, s2, n )
3575 for ( i = 0; i < n; ++i )
3580 #ifdef YY_NEED_STRLEN
3581 #ifdef YY_USE_PROTOS
3582 static int yy_flex_strlen( yyconst char *s )
3584 static int yy_flex_strlen( s )
3589 for ( n = 0; s[n]; ++n )
3597 #ifdef YY_USE_PROTOS
3598 static void *yy_flex_alloc( yy_size_t size )
3600 static void *yy_flex_alloc( size )
3604 return (void *) malloc( size );
3607 #ifdef YY_USE_PROTOS
3608 static void *yy_flex_realloc( void *ptr, yy_size_t size )
3610 static void *yy_flex_realloc( ptr, size )
3615 /* The cast to (char *) in the following accommodates both
3616 * implementations that use char* generic pointers, and those
3617 * that use void* generic pointers. It works with the latter
3618 * because both ANSI C and C++ allow castless assignment from
3619 * any pointer type to void*, and deal with argument conversions
3620 * as though doing an assignment.
3622 return (void *) realloc( (char *) ptr, size );
3625 #ifdef YY_USE_PROTOS
3626 static void yy_flex_free( void *ptr )
3628 static void yy_flex_free( ptr )
3645 static char *StringToLex;
3647 #ifndef FLEX_SCANNER
3654 if (StringToLex != NULL) {
3656 if (ret == NULLCHAR)
3660 } else if (unputCount > 0) {
3661 ret = unputBuffer[--unputCount];
3673 * Return offset of next pattern within current file
3677 int offset = ftell(lexFP) - unputCount;
3685 static void output(ch)
3688 fprintf(stderr, "PARSER BUG: unmatched character '%c' (0%o)\n",
3692 static void unput(ch)
3695 if (ch == 0) return;
3696 if (StringToLex != NULL) {
3699 if (unputCount >= UNPUT_BUF_SIZE)
3700 fprintf(stderr, "PARSER BUG: unput buffer overflow '%c' (0%o)\n",
3702 unputBuffer[unputCount++] = ch;
3706 /* Get ready to lex from a new file. Kludge below sticks
3707 an artificial newline at the front of the file, which the
3708 above grammar ignores, but which makes ^ at start of pattern
3709 match at the real start of the file.
3717 unput('\n'); /* kludge */
3720 /* Get ready to lex from a string. ^ at start of pattern WON'T
3721 match at the start of the string!
3730 #endif /*!FLEX_SCANNER*/
3733 void my_yy_input(buf, result, max_size)
3740 if (StringToLex != NULL) {
3742 while (*StringToLex != NULLCHAR) {
3743 *buf++ = *StringToLex++;
3749 count = fread(buf, 1, max_size, yyin);
3759 static YY_BUFFER_STATE my_file_buffer = NULL;
3762 Return offset of next pattern in the current file.
3766 int pos = yy_c_buf_p - yy_current_buffer->yy_ch_buf;
3768 return(ftell(yy_current_buffer->yy_input_file) -
3776 if (my_file_buffer != NULL)
3777 yy_delete_buffer(my_file_buffer);
3779 my_file_buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
3780 yy_switch_to_buffer(my_file_buffer);
3786 if (my_file_buffer != NULL)
3787 yy_delete_buffer(my_file_buffer);
3789 my_file_buffer = yy_create_buffer(f, YY_BUF_SIZE);
3790 yy_switch_to_buffer(my_file_buffer);
3792 #endif /*FLEX_SCANNER*/
3799 /* Parse a move from the given string s */
3800 /* ^ at start of pattern WON'T work here unless using flex */
3801 ChessMove yylexstr(boardIndex, s)
3806 char *oldStringToLex;
3808 YY_BUFFER_STATE buffer, oldBuffer;
3811 yyboardindex = boardIndex;
3812 oldStringToLex = StringToLex;
3815 buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
3816 oldBuffer = YY_CURRENT_BUFFER;
3817 yy_switch_to_buffer(buffer);
3818 #endif /*FLEX_SCANNER*/
3820 ret = (ChessMove) yylex();
3823 if (oldBuffer != NULL)
3824 yy_switch_to_buffer(oldBuffer);
3825 yy_delete_buffer(buffer);
3826 #endif /*FLEX_SCANNER*/
3827 StringToLex = oldStringToLex;