1 /* A lexical scanner generated by flex */
3 /* Scanner skeleton version:
4 * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
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[650] =
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, 41, 42, 40, 41, 42, 40, 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, 40, 41,
302 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
303 40, 41, 42, 40, 41, 42, 41, 42, 41, 42,
304 40, 41, 42, 40, 41, 42, 40, 41, 42,16410,
305 40, 41, 42,16410, 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, 40, 41, 42, 40, 41, 42,
311 40, 41, 42, 40, 41, 42, 40, 41, 42, 40,
313 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
314 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
315 41, 42, 33, 40, 17, 40, 9, 40, 40, 40,
316 16410, 8218, 40, 35, 40, 40, 40, 40, 40, 40,
317 40, 40, 40, 40, 40, 9, 40, 40, 40, 40,
318 40, 40, 36, 40, 3, 40, 40, 4, 40, 40,
319 40, 40, 40, 40, 9, 40, 40, 40, 34, 40,
320 40, 9, 40, 40, 40,16410, 8218, 40, 40, 40,
321 40, 40, 40, 40, 40, 40, 40, 40, 40, 9,
322 40, 40, 40, 40, 40, 40, 40, 3, 40, 40,
324 4, 40, 40, 40, 40, 40, 40, 9, 40, 40,
325 40, 15, 9, 40, 23, 40, 23, 8, 40, 8218,
326 22, 40, 22, 24, 40, 40, 40, 6, 40, 40,
327 40, 40, 40, 40, 40, 9, 40, 40, 40, 40,
328 20, 40, 4, 40, 40, 3, 3, 40, 3, 40,
329 40, 4, 5, 40, 4, 4, 40, 40, 40, 40,
330 9, 40, 40, 34, 39, 9, 40, 23, 40, 8,
331 40, 22, 40, 35, 40, 40, 40, 6, 40, 40,
332 40, 40, 40, 40, 40, 9, 40, 40, 40, 40,
333 20, 40, 4, 40, 40, 3, 40, 3, 40, 40,
335 5, 40, 4, 40, 40, 40, 40, 9, 40, 40,
336 38, 38, 37, 25, 25, 6, 40, 10, 6, 40,
337 7, 40, 6, 40, 6, 40, 40, 40, 19, 40,
338 40, 21, 40, 16, 40, 40, 40, 40, 40, 20,
339 20, 40, 20, 40, 36, 3, 3, 2, 40, 5,
340 4, 5, 5, 40, 40, 4, 4, 40, 40, 25,
341 39, 40, 6, 40, 7, 40, 40, 40, 40, 40,
342 19, 40, 40, 21, 40, 16, 40, 40, 40, 40,
343 40, 20, 40, 20, 20, 40, 2, 40, 5, 40,
344 40, 4, 40, 40, 7, 7, 1, 40, 40, 40,
346 19, 40, 40, 40, 21, 21, 40, 21, 40, 40,
347 40, 40, 30, 36, 2, 2, 2, 40, 5, 5,
348 5, 40, 39, 1, 40, 40, 40, 19, 40, 40,
349 40, 21, 40, 21, 21, 40, 40, 40, 40, 20,
350 39, 2, 40, 5, 40, 27, 38, 1, 23, 23,
351 22, 22, 24, 24, 1, 1, 40, 20, 21, 40,
352 40, 40, 11, 40, 40, 28, 36, 30, 2, 2,
353 27, 34, 39, 39, 1, 40, 40, 40, 40, 21,
354 39, 11, 40, 40, 20, 39, 18, 1, 24, 1,
355 20, 21, 19, 40, 40, 40, 11, 40, 40, 40,
357 40, 21, 39, 40, 11, 40, 40, 12, 40, 40,
358 40, 40, 12, 40, 40, 14, 40, 40, 40, 14,
359 40, 40, 40, 39, 40, 40, 40, 40, 39, 39,
360 40, 40, 31, 40, 39, 39, 31, 40, 13, 31,
361 32, 32, 35, 39, 39, 31, 39, 34, 29
364 static yyconst short int yy_accept[698] =
366 1, 1, 1, 2, 4, 6, 8, 11, 13, 16,
367 18, 21, 25, 29, 31, 34, 37, 40, 43, 46,
368 49, 52, 55, 58, 61, 64, 66, 69, 72, 75,
369 78, 81, 84, 87, 90, 93, 96, 99, 102, 105,
370 108, 111, 114, 117, 119, 121, 124, 127, 131, 135,
371 137, 140, 143, 146, 149, 152, 155, 158, 161, 164,
372 167, 170, 173, 176, 179, 182, 185, 188, 191, 194,
373 197, 200, 203, 206, 209, 212, 215, 218, 221, 223,
374 223, 224, 225, 225, 225, 225, 225, 226, 226, 226,
375 226, 227, 227, 229, 229, 229, 229, 230, 230, 230,
377 232, 232, 234, 234, 235, 235, 236, 236, 237, 237,
378 238, 238, 239, 240, 241, 242, 243, 244, 245, 246,
379 248, 249, 250, 251, 252, 253, 253, 253, 253, 253,
380 254, 255, 257, 257, 258, 260, 261, 262, 263, 264,
381 265, 267, 268, 269, 269, 269, 269, 270, 270, 271,
382 271, 272, 274, 274, 275, 277, 277, 279, 279, 280,
383 281, 281, 282, 283, 284, 285, 286, 287, 288, 289,
384 290, 292, 293, 294, 295, 296, 297, 298, 300, 300,
385 301, 303, 304, 305, 306, 307, 308, 310, 311, 312,
386 312, 312, 312, 312, 312, 312, 312, 312, 312, 312,
388 312, 313, 313, 313, 313, 313, 313, 315, 317, 318,
389 320, 321, 321, 321, 321, 323, 324, 325, 325, 326,
390 326, 327, 327, 328, 328, 330, 330, 330, 330, 330,
391 331, 332, 333, 334, 335, 336, 338, 339, 340, 341,
392 343, 343, 343, 343, 343, 345, 345, 346, 346, 347,
393 349, 351, 352, 353, 353, 355, 356, 358, 359, 360,
394 361, 363, 364, 365, 365, 365, 365, 365, 366, 368,
395 370, 372, 374, 374, 375, 375, 376, 377, 377, 378,
396 380, 381, 382, 383, 384, 385, 386, 388, 389, 390,
397 391, 393, 395, 396, 396, 398, 400, 401, 403, 405,
399 406, 407, 408, 410, 411, 411, 411, 412, 413, 413,
400 413, 414, 414, 414, 415, 415, 416, 416, 417, 417,
401 417, 417, 418, 418, 418, 418, 418, 418, 418, 418,
402 419, 421, 421, 423, 424, 425, 425, 426, 427, 427,
403 427, 427, 427, 428, 429, 431, 431, 432, 434, 436,
404 437, 438, 439, 440, 441, 443, 445, 445, 445, 445,
405 445, 446, 447, 447, 448, 450, 451, 452, 452, 452,
406 453, 455, 456, 457, 457, 459, 460, 460, 461, 461,
407 461, 461, 461, 462, 462, 463, 463, 463, 465, 467,
408 468, 468, 469, 470, 471, 473, 474, 476, 478, 479,
410 480, 481, 482, 484, 485, 487, 489, 491, 492, 494,
411 495, 495, 495, 495, 495, 496, 496, 496, 496, 496,
412 496, 496, 496, 496, 496, 497, 499, 499, 499, 499,
413 499, 500, 501, 501, 503, 503, 504, 505, 506, 508,
414 510, 511, 512, 513, 513, 513, 515, 515, 515, 516,
415 516, 517, 519, 520, 520, 521, 521, 523, 523, 523,
416 523, 523, 523, 523, 523, 524, 524, 524, 526, 527,
417 528, 530, 531, 532, 534, 535, 537, 538, 539, 540,
418 542, 544, 546, 546, 546, 548, 548, 549, 549, 550,
419 550, 551, 551, 552, 552, 553, 553, 554, 554, 555,
421 555, 555, 555, 556, 558, 558, 558, 560, 560, 561,
422 561, 561, 561, 561, 561, 562, 563, 565, 566, 568,
423 568, 569, 570, 571, 571, 571, 573, 573, 573, 574,
424 575, 575, 575, 577, 578, 579, 580, 582, 584, 585,
425 587, 587, 588, 588, 588, 589, 589, 590, 591, 591,
426 591, 591, 593, 593, 593, 594, 594, 594, 594, 594,
427 595, 596, 597, 599, 600, 600, 600, 600, 600, 600,
428 601, 602, 604, 605, 607, 608, 608, 608, 608, 608,
429 608, 608, 609, 609, 609, 609, 609, 610, 611, 611,
430 611, 611, 611, 612, 613, 613, 613, 613, 613, 614,
432 614, 614, 614, 615, 616, 618, 618, 618, 618, 618,
433 619, 619, 620, 622, 622, 622, 622, 622, 623, 624,
434 624, 624, 624, 624, 625, 626, 627, 627, 627, 627,
435 627, 627, 628, 629, 629, 629, 629, 629, 630, 631,
436 632, 633, 633, 633, 633, 633, 633, 635, 635, 635,
437 635, 635, 636, 637, 639, 639, 639, 640, 640, 641,
438 641, 642, 642, 642, 644, 644, 645, 646, 646, 646,
439 646, 646, 648, 648, 648, 648, 648, 648, 648, 648,
440 648, 648, 648, 648, 648, 648, 648, 648, 648, 648,
441 648, 648, 648, 648, 649, 650, 650
445 static yyconst int yy_ec[256] =
447 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
448 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
449 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
450 1, 4, 1, 5, 6, 7, 8, 1, 9, 10,
451 11, 12, 13, 1, 14, 15, 16, 17, 18, 19,
452 20, 20, 20, 20, 20, 20, 20, 21, 22, 1,
453 23, 1, 1, 24, 25, 26, 27, 28, 29, 30,
454 31, 32, 33, 33, 34, 35, 36, 37, 38, 34,
455 34, 39, 40, 33, 41, 33, 42, 43, 33, 33,
456 44, 1, 45, 1, 46, 1, 47, 48, 49, 50,
458 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
459 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
460 71, 68, 72, 1, 73, 1, 1, 1, 1, 1,
461 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
462 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
463 1, 1, 1, 1, 1, 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,
469 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
470 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
471 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,
477 static yyconst int yy_meta[74] =
479 1, 2, 3, 2, 1, 1, 1, 1, 4, 5,
480 6, 1, 7, 8, 1, 1, 9, 9, 9, 9,
481 10, 1, 11, 1, 12, 12, 12, 12, 12, 12,
482 12, 12, 13, 12, 13, 13, 12, 12, 12, 13,
483 13, 12, 14, 1, 1, 1, 15, 15, 15, 15,
484 16, 15, 15, 15, 15, 15, 15, 15, 17, 18,
485 18, 18, 18, 18, 17, 17, 17, 17, 17, 19,
489 static yyconst short int yy_base[784] =
491 0, 73, 2729, 4517, 122, 131, 0, 142, 2724, 140,
492 151, 171, 162, 2724, 231, 159, 2672, 2661, 119, 2660,
493 2673, 143, 2668, 2652, 211, 301, 361, 212, 209, 279,
494 243, 284, 301, 286, 221, 303, 309, 329, 2670, 239,
495 2665, 2649, 338, 403, 2710, 149, 380, 475, 348, 190,
496 538, 240, 2659, 2648, 236, 2650, 2663, 157, 2658, 2642,
497 379, 600, 314, 353, 377, 395, 401, 413, 382, 408,
498 513, 424, 516, 423, 562, 448, 544, 607, 612, 2654,
499 468, 0, 2696, 309, 617, 174, 4517, 2692, 672, 246,
500 353, 2686, 2686, 2680, 517, 661, 2680, 576, 280, 655,
502 2679, 0, 2692, 4517, 0, 696, 0, 741, 0, 580,
503 644, 586, 622, 2645, 2640, 2592, 2592, 692, 2617, 2616,
504 714, 2606, 680, 720, 2592, 2606, 811, 537, 884, 4517,
505 911, 961, 0, 986, 1035, 687, 753, 757, 2584, 2588,
506 2587, 2582, 2591, 318, 2568, 825, 2636, 2635, 430, 2634,
507 747, 820, 253, 830, 1085, 160, 563, 455, 1148, 1193,
508 2633, 784, 843, 850, 760, 603, 692, 844, 854, 2596,
509 657, 858, 893, 862, 893, 658, 1217, 1267, 2629, 1292,
510 1342, 913, 926, 1157, 831, 894, 915, 918, 895, 845,
511 2568, 464, 487, 538, 2620, 556, 1162, 1073, 2619, 2556,
513 4517, 1146, 1209, 2624, 2623, 2622, 2611, 2620, 2619, 0,
514 4517, 2618, 2616, 2615, 2614, 2613, 384, 1029, 1062, 1078,
515 1367, 1147, 1145, 1167, 1412, 2558, 2551, 2564, 2559, 1240,
516 1422, 2540, 756, 651, 2557, 2593, 2551, 2547, 1214, 1482,
517 722, 1208, 761, 1555, 1619, 0, 1624, 0, 2594, 2592,
518 2591, 1174, 1426, 1490, 1673, 2591, 2589, 560, 2550, 2549,
519 2583, 2530, 4517, 1499, 1039, 2591, 725, 2587, 928, 845,
520 592, 917, 642, 2585, 1156, 1503, 1716, 2584, 1516, 1761,
521 1531, 1564, 1470, 1565, 1464, 1429, 1580, 1490, 1566, 1598,
522 1831, 1896, 1901, 2583, 1582, 2573, 1613, 1950, 1587, 1676,
524 1588, 1614, 1581, 1149, 1539, 2528, 4517, 775, 799, 2562,
525 4517, 1709, 2557, 2556, 2493, 2492, 1202, 1709, 2546, 2545,
526 2544, 2544, 615, 2543, 744, 2542, 1099, 1674, 832, 4517,
527 2535, 1719, 2534, 2533, 1955, 1622, 4517, 1410, 2490, 2490,
528 2487, 2487, 2494, 2493, 778, 892, 920, 2013, 0, 2511,
529 2495, 2496, 2495, 0, 2086, 2159, 940, 1210, 1233, 1309,
530 2540, 2533, 1434, 4517, 1776, 1424, 2529, 910, 1615, 1616,
531 2528, 1173, 4517, 2476, 0, 2476, 1842, 2532, 1727, 1735,
532 2488, 2473, 2530, 1003, 1736, 904, 599, 1216, 1523, 2186,
533 2528, 1847, 1726, 1767, 1880, 1771, 2244, 1522, 1813, 1849,
535 1848, 1862, 2317, 2527, 2390, 2029, 1869, 1879, 1713, 2021,
536 1747, 2479, 2517, 1595, 2500, 1809, 2511, 2443, 2504, 2441,
537 2500, 2433, 2460, 1869, 4517, 2454, 2427, 2423, 2423, 2418,
538 2468, 1049, 2006, 2467, 1075, 2440, 2410, 0, 2497, 2570,
539 2400, 2394, 2448, 1341, 1756, 4517, 2446, 1803, 1343, 1491,
540 1768, 2439, 2438, 1416, 4517, 2386, 0, 2425, 1871, 2421,
541 1240, 2416, 2373, 2366, 1454, 1718, 1473, 2635, 1888, 2044,
542 1889, 2042, 2023, 2678, 2425, 1990, 1886, 2052, 2063, 2425,
543 1870, 1899, 1958, 1000, 4517, 2095, 1777, 2416, 2415, 2351,
544 2350, 2411, 2410, 2347, 2346, 2407, 2406, 2343, 2342, 2393,
546 2388, 1840, 2017, 2382, 2320, 2326, 2011, 2298, 2303, 2338,
547 2296, 2275, 2316, 2293, 2302, 2270, 2018, 2264, 4517, 2117,
548 4517, 2296, 4517, 2290, 2119, 2300, 2251, 2231, 2282, 1960,
549 1445, 289, 2107, 2108, 2114, 2068, 2281, 2125, 2131, 2280,
550 2139, 4517, 2227, 2176, 2262, 2267, 2258, 4517, 2187, 2173,
551 2177, 4517, 2166, 2214, 2211, 2157, 2198, 2148, 2103, 2111,
552 2085, 2098, 0, 2077, 2196, 2071, 2002, 827, 1575, 2168,
553 2135, 2063, 2170, 2136, 2164, 2203, 2000, 2014, 1683, 1939,
554 1931, 2030, 1944, 1630, 1954, 1906, 2751, 1919, 1917, 1913,
555 1385, 1565, 2824, 2249, 2204, 1850, 1863, 1832, 4517, 1806,
557 1637, 1912, 2897, 1920, 0, 1775, 1762, 1585, 945, 2970,
558 2096, 1949, 2188, 2207, 1772, 1743, 2250, 1745, 1677, 1563,
559 1551, 1686, 681, 2260, 1568, 1502, 2258, 1408, 1406, 2243,
560 2170, 1358, 1313, 1240, 1258, 1751, 1127, 2261, 2312, 1072,
561 926, 2279, 2133, 809, 1969, 2073, 0, 855, 705, 711,
562 1429, 2317, 2305, 0, 2284, 631, 4517, 546, 2094, 480,
563 4517, 413, 392, 4517, 1794, 2351, 2357, 2298, 325, 206,
564 1884, 2303, 2352, 203, 1915, 365, 2138, 2221, 2364, 2365,
565 2369, 2370, 2371, 2372, 2373, 2427, 2444, 2451, 2452, 2453,
566 2454, 2456, 2296, 179, 4517, 4517, 3040, 3059, 3072, 3086,
568 3105, 3124, 3140, 3159, 3178, 3196, 1267, 1342, 1671, 3214,
569 3233, 1702, 3252, 3271, 3290, 3309, 3328, 3347, 3366, 3385,
570 3404, 3416, 3435, 3454, 3473, 3492, 3511, 3519, 1896, 3529,
571 3545, 3564, 3580, 3599, 3618, 3637, 3656, 3675, 3694, 3713,
572 3732, 3744, 3763, 3782, 3801, 3820, 3839, 3858, 3877, 3893,
573 3908, 3924, 3943, 3962, 3981, 3997, 4016, 4035, 4054, 4073,
574 4092, 4111, 4130, 4149, 4168, 4187, 4206, 4225, 4244, 4259,
575 4278, 4297, 4316, 4331, 4345, 4364, 4383, 4402, 4421, 4440,
579 static yyconst short int yy_def[784] =
581 696, 696, 696, 696, 696, 696, 697, 698, 696, 699,
582 697, 696, 12, 700, 697, 15, 15, 15, 15, 15,
583 15, 15, 15, 15, 15, 701, 697, 27, 27, 27,
584 27, 27, 27, 27, 27, 27, 27, 27, 697, 697,
585 697, 697, 697, 702, 696, 703, 703, 696, 48, 700,
586 703, 51, 51, 51, 51, 51, 51, 51, 51, 51,
587 51, 703, 62, 62, 62, 62, 62, 62, 62, 62,
588 62, 62, 62, 703, 703, 703, 703, 703, 702, 696,
589 696, 697, 704, 705, 704, 696, 696, 696, 696, 696,
590 697, 696, 697, 696, 706, 706, 697, 706, 696, 12,
592 696, 697, 700, 696, 707, 697, 708, 697, 709, 108,
593 696, 108, 108, 697, 697, 697, 697, 108, 106, 697,
594 108, 697, 108, 108, 697, 710, 701, 710, 711, 696,
595 697, 696, 712, 697, 697, 697, 697, 697, 697, 697,
596 697, 697, 697, 702, 713, 702, 696, 714, 703, 696,
597 703, 703, 696, 703, 696, 696, 703, 715, 703, 159,
598 709, 160, 160, 160, 703, 703, 703, 703, 160, 159,
599 703, 160, 703, 160, 160, 703, 159, 696, 712, 159,
600 696, 703, 703, 703, 703, 703, 703, 703, 703, 702,
601 696, 716, 717, 717, 718, 719, 716, 716, 720, 721,
603 696, 722, 722, 696, 696, 696, 697, 697, 696, 697,
604 696, 696, 696, 696, 697, 696, 696, 696, 697, 696,
605 697, 722, 697, 696, 697, 696, 696, 696, 696, 697,
606 697, 697, 697, 697, 697, 697, 697, 697, 697, 723,
607 724, 725, 726, 727, 697, 728, 697, 729, 728, 697,
608 247, 697, 730, 730, 697, 254, 697, 697, 697, 697,
609 697, 697, 696, 702, 696, 731, 696, 732, 733, 733,
610 733, 733, 734, 731, 735, 733, 733, 222, 733, 277,
611 733, 733, 733, 733, 733, 733, 733, 733, 733, 733,
612 736, 733, 277, 729, 733, 293, 733, 292, 733, 733,
614 733, 733, 733, 733, 702, 696, 696, 737, 737, 738,
615 696, 739, 740, 740, 741, 741, 696, 742, 696, 696,
616 696, 697, 696, 696, 696, 696, 696, 696, 696, 696,
617 697, 742, 697, 696, 697, 332, 696, 697, 696, 696,
618 696, 696, 697, 697, 697, 696, 697, 743, 697, 697,
619 697, 697, 697, 744, 745, 745, 746, 746, 747, 748,
620 749, 696, 696, 696, 750, 751, 696, 696, 751, 751,
621 697, 697, 696, 696, 697, 697, 702, 696, 696, 696,
622 696, 696, 752, 696, 733, 753, 753, 733, 733, 293,
623 336, 733, 733, 733, 733, 733, 754, 733, 733, 733,
625 733, 733, 755, 744, 755, 756, 733, 733, 733, 733,
626 702, 696, 757, 758, 696, 696, 759, 760, 761, 762,
627 763, 764, 696, 696, 696, 697, 696, 696, 696, 696,
628 697, 697, 696, 697, 696, 697, 697, 765, 766, 766,
629 697, 697, 697, 767, 768, 696, 769, 696, 770, 770,
630 770, 697, 696, 696, 696, 696, 697, 696, 702, 696,
631 696, 696, 696, 696, 771, 772, 772, 733, 733, 733,
632 733, 733, 733, 754, 765, 474, 733, 733, 733, 773,
633 733, 733, 702, 696, 696, 758, 774, 759, 759, 760,
634 760, 761, 761, 762, 762, 763, 763, 764, 764, 696,
636 696, 774, 774, 697, 696, 696, 696, 696, 697, 775,
637 696, 696, 696, 696, 697, 697, 697, 697, 696, 696,
638 696, 696, 696, 696, 702, 696, 696, 696, 771, 771,
639 772, 772, 733, 733, 733, 733, 776, 733, 733, 773,
640 702, 696, 696, 758, 696, 696, 696, 696, 696, 696,
641 696, 696, 696, 775, 775, 696, 696, 696, 696, 697,
642 697, 697, 697, 697, 702, 696, 696, 772, 772, 733,
643 733, 776, 733, 733, 733, 702, 696, 696, 696, 696,
644 696, 696, 696, 696, 696, 696, 777, 697, 696, 696,
645 772, 772, 778, 733, 702, 696, 696, 696, 696, 696,
647 779, 779, 777, 603, 697, 696, 696, 772, 772, 778,
648 779, 610, 733, 702, 696, 696, 779, 603, 603, 696,
649 696, 772, 772, 780, 610, 610, 702, 696, 696, 779,
650 779, 603, 603, 696, 696, 772, 772, 780, 780, 610,
651 610, 702, 696, 696, 779, 779, 603, 781, 696, 782,
652 772, 780, 780, 610, 702, 696, 696, 696, 779, 781,
653 696, 696, 782, 696, 772, 780, 780, 702, 696, 696,
654 772, 780, 702, 696, 772, 702, 783, 783, 783, 783,
655 783, 783, 783, 783, 783, 783, 783, 783, 783, 783,
656 783, 783, 783, 696, 696, 0, 696, 696, 696, 696,
658 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
659 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
660 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
661 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
662 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
663 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
664 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
665 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
669 static yyconst short int yy_nxt[4591] =
671 4, 4, 4, 5, 4, 4, 6, 4, 7, 8,
672 4, 9, 10, 7, 4, 4, 11, 12, 13, 13,
673 4, 14, 4, 4, 15, 16, 17, 18, 15, 15,
674 19, 15, 15, 15, 20, 21, 15, 22, 23, 24,
675 15, 25, 15, 26, 4, 4, 27, 28, 29, 30,
676 31, 32, 33, 34, 35, 36, 37, 38, 39, 7,
677 40, 7, 7, 41, 42, 7, 7, 7, 43, 7,
678 7, 44, 4, 4, 4, 4, 5, 4, 45, 6,
679 45, 7, 8, 4, 9, 10, 46, 4, 4, 47,
680 48, 49, 49, 4, 50, 4, 4, 51, 52, 53,
682 54, 51, 51, 55, 51, 51, 51, 56, 57, 51,
683 58, 59, 60, 51, 61, 51, 26, 4, 4, 62,
684 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
685 73, 74, 46, 75, 46, 46, 76, 77, 46, 46,
686 46, 78, 46, 46, 79, 4, 80, 81, 81, 81,
687 81, 84, 87, 88, 90, 115, 119, 82, 85, 85,
688 85, 85, 111, 268, 91, 95, 92, 93, 80, 150,
689 170, 94, 95, 95, 96, 82, 216, 696, 116, 82,
690 120, 695, 696, 199, 97, 98, 99, 100, 100, 100,
691 100, 101, 104, 158, 171, 102, 102, 102, 102, 102,
693 102, 102, 102, 82, 102, 82, 82, 102, 102, 102,
694 82, 82, 102, 82, 111, 111, 112, 102, 102, 102,
695 102, 102, 102, 102, 102, 102, 102, 102, 102, 82,
696 102, 102, 102, 102, 102, 82, 82, 82, 82, 82,
697 82, 82, 105, 111, 106, 200, 107, 108, 108, 108,
698 108, 109, 140, 648, 105, 136, 268, 135, 135, 204,
699 135, 205, 138, 674, 123, 124, 206, 136, 136, 137,
700 209, 125, 166, 106, 135, 135, 135, 110, 110, 110,
701 110, 110, 110, 110, 110, 110, 110, 110, 110, 136,
702 136, 104, 135, 135, 135, 167, 216, 163, 217, 141,
704 106, 126, 127, 127, 127, 126, 126, 126, 126, 126,
705 126, 126, 126, 126, 128, 126, 126, 111, 195, 196,
706 145, 126, 126, 126, 126, 136, 136, 135, 135, 135,
707 136, 136, 136, 136, 135, 135, 135, 115, 135, 135,
708 135, 111, 114, 569, 126, 130, 126, 136, 136, 136,
709 136, 95, 135, 135, 135, 136, 136, 135, 135, 135,
710 116, 149, 181, 696, 135, 135, 135, 677, 150, 207,
711 208, 183, 126, 126, 131, 136, 136, 132, 132, 132,
712 132, 133, 111, 90, 542, 135, 135, 328, 82, 117,
713 147, 143, 125, 151, 664, 92, 152, 329, 125, 182,
715 153, 181, 181, 134, 329, 145, 184, 135, 135, 136,
716 136, 136, 136, 136, 136, 136, 136, 136, 136, 146,
717 146, 146, 146, 182, 182, 181, 181, 181, 182, 182,
718 134, 82, 174, 175, 181, 181, 181, 147, 82, 176,
719 165, 182, 182, 150, 181, 181, 181, 182, 182, 166,
720 150, 181, 181, 181, 182, 182, 82, 274, 275, 182,
721 182, 181, 181, 181, 181, 181, 181, 670, 150, 185,
722 182, 182, 167, 193, 307, 147, 95, 95, 96, 181,
723 181, 181, 661, 82, 81, 81, 81, 81, 154, 98,
724 99, 155, 155, 155, 155, 156, 195, 308, 188, 157,
726 157, 157, 157, 157, 157, 157, 157, 149, 157, 149,
727 149, 157, 157, 157, 149, 149, 157, 149, 95, 95,
728 95, 157, 157, 157, 157, 157, 157, 157, 157, 157,
729 157, 157, 157, 149, 157, 157, 157, 157, 157, 149,
730 149, 149, 149, 149, 149, 149, 82, 195, 308, 105,
731 241, 159, 82, 107, 160, 160, 160, 160, 161, 182,
732 182, 105, 182, 182, 150, 310, 311, 181, 181, 181,
733 82, 82, 181, 181, 374, 186, 168, 95, 95, 95,
734 159, 130, 150, 150, 162, 162, 162, 162, 162, 162,
735 162, 162, 162, 162, 162, 162, 225, 225, 225, 225,
737 82, 104, 225, 225, 225, 225, 669, 159, 82, 173,
738 111, 82, 150, 177, 145, 82, 178, 178, 178, 178,
739 179, 375, 187, 150, 417, 190, 193, 150, 146, 146,
740 146, 146, 230, 197, 197, 197, 197, 198, 225, 225,
741 225, 225, 180, 284, 274, 275, 181, 181, 182, 182,
742 182, 182, 182, 182, 182, 182, 182, 182, 95, 467,
743 189, 176, 95, 95, 95, 82, 82, 176, 82, 180,
744 696, 226, 231, 227, 212, 696, 213, 150, 150, 228,
745 657, 214, 229, 104, 147, 109, 418, 107, 202, 202,
746 202, 202, 109, 226, 271, 227, 225, 225, 225, 225,
748 82, 348, 228, 255, 255, 255, 255, 229, 225, 225,
749 225, 225, 150, 664, 109, 348, 348, 291, 203, 203,
750 203, 203, 203, 203, 203, 203, 203, 203, 203, 203,
751 225, 225, 225, 225, 239, 358, 225, 225, 225, 225,
752 637, 109, 219, 219, 219, 219, 219, 219, 219, 219,
753 219, 219, 219, 219, 221, 82, 662, 235, 284, 346,
754 216, 222, 217, 269, 270, 360, 130, 150, 82, 255,
755 255, 255, 255, 255, 255, 255, 255, 381, 237, 240,
756 150, 433, 347, 221, 310, 311, 382, 223, 223, 223,
757 223, 223, 223, 223, 223, 223, 223, 223, 223, 259,
759 280, 280, 280, 280, 347, 361, 283, 260, 310, 311,
760 221, 126, 127, 127, 127, 126, 126, 126, 126, 126,
761 126, 126, 126, 126, 126, 126, 126, 145, 82, 104,
762 591, 126, 126, 126, 126, 423, 271, 434, 82, 82,
763 150, 146, 146, 146, 146, 264, 272, 145, 323, 424,
764 150, 150, 82, 82, 126, 130, 126, 661, 305, 280,
765 280, 280, 280, 658, 150, 150, 280, 280, 280, 280,
766 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
767 280, 280, 126, 126, 126, 242, 242, 242, 243, 281,
768 126, 126, 126, 126, 126, 126, 286, 147, 126, 126,
770 282, 82, 82, 82, 126, 126, 104, 126, 285, 280,
771 280, 280, 280, 150, 150, 150, 290, 147, 435, 286,
772 327, 82, 288, 82, 374, 82, 82, 126, 130, 298,
773 298, 298, 298, 150, 82, 150, 82, 150, 150, 289,
774 435, 385, 298, 298, 298, 298, 150, 104, 150, 304,
775 466, 436, 291, 358, 303, 126, 126, 245, 245, 245,
776 245, 245, 245, 245, 245, 245, 245, 245, 245, 82,
777 246, 373, 301, 437, 247, 271, 654, 82, 82, 82,
778 82, 248, 288, 249, 130, 250, 250, 250, 250, 250,
779 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
781 250, 250, 250, 251, 465, 623, 465, 252, 252, 252,
782 252, 252, 252, 252, 252, 252, 252, 252, 252, 82,
783 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
784 247, 82, 135, 135, 135, 135, 135, 135, 135, 135,
785 135, 135, 135, 135, 254, 330, 330, 330, 330, 542,
786 378, 255, 255, 255, 255, 379, 380, 256, 543, 257,
787 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
788 257, 257, 257, 257, 257, 257, 257, 257, 331, 331,
789 331, 331, 193, 307, 509, 258, 95, 95, 95, 312,
790 312, 312, 312, 82, 332, 332, 332, 332, 149, 98,
792 654, 155, 155, 155, 155, 150, 513, 509, 419, 157,
793 157, 157, 157, 157, 157, 157, 157, 149, 157, 149,
794 149, 157, 157, 157, 149, 149, 157, 149, 514, 104,
795 651, 157, 157, 157, 157, 157, 157, 157, 157, 157,
796 157, 157, 157, 149, 157, 157, 157, 157, 157, 149,
797 149, 149, 149, 149, 149, 149, 82, 82, 104, 222,
798 696, 333, 333, 333, 333, 82, 222, 696, 150, 150,
799 420, 193, 307, 298, 298, 298, 298, 150, 197, 197,
800 197, 197, 198, 334, 334, 334, 334, 456, 222, 696,
801 365, 365, 365, 365, 276, 276, 276, 276, 276, 276,
803 276, 276, 276, 276, 276, 276, 277, 302, 386, 242,
804 242, 242, 243, 278, 402, 222, 696, 387, 415, 415,
805 415, 415, 222, 444, 82, 318, 318, 318, 318, 222,
806 333, 333, 333, 333, 457, 277, 150, 360, 337, 279,
807 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
808 279, 222, 130, 212, 130, 213, 333, 333, 333, 333,
809 214, 649, 277, 292, 292, 292, 292, 292, 292, 292,
810 292, 292, 292, 292, 292, 82, 246, 361, 222, 353,
811 293, 218, 218, 149, 149, 149, 149, 294, 343, 249,
812 648, 295, 295, 295, 295, 295, 295, 295, 295, 295,
814 295, 295, 295, 295, 295, 295, 295, 295, 295, 296,
815 445, 445, 445, 297, 297, 297, 297, 297, 297, 297,
816 297, 297, 297, 297, 297, 149, 149, 149, 149, 149,
817 149, 149, 149, 149, 149, 149, 293, 149, 181, 181,
818 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
819 82, 254, 450, 446, 444, 149, 220, 220, 298, 298,
820 298, 298, 150, 647, 256, 451, 299, 299, 299, 299,
821 299, 299, 299, 299, 299, 299, 299, 299, 299, 299,
822 299, 299, 299, 299, 299, 519, 647, 104, 149, 149,
823 149, 149, 300, 149, 149, 149, 149, 149, 149, 149,
825 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
826 149, 149, 149, 223, 223, 223, 223, 223, 223, 223,
827 223, 223, 223, 223, 223, 335, 426, 426, 426, 426,
828 456, 104, 336, 369, 337, 254, 608, 82, 333, 333,
829 333, 333, 366, 366, 366, 366, 370, 104, 256, 150,
830 449, 449, 449, 449, 335, 530, 384, 530, 338, 338,
831 338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
832 344, 644, 82, 643, 454, 104, 368, 455, 82, 398,
833 665, 335, 354, 354, 150, 354, 354, 354, 354, 354,
834 150, 354, 354, 354, 354, 568, 354, 354, 82, 696,
836 696, 145, 354, 354, 354, 354, 696, 696, 696, 696,
837 150, 82, 696, 696, 397, 377, 377, 377, 377, 388,
838 388, 388, 388, 150, 82, 354, 354, 354, 397, 397,
839 82, 82, 389, 389, 389, 389, 150, 532, 395, 82,
840 696, 145, 150, 150, 400, 425, 356, 389, 389, 389,
841 389, 150, 411, 354, 354, 126, 242, 242, 242, 243,
842 641, 126, 126, 126, 126, 126, 126, 104, 346, 126,
843 126, 147, 82, 82, 82, 126, 126, 104, 126, 393,
844 389, 389, 389, 389, 150, 150, 150, 104, 82, 82,
845 82, 396, 364, 399, 410, 82, 82, 373, 126, 130,
847 150, 150, 150, 640, 193, 485, 82, 150, 150, 486,
848 635, 147, 394, 396, 389, 389, 389, 389, 150, 609,
849 634, 82, 82, 401, 696, 369, 126, 126, 254, 406,
850 406, 406, 406, 150, 150, 696, 393, 696, 696, 622,
851 592, 256, 696, 257, 257, 257, 257, 257, 257, 257,
852 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
853 257, 257, 394, 402, 696, 696, 696, 617, 511, 258,
854 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
855 252, 252, 369, 421, 82, 224, 224, 329, 104, 617,
856 374, 696, 421, 511, 329, 370, 150, 371, 371, 371,
858 371, 371, 371, 371, 371, 371, 371, 371, 371, 371,
859 371, 371, 371, 371, 371, 371, 253, 253, 193, 307,
860 104, 82, 336, 372, 82, 414, 414, 414, 414, 336,
861 90, 337, 336, 150, 82, 633, 150, 409, 461, 336,
862 460, 696, 92, 636, 82, 422, 150, 94, 462, 145,
863 99, 336, 271, 104, 422, 101, 150, 445, 445, 445,
864 483, 336, 279, 279, 279, 279, 279, 279, 279, 279,
865 279, 279, 279, 279, 390, 82, 531, 450, 336, 82,
866 632, 391, 469, 337, 82, 450, 502, 150, 336, 82,
867 696, 150, 82, 82, 82, 82, 104, 629, 451, 503,
869 446, 650, 472, 390, 520, 520, 520, 392, 392, 392,
870 392, 392, 392, 392, 392, 392, 392, 392, 392, 147,
871 628, 82, 621, 470, 473, 487, 487, 487, 487, 620,
872 390, 354, 354, 150, 354, 354, 354, 354, 354, 355,
873 354, 354, 354, 354, 145, 354, 354, 521, 671, 696,
874 271, 404, 354, 354, 354, 82, 82, 82, 459, 459,
875 459, 459, 696, 468, 468, 468, 468, 150, 150, 150,
876 82, 616, 500, 145, 354, 354, 354, 82, 82, 455,
877 523, 599, 150, 433, 501, 525, 104, 82, 82, 150,
878 150, 111, 433, 456, 82, 405, 82, 82, 478, 150,
880 150, 477, 354, 354, 82, 254, 150, 82, 150, 150,
881 363, 363, 479, 615, 147, 542, 150, 104, 256, 150,
882 299, 299, 299, 299, 299, 299, 299, 299, 299, 299,
883 299, 299, 299, 299, 299, 299, 299, 299, 299, 471,
884 482, 675, 617, 526, 618, 538, 300, 297, 297, 297,
885 297, 297, 297, 297, 297, 297, 297, 297, 297, 369,
886 145, 530, 384, 530, 617, 650, 619, 607, 606, 605,
887 601, 541, 370, 625, 407, 407, 407, 407, 407, 407,
888 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
889 407, 407, 407, 601, 600, 626, 582, 659, 597, 617,
891 408, 338, 338, 338, 338, 338, 338, 338, 338, 338,
892 338, 338, 338, 438, 438, 510, 438, 438, 438, 438,
893 438, 617, 438, 438, 438, 438, 502, 438, 438, 82,
894 147, 82, 547, 438, 438, 438, 438, 82, 450, 696,
895 476, 150, 149, 150, 511, 149, 149, 149, 149, 150,
896 82, 451, 82, 512, 476, 476, 438, 438, 438, 596,
897 82, 551, 150, 440, 150, 384, 111, 590, 562, 511,
898 535, 82, 150, 536, 589, 552, 82, 440, 440, 534,
899 598, 271, 563, 150, 438, 438, 354, 354, 150, 354,
900 354, 354, 354, 354, 599, 354, 354, 354, 354, 624,
902 354, 354, 534, 617, 193, 307, 354, 354, 354, 354,
903 539, 544, 544, 544, 544, 82, 82, 548, 520, 520,
904 520, 145, 82, 659, 617, 617, 617, 150, 150, 354,
905 354, 354, 571, 82, 150, 565, 565, 565, 565, 82,
906 679, 145, 588, 82, 82, 150, 617, 563, 617, 587,
907 587, 150, 576, 570, 185, 150, 150, 354, 354, 354,
908 354, 521, 354, 354, 354, 354, 354, 586, 354, 354,
909 354, 354, 82, 354, 354, 573, 82, 575, 82, 354,
910 354, 354, 354, 656, 150, 193, 485, 585, 150, 574,
911 150, 147, 544, 544, 544, 544, 82, 657, 145, 593,
913 617, 584, 354, 354, 354, 145, 145, 593, 150, 145,
914 263, 147, 565, 565, 565, 565, 595, 614, 583, 574,
915 627, 555, 617, 679, 555, 582, 552, 581, 646, 594,
916 354, 354, 392, 392, 392, 392, 392, 392, 392, 392,
917 392, 392, 392, 392, 438, 438, 580, 438, 438, 438,
918 438, 438, 439, 438, 438, 438, 438, 82, 438, 438,
919 145, 579, 384, 384, 475, 438, 438, 438, 526, 150,
920 578, 642, 548, 617, 630, 147, 147, 577, 645, 147,
921 617, 145, 384, 384, 384, 567, 145, 438, 438, 438,
922 639, 639, 655, 263, 476, 617, 631, 668, 679, 613,
924 145, 566, 617, 265, 455, 384, 523, 384, 476, 476,
925 564, 673, 639, 639, 384, 438, 438, 354, 354, 384,
926 354, 354, 354, 354, 354, 355, 354, 354, 354, 354,
927 147, 354, 354, 639, 561, 639, 652, 404, 354, 354,
928 354, 560, 639, 559, 558, 557, 556, 639, 555, 139,
929 553, 147, 666, 384, 145, 639, 147, 639, 653, 384,
930 354, 354, 354, 667, 639, 676, 679, 679, 694, 639,
931 147, 679, 679, 679, 679, 679, 550, 680, 681, 672,
932 549, 639, 682, 683, 684, 685, 686, 639, 354, 354,
933 354, 354, 548, 354, 354, 354, 354, 354, 355, 354,
935 354, 354, 354, 639, 354, 354, 547, 672, 546, 639,
936 404, 354, 354, 354, 499, 499, 497, 497, 495, 495,
937 493, 493, 491, 491, 147, 489, 489, 384, 537, 679,
938 528, 527, 216, 354, 354, 354, 263, 263, 209, 373,
939 687, 263, 263, 263, 263, 263, 679, 524, 455, 523,
940 448, 111, 518, 679, 679, 679, 679, 688, 679, 517,
941 516, 354, 354, 502, 689, 690, 691, 692, 515, 693,
942 433, 111, 508, 507, 506, 505, 503, 424, 504, 504,
943 504, 504, 504, 504, 504, 504, 504, 504, 504, 504,
944 504, 504, 504, 504, 504, 504, 504, 438, 438, 263,
946 438, 438, 438, 438, 438, 499, 438, 438, 438, 438,
947 497, 438, 438, 495, 493, 491, 263, 438, 438, 438,
948 438, 489, 425, 263, 263, 263, 263, 196, 263, 484,
949 480, 268, 384, 464, 463, 86, 210, 458, 455, 373,
950 438, 438, 438, 364, 448, 443, 442, 441, 210, 432,
951 431, 430, 429, 428, 427, 337, 425, 337, 216, 216,
952 210, 209, 209, 209, 316, 316, 314, 314, 438, 438,
953 438, 438, 196, 438, 438, 438, 438, 438, 412, 438,
954 438, 438, 438, 364, 438, 438, 268, 268, 267, 384,
955 438, 438, 438, 438, 267, 353, 376, 344, 343, 373,
957 254, 364, 364, 246, 352, 351, 350, 349, 345, 342,
958 341, 340, 339, 438, 438, 438, 327, 327, 326, 325,
959 440, 324, 323, 323, 322, 321, 320, 319, 316, 314,
960 307, 306, 268, 287, 440, 440, 268, 268, 267, 265,
961 263, 438, 438, 82, 502, 262, 237, 210, 261, 235,
962 130, 240, 238, 210, 236, 150, 234, 503, 233, 533,
963 533, 533, 533, 533, 533, 533, 533, 533, 533, 533,
964 533, 533, 533, 533, 533, 533, 533, 533, 438, 438,
965 233, 438, 438, 438, 438, 438, 439, 438, 438, 438,
966 438, 232, 438, 438, 104, 216, 215, 209, 475, 438,
968 438, 438, 210, 209, 201, 193, 191, 173, 172, 169,
969 168, 165, 164, 148, 122, 142, 139, 122, 121, 118,
970 117, 438, 438, 438, 114, 113, 104, 86, 696, 696,
971 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
972 696, 696, 696, 696, 696, 696, 696, 696, 696, 438,
973 438, 602, 602, 696, 602, 602, 602, 602, 602, 696,
974 602, 602, 602, 602, 696, 602, 602, 696, 696, 696,
975 696, 602, 602, 602, 602, 696, 696, 696, 696, 696,
976 696, 604, 696, 696, 696, 696, 696, 696, 696, 696,
977 696, 696, 696, 696, 602, 602, 602, 696, 696, 696,
979 696, 696, 696, 604, 696, 696, 696, 696, 696, 696,
980 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
981 696, 696, 602, 602, 602, 602, 696, 602, 602, 602,
982 602, 602, 603, 602, 602, 602, 602, 696, 602, 602,
983 696, 696, 696, 696, 611, 602, 602, 602, 696, 696,
984 696, 696, 696, 696, 612, 696, 696, 696, 696, 696,
985 696, 696, 696, 696, 696, 696, 696, 602, 602, 602,
986 696, 696, 696, 696, 696, 696, 612, 696, 696, 696,
987 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
988 696, 696, 696, 696, 696, 602, 602, 602, 602, 696,
990 602, 602, 602, 602, 602, 696, 602, 602, 602, 602,
991 696, 602, 602, 696, 696, 696, 696, 602, 602, 602,
992 602, 696, 696, 696, 696, 696, 696, 604, 696, 696,
993 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
994 602, 602, 602, 696, 696, 696, 696, 696, 696, 604,
995 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
996 696, 696, 696, 696, 696, 696, 696, 696, 602, 602,
997 602, 602, 696, 602, 602, 602, 602, 602, 603, 602,
998 602, 602, 602, 696, 602, 602, 696, 696, 696, 696,
999 611, 602, 602, 602, 696, 696, 696, 696, 696, 696,
1001 612, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1002 696, 696, 696, 602, 602, 602, 696, 696, 696, 696,
1003 696, 696, 612, 696, 696, 696, 696, 696, 696, 696,
1004 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1005 696, 602, 602, 82, 696, 696, 696, 82, 82, 696,
1006 696, 82, 82, 82, 82, 82, 82, 82, 82, 83,
1007 83, 83, 83, 83, 696, 83, 83, 83, 83, 83,
1008 83, 83, 83, 83, 83, 83, 83, 83, 89, 89,
1009 696, 696, 696, 89, 89, 89, 103, 103, 103, 103,
1010 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1012 103, 103, 103, 103, 103, 129, 129, 129, 129, 129,
1013 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
1014 129, 129, 129, 129, 144, 144, 144, 144, 144, 144,
1015 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1016 144, 144, 144, 149, 696, 696, 696, 149, 149, 149,
1017 696, 149, 149, 149, 149, 149, 149, 149, 149, 192,
1018 192, 192, 192, 192, 696, 192, 192, 192, 192, 192,
1019 192, 192, 192, 192, 192, 192, 192, 192, 194, 194,
1020 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
1021 194, 194, 194, 194, 194, 194, 194, 211, 211, 696,
1023 696, 696, 696, 696, 696, 696, 696, 211, 696, 696,
1024 211, 211, 696, 211, 126, 126, 126, 126, 126, 126,
1025 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
1026 126, 126, 126, 244, 244, 244, 244, 244, 244, 244,
1027 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
1028 244, 244, 145, 145, 145, 145, 145, 145, 145, 145,
1029 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1030 145, 266, 266, 266, 266, 266, 266, 266, 266, 266,
1031 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
1032 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
1034 273, 273, 273, 273, 273, 273, 273, 273, 273, 192,
1035 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
1036 192, 192, 192, 192, 192, 192, 192, 192, 194, 194,
1037 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
1038 194, 194, 194, 194, 194, 194, 194, 195, 195, 195,
1039 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
1040 195, 195, 195, 195, 195, 195, 309, 309, 309, 309,
1041 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1042 309, 309, 309, 309, 309, 313, 313, 696, 313, 313,
1043 313, 313, 313, 313, 313, 313, 313, 313, 313, 313,
1045 313, 313, 313, 313, 315, 315, 696, 315, 315, 315,
1046 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
1047 315, 315, 315, 317, 696, 317, 696, 696, 696, 317,
1048 317, 317, 696, 696, 317, 355, 355, 696, 355, 355,
1049 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
1050 355, 355, 355, 355, 357, 357, 357, 357, 357, 357,
1051 357, 357, 357, 357, 357, 357, 357, 357, 357, 357,
1052 357, 357, 357, 126, 126, 126, 126, 126, 126, 126,
1053 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
1054 126, 126, 359, 359, 359, 359, 359, 359, 359, 359,
1056 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
1057 359, 244, 244, 244, 244, 244, 244, 244, 244, 244,
1058 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
1059 362, 362, 362, 367, 696, 696, 696, 367, 696, 367,
1060 367, 367, 367, 696, 367, 266, 266, 266, 266, 266,
1061 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
1062 266, 266, 266, 266, 383, 383, 383, 383, 383, 383,
1063 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
1064 383, 383, 383, 149, 696, 696, 696, 149, 149, 149,
1065 696, 149, 149, 149, 149, 149, 149, 149, 149, 273,
1067 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
1068 273, 273, 273, 273, 273, 273, 273, 273, 103, 103,
1069 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1070 103, 103, 103, 103, 103, 103, 103, 403, 403, 696,
1071 403, 403, 403, 403, 403, 403, 403, 403, 403, 403,
1072 403, 403, 403, 403, 403, 403, 309, 309, 309, 309,
1073 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1074 309, 309, 309, 309, 309, 413, 413, 413, 413, 696,
1075 413, 413, 413, 413, 413, 413, 413, 413, 413, 413,
1076 413, 413, 413, 413, 192, 192, 192, 192, 192, 192,
1078 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
1079 192, 192, 192, 313, 313, 696, 313, 313, 313, 313,
1080 313, 313, 313, 313, 313, 313, 313, 313, 313, 313,
1081 313, 313, 315, 315, 696, 315, 315, 315, 315, 315,
1082 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
1083 315, 416, 696, 416, 416, 696, 696, 416, 416, 416,
1084 696, 696, 416, 439, 439, 696, 439, 439, 439, 439,
1085 439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
1086 439, 439, 354, 354, 696, 354, 354, 354, 354, 354,
1087 354, 354, 354, 354, 354, 354, 354, 354, 354, 354,
1089 354, 355, 355, 696, 355, 355, 355, 355, 355, 355,
1090 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
1091 357, 357, 357, 357, 357, 357, 357, 357, 357, 357,
1092 357, 357, 357, 357, 357, 357, 357, 357, 357, 359,
1093 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
1094 359, 359, 359, 359, 359, 359, 359, 359, 126, 126,
1095 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
1096 126, 126, 126, 126, 126, 126, 126, 447, 447, 447,
1097 447, 447, 447, 447, 447, 447, 447, 447, 447, 447,
1098 447, 447, 447, 447, 447, 447, 452, 452, 696, 696,
1100 452, 452, 696, 452, 452, 452, 452, 452, 452, 452,
1101 452, 452, 453, 696, 696, 696, 696, 696, 453, 453,
1102 453, 453, 696, 453, 383, 383, 383, 383, 383, 383,
1103 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
1104 383, 383, 383, 103, 103, 103, 103, 103, 103, 103,
1105 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1106 103, 103, 474, 474, 696, 474, 474, 474, 474, 474,
1107 474, 474, 474, 474, 474, 474, 474, 474, 474, 474,
1108 474, 403, 403, 696, 403, 403, 403, 403, 403, 403,
1109 403, 403, 403, 403, 403, 403, 403, 403, 403, 403,
1111 481, 481, 696, 696, 481, 481, 481, 481, 481, 481,
1112 481, 481, 481, 481, 481, 481, 413, 413, 413, 413,
1113 696, 413, 413, 413, 413, 413, 413, 413, 413, 413,
1114 413, 413, 413, 413, 413, 192, 192, 192, 192, 192,
1115 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
1116 192, 192, 192, 192, 488, 488, 696, 488, 488, 488,
1117 488, 488, 488, 488, 488, 488, 488, 488, 488, 488,
1118 488, 488, 488, 490, 490, 696, 490, 490, 490, 490,
1119 490, 490, 490, 490, 490, 490, 490, 490, 490, 490,
1120 490, 490, 492, 492, 696, 492, 492, 492, 492, 492,
1122 492, 492, 492, 492, 492, 492, 492, 492, 492, 492,
1123 492, 494, 494, 696, 494, 494, 494, 494, 494, 494,
1124 494, 494, 494, 494, 494, 494, 494, 494, 494, 494,
1125 496, 496, 696, 496, 496, 496, 496, 496, 496, 496,
1126 496, 496, 496, 496, 496, 496, 496, 496, 496, 498,
1127 498, 696, 498, 498, 498, 498, 498, 498, 498, 498,
1128 498, 498, 498, 498, 498, 498, 498, 498, 438, 438,
1129 696, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1130 438, 438, 438, 438, 438, 438, 438, 439, 439, 696,
1131 439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
1133 439, 439, 439, 439, 439, 439, 357, 357, 357, 357,
1134 357, 357, 357, 357, 357, 357, 357, 357, 357, 357,
1135 357, 357, 357, 357, 357, 126, 126, 126, 126, 126,
1136 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
1137 126, 126, 126, 126, 447, 447, 447, 447, 447, 447,
1138 447, 447, 447, 447, 447, 447, 447, 447, 447, 447,
1139 447, 447, 447, 522, 696, 696, 696, 696, 696, 522,
1140 522, 522, 522, 522, 522, 522, 522, 522, 529, 529,
1141 529, 529, 529, 529, 529, 529, 529, 529, 529, 529,
1142 529, 529, 529, 529, 529, 529, 529, 103, 103, 103,
1144 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1145 103, 103, 103, 103, 103, 103, 540, 540, 540, 540,
1146 540, 540, 540, 540, 540, 540, 540, 540, 540, 540,
1147 540, 540, 540, 540, 540, 545, 696, 696, 696, 696,
1148 696, 545, 545, 545, 545, 554, 554, 696, 554, 554,
1149 554, 554, 554, 554, 554, 554, 554, 554, 554, 554,
1150 554, 554, 554, 554, 572, 572, 572, 572, 572, 572,
1151 572, 572, 572, 572, 572, 572, 572, 572, 572, 572,
1152 572, 572, 572, 603, 603, 696, 603, 603, 603, 603,
1153 603, 603, 603, 603, 603, 603, 603, 603, 603, 603,
1155 603, 603, 610, 610, 696, 610, 610, 610, 610, 610,
1156 610, 610, 610, 610, 610, 610, 610, 610, 610, 610,
1157 610, 602, 602, 696, 602, 602, 602, 602, 602, 602,
1158 602, 602, 602, 602, 602, 602, 602, 602, 602, 602,
1159 638, 638, 638, 638, 638, 638, 638, 638, 638, 638,
1160 638, 638, 638, 638, 638, 638, 638, 638, 638, 660,
1161 660, 660, 660, 660, 660, 660, 660, 660, 660, 660,
1162 660, 660, 660, 660, 660, 660, 660, 660, 663, 663,
1163 663, 663, 663, 663, 663, 663, 663, 663, 663, 663,
1164 663, 663, 663, 663, 663, 663, 663, 678, 678, 678,
1166 678, 678, 678, 678, 678, 678, 678, 678, 678, 678,
1167 678, 678, 678, 678, 678, 678, 3, 696, 696, 696,
1168 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1169 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1170 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1171 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1172 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1173 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1174 696, 696, 696, 696, 696, 696, 696, 696, 696, 696
1177 static yyconst short int yy_chk[4591] =
1179 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1180 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1181 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1182 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1183 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1184 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1185 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1186 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
1187 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1188 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1190 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1191 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1192 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1193 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1194 2, 2, 2, 2, 2, 2, 5, 6, 6, 6,
1195 6, 8, 10, 10, 11, 19, 22, 46, 8, 8,
1196 8, 8, 16, 156, 11, 13, 11, 11, 5, 46,
1197 58, 11, 12, 12, 12, 13, 156, 13, 19, 12,
1198 22, 694, 13, 86, 12, 12, 12, 12, 12, 12,
1199 12, 12, 50, 50, 58, 12, 12, 12, 12, 12,
1201 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
1202 12, 12, 12, 12, 25, 28, 16, 12, 12, 12,
1203 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
1204 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
1205 12, 12, 15, 52, 15, 86, 15, 15, 15, 15,
1206 15, 15, 40, 674, 15, 29, 153, 29, 29, 90,
1207 28, 90, 29, 670, 25, 25, 90, 35, 35, 28,
1208 153, 25, 55, 15, 35, 35, 35, 15, 15, 15,
1209 15, 15, 15, 15, 15, 15, 15, 15, 15, 31,
1210 31, 532, 31, 31, 31, 55, 99, 52, 99, 40,
1212 15, 26, 26, 26, 26, 26, 26, 26, 26, 26,
1213 26, 26, 26, 26, 26, 26, 26, 63, 84, 84,
1214 144, 26, 26, 26, 26, 30, 30, 30, 30, 30,
1215 32, 32, 34, 34, 32, 32, 32, 33, 34, 34,
1216 34, 43, 30, 532, 26, 26, 26, 33, 33, 36,
1217 36, 49, 33, 33, 33, 37, 37, 36, 36, 36,
1218 33, 49, 63, 49, 37, 37, 37, 676, 49, 91,
1219 91, 63, 26, 26, 27, 38, 38, 27, 27, 27,
1220 27, 27, 61, 47, 669, 38, 38, 217, 47, 38,
1221 144, 43, 43, 47, 663, 47, 47, 217, 43, 64,
1223 47, 64, 64, 27, 217, 44, 64, 27, 27, 27,
1224 27, 27, 27, 27, 27, 27, 27, 27, 27, 44,
1225 44, 44, 44, 65, 65, 65, 65, 65, 69, 69,
1226 27, 74, 61, 61, 69, 69, 69, 676, 149, 61,
1227 65, 66, 66, 74, 66, 66, 66, 67, 67, 68,
1228 149, 67, 67, 67, 70, 70, 76, 158, 158, 68,
1229 68, 70, 70, 70, 68, 68, 68, 662, 76, 74,
1230 72, 72, 68, 192, 192, 44, 48, 48, 48, 72,
1231 72, 72, 660, 48, 81, 81, 81, 81, 48, 48,
1232 48, 48, 48, 48, 48, 48, 193, 193, 76, 48,
1234 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
1235 48, 48, 48, 48, 48, 48, 48, 48, 95, 95,
1236 95, 48, 48, 48, 48, 48, 48, 48, 48, 48,
1237 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
1238 48, 48, 48, 48, 48, 48, 51, 194, 194, 51,
1239 128, 51, 77, 51, 51, 51, 51, 51, 51, 71,
1240 71, 51, 73, 73, 77, 196, 196, 71, 71, 71,
1241 75, 157, 73, 73, 258, 75, 73, 98, 98, 98,
1242 51, 128, 75, 157, 51, 51, 51, 51, 51, 51,
1243 51, 51, 51, 51, 51, 51, 110, 110, 110, 110,
1245 271, 387, 112, 112, 112, 112, 658, 51, 62, 77,
1246 78, 166, 271, 62, 79, 78, 62, 62, 62, 62,
1247 62, 258, 75, 166, 323, 79, 85, 78, 79, 79,
1248 79, 79, 112, 85, 85, 85, 85, 85, 113, 113,
1249 113, 113, 62, 166, 273, 273, 62, 62, 62, 62,
1250 62, 62, 62, 62, 62, 62, 62, 62, 100, 387,
1251 78, 78, 96, 96, 96, 171, 176, 78, 100, 62,
1252 100, 111, 113, 111, 96, 100, 96, 171, 176, 111,
1253 656, 96, 111, 623, 79, 89, 323, 89, 89, 89,
1254 89, 89, 89, 111, 171, 111, 123, 123, 123, 123,
1256 167, 234, 111, 136, 136, 136, 136, 111, 118, 118,
1257 118, 118, 167, 650, 89, 234, 234, 176, 89, 89,
1258 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
1259 121, 121, 121, 121, 123, 241, 124, 124, 124, 124,
1260 623, 89, 106, 106, 106, 106, 106, 106, 106, 106,
1261 106, 106, 106, 106, 108, 151, 649, 118, 167, 233,
1262 325, 108, 325, 151, 151, 243, 241, 151, 165, 137,
1263 137, 137, 137, 138, 138, 138, 138, 267, 121, 124,
1264 165, 345, 233, 108, 308, 308, 267, 108, 108, 108,
1265 108, 108, 108, 108, 108, 108, 108, 108, 108, 137,
1267 162, 162, 162, 162, 233, 243, 165, 138, 309, 309,
1268 108, 127, 127, 127, 127, 127, 127, 127, 127, 127,
1269 127, 127, 127, 127, 127, 127, 127, 146, 152, 568,
1270 568, 127, 127, 127, 127, 329, 152, 345, 154, 185,
1271 152, 146, 146, 146, 146, 146, 154, 190, 270, 329,
1272 154, 185, 168, 270, 127, 127, 127, 648, 190, 163,
1273 163, 163, 163, 644, 168, 270, 164, 164, 164, 164,
1274 169, 169, 169, 169, 172, 172, 172, 172, 174, 174,
1275 174, 174, 127, 127, 129, 129, 129, 129, 129, 163,
1276 129, 129, 129, 129, 129, 129, 185, 146, 129, 129,
1278 164, 173, 186, 189, 129, 129, 386, 129, 168, 175,
1279 175, 175, 175, 173, 186, 189, 174, 190, 346, 169,
1280 272, 182, 172, 187, 368, 272, 188, 129, 129, 182,
1281 182, 182, 182, 182, 183, 187, 269, 272, 188, 173,
1282 346, 269, 183, 183, 183, 183, 183, 609, 269, 189,
1283 386, 347, 175, 357, 186, 129, 129, 131, 131, 131,
1284 131, 131, 131, 131, 131, 131, 131, 131, 131, 132,
1285 132, 368, 183, 347, 132, 187, 641, 132, 132, 132,
1286 132, 132, 188, 132, 357, 132, 132, 132, 132, 132,
1287 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
1289 132, 132, 132, 132, 384, 609, 384, 132, 132, 132,
1290 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
1291 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
1292 132, 132, 134, 134, 134, 134, 134, 134, 134, 134,
1293 134, 134, 134, 134, 135, 218, 218, 218, 218, 484,
1294 265, 135, 135, 135, 135, 265, 265, 135, 484, 135,
1295 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
1296 135, 135, 135, 135, 135, 135, 135, 135, 219, 219,
1297 219, 219, 198, 198, 432, 135, 155, 155, 155, 198,
1298 198, 198, 198, 155, 220, 220, 220, 220, 155, 155,
1300 640, 155, 155, 155, 155, 155, 435, 432, 327, 155,
1301 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
1302 155, 155, 155, 155, 155, 155, 155, 155, 435, 637,
1303 637, 155, 155, 155, 155, 155, 155, 155, 155, 155,
1304 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
1305 155, 155, 155, 155, 155, 155, 159, 304, 275, 202,
1306 222, 223, 223, 223, 223, 184, 202, 222, 159, 304,
1307 327, 197, 197, 184, 184, 184, 184, 184, 197, 197,
1308 197, 197, 197, 224, 224, 224, 224, 372, 202, 222,
1309 252, 252, 252, 252, 159, 159, 159, 159, 159, 159,
1311 159, 159, 159, 159, 159, 159, 160, 184, 275, 242,
1312 242, 242, 242, 160, 304, 202, 222, 275, 317, 317,
1313 317, 317, 203, 358, 388, 203, 203, 203, 203, 203,
1314 239, 239, 239, 239, 372, 160, 388, 359, 388, 160,
1315 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
1316 160, 203, 242, 461, 358, 461, 230, 230, 230, 230,
1317 461, 635, 160, 177, 177, 177, 177, 177, 177, 177,
1318 177, 177, 177, 177, 177, 178, 178, 359, 203, 239,
1319 178, 707, 707, 178, 178, 178, 178, 178, 230, 178,
1320 634, 178, 178, 178, 178, 178, 178, 178, 178, 178,
1322 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
1323 360, 360, 360, 178, 178, 178, 178, 178, 178, 178,
1324 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
1325 178, 178, 178, 178, 178, 178, 178, 178, 180, 180,
1326 180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
1327 181, 181, 449, 360, 444, 181, 708, 708, 181, 181,
1328 181, 181, 181, 633, 181, 449, 181, 181, 181, 181,
1329 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1330 181, 181, 181, 181, 181, 444, 632, 591, 181, 181,
1331 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1333 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1334 181, 181, 181, 221, 221, 221, 221, 221, 221, 221,
1335 221, 221, 221, 221, 221, 225, 338, 338, 338, 338,
1336 454, 651, 225, 366, 225, 253, 591, 286, 231, 231,
1337 231, 231, 253, 253, 253, 253, 366, 531, 253, 286,
1338 363, 363, 363, 363, 225, 465, 465, 465, 225, 225,
1339 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1340 231, 629, 285, 628, 366, 467, 253, 454, 283, 286,
1341 651, 225, 240, 240, 285, 240, 240, 240, 240, 240,
1342 283, 240, 240, 240, 240, 531, 240, 240, 288, 254,
1344 450, 264, 240, 240, 240, 240, 254, 254, 254, 254,
1345 288, 276, 254, 450, 285, 264, 264, 264, 264, 276,
1346 276, 276, 276, 276, 279, 240, 240, 240, 285, 285,
1347 398, 389, 279, 279, 279, 279, 279, 467, 283, 281,
1348 254, 305, 398, 389, 288, 389, 240, 281, 281, 281,
1349 281, 281, 305, 240, 240, 244, 244, 244, 244, 244,
1350 626, 244, 244, 244, 244, 244, 244, 592, 284, 244,
1351 244, 264, 282, 284, 289, 244, 244, 569, 244, 281,
1352 282, 282, 282, 282, 282, 284, 289, 608, 287, 303,
1353 295, 284, 295, 287, 303, 299, 301, 299, 244, 244,
1355 287, 303, 295, 625, 414, 414, 290, 299, 301, 414,
1356 621, 305, 282, 284, 290, 290, 290, 290, 290, 592,
1357 620, 297, 302, 289, 369, 370, 244, 244, 245, 297,
1358 297, 297, 297, 297, 302, 336, 301, 369, 370, 608,
1359 569, 245, 336, 245, 245, 245, 245, 245, 245, 245,
1360 245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
1361 245, 245, 302, 290, 336, 369, 370, 601, 584, 245,
1362 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
1363 247, 247, 255, 328, 300, 709, 709, 328, 622, 601,
1364 300, 336, 579, 584, 328, 255, 300, 255, 255, 255,
1366 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
1367 255, 255, 255, 255, 255, 255, 712, 712, 312, 312,
1368 466, 409, 318, 255, 277, 312, 312, 312, 312, 318,
1369 379, 318, 332, 409, 393, 619, 277, 300, 380, 332,
1370 379, 332, 379, 622, 385, 328, 393, 379, 380, 411,
1371 380, 318, 385, 636, 579, 380, 385, 445, 445, 445,
1372 411, 332, 277, 277, 277, 277, 277, 277, 277, 277,
1373 277, 277, 277, 277, 280, 394, 466, 451, 318, 396,
1374 618, 280, 393, 280, 365, 365, 487, 394, 332, 365,
1375 451, 396, 365, 365, 365, 365, 665, 616, 365, 487,
1377 445, 636, 396, 280, 448, 448, 448, 280, 280, 280,
1378 280, 280, 280, 280, 280, 280, 280, 280, 280, 411,
1379 615, 399, 607, 394, 396, 416, 416, 416, 416, 606,
1380 280, 291, 291, 399, 291, 291, 291, 291, 291, 291,
1381 291, 291, 291, 291, 377, 291, 291, 448, 665, 502,
1382 399, 291, 291, 291, 291, 392, 401, 400, 377, 377,
1383 377, 377, 502, 392, 392, 392, 392, 392, 401, 400,
1384 402, 600, 424, 459, 291, 291, 291, 407, 481, 407,
1385 481, 598, 402, 395, 424, 459, 671, 408, 395, 407,
1386 481, 469, 471, 408, 477, 291, 469, 471, 401, 408,
1388 395, 400, 291, 291, 292, 292, 477, 482, 469, 471,
1389 729, 729, 402, 597, 377, 596, 292, 675, 292, 482,
1390 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
1391 292, 292, 292, 292, 292, 292, 292, 292, 292, 395,
1392 408, 671, 602, 459, 604, 477, 292, 293, 293, 293,
1393 293, 293, 293, 293, 293, 293, 293, 293, 293, 298,
1394 483, 530, 530, 530, 602, 675, 604, 590, 589, 588,
1395 586, 483, 298, 612, 298, 298, 298, 298, 298, 298,
1396 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1397 298, 298, 298, 585, 583, 612, 581, 645, 580, 645,
1399 298, 335, 335, 335, 335, 335, 335, 335, 335, 335,
1400 335, 335, 335, 348, 348, 433, 348, 348, 348, 348,
1401 348, 645, 348, 348, 348, 348, 503, 348, 348, 410,
1402 483, 473, 578, 348, 348, 348, 348, 406, 406, 503,
1403 476, 410, 406, 473, 433, 406, 406, 406, 406, 406,
1404 472, 406, 470, 433, 476, 476, 348, 348, 348, 577,
1405 478, 507, 472, 348, 470, 572, 479, 567, 517, 433,
1406 472, 479, 478, 473, 566, 507, 536, 348, 348, 470,
1407 582, 410, 517, 479, 348, 348, 355, 355, 536, 355,
1408 355, 355, 355, 355, 582, 355, 355, 355, 355, 611,
1410 355, 355, 470, 646, 486, 486, 355, 355, 355, 355,
1411 478, 486, 486, 486, 486, 533, 534, 533, 520, 520,
1412 520, 525, 535, 646, 659, 646, 611, 533, 534, 355,
1413 355, 355, 536, 538, 535, 525, 525, 525, 525, 539,
1414 677, 541, 564, 571, 574, 538, 659, 562, 611, 561,
1415 560, 539, 541, 535, 534, 571, 574, 355, 355, 356,
1416 356, 520, 356, 356, 356, 356, 356, 559, 356, 356,
1417 356, 356, 575, 356, 356, 538, 570, 539, 573, 356,
1418 356, 356, 356, 643, 575, 544, 544, 558, 570, 538,
1419 573, 525, 544, 544, 544, 544, 613, 643, 565, 571,
1421 631, 557, 356, 356, 356, 576, 595, 570, 613, 614,
1422 677, 541, 565, 565, 565, 565, 576, 595, 556, 573,
1423 614, 555, 631, 678, 554, 553, 551, 550, 631, 575,
1424 356, 356, 390, 390, 390, 390, 390, 390, 390, 390,
1425 390, 390, 390, 390, 397, 397, 549, 397, 397, 397,
1426 397, 397, 397, 397, 397, 397, 397, 594, 397, 397,
1427 627, 547, 624, 638, 397, 397, 397, 397, 565, 594,
1428 546, 627, 545, 630, 617, 576, 595, 543, 630, 614,
1429 617, 642, 540, 537, 529, 528, 655, 397, 397, 397,
1430 624, 638, 642, 678, 397, 630, 617, 655, 693, 594,
1432 668, 527, 617, 526, 524, 672, 522, 653, 397, 397,
1433 518, 668, 624, 638, 639, 397, 397, 403, 403, 652,
1434 403, 403, 403, 403, 403, 403, 403, 403, 403, 403,
1435 627, 403, 403, 672, 516, 653, 639, 403, 403, 403,
1436 403, 515, 639, 514, 513, 512, 511, 652, 510, 509,
1437 508, 642, 652, 666, 673, 672, 655, 653, 639, 667,
1438 403, 403, 403, 653, 639, 673, 679, 680, 693, 652,
1439 668, 681, 682, 683, 684, 685, 506, 679, 680, 666,
1440 505, 666, 681, 682, 683, 684, 685, 667, 403, 403,
1441 405, 405, 504, 405, 405, 405, 405, 405, 405, 405,
1443 405, 405, 405, 666, 405, 405, 501, 667, 500, 667,
1444 405, 405, 405, 405, 499, 498, 497, 496, 495, 494,
1445 493, 492, 491, 490, 673, 489, 488, 480, 475, 686,
1446 464, 463, 462, 405, 405, 405, 679, 680, 460, 458,
1447 686, 681, 682, 683, 684, 685, 687, 456, 453, 452,
1448 447, 443, 442, 688, 689, 690, 691, 687, 692, 441,
1449 437, 405, 405, 426, 688, 689, 690, 691, 436, 692,
1450 434, 431, 430, 429, 428, 427, 426, 423, 426, 426,
1451 426, 426, 426, 426, 426, 426, 426, 426, 426, 426,
1452 426, 426, 426, 426, 426, 426, 426, 439, 439, 686,
1454 439, 439, 439, 439, 439, 422, 439, 439, 439, 439,
1455 421, 439, 439, 420, 419, 418, 687, 439, 439, 439,
1456 439, 417, 415, 688, 689, 690, 691, 413, 692, 412,
1457 404, 391, 383, 382, 381, 378, 376, 374, 371, 367,
1458 439, 439, 439, 362, 361, 353, 352, 351, 350, 344,
1459 343, 342, 341, 340, 339, 334, 333, 331, 326, 324,
1460 322, 321, 320, 319, 316, 315, 314, 313, 439, 439,
1461 440, 440, 310, 440, 440, 440, 440, 440, 306, 440,
1462 440, 440, 440, 296, 440, 440, 294, 278, 274, 268,
1463 440, 440, 440, 440, 266, 262, 261, 260, 259, 257,
1465 256, 251, 250, 249, 238, 237, 236, 235, 232, 229,
1466 228, 227, 226, 440, 440, 440, 216, 215, 214, 213,
1467 440, 212, 209, 208, 207, 206, 205, 204, 200, 199,
1468 195, 191, 179, 170, 440, 440, 161, 150, 148, 147,
1469 145, 440, 440, 468, 468, 143, 142, 141, 140, 139,
1470 126, 125, 122, 120, 119, 468, 117, 468, 116, 468,
1471 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
1472 468, 468, 468, 468, 468, 468, 468, 468, 474, 474,
1473 115, 474, 474, 474, 474, 474, 474, 474, 474, 474,
1474 474, 114, 474, 474, 103, 101, 97, 94, 474, 474,
1476 474, 474, 93, 92, 88, 83, 80, 60, 59, 57,
1477 56, 54, 53, 45, 42, 41, 39, 24, 23, 21,
1478 20, 474, 474, 474, 18, 17, 14, 9, 3, 0,
1479 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1480 0, 0, 0, 0, 0, 0, 0, 0, 0, 474,
1481 474, 587, 587, 0, 587, 587, 587, 587, 587, 0,
1482 587, 587, 587, 587, 0, 587, 587, 0, 0, 0,
1483 0, 587, 587, 587, 587, 0, 0, 0, 0, 0,
1484 0, 587, 0, 0, 0, 0, 0, 0, 0, 0,
1485 0, 0, 0, 0, 587, 587, 587, 0, 0, 0,
1487 0, 0, 0, 587, 0, 0, 0, 0, 0, 0,
1488 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1489 0, 0, 587, 587, 593, 593, 0, 593, 593, 593,
1490 593, 593, 593, 593, 593, 593, 593, 0, 593, 593,
1491 0, 0, 0, 0, 593, 593, 593, 593, 0, 0,
1492 0, 0, 0, 0, 593, 0, 0, 0, 0, 0,
1493 0, 0, 0, 0, 0, 0, 0, 593, 593, 593,
1494 0, 0, 0, 0, 0, 0, 593, 0, 0, 0,
1495 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1496 0, 0, 0, 0, 0, 593, 593, 603, 603, 0,
1498 603, 603, 603, 603, 603, 0, 603, 603, 603, 603,
1499 0, 603, 603, 0, 0, 0, 0, 603, 603, 603,
1500 603, 0, 0, 0, 0, 0, 0, 603, 0, 0,
1501 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1502 603, 603, 603, 0, 0, 0, 0, 0, 0, 603,
1503 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1504 0, 0, 0, 0, 0, 0, 0, 0, 603, 603,
1505 610, 610, 0, 610, 610, 610, 610, 610, 610, 610,
1506 610, 610, 610, 0, 610, 610, 0, 0, 0, 0,
1507 610, 610, 610, 610, 0, 0, 0, 0, 0, 0,
1509 610, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1510 0, 0, 0, 610, 610, 610, 0, 0, 0, 0,
1511 0, 0, 610, 0, 0, 0, 0, 0, 0, 0,
1512 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1513 0, 610, 610, 697, 0, 0, 0, 697, 697, 0,
1514 0, 697, 697, 697, 697, 697, 697, 697, 697, 698,
1515 698, 698, 698, 698, 0, 698, 698, 698, 698, 698,
1516 698, 698, 698, 698, 698, 698, 698, 698, 699, 699,
1517 0, 0, 0, 699, 699, 699, 700, 700, 700, 700,
1518 700, 700, 700, 700, 700, 700, 700, 700, 700, 700,
1520 700, 700, 700, 700, 700, 701, 701, 701, 701, 701,
1521 701, 701, 701, 701, 701, 701, 701, 701, 701, 701,
1522 701, 701, 701, 701, 702, 702, 702, 702, 702, 702,
1523 702, 702, 702, 702, 702, 702, 702, 702, 702, 702,
1524 702, 702, 702, 703, 0, 0, 0, 703, 703, 703,
1525 0, 703, 703, 703, 703, 703, 703, 703, 703, 704,
1526 704, 704, 704, 704, 0, 704, 704, 704, 704, 704,
1527 704, 704, 704, 704, 704, 704, 704, 704, 705, 705,
1528 705, 705, 705, 705, 705, 705, 705, 705, 705, 705,
1529 705, 705, 705, 705, 705, 705, 705, 706, 706, 0,
1531 0, 0, 0, 0, 0, 0, 0, 706, 0, 0,
1532 706, 706, 0, 706, 710, 710, 710, 710, 710, 710,
1533 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1534 710, 710, 710, 711, 711, 711, 711, 711, 711, 711,
1535 711, 711, 711, 711, 711, 711, 711, 711, 711, 711,
1536 711, 711, 713, 713, 713, 713, 713, 713, 713, 713,
1537 713, 713, 713, 713, 713, 713, 713, 713, 713, 713,
1538 713, 714, 714, 714, 714, 714, 714, 714, 714, 714,
1539 714, 714, 714, 714, 714, 714, 714, 714, 714, 714,
1540 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
1542 715, 715, 715, 715, 715, 715, 715, 715, 715, 716,
1543 716, 716, 716, 716, 716, 716, 716, 716, 716, 716,
1544 716, 716, 716, 716, 716, 716, 716, 716, 717, 717,
1545 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
1546 717, 717, 717, 717, 717, 717, 717, 718, 718, 718,
1547 718, 718, 718, 718, 718, 718, 718, 718, 718, 718,
1548 718, 718, 718, 718, 718, 718, 719, 719, 719, 719,
1549 719, 719, 719, 719, 719, 719, 719, 719, 719, 719,
1550 719, 719, 719, 719, 719, 720, 720, 0, 720, 720,
1551 720, 720, 720, 720, 720, 720, 720, 720, 720, 720,
1553 720, 720, 720, 720, 721, 721, 0, 721, 721, 721,
1554 721, 721, 721, 721, 721, 721, 721, 721, 721, 721,
1555 721, 721, 721, 722, 0, 722, 0, 0, 0, 722,
1556 722, 722, 0, 0, 722, 723, 723, 0, 723, 723,
1557 723, 723, 723, 723, 723, 723, 723, 723, 723, 723,
1558 723, 723, 723, 723, 724, 724, 724, 724, 724, 724,
1559 724, 724, 724, 724, 724, 724, 724, 724, 724, 724,
1560 724, 724, 724, 725, 725, 725, 725, 725, 725, 725,
1561 725, 725, 725, 725, 725, 725, 725, 725, 725, 725,
1562 725, 725, 726, 726, 726, 726, 726, 726, 726, 726,
1564 726, 726, 726, 726, 726, 726, 726, 726, 726, 726,
1565 726, 727, 727, 727, 727, 727, 727, 727, 727, 727,
1566 727, 727, 727, 727, 727, 727, 727, 727, 727, 727,
1567 728, 728, 728, 730, 0, 0, 0, 730, 0, 730,
1568 730, 730, 730, 0, 730, 731, 731, 731, 731, 731,
1569 731, 731, 731, 731, 731, 731, 731, 731, 731, 731,
1570 731, 731, 731, 731, 732, 732, 732, 732, 732, 732,
1571 732, 732, 732, 732, 732, 732, 732, 732, 732, 732,
1572 732, 732, 732, 733, 0, 0, 0, 733, 733, 733,
1573 0, 733, 733, 733, 733, 733, 733, 733, 733, 734,
1575 734, 734, 734, 734, 734, 734, 734, 734, 734, 734,
1576 734, 734, 734, 734, 734, 734, 734, 734, 735, 735,
1577 735, 735, 735, 735, 735, 735, 735, 735, 735, 735,
1578 735, 735, 735, 735, 735, 735, 735, 736, 736, 0,
1579 736, 736, 736, 736, 736, 736, 736, 736, 736, 736,
1580 736, 736, 736, 736, 736, 736, 737, 737, 737, 737,
1581 737, 737, 737, 737, 737, 737, 737, 737, 737, 737,
1582 737, 737, 737, 737, 737, 738, 738, 738, 738, 0,
1583 738, 738, 738, 738, 738, 738, 738, 738, 738, 738,
1584 738, 738, 738, 738, 739, 739, 739, 739, 739, 739,
1586 739, 739, 739, 739, 739, 739, 739, 739, 739, 739,
1587 739, 739, 739, 740, 740, 0, 740, 740, 740, 740,
1588 740, 740, 740, 740, 740, 740, 740, 740, 740, 740,
1589 740, 740, 741, 741, 0, 741, 741, 741, 741, 741,
1590 741, 741, 741, 741, 741, 741, 741, 741, 741, 741,
1591 741, 742, 0, 742, 742, 0, 0, 742, 742, 742,
1592 0, 0, 742, 743, 743, 0, 743, 743, 743, 743,
1593 743, 743, 743, 743, 743, 743, 743, 743, 743, 743,
1594 743, 743, 744, 744, 0, 744, 744, 744, 744, 744,
1595 744, 744, 744, 744, 744, 744, 744, 744, 744, 744,
1597 744, 745, 745, 0, 745, 745, 745, 745, 745, 745,
1598 745, 745, 745, 745, 745, 745, 745, 745, 745, 745,
1599 746, 746, 746, 746, 746, 746, 746, 746, 746, 746,
1600 746, 746, 746, 746, 746, 746, 746, 746, 746, 747,
1601 747, 747, 747, 747, 747, 747, 747, 747, 747, 747,
1602 747, 747, 747, 747, 747, 747, 747, 747, 748, 748,
1603 748, 748, 748, 748, 748, 748, 748, 748, 748, 748,
1604 748, 748, 748, 748, 748, 748, 748, 749, 749, 749,
1605 749, 749, 749, 749, 749, 749, 749, 749, 749, 749,
1606 749, 749, 749, 749, 749, 749, 750, 750, 0, 0,
1608 750, 750, 0, 750, 750, 750, 750, 750, 750, 750,
1609 750, 750, 751, 0, 0, 0, 0, 0, 751, 751,
1610 751, 751, 0, 751, 752, 752, 752, 752, 752, 752,
1611 752, 752, 752, 752, 752, 752, 752, 752, 752, 752,
1612 752, 752, 752, 753, 753, 753, 753, 753, 753, 753,
1613 753, 753, 753, 753, 753, 753, 753, 753, 753, 753,
1614 753, 753, 754, 754, 0, 754, 754, 754, 754, 754,
1615 754, 754, 754, 754, 754, 754, 754, 754, 754, 754,
1616 754, 755, 755, 0, 755, 755, 755, 755, 755, 755,
1617 755, 755, 755, 755, 755, 755, 755, 755, 755, 755,
1619 756, 756, 0, 0, 756, 756, 756, 756, 756, 756,
1620 756, 756, 756, 756, 756, 756, 757, 757, 757, 757,
1621 0, 757, 757, 757, 757, 757, 757, 757, 757, 757,
1622 757, 757, 757, 757, 757, 758, 758, 758, 758, 758,
1623 758, 758, 758, 758, 758, 758, 758, 758, 758, 758,
1624 758, 758, 758, 758, 759, 759, 0, 759, 759, 759,
1625 759, 759, 759, 759, 759, 759, 759, 759, 759, 759,
1626 759, 759, 759, 760, 760, 0, 760, 760, 760, 760,
1627 760, 760, 760, 760, 760, 760, 760, 760, 760, 760,
1628 760, 760, 761, 761, 0, 761, 761, 761, 761, 761,
1630 761, 761, 761, 761, 761, 761, 761, 761, 761, 761,
1631 761, 762, 762, 0, 762, 762, 762, 762, 762, 762,
1632 762, 762, 762, 762, 762, 762, 762, 762, 762, 762,
1633 763, 763, 0, 763, 763, 763, 763, 763, 763, 763,
1634 763, 763, 763, 763, 763, 763, 763, 763, 763, 764,
1635 764, 0, 764, 764, 764, 764, 764, 764, 764, 764,
1636 764, 764, 764, 764, 764, 764, 764, 764, 765, 765,
1637 0, 765, 765, 765, 765, 765, 765, 765, 765, 765,
1638 765, 765, 765, 765, 765, 765, 765, 766, 766, 0,
1639 766, 766, 766, 766, 766, 766, 766, 766, 766, 766,
1641 766, 766, 766, 766, 766, 766, 767, 767, 767, 767,
1642 767, 767, 767, 767, 767, 767, 767, 767, 767, 767,
1643 767, 767, 767, 767, 767, 768, 768, 768, 768, 768,
1644 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
1645 768, 768, 768, 768, 769, 769, 769, 769, 769, 769,
1646 769, 769, 769, 769, 769, 769, 769, 769, 769, 769,
1647 769, 769, 769, 770, 0, 0, 0, 0, 0, 770,
1648 770, 770, 770, 770, 770, 770, 770, 770, 771, 771,
1649 771, 771, 771, 771, 771, 771, 771, 771, 771, 771,
1650 771, 771, 771, 771, 771, 771, 771, 772, 772, 772,
1652 772, 772, 772, 772, 772, 772, 772, 772, 772, 772,
1653 772, 772, 772, 772, 772, 772, 773, 773, 773, 773,
1654 773, 773, 773, 773, 773, 773, 773, 773, 773, 773,
1655 773, 773, 773, 773, 773, 774, 0, 0, 0, 0,
1656 0, 774, 774, 774, 774, 775, 775, 0, 775, 775,
1657 775, 775, 775, 775, 775, 775, 775, 775, 775, 775,
1658 775, 775, 775, 775, 776, 776, 776, 776, 776, 776,
1659 776, 776, 776, 776, 776, 776, 776, 776, 776, 776,
1660 776, 776, 776, 777, 777, 0, 777, 777, 777, 777,
1661 777, 777, 777, 777, 777, 777, 777, 777, 777, 777,
1663 777, 777, 778, 778, 0, 778, 778, 778, 778, 778,
1664 778, 778, 778, 778, 778, 778, 778, 778, 778, 778,
1665 778, 779, 779, 0, 779, 779, 779, 779, 779, 779,
1666 779, 779, 779, 779, 779, 779, 779, 779, 779, 779,
1667 780, 780, 780, 780, 780, 780, 780, 780, 780, 780,
1668 780, 780, 780, 780, 780, 780, 780, 780, 780, 781,
1669 781, 781, 781, 781, 781, 781, 781, 781, 781, 781,
1670 781, 781, 781, 781, 781, 781, 781, 781, 782, 782,
1671 782, 782, 782, 782, 782, 782, 782, 782, 782, 782,
1672 782, 782, 782, 782, 782, 782, 782, 783, 783, 783,
1674 783, 783, 783, 783, 783, 783, 783, 783, 783, 783,
1675 783, 783, 783, 783, 783, 783, 696, 696, 696, 696,
1676 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1677 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1678 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1679 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1680 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1681 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1682 696, 696, 696, 696, 696, 696, 696, 696, 696, 696
1685 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
1686 static char *yy_full_match;
1688 static int yy_looking_for_trail_begin = 0;
1689 static int yy_full_lp;
1690 static int *yy_full_state;
1691 #define YY_TRAILING_MASK 0x2000
1692 #define YY_TRAILING_HEAD_MASK 0x4000
1695 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
1696 yy_cp = yy_full_match; /* restore poss. backed-over text */ \
1697 yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \
1698 yy_state_ptr = yy_full_state; /* restore orig. state */ \
1699 yy_current_state = *yy_state_ptr; /* restore curr. state */ \
1703 #define yymore() yymore_used_but_not_detected
1704 #define YY_MORE_ADJ 0
1705 #define YY_RESTORE_YY_MORE_OFFSET
1709 * parser.l -- lex parser of algebraic chess moves for XBoard
1711 * Copyright 1991 by Digital Equipment Corporation, Maynard,
1714 * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
1715 * 2007, 2008, 2009 Free Software Foundation, Inc.
1717 * The following terms apply to Digital Equipment Corporation's copyright
1718 * interest in XBoard:
1719 * ------------------------------------------------------------------------
1720 * All Rights Reserved
1722 * Permission to use, copy, modify, and distribute this software and its
1723 * documentation for any purpose and without fee is hereby granted,
1724 * provided that the above copyright notice appear in all copies and that
1725 * both that copyright notice and this permission notice appear in
1726 * supporting documentation, and that the name of Digital not be
1727 * used in advertising or publicity pertaining to distribution of the
1728 * software without specific, written prior permission.
1730 * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
1731 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
1732 * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
1733 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
1734 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
1735 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
1737 * ------------------------------------------------------------------------
1739 * The following terms apply to the enhanced version of XBoard
1740 * distributed by the Free Software Foundation:
1741 * ------------------------------------------------------------------------
1743 * GNU XBoard is free software: you can redistribute it and/or modify
1744 * it under the terms of the GNU General Public License as published by
1745 * the Free Software Foundation, either version 3 of the License, or (at
1746 * your option) any later version.
1748 * GNU XBoard is distributed in the hope that it will be useful, but
1749 * WITHOUT ANY WARRANTY; without even the implied warranty of
1750 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1751 * General Public License for more details.
1753 * You should have received a copy of the GNU General Public License
1754 * along with this program. If not, see http://www.gnu.org/licenses/.
1756 *------------------------------------------------------------------------
1757 ** See the file ChangeLog for a revision history. */
1759 /* This parser handles all forms of promotion.
1760 * The parser resolves ambiguous moves by searching and check-testing.
1761 * It also parses comments of the form [anything] or (anything).
1763 * [HGM] Parser extensively modified for bigger boards, Shogi-like syntax,
1764 * and unknow pieces. All pieces are now mandatory upper case, but can be
1765 * any letter A-Z. Files must be lower case (as before), but can run upto 'l'.
1766 * Ranks can be 0-9. The parser returns 0 for off-board files and ranks.
1767 * For an unknown piece (as mover or promotion piece) it returns
1768 * IllegalMove, like it does when the piece doesn't match.
1769 * Promotions can now also be appended Shogi-style, a bare '=' or '+',
1770 * and this is then returned as promotion character. The piece indicator
1771 * can be prefixed by a '+' to indicate it is a promoted piece.
1776 #define NO_CONSTRAINT -1
1779 #define UNPUT_BUF_SIZE YYLMAX
1782 /* yytext is probably a char*, but could be a char[]. yy_text is set
1783 in YY_DECL below, because if yytext is a char*, its value is not
1786 #else /*!FLEX_SCANNER*/
1787 /* yytext is definitely a char[], so yy_text can be set here, statically. */
1788 char *yy_text = (char *) yytext;
1793 /* [AP] use prototypes in function declarations */
1794 #define YY_USE_PROTOS
1796 #ifdef YY_USE_PROTOS
1797 #define YY_PROTO(proto) proto
1799 #define YY_PROTO(proto) ()
1801 /* end of [AP] fix */
1804 #define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
1807 int _yylex YY_PROTO((void)); \
1808 int yylex YY_PROTO((void)) \
1810 int result = _yylex(); \
1811 yy_text = (char *) yytext; \
1814 int _yylex YY_PROTO((void))
1822 /* The includes must be here, below the #undef input */
1827 # include <stdlib.h>
1828 # include <string.h>
1829 #else /* not STDC_HEADERS */
1831 # include <string.h>
1832 # else /* not HAVE_STRING_H */
1833 # include <strings.h>
1834 # endif /* not HAVE_STRING_H */
1835 #endif /* not STDC_HEADERS */
1838 # include <unistd.h>
1841 #if defined(_amigados)
1844 # include <fcntl.h> /* isatty() prototype */
1845 # endif /* HAVE_FCNTL_H */
1846 #endif /* defined(_amigados) */
1849 #include "backend.h"
1850 #include "frontend.h"
1854 extern int PosFlags P((int));
1856 extern Board boards[MAX_MOVES];
1858 int yyskipmoves = FALSE;
1859 char currentMoveString[YYLMAX];
1860 #ifndef FLEX_SCANNER
1861 char unputBuffer[UNPUT_BUF_SIZE];
1866 void my_yy_input P((char *buf, int *result, int max_size));
1867 #else /*!FLEX_SCANNER*/
1868 static int input P((void));
1869 static void output P((int ch));
1870 static void unput P((int ch));
1871 int yylook P((void));
1872 int yyback P((int *, int));
1875 int yywrap P((void));
1876 extern void CopyBoard P((Board to, Board from));
1879 /* Macros after this point can all be overridden by user definitions in
1883 #ifndef YY_SKIP_YYWRAP
1885 extern "C" int yywrap YY_PROTO(( void ));
1887 extern int yywrap YY_PROTO(( void ));
1892 static void yyunput YY_PROTO(( int c, char *buf_ptr ));
1896 static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
1899 #ifdef YY_NEED_STRLEN
1900 static int yy_flex_strlen YY_PROTO(( yyconst char * ));
1905 static int yyinput YY_PROTO(( void ));
1907 static int input YY_PROTO(( void ));
1912 static int yy_start_stack_ptr = 0;
1913 static int yy_start_stack_depth = 0;
1914 static int *yy_start_stack = 0;
1915 #ifndef YY_NO_PUSH_STATE
1916 static void yy_push_state YY_PROTO(( int new_state ));
1918 #ifndef YY_NO_POP_STATE
1919 static void yy_pop_state YY_PROTO(( void ));
1921 #ifndef YY_NO_TOP_STATE
1922 static int yy_top_state YY_PROTO(( void ));
1926 #define YY_NO_PUSH_STATE 1
1927 #define YY_NO_POP_STATE 1
1928 #define YY_NO_TOP_STATE 1
1931 #ifdef YY_MALLOC_DECL
1939 /* Just try to get by without declaring the routines. This will fail
1940 * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
1941 * or sizeof(void*) != sizeof(int).
1946 /* Amount of stuff to slurp up with each read. */
1947 #ifndef YY_READ_BUF_SIZE
1948 #define YY_READ_BUF_SIZE 8192
1951 /* Copy whatever the last rule matched to the standard output. */
1954 /* This used to be an fputs(), but since the string might contain NUL's,
1955 * we now use fwrite().
1957 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
1960 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
1961 * is returned in "result".
1964 #define YY_INPUT(buf,result,max_size) \
1965 if ( yy_current_buffer->yy_is_interactive ) \
1968 for ( n = 0; n < max_size && \
1969 (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1970 buf[n] = (char) c; \
1972 buf[n++] = (char) c; \
1973 if ( c == EOF && ferror( yyin ) ) \
1974 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1977 else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
1978 && ferror( yyin ) ) \
1979 YY_FATAL_ERROR( "input in flex scanner failed" );
1982 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1983 * we don't want an extra ';' after the "return" because that will cause
1984 * some compilers to complain about unreachable statements.
1987 #define yyterminate() return YY_NULL
1990 /* Number of entries by which start-condition stack grows. */
1991 #ifndef YY_START_STACK_INCR
1992 #define YY_START_STACK_INCR 25
1995 /* Report a fatal error. */
1996 #ifndef YY_FATAL_ERROR
1997 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
2000 /* Default declaration of generated scanner - a define so the user can
2001 * easily add parameters.
2004 #define YY_DECL int yylex YY_PROTO(( void ))
2007 /* Code executed at the beginning of each rule, after yytext and yyleng
2010 #ifndef YY_USER_ACTION
2011 #define YY_USER_ACTION
2014 /* Code executed at the end of each rule. */
2016 #define YY_BREAK break;
2019 #define YY_RULE_SETUP \
2021 yy_current_buffer->yy_at_bol = \
2022 (yytext[yyleng - 1] == '\n'); \
2027 register yy_state_type yy_current_state;
2028 register char *yy_cp, *yy_bp;
2029 register int yy_act;
2043 yy_start = 1; /* first start state */
2051 if ( ! yy_current_buffer )
2053 yy_create_buffer( yyin, YY_BUF_SIZE );
2055 yy_load_buffer_state();
2058 while ( 1 ) /* loops until end-of-file is reached */
2062 /* Support of yytext. */
2063 *yy_cp = yy_hold_char;
2065 /* yy_bp points to the position in yy_ch_buf of the start of
2070 yy_current_state = yy_start;
2071 yy_current_state += YY_AT_BOL();
2072 yy_state_ptr = yy_state_buf;
2073 *yy_state_ptr++ = yy_current_state;
2077 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
2078 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2080 yy_current_state = (int) yy_def[yy_current_state];
2081 if ( yy_current_state >= 697 )
2082 yy_c = yy_meta[(unsigned int) yy_c];
2084 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2085 *yy_state_ptr++ = yy_current_state;
2088 while ( yy_base[yy_current_state] != 4517 );
2091 yy_current_state = *--yy_state_ptr;
2092 yy_lp = yy_accept[yy_current_state];
2093 find_rule: /* we branch to this label when backing up */
2094 for ( ; ; ) /* until we find what rule we matched */
2096 if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
2098 yy_act = yy_acclist[yy_lp];
2099 if ( yy_act & YY_TRAILING_HEAD_MASK ||
2100 yy_looking_for_trail_begin )
2102 if ( yy_act == yy_looking_for_trail_begin )
2104 yy_looking_for_trail_begin = 0;
2105 yy_act &= ~YY_TRAILING_HEAD_MASK;
2109 else if ( yy_act & YY_TRAILING_MASK )
2111 yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
2112 yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
2116 yy_full_match = yy_cp;
2117 yy_full_state = yy_state_ptr;
2125 yy_current_state = *--yy_state_ptr;
2126 yy_lp = yy_accept[yy_current_state];
2129 YY_DO_BEFORE_ACTION;
2132 do_action: /* This label is used only to access EOF actions. */
2136 { /* beginning of action switch */
2141 * Fully-qualified algebraic move, possibly with promotion
2143 int skip1 = 0, skip2 = 0, skip3 = 0, promoted = 0;
2148 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2150 if (yytext[0] == '+') skip1 = skip3 = promoted = 1; /* [HGM] Shogi promoted */
2153 if (yytext[1+skip1] == '/') skip1++;
2155 /* remove the [xX:-] */
2156 if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
2157 (yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
2159 currentMoveString[0] = yytext[1+skip1];
2160 currentMoveString[1] = yytext[2+skip1];
2161 currentMoveString[2] = yytext[3+skip1+skip2];
2162 currentMoveString[3] = yytext[4+skip1+skip2];
2163 currentMoveString[4] = NULLCHAR;
2165 if (appData.debugMode) {
2166 fprintf(debugFP, "Parser Qa1b2: yyleng=%d\n",
2170 if (yyleng-skip1-skip2 > 5) { char c;
2171 if (yytext[yyleng-1] == ')') {
2172 c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
2174 c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
2176 currentMoveString[5] = NULLCHAR;
2177 if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
2178 return IllegalMove; /* [HGM] promotion to invalid piece */
2181 if (appData.debugMode) {
2182 fprintf(debugFP, "parser: %s\n", currentMoveString);
2184 /* [HGM] do not allow values beyond board size */
2185 if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
2186 currentMoveString[1] - ONE < 0 ||
2187 currentMoveString[0] - AAA >= BOARD_RGHT ||
2188 currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2189 currentMoveString[3] - ONE < 0 ||
2190 currentMoveString[2] - AAA >= BOARD_RGHT ||
2191 currentMoveString[0] - AAA < BOARD_LEFT ||
2192 currentMoveString[2] - AAA < BOARD_LEFT )
2195 piece = boards[yyboardindex]
2196 [currentMoveString[1] - ONE][currentMoveString[0] - AAA];
2197 if(promoted) piece = (ChessSquare) (DEMOTED piece);
2198 c = PieceToChar(piece);
2199 if(c == '~') c = PieceToChar((ChessSquare) (DEMOTED piece));
2200 if (ToLower(yytext[skip3]) != ToLower(c))
2201 return (int) IllegalMove;
2203 result = LegalityTest(boards[yyboardindex],
2204 PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
2206 initialRights, /* [HGM] assume all castlings allowed */
2207 currentMoveString[1] - ONE,
2208 currentMoveString[0] - AAA,
2209 currentMoveString[3] - ONE,
2210 currentMoveString[2] - AAA,
2211 currentMoveString[4]);
2213 if (currentMoveString[4] == NULLCHAR &&
2214 (result == WhitePromotionKnight || result == BlackPromotionKnight ||
2215 result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2216 currentMoveString[4] = PieceToChar(BlackQueen);
2217 currentMoveString[5] = NULLCHAR;
2220 return (int) result;
2227 * Simple algebraic move, possibly with promotion
2228 * [HGM] Engine moves are received in this format, with lower-case promoChar!
2233 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2235 /* remove the [xX:-] */
2236 if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
2237 (yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
2239 currentMoveString[0] = yytext[0];
2240 currentMoveString[1] = yytext[1];
2241 currentMoveString[2] = yytext[2+skip];
2242 currentMoveString[3] = yytext[3+skip];
2243 currentMoveString[4] = NULLCHAR;
2245 if (yyleng-skip > 4) { char c;
2246 if (yytext[yyleng-1] == ')') {
2247 c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
2249 c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
2251 currentMoveString[5] = NULLCHAR;
2252 if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
2256 /* [HGM] do not allow values beyond board size */
2257 if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
2258 currentMoveString[1] - ONE < 0 ||
2259 currentMoveString[0] - AAA >= BOARD_RGHT ||
2260 currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2261 currentMoveString[3] - ONE < 0 ||
2262 currentMoveString[2] - AAA >= BOARD_RGHT ||
2263 currentMoveString[0] - AAA < BOARD_LEFT ||
2264 currentMoveString[2] - AAA < BOARD_LEFT )
2267 result = LegalityTest(boards[yyboardindex],
2268 PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
2270 initialRights, /* [HGM] assume all castlings allowed */
2271 currentMoveString[1] - ONE,
2272 currentMoveString[0] - AAA,
2273 currentMoveString[3] - ONE,
2274 currentMoveString[2] - AAA,
2275 currentMoveString[4]);
2277 if (currentMoveString[4] == NULLCHAR &&
2278 (result == WhitePromotionKnight || result == BlackPromotionKnight ||
2279 result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2280 if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier)
2281 currentMoveString[4] = PieceToChar(BlackFerz);
2282 else if(gameInfo.variant == VariantGreat)
2283 currentMoveString[4] = PieceToChar(BlackMan);
2285 currentMoveString[4] = PieceToChar(BlackQueen);
2286 currentMoveString[5] = NULLCHAR;
2289 return (int) result;
2296 * Pawn move, possibly with promotion
2298 DisambiguateClosure cl;
2299 int skip = 0; char c;
2301 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2303 /* remove the =() */
2304 if (yytext[2] == '=' && yytext[3] != NULLCHAR) skip++;
2305 if (yytext[2+skip] == '(') skip++;
2307 cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2309 cl.ffIn = yytext[0] - AAA;
2310 cl.rtIn = yytext[1] - ONE;
2311 cl.ftIn = yytext[0] - AAA;
2312 c = cl.promoCharIn = yytext[2+skip];
2314 /* [HGM] do not allow values beyond board size */
2315 if(cl.rtIn >= BOARD_HEIGHT ||
2317 cl.ffIn >= BOARD_RGHT ||
2318 cl.ftIn < BOARD_LEFT )
2321 if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
2325 Disambiguate(boards[yyboardindex],
2326 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2328 currentMoveString[0] = cl.ff + AAA;
2329 currentMoveString[1] = cl.rf + ONE;
2330 currentMoveString[2] = cl.ft + AAA;
2331 currentMoveString[3] = cl.rt + ONE;
2332 currentMoveString[4] = cl.promoChar;
2333 currentMoveString[5] = NULLCHAR;
2335 return (int) cl.kind;
2342 * Pawn capture, possibly with promotion, possibly ambiguous
2344 DisambiguateClosure cl;
2345 int skip1 = 0, skip2 = 0; char c;
2347 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2349 /* remove trailing ep or e.p. (nonstandard PGN) */
2350 if (yytext[yyleng-1] == 'p') {
2352 yytext[yyleng] = NULLCHAR;
2353 } else if (yytext[yyleng-1] == '.') {
2355 yytext[yyleng] = NULLCHAR;
2358 /* remove the [xX:-] and =() */
2359 if ((yytext[1] == 'x') || (yytext[1] == 'X')
2360 || (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
2361 if (yytext[2+skip1] == '=' && yytext[3+skip1] != NULLCHAR) skip2++;
2362 if (yytext[2+skip1+skip2] == '(') skip2++;
2364 cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2366 cl.ffIn = yytext[0] - AAA;
2368 cl.ftIn = yytext[1+skip1] - AAA;
2369 c = cl.promoCharIn = yytext[2+skip1+skip2];
2371 /* [HGM] do not allow values beyond board size */
2372 if(cl.ffIn >= BOARD_RGHT ||
2373 cl.ffIn < BOARD_LEFT ||
2374 cl.ftIn >= BOARD_RGHT ||
2375 cl.ftIn < BOARD_LEFT )
2378 if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
2381 Disambiguate(boards[yyboardindex],
2382 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2384 currentMoveString[0] = cl.ff + AAA;
2385 currentMoveString[1] = cl.rf + ONE;
2386 currentMoveString[2] = cl.ft + AAA;
2387 currentMoveString[3] = cl.rt + ONE;
2388 currentMoveString[4] = cl.promoChar;
2389 currentMoveString[5] = NULLCHAR;
2391 return (int) cl.kind;
2398 * unambiguously abbreviated Pawn capture, possibly with promotion
2401 ChessMove result; char c;
2403 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2405 /* remove trailing ep or e.p. (nonstandard PGN) */
2406 if (yytext[yyleng-1] == 'p') {
2408 yytext[yyleng] = NULLCHAR;
2409 } else if (yytext[yyleng-1] == '.') {
2411 yytext[yyleng] = NULLCHAR;
2414 /* remove the [xX:-] */
2415 if ((yytext[1] == 'x') || (yytext[1] == 'X')
2416 || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
2418 currentMoveString[0] = yytext[0];
2419 currentMoveString[2] = yytext[1+skip];
2420 currentMoveString[3] = yytext[2+skip];
2422 /* [HGM] do not allow values beyond board size */
2423 if(currentMoveString[0] - AAA >= BOARD_RGHT ||
2424 currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2425 currentMoveString[3] - ONE < 0 ||
2426 currentMoveString[2] - AAA >= BOARD_RGHT ||
2427 currentMoveString[0] - AAA < BOARD_LEFT ||
2428 currentMoveString[2] - AAA < BOARD_LEFT )
2431 if (gameInfo.variant == VariantXiangqi && /* [HGM] In Xiangqi rank stays same */
2432 currentMoveString[0] != currentMoveString[2] ) {
2433 currentMoveString[1] = yytext[2+skip];
2435 if (WhiteOnMove(yyboardindex)) {
2436 if (yytext[2+skip] == ONE) return (int) ImpossibleMove;
2437 currentMoveString[1] = yytext[2+skip] - 1;
2439 currentMoveString[1] = currentMoveString[3] + 1;
2440 if (currentMoveString[3] == ONE+BOARD_HEIGHT-1) return (int) ImpossibleMove;
2442 if (yyleng-skip > 3) {
2443 if (yytext[yyleng-1] == ')')
2444 c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
2446 c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
2447 currentMoveString[5] = NULLCHAR;
2448 if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
2451 currentMoveString[4] = NULLCHAR;
2454 result = LegalityTest(boards[yyboardindex],
2455 PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
2457 initialRights, /* [HGM] assume all castlings allowed */
2458 currentMoveString[1] - ONE,
2459 currentMoveString[0] - AAA,
2460 currentMoveString[3] - ONE,
2461 currentMoveString[2] - AAA,
2462 currentMoveString[4]);
2464 if (currentMoveString[4] == NULLCHAR &&
2465 (result == WhitePromotionQueen || result == BlackPromotionQueen ||
2466 result == WhitePromotionKnight || result == BlackPromotionKnight)) {
2467 currentMoveString[4] = PieceToChar(BlackQueen);
2468 // [HGM] shatranj: take care of variants without Queen
2469 if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier)
2470 currentMoveString[4] = PieceToChar(BlackFerz);
2471 if(gameInfo.variant == VariantGreat)
2472 currentMoveString[4] = PieceToChar(BlackMan);
2473 currentMoveString[5] = NULLCHAR;
2476 if (result != IllegalMove) return (int) result;
2478 /* Special case: improperly written en passant capture */
2479 if (WhiteOnMove(yyboardindex)) {
2480 if (currentMoveString[3] == '5') {
2481 currentMoveString[1] = '5';
2482 currentMoveString[3] = '6';
2484 return (int) IllegalMove;
2487 if (currentMoveString[3] == '4') {
2488 currentMoveString[1] = '4';
2489 currentMoveString[3] = '3';
2491 return (int) IllegalMove;
2495 result = LegalityTest(boards[yyboardindex],
2496 PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!
2498 initialRights, /* [HGM] assume all castlings allowed */
2499 currentMoveString[1] - ONE,
2500 currentMoveString[0] - AAA,
2501 currentMoveString[3] - ONE,
2502 currentMoveString[2] - AAA,
2503 currentMoveString[4]);
2505 if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
2506 return (int) result;
2508 return (int) IllegalMove;
2515 * piece move, possibly ambiguous
2517 DisambiguateClosure cl;
2518 int skip = 0, skip2 = 0, promoted = 0;
2520 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2522 if(yytext[0] == '+') promoted = skip = skip2 = 1;
2524 /* remove the [xX:-] */
2525 if ((yytext[1+skip] == 'x') || (yytext[1+skip] == 'X')
2526 || (yytext[1+skip] == ':') || (yytext[1+skip] == '-')) skip++;
2528 if (WhiteOnMove(yyboardindex)) {
2529 cl.pieceIn = CharToPiece(ToUpper(yytext[skip2]));
2531 cl.pieceIn = CharToPiece(ToLower(yytext[skip2]));
2533 if(promoted) cl.pieceIn = (ChessSquare) (PROMOTED cl.pieceIn);
2537 cl.rtIn = yytext[2+skip] - ONE;
2538 cl.ftIn = yytext[1+skip] - AAA;
2539 cl.promoCharIn = NULLCHAR;
2541 if(yyleng-skip > 3) /* [HGM] can have Shogi-style promotion */
2542 cl.promoCharIn = yytext[yyleng-1];
2544 if (appData.debugMode) {
2545 fprintf(debugFP, "Parser Qa1: yyleng=%d, %d(%d,%d)-(%d,%d) = %d (%c)\n",
2547 cl.pieceIn,cl.ffIn,cl.rfIn,cl.ftIn,cl.rtIn,cl.promoCharIn,cl.promoCharIn?cl.promoCharIn:' ');
2550 /* [HGM] but do not allow values beyond board size */
2551 if(cl.rtIn >= BOARD_HEIGHT ||
2553 cl.ftIn >= BOARD_RGHT ||
2554 cl.ftIn < BOARD_LEFT )
2557 Disambiguate(boards[yyboardindex],
2558 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2560 currentMoveString[0] = cl.ff + AAA;
2561 currentMoveString[1] = cl.rf + ONE;
2562 currentMoveString[2] = cl.ft + AAA;
2563 currentMoveString[3] = cl.rt + ONE;
2564 currentMoveString[4] = cl.promoChar;
2565 currentMoveString[5] = NULLCHAR;
2567 return (int) cl.kind;
2574 * piece move with rank or file disambiguator
2576 DisambiguateClosure cl;
2577 int skip = 0, skip2 = 0; int promoted=0;
2579 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2581 if(yytext[0]=='+') promoted = skip = skip2 = 1;
2583 /* remove the [xX:-] */
2584 if ((yytext[2+skip] == 'x') || (yytext[2+skip] == 'X')
2585 || (yytext[2+skip] == ':') || (yytext[2+skip] == '-')) skip++;
2587 if (WhiteOnMove(yyboardindex)) {
2588 cl.pieceIn = CharToPiece(ToUpper(yytext[skip2]));
2590 cl.pieceIn = CharToPiece(ToLower(yytext[skip2]));
2592 if(promoted) cl.pieceIn = (ChessSquare) (PROMOTED cl.pieceIn);
2594 if (isalpha(yytext[1+skip2])) {
2596 cl.ffIn = yytext[1+skip2] - AAA;
2598 if(cl.ffIn >= BOARD_RGHT ||
2599 cl.ffIn < BOARD_LEFT ) return 0;
2601 cl.rfIn = yytext[1+skip2] - ONE;
2603 if(cl.rfIn >= BOARD_HEIGHT ||
2604 cl.rfIn < 0) return 0;
2606 cl.rtIn = yytext[3+skip] - ONE;
2607 cl.ftIn = yytext[2+skip] - AAA;
2608 cl.promoCharIn = NULLCHAR;
2610 if(yyleng-skip > 4) /* [HGM] can have Shogi-style promotion */
2611 cl.promoCharIn = yytext[yyleng-1];
2613 /* [HGM] do not allow values beyond board size */
2614 if(cl.rtIn >= BOARD_HEIGHT ||
2616 cl.ftIn >= BOARD_RGHT ||
2617 cl.ftIn < BOARD_LEFT )
2620 Disambiguate(boards[yyboardindex],
2621 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2623 currentMoveString[0] = cl.ff + AAA;
2624 currentMoveString[1] = cl.rf + ONE;
2625 currentMoveString[2] = cl.ft + AAA;
2626 currentMoveString[3] = cl.rt + ONE;
2627 currentMoveString[4] = cl.promoChar;
2628 currentMoveString[5] = NULLCHAR;
2630 return (int) cl.kind;
2638 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2640 /* [HGM] all squares referenced to board edges in stead of absolute */
2641 if (WhiteOnMove(yyboardindex)) {
2642 if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
2643 /* ICS wild castling */
2645 ff = (BOARD_WIDTH-1)>>1;
2650 ff = BOARD_WIDTH>>1;
2655 if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {
2656 /* ICS wild castling */
2657 rf = BOARD_HEIGHT-1;
2658 ff = (BOARD_WIDTH-1)>>1;
2659 rt = BOARD_HEIGHT-1;
2662 rf = BOARD_HEIGHT-1;
2663 ff = BOARD_WIDTH>>1;
2664 rt = BOARD_HEIGHT-1;
2668 if(gameInfo.variant == VariantFischeRandom) {
2669 if (WhiteOnMove(yyboardindex)) {
2670 ff = initialRights[2];
2671 ft = initialRights[1];
2673 ff = initialRights[5];
2674 ft = initialRights[4];
2676 fprintf(debugFP, "Parser FRC long %d %d\n", ff, ft);
2677 if(ff < 0 || ft < 0) return 0;
2679 sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2680 if (appData.debugMode) {
2681 fprintf(debugFP, "long castling %d %d\n", ff, ft);
2683 return (int) LegalityTest(boards[yyboardindex],
2684 PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: e.p.!
2686 castlingRights[yyboardindex], /* [HGM] use true castling rights */
2687 rf, ff, rt, ft, NULLCHAR);
2695 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2697 if (WhiteOnMove(yyboardindex)) {
2698 if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
2699 /* ICS wild castling */
2701 ff = (BOARD_WIDTH-1)>>1;
2706 ff = BOARD_WIDTH>>1;
2711 if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {
2712 /* ICS wild castling */
2713 rf = BOARD_HEIGHT-1;
2714 ff = (BOARD_WIDTH-1)>>1;
2715 rt = BOARD_HEIGHT-1;
2718 rf = BOARD_HEIGHT-1;
2719 ff = BOARD_WIDTH>>1;
2720 rt = BOARD_HEIGHT-1;
2724 if(gameInfo.variant == VariantFischeRandom) {
2725 if (WhiteOnMove(yyboardindex)) {
2726 ff = initialRights[2];
2727 ft = initialRights[0];
2729 ff = initialRights[5];
2730 ft = initialRights[3];
2732 if (appData.debugMode) {
2733 fprintf(debugFP, "Parser FRC short %d %d\n", ff, ft);
2735 if(ff < 0 || ft < 0) return 0;
2737 sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2738 if (appData.debugMode) {
2739 fprintf(debugFP, "short castling %d %d\n", ff, ft);
2742 return (int) LegalityTest(boards[yyboardindex],
2743 PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: e.p.!
2745 castlingRights[yyboardindex], /* [HGM] use true castling rights */
2746 rf, ff, rt, ft, NULLCHAR);
2752 /* Bughouse piece drop. No legality checking for now. */
2753 currentMoveString[1] = '@';
2754 currentMoveString[2] = yytext[2];
2755 currentMoveString[3] = yytext[3];
2756 currentMoveString[4] = NULLCHAR;
2758 if (appData.debugMode) {
2759 fprintf(debugFP, "Drop: %s\n", currentMoveString);
2761 /* [HGM] do not allow values beyond board size */
2762 if(currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2763 currentMoveString[2] - AAA >= BOARD_WIDTH )
2766 if (WhiteOnMove(yyboardindex)) {
2767 currentMoveString[0] = ToUpper(yytext[0]);
2768 return (int) WhiteDrop;
2770 currentMoveString[0] = ToLower(yytext[0]);
2771 return (int) BlackDrop;
2778 if (WhiteOnMove(yyboardindex))
2779 return (int) BlackWins;
2781 return (int) WhiteWins;
2787 return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2793 return (int) GameUnfinished;
2799 return (int) GameIsDrawn;
2805 return (int) GameIsDrawn;
2811 if (WhiteOnMove(yyboardindex))
2812 return (int) BlackWins;
2814 return (int) WhiteWins;
2820 if (WhiteOnMove(yyboardindex))
2821 return (int) BlackWins;
2823 return (int) WhiteWins;
2829 return (int) GameIsDrawn;
2835 return (int) GameIsDrawn;
2841 return (int) (ToUpper(yytext[0]) == 'W' ? WhiteWins : BlackWins);
2847 return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2853 return (int) WhiteWins;
2859 return (int) BlackWins;
2865 return (int) GameIsDrawn;
2871 return (int) GameUnfinished;
2878 if ((yyleng == 1) && (yytext[0] == '1'))
2879 return (int) MoveNumberOne;
2885 /* elapsed time indication, e.g. (0:12) or {10:21.071} */
2886 return (int) ElapsedTime;
2892 /* position diagram enclosed in [-- --] */
2893 return (int) PositionDiagram;
2897 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2898 yy_c_buf_p = yy_cp -= 1;
2899 YY_DO_BEFORE_ACTION; /* set up yytext again */
2902 /* position diagram enclosed in {-- --} */
2903 return (int) PositionDiagram;
2909 return (int) PGNTag;
2915 return (int) GNUChessGame;
2919 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2920 yy_c_buf_p = yy_cp -= 1;
2921 YY_DO_BEFORE_ACTION; /* set up yytext again */
2924 return (int) XBoardGame;
2929 { /* numeric annotation glyph */
2935 { /* anything in {} */
2936 return (int) Comment;
2940 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2941 yy_c_buf_p = yy_cp -= 1;
2942 YY_DO_BEFORE_ACTION; /* set up yytext again */
2944 { /* ; to end of line */
2945 return (int) Comment;
2950 { /* anything in [] */
2951 return (int) Comment;
2957 return (int) Comment;
2962 { /* >=2 chars in () */
2963 return (int) Comment;
2969 /* Skip mail headers */
2975 /* Skip random words */
2981 /* Skip everything else */
2988 case YY_STATE_EOF(INITIAL):
2991 case YY_END_OF_BUFFER:
2993 /* Amount of text matched not including the EOB char. */
2994 int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
2996 /* Undo the effects of YY_DO_BEFORE_ACTION. */
2997 *yy_cp = yy_hold_char;
2998 YY_RESTORE_YY_MORE_OFFSET
3000 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
3002 /* We're scanning a new file or input source. It's
3003 * possible that this happened because the user
3004 * just pointed yyin at a new source and called
3005 * yylex(). If so, then we have to assure
3006 * consistency between yy_current_buffer and our
3007 * globals. Here is the right place to do so, because
3008 * this is the first action (other than possibly a
3009 * back-up) that will match for the new input source.
3011 yy_n_chars = yy_current_buffer->yy_n_chars;
3012 yy_current_buffer->yy_input_file = yyin;
3013 yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
3016 /* Note that here we test for yy_c_buf_p "<=" to the position
3017 * of the first EOB in the buffer, since yy_c_buf_p will
3018 * already have been incremented past the NUL character
3019 * (since all states make transitions on EOB to the
3020 * end-of-buffer state). Contrast this with the test
3023 if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
3024 { /* This was really a NUL. */
3025 yy_state_type yy_next_state;
3027 yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
3029 yy_current_state = yy_get_previous_state();
3031 /* Okay, we're now positioned to make the NUL
3032 * transition. We couldn't have
3033 * yy_get_previous_state() go ahead and do it
3034 * for us because it doesn't know how to deal
3035 * with the possibility of jamming (and we don't
3036 * want to build jamming into it because then it
3037 * will run more slowly).
3040 yy_next_state = yy_try_NUL_trans( yy_current_state );
3042 yy_bp = yytext_ptr + YY_MORE_ADJ;
3044 if ( yy_next_state )
3046 /* Consume the NUL. */
3047 yy_cp = ++yy_c_buf_p;
3048 yy_current_state = yy_next_state;
3055 goto yy_find_action;
3059 else switch ( yy_get_next_buffer() )
3061 case EOB_ACT_END_OF_FILE:
3063 yy_did_buffer_switch_on_eof = 0;
3067 /* Note: because we've taken care in
3068 * yy_get_next_buffer() to have set up
3069 * yytext, we can now set up
3070 * yy_c_buf_p so that if some total
3071 * hoser (like flex itself) wants to
3072 * call the scanner after we return the
3073 * YY_NULL, it'll still work - another
3074 * YY_NULL will get returned.
3076 yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
3078 yy_act = YY_STATE_EOF(YY_START);
3084 if ( ! yy_did_buffer_switch_on_eof )
3090 case EOB_ACT_CONTINUE_SCAN:
3092 yytext_ptr + yy_amount_of_matched_text;
3094 yy_current_state = yy_get_previous_state();
3097 yy_bp = yytext_ptr + YY_MORE_ADJ;
3100 case EOB_ACT_LAST_MATCH:
3102 &yy_current_buffer->yy_ch_buf[yy_n_chars];
3104 yy_current_state = yy_get_previous_state();
3107 yy_bp = yytext_ptr + YY_MORE_ADJ;
3108 goto yy_find_action;
3115 "fatal flex scanner internal error--no action found" );
3116 } /* end of action switch */
3117 } /* end of scanning one token */
3118 } /* end of yylex */
3121 /* yy_get_next_buffer - try to read in a new buffer
3123 * Returns a code representing an action:
3124 * EOB_ACT_LAST_MATCH -
3125 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
3126 * EOB_ACT_END_OF_FILE - end of file
3129 static int yy_get_next_buffer()
3131 register char *dest = yy_current_buffer->yy_ch_buf;
3132 register char *source = yytext_ptr;
3133 register int number_to_move, i;
3136 if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
3138 "fatal flex scanner internal error--end of buffer missed" );
3140 if ( yy_current_buffer->yy_fill_buffer == 0 )
3141 { /* Don't try to fill the buffer, so this is an EOF. */
3142 if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
3144 /* We matched a single character, the EOB, so
3145 * treat this as a final EOF.
3147 return EOB_ACT_END_OF_FILE;
3152 /* We matched some text prior to the EOB, first
3155 return EOB_ACT_LAST_MATCH;
3159 /* Try to read more data. */
3161 /* First move last chars to start of buffer. */
3162 number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
3164 for ( i = 0; i < number_to_move; ++i )
3165 *(dest++) = *(source++);
3167 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
3168 /* don't do the read, it's not guaranteed to return an EOF,
3171 yy_current_buffer->yy_n_chars = yy_n_chars = 0;
3176 yy_current_buffer->yy_buf_size - number_to_move - 1;
3178 while ( num_to_read <= 0 )
3179 { /* Not enough room in the buffer - grow it. */
3180 #ifdef YY_USES_REJECT
3182 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
3185 /* just a shorter name for the current buffer */
3186 YY_BUFFER_STATE b = yy_current_buffer;
3188 int yy_c_buf_p_offset =
3189 (int) (yy_c_buf_p - b->yy_ch_buf);
3191 if ( b->yy_is_our_buffer )
3193 int new_size = b->yy_buf_size * 2;
3195 if ( new_size <= 0 )
3196 b->yy_buf_size += b->yy_buf_size / 8;
3198 b->yy_buf_size *= 2;
3200 b->yy_ch_buf = (char *)
3201 /* Include room in for 2 EOB chars. */
3202 yy_flex_realloc( (void *) b->yy_ch_buf,
3203 b->yy_buf_size + 2 );
3206 /* Can't grow it, we don't own it. */
3209 if ( ! b->yy_ch_buf )
3211 "fatal error - scanner input buffer overflow" );
3213 yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
3215 num_to_read = yy_current_buffer->yy_buf_size -
3220 if ( num_to_read > YY_READ_BUF_SIZE )
3221 num_to_read = YY_READ_BUF_SIZE;
3223 /* Read in more data. */
3224 YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
3225 yy_n_chars, num_to_read );
3227 yy_current_buffer->yy_n_chars = yy_n_chars;
3230 if ( yy_n_chars == 0 )
3232 if ( number_to_move == YY_MORE_ADJ )
3234 ret_val = EOB_ACT_END_OF_FILE;
3240 ret_val = EOB_ACT_LAST_MATCH;
3241 yy_current_buffer->yy_buffer_status =
3242 YY_BUFFER_EOF_PENDING;
3247 ret_val = EOB_ACT_CONTINUE_SCAN;
3249 yy_n_chars += number_to_move;
3250 yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
3251 yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
3253 yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
3259 /* yy_get_previous_state - get the state just before the EOB char was reached */
3261 static yy_state_type yy_get_previous_state()
3263 register yy_state_type yy_current_state;
3264 register char *yy_cp;
3266 yy_current_state = yy_start;
3267 yy_current_state += YY_AT_BOL();
3268 yy_state_ptr = yy_state_buf;
3269 *yy_state_ptr++ = yy_current_state;
3271 for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
3273 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
3274 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3276 yy_current_state = (int) yy_def[yy_current_state];
3277 if ( yy_current_state >= 697 )
3278 yy_c = yy_meta[(unsigned int) yy_c];
3280 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3281 *yy_state_ptr++ = yy_current_state;
3284 return yy_current_state;
3288 /* yy_try_NUL_trans - try to make a transition on the NUL character
3291 * next_state = yy_try_NUL_trans( current_state );
3294 #ifdef YY_USE_PROTOS
3295 static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
3297 static yy_state_type yy_try_NUL_trans( yy_current_state )
3298 yy_state_type yy_current_state;
3301 register int yy_is_jam;
3303 register YY_CHAR yy_c = 1;
3304 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3306 yy_current_state = (int) yy_def[yy_current_state];
3307 if ( yy_current_state >= 697 )
3308 yy_c = yy_meta[(unsigned int) yy_c];
3310 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3311 yy_is_jam = (yy_current_state == 696);
3313 *yy_state_ptr++ = yy_current_state;
3315 return yy_is_jam ? 0 : yy_current_state;
3320 #ifdef YY_USE_PROTOS
3321 static void yyunput( int c, register char *yy_bp )
3323 static void yyunput( c, yy_bp )
3325 register char *yy_bp;
3328 register char *yy_cp = yy_c_buf_p;
3330 /* undo effects of setting up yytext */
3331 *yy_cp = yy_hold_char;
3333 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3334 { /* need to shift things up to make room */
3335 /* +2 for EOB chars. */
3336 register int number_to_move = yy_n_chars + 2;
3337 register char *dest = &yy_current_buffer->yy_ch_buf[
3338 yy_current_buffer->yy_buf_size + 2];
3339 register char *source =
3340 &yy_current_buffer->yy_ch_buf[number_to_move];
3342 while ( source > yy_current_buffer->yy_ch_buf )
3343 *--dest = *--source;
3345 yy_cp += (int) (dest - source);
3346 yy_bp += (int) (dest - source);
3347 yy_current_buffer->yy_n_chars =
3348 yy_n_chars = yy_current_buffer->yy_buf_size;
3350 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3351 YY_FATAL_ERROR( "flex scanner push-back overflow" );
3354 *--yy_cp = (char) c;
3358 yy_hold_char = *yy_cp;
3361 #endif /* ifndef YY_NO_UNPUT */
3365 static int yyinput()
3372 *yy_c_buf_p = yy_hold_char;
3374 if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
3376 /* yy_c_buf_p now points to the character we want to return.
3377 * If this occurs *before* the EOB characters, then it's a
3378 * valid NUL; if not, then we've hit the end of the buffer.
3380 if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
3381 /* This was really a NUL. */
3385 { /* need more input */
3386 int offset = yy_c_buf_p - yytext_ptr;
3389 switch ( yy_get_next_buffer() )
3391 case EOB_ACT_LAST_MATCH:
3392 /* This happens because yy_g_n_b()
3393 * sees that we've accumulated a
3394 * token and flags that we need to
3395 * try matching the token before
3396 * proceeding. But for input(),
3397 * there's no matching to consider.
3398 * So convert the EOB_ACT_LAST_MATCH
3399 * to EOB_ACT_END_OF_FILE.
3402 /* Reset buffer status. */
3407 case EOB_ACT_END_OF_FILE:
3412 if ( ! yy_did_buffer_switch_on_eof )
3421 case EOB_ACT_CONTINUE_SCAN:
3422 yy_c_buf_p = yytext_ptr + offset;
3428 c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
3429 *yy_c_buf_p = '\0'; /* preserve yytext */
3430 yy_hold_char = *++yy_c_buf_p;
3432 yy_current_buffer->yy_at_bol = (c == '\n');
3438 #ifdef YY_USE_PROTOS
3439 void yyrestart( FILE *input_file )
3441 void yyrestart( input_file )
3445 if ( ! yy_current_buffer )
3446 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
3448 yy_init_buffer( yy_current_buffer, input_file );
3449 yy_load_buffer_state();
3453 #ifdef YY_USE_PROTOS
3454 void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
3456 void yy_switch_to_buffer( new_buffer )
3457 YY_BUFFER_STATE new_buffer;
3460 if ( yy_current_buffer == new_buffer )
3463 if ( yy_current_buffer )
3465 /* Flush out information for old buffer. */
3466 *yy_c_buf_p = yy_hold_char;
3467 yy_current_buffer->yy_buf_pos = yy_c_buf_p;
3468 yy_current_buffer->yy_n_chars = yy_n_chars;
3471 yy_current_buffer = new_buffer;
3472 yy_load_buffer_state();
3474 /* We don't actually know whether we did this switch during
3475 * EOF (yywrap()) processing, but the only time this flag
3476 * is looked at is after yywrap() is called, so it's safe
3477 * to go ahead and always set it.
3479 yy_did_buffer_switch_on_eof = 1;
3483 #ifdef YY_USE_PROTOS
3484 void yy_load_buffer_state( void )
3486 void yy_load_buffer_state()
3489 yy_n_chars = yy_current_buffer->yy_n_chars;
3490 yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
3491 yyin = yy_current_buffer->yy_input_file;
3492 yy_hold_char = *yy_c_buf_p;
3496 #ifdef YY_USE_PROTOS
3497 YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
3499 YY_BUFFER_STATE yy_create_buffer( file, size )
3506 b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3508 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3510 b->yy_buf_size = size;
3512 /* yy_ch_buf has to be 2 characters longer than the size given because
3513 * we need to put in 2 end-of-buffer characters.
3515 b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
3516 if ( ! b->yy_ch_buf )
3517 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3519 b->yy_is_our_buffer = 1;
3521 yy_init_buffer( b, file );
3527 #ifdef YY_USE_PROTOS
3528 void yy_delete_buffer( YY_BUFFER_STATE b )
3530 void yy_delete_buffer( b )
3537 if ( b == yy_current_buffer )
3538 yy_current_buffer = (YY_BUFFER_STATE) 0;
3540 if ( b->yy_is_our_buffer )
3541 yy_flex_free( (void *) b->yy_ch_buf );
3543 yy_flex_free( (void *) b );
3547 #ifndef YY_ALWAYS_INTERACTIVE
3548 #ifndef YY_NEVER_INTERACTIVE
3549 extern int isatty YY_PROTO(( int ));
3553 #ifdef YY_USE_PROTOS
3554 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
3556 void yy_init_buffer( b, file )
3563 yy_flush_buffer( b );
3565 b->yy_input_file = file;
3566 b->yy_fill_buffer = 1;
3568 #if YY_ALWAYS_INTERACTIVE
3569 b->yy_is_interactive = 1;
3571 #if YY_NEVER_INTERACTIVE
3572 b->yy_is_interactive = 0;
3574 b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
3580 #ifdef YY_USE_PROTOS
3581 void yy_flush_buffer( YY_BUFFER_STATE b )
3583 void yy_flush_buffer( b )
3593 /* We always need two end-of-buffer characters. The first causes
3594 * a transition to the end-of-buffer state. The second causes
3595 * a jam in that state.
3597 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
3598 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
3600 b->yy_buf_pos = &b->yy_ch_buf[0];
3603 b->yy_buffer_status = YY_BUFFER_NEW;
3605 if ( b == yy_current_buffer )
3606 yy_load_buffer_state();
3610 #ifndef YY_NO_SCAN_BUFFER
3611 #ifdef YY_USE_PROTOS
3612 YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
3614 YY_BUFFER_STATE yy_scan_buffer( base, size )
3622 base[size-2] != YY_END_OF_BUFFER_CHAR ||
3623 base[size-1] != YY_END_OF_BUFFER_CHAR )
3624 /* They forgot to leave room for the EOB's. */
3627 b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3629 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
3631 b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
3632 b->yy_buf_pos = b->yy_ch_buf = base;
3633 b->yy_is_our_buffer = 0;
3634 b->yy_input_file = 0;
3635 b->yy_n_chars = b->yy_buf_size;
3636 b->yy_is_interactive = 0;
3638 b->yy_fill_buffer = 0;
3639 b->yy_buffer_status = YY_BUFFER_NEW;
3641 yy_switch_to_buffer( b );
3648 #ifndef YY_NO_SCAN_STRING
3649 #ifdef YY_USE_PROTOS
3650 YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
3652 YY_BUFFER_STATE yy_scan_string( yy_str )
3653 yyconst char *yy_str;
3657 for ( len = 0; yy_str[len]; ++len )
3660 return yy_scan_bytes( yy_str, len );
3665 #ifndef YY_NO_SCAN_BYTES
3666 #ifdef YY_USE_PROTOS
3667 YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
3669 YY_BUFFER_STATE yy_scan_bytes( bytes, len )
3670 yyconst char *bytes;
3679 /* Get memory for full buffer, including space for trailing EOB's. */
3681 buf = (char *) yy_flex_alloc( n );
3683 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
3685 for ( i = 0; i < len; ++i )
3688 buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
3690 b = yy_scan_buffer( buf, n );
3692 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
3694 /* It's okay to grow etc. this buffer, and we should throw it
3695 * away when we're done.
3697 b->yy_is_our_buffer = 1;
3704 #ifndef YY_NO_PUSH_STATE
3705 #ifdef YY_USE_PROTOS
3706 static void yy_push_state( int new_state )
3708 static void yy_push_state( new_state )
3712 if ( yy_start_stack_ptr >= yy_start_stack_depth )
3716 yy_start_stack_depth += YY_START_STACK_INCR;
3717 new_size = yy_start_stack_depth * sizeof( int );
3719 if ( ! yy_start_stack )
3720 yy_start_stack = (int *) yy_flex_alloc( new_size );
3723 yy_start_stack = (int *) yy_flex_realloc(
3724 (void *) yy_start_stack, new_size );
3726 if ( ! yy_start_stack )
3728 "out of memory expanding start-condition stack" );
3731 yy_start_stack[yy_start_stack_ptr++] = YY_START;
3738 #ifndef YY_NO_POP_STATE
3739 static void yy_pop_state()
3741 if ( --yy_start_stack_ptr < 0 )
3742 YY_FATAL_ERROR( "start-condition stack underflow" );
3744 BEGIN(yy_start_stack[yy_start_stack_ptr]);
3749 #ifndef YY_NO_TOP_STATE
3750 static int yy_top_state()
3752 return yy_start_stack[yy_start_stack_ptr - 1];
3756 #ifndef YY_EXIT_FAILURE
3757 #define YY_EXIT_FAILURE 2
3760 #ifdef YY_USE_PROTOS
3761 static void yy_fatal_error( yyconst char msg[] )
3763 static void yy_fatal_error( msg )
3767 (void) fprintf( stderr, "%s\n", msg );
3768 exit( YY_EXIT_FAILURE );
3773 /* Redefine yyless() so it works in section 3 code. */
3779 /* Undo effects of setting up yytext. */ \
3780 yytext[yyleng] = yy_hold_char; \
3781 yy_c_buf_p = yytext + n; \
3782 yy_hold_char = *yy_c_buf_p; \
3783 *yy_c_buf_p = '\0'; \
3789 /* Internal utility routines. */
3792 #ifdef YY_USE_PROTOS
3793 static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
3795 static void yy_flex_strncpy( s1, s2, n )
3802 for ( i = 0; i < n; ++i )
3807 #ifdef YY_NEED_STRLEN
3808 #ifdef YY_USE_PROTOS
3809 static int yy_flex_strlen( yyconst char *s )
3811 static int yy_flex_strlen( s )
3816 for ( n = 0; s[n]; ++n )
3824 #ifdef YY_USE_PROTOS
3825 static void *yy_flex_alloc( yy_size_t size )
3827 static void *yy_flex_alloc( size )
3831 return (void *) malloc( size );
3834 #ifdef YY_USE_PROTOS
3835 static void *yy_flex_realloc( void *ptr, yy_size_t size )
3837 static void *yy_flex_realloc( ptr, size )
3842 /* The cast to (char *) in the following accommodates both
3843 * implementations that use char* generic pointers, and those
3844 * that use void* generic pointers. It works with the latter
3845 * because both ANSI C and C++ allow castless assignment from
3846 * any pointer type to void*, and deal with argument conversions
3847 * as though doing an assignment.
3849 return (void *) realloc( (char *) ptr, size );
3852 #ifdef YY_USE_PROTOS
3853 static void yy_flex_free( void *ptr )
3855 static void yy_flex_free( ptr )
3872 static char *StringToLex;
3874 #ifndef FLEX_SCANNER
3881 if (StringToLex != NULL) {
3883 if (ret == NULLCHAR)
3887 } else if (unputCount > 0) {
3888 ret = unputBuffer[--unputCount];
3900 * Return offset of next pattern within current file
3904 int offset = ftell(lexFP) - unputCount;
3912 static void output(ch)
3915 fprintf(stderr, "PARSER BUG: unmatched character '%c' (0%o)\n",
3919 static void unput(ch)
3922 if (ch == 0) return;
3923 if (StringToLex != NULL) {
3926 if (unputCount >= UNPUT_BUF_SIZE)
3927 fprintf(stderr, "PARSER BUG: unput buffer overflow '%c' (0%o)\n",
3929 unputBuffer[unputCount++] = ch;
3933 /* Get ready to lex from a new file. Kludge below sticks
3934 an artificial newline at the front of the file, which the
3935 above grammar ignores, but which makes ^ at start of pattern
3936 match at the real start of the file.
3944 unput('\n'); /* kludge */
3947 /* Get ready to lex from a string. ^ at start of pattern WON'T
3948 match at the start of the string!
3957 #endif /*!FLEX_SCANNER*/
3960 void my_yy_input(buf, result, max_size)
3967 if (StringToLex != NULL) {
3969 while (*StringToLex != NULLCHAR) {
3970 *buf++ = *StringToLex++;
3976 count = fread(buf, 1, max_size, yyin);
3986 static YY_BUFFER_STATE my_file_buffer = NULL;
3989 Return offset of next pattern in the current file.
3993 int pos = yy_c_buf_p - YY_CURRENT_BUFFER->yy_ch_buf;
3995 return(ftell(YY_CURRENT_BUFFER->yy_input_file) -
4003 if (my_file_buffer != NULL)
4004 yy_delete_buffer(my_file_buffer);
4006 my_file_buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
4007 yy_switch_to_buffer(my_file_buffer);
4013 if (my_file_buffer != NULL)
4014 yy_delete_buffer(my_file_buffer);
4016 my_file_buffer = yy_create_buffer(f, YY_BUF_SIZE);
4017 yy_switch_to_buffer(my_file_buffer);
4019 #endif /*FLEX_SCANNER*/
4026 /* Parse a move from the given string s */
4027 /* ^ at start of pattern WON'T work here unless using flex */
4028 ChessMove yylexstr(boardIndex, s)
4033 char *oldStringToLex;
4035 YY_BUFFER_STATE buffer, oldBuffer;
4038 yyboardindex = boardIndex;
4039 oldStringToLex = StringToLex;
4042 buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
4043 oldBuffer = YY_CURRENT_BUFFER;
4044 yy_switch_to_buffer(buffer);
4045 #endif /*FLEX_SCANNER*/
4047 ret = (ChessMove) yylex();
4050 if (oldBuffer != NULL)
4051 yy_switch_to_buffer(oldBuffer);
4052 yy_delete_buffer(buffer);
4053 #endif /*FLEX_SCANNER*/
4054 StringToLex = oldStringToLex;