changes by H.G. Muller; version 4.3.4
[xboard.git] / parser.l
1 /* A lexical scanner generated by flex */
2
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 $
5  */
6
7 #define FLEX_SCANNER
8 #define YY_FLEX_MAJOR_VERSION 2
9 #define YY_FLEX_MINOR_VERSION 5
10
11 #include <stdio.h>
12 #include <errno.h>
13
14 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
15 #ifdef c_plusplus
16 #ifndef __cplusplus
17 #define __cplusplus
18 #endif
19 #endif
20
21
22 #ifdef __cplusplus
23
24 #include <stdlib.h>
25 #ifndef _WIN32
26 #include <unistd.h>
27 #endif
28
29 /* Use prototypes in function declarations. */
30 #define YY_USE_PROTOS
31
32 /* The "const" storage-class-modifier is valid. */
33 #define YY_USE_CONST
34
35 #else   /* ! __cplusplus */
36
37 #if __STDC__
38
39 #define YY_USE_PROTOS
40 #define YY_USE_CONST
41
42 #endif  /* __STDC__ */
43 #endif  /* ! __cplusplus */
44
45 #ifdef __TURBOC__
46  #pragma warn -rch
47  #pragma warn -use
48 #include <io.h>
49 #include <stdlib.h>
50 #define YY_USE_CONST
51 #define YY_USE_PROTOS
52 #endif
53
54 #ifdef YY_USE_CONST
55 #define yyconst const
56 #else
57 #define yyconst
58 #endif
59
60
61 #ifdef YY_USE_PROTOS
62 #define YY_PROTO(proto) proto
63 #else
64 #define YY_PROTO(proto) ()
65 #endif
66
67
68 /* Returned upon end-of-file. */
69 #define YY_NULL 0
70
71 /* Promotes a possibly negative, possibly signed char to an unsigned
72  * integer for use as an array index.  If the signed char is negative,
73  * we want to instead treat it as an 8-bit unsigned char, hence the
74  * double cast.
75  */
76 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
77
78 /* Enter a start condition.  This macro really ought to take a parameter,
79  * but we do it the disgusting crufty way forced on us by the ()-less
80  * definition of BEGIN.
81  */
82 #define BEGIN yy_start = 1 + 2 *
83
84 /* Translate the current start state into a value that can be later handed
85  * to BEGIN to return to the state.  The YYSTATE alias is for lex
86  * compatibility.
87  */
88 #define YY_START ((yy_start - 1) / 2)
89 #define YYSTATE YY_START
90
91 /* Action number for EOF rule of a given start state. */
92 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
93
94 /* Special action meaning "start processing a new file". */
95 #define YY_NEW_FILE yyrestart( yyin )
96
97 #define YY_END_OF_BUFFER_CHAR 0
98
99 /* Size of default input buffer. */
100 #define YY_BUF_SIZE 16384
101
102 typedef struct yy_buffer_state *YY_BUFFER_STATE;
103
104 extern int yyleng;
105 extern FILE *yyin, *yyout;
106
107 #define EOB_ACT_CONTINUE_SCAN 0
108 #define EOB_ACT_END_OF_FILE 1
109 #define EOB_ACT_LAST_MATCH 2
110
111 /* The funky do-while in the following #define is used to turn the definition
112  * int a single C statement (which needs a semi-colon terminator).  This
113  * avoids problems with code like:
114  *
115  *      if ( condition_holds )
116  *              yyless( 5 );
117  *      else
118  *              do_something_else();
119  *
120  * Prior to using the do-while the compiler would get upset at the
121  * "else" because it interpreted the "if" statement as being all
122  * done when it reached the ';' after the yyless() call.
123  */
124
125 /* Return all but the first 'n' matched characters back to the input stream. */
126
127 #define yyless(n) \
128         do \
129                 { \
130                 /* Undo effects of setting up yytext. */ \
131                 *yy_cp = yy_hold_char; \
132                 YY_RESTORE_YY_MORE_OFFSET \
133                 yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
134                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
135                 } \
136         while ( 0 )
137
138 #define unput(c) yyunput( c, yytext_ptr )
139
140 /* The following is because we cannot portably get our hands on size_t
141  * (without autoconf's help, which isn't available because we want
142  * flex-generated scanners to compile on their own).
143  */
144 typedef unsigned int yy_size_t;
145
146
147 struct yy_buffer_state
148         {
149         FILE *yy_input_file;
150
151         char *yy_ch_buf;                /* input buffer */
152         char *yy_buf_pos;               /* current position in input buffer */
153
154         /* Size of input buffer in bytes, not including room for EOB
155          * characters.
156          */
157         yy_size_t yy_buf_size;
158
159         /* Number of characters read into yy_ch_buf, not including EOB
160          * characters.
161          */
162         int yy_n_chars;
163
164         /* Whether we "own" the buffer - i.e., we know we created it,
165          * and can realloc() it to grow it, and should free() it to
166          * delete it.
167          */
168         int yy_is_our_buffer;
169
170         /* Whether this is an "interactive" input source; if so, and
171          * if we're using stdio for input, then we want to use getc()
172          * instead of fread(), to make sure we stop fetching input after
173          * each newline.
174          */
175         int yy_is_interactive;
176
177         /* Whether we're considered to be at the beginning of a line.
178          * If so, '^' rules will be active on the next match, otherwise
179          * not.
180          */
181         int yy_at_bol;
182
183         /* Whether to try to fill the input buffer when we reach the
184          * end of it.
185          */
186         int yy_fill_buffer;
187
188         int yy_buffer_status;
189 #define YY_BUFFER_NEW 0
190 #define YY_BUFFER_NORMAL 1
191         /* When an EOF's been seen but there's still some text to process
192          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
193          * shouldn't try reading from the input source any more.  We might
194          * still have a bunch of tokens to match, though, because of
195          * possible backing-up.
196          *
197          * When we actually see the EOF, we change the status to "new"
198          * (via yyrestart()), so that the user can continue scanning by
199          * just pointing yyin at a new input file.
200          */
201 #define YY_BUFFER_EOF_PENDING 2
202         };
203
204 static YY_BUFFER_STATE yy_current_buffer = 0;
205
206 /* We provide macros for accessing buffer states in case in the
207  * future we want to put the buffer states in a more general
208  * "scanner state".
209  */
210 #define YY_CURRENT_BUFFER yy_current_buffer
211
212
213 /* yy_hold_char holds the character lost when yytext is formed. */
214 static char yy_hold_char;
215
216 static int yy_n_chars;          /* number of characters read into yy_ch_buf */
217
218
219 int yyleng;
220
221 /* Points to current character in buffer. */
222 static char *yy_c_buf_p = (char *) 0;
223 static int yy_init = 1;         /* whether we need to initialize */
224 static int yy_start = 0;        /* start state number */
225
226 /* Flag which is used to allow yywrap()'s to do buffer switches
227  * instead of setting up a fresh yyin.  A bit of a hack ...
228  */
229 static int yy_did_buffer_switch_on_eof;
230
231 void yyrestart YY_PROTO(( FILE *input_file ));
232
233 void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
234 void yy_load_buffer_state YY_PROTO(( void ));
235 YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
236 void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
237 void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
238 void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
239 #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
240
241 YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
242 YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
243 YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
244
245 static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
246 static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
247 static void yy_flex_free YY_PROTO(( void * ));
248
249 #define yy_new_buffer yy_create_buffer
250
251 #define yy_set_interactive(is_interactive) \
252         { \
253         if ( ! yy_current_buffer ) \
254                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
255         yy_current_buffer->yy_is_interactive = is_interactive; \
256         }
257
258 #define yy_set_bol(at_bol) \
259         { \
260         if ( ! yy_current_buffer ) \
261                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
262         yy_current_buffer->yy_at_bol = at_bol; \
263         }
264
265 #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
266
267
268 #define YY_USES_REJECT
269 typedef unsigned char YY_CHAR;
270 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
271 typedef int yy_state_type;
272 extern char *yytext;
273 #define yytext_ptr yytext
274
275 static yy_state_type yy_get_previous_state YY_PROTO(( void ));
276 static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
277 static int yy_get_next_buffer YY_PROTO(( void ));
278 static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
279
280 /* Done after the current pattern has been matched and before the
281  * corresponding action - sets up yytext.
282  */
283 #define YY_DO_BEFORE_ACTION \
284         yytext_ptr = yy_bp; \
285         yyleng = (int) (yy_cp - yy_bp); \
286         yy_hold_char = *yy_cp; \
287         *yy_cp = '\0'; \
288         yy_c_buf_p = yy_cp;
289
290 #define YY_NUM_RULES 42
291 #define YY_END_OF_BUFFER 43
292 static yyconst short int yy_acclist[709] =
293     {   0,
294        43,   41,   42,   41,   42,   41,   42,   40,   41,   42,
295        41,   42,   25,   41,   42,   41,   42,   40,   41,   42,
296        40,   41,   42,16410,   40,   41,   42,16410,   41,   42,
297        40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
298        41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
299        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
300        40,   41,   42,   40,   41,   42,   40,   41,   42,   41,
301        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
302        40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
303        41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
304
305        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
306        40,   41,   42,   40,   41,   42,   41,   42,   41,   42,
307        40,   41,   42,   40,   41,   42,   40,   41,   42,16410,
308        40,   41,   42,16410,   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,
312        41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
313        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
314        40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
315
316        41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
317        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
318        41,   42,   33,   40,   17,   40,    9,   40,   40,   40,
319     16410, 8218,   40,   35,   40,   40,   40,   40,   40,   40,
320        40,   40,   40,   40,   40,    9,   40,   40,   40,   40,
321        40,   40,   40,   36,   40,    3,   40,   40,    4,   40,
322        40,   40,    3,   40,   40,    4,   40,   40,   40,   40,
323        40,   40,    9,   40,   40,   34,   40,   40,    9,   40,
324        40,   40,16410, 8218,   40,   40,   40,   40,   40,   40,
325        40,   40,   40,   40,   40,   40,    9,   40,   40,   40,
326
327        40,   40,   40,   40,   40,    3,   40,   40,    4,   40,
328        40,   40,    3,   40,   40,    4,   40,   40,   40,   40,
329        40,   40,    9,   40,   40,   15,    9,   40,   23,   40,
330        23,    8,   40, 8218,   22,   40,   22,   24,   40,   40,
331        40,    6,   40,   40,   40,   40,   40,   40,   40,    9,
332        40,   40,   40,   40,   40,   20,   40,    4,   40,   40,
333         3,   40,    3,   40,   40,    4,    5,   40,    4,   40,
334        40,    4,   40,   40,    3,   40,   40,    4,    4,   40,
335         5,    6,   40,    4,   40,   40,   40,    9,   40,   40,
336        34,   39,    9,   40,   23,   40,    8,   40,   22,   40,
337
338        35,   40,   40,   40,    6,   40,   40,   40,   40,   40,
339        40,   40,    9,   40,   40,   40,   40,   40,   20,   40,
340         4,   40,   40,    3,   40,    3,   40,   40,    5,   40,
341         4,   40,   40,    4,   40,   40,    3,   40,   40,    4,
342        40,    5,    6,   40,    4,   40,   40,   40,    9,   40,
343        40,   38,   38,   37,   25,   25,   40,    6,   40,    7,
344        40,    6,   10,   40,   40,   40,   40,   19,   40,   40,
345        21,   40,   16,   40,   40,   40,   40,   40,   20,   20,
346        40,   20,   40,   36,    3,    3,    2,   40,    5,    4,
347         5,   40,   40,    4,    4,   40,    2,    7,   40,    5,
348
349         6,    5,    6,   40,    5,   40,   40,   40,   25,   39,
350        40,    6,   40,    7,   40,   40,   40,   40,   40,   19,
351        40,   40,   21,   40,   16,   40,   40,   40,   40,   40,
352        20,   40,   20,   20,   40,    2,   40,    5,   40,   40,
353         4,   40,    2,    7,   40,    5,    6,   40,    5,   40,
354        40,   40,    7,    1,   40,   40,   40,   19,   40,   40,
355        40,   21,   21,   40,   21,   40,   40,   40,   40,   30,
356        36,    2,    2,   40,    5,    4,    5,    5,   40,    2,
357         7,   39,    1,   40,   40,   40,   19,   40,   40,   40,
358        21,   40,   21,   21,   40,   40,   40,   40,   20,   39,
359
360         2,   40,    5,   40,   27,   38,   23,   23,   22,   22,
361        24,   24,    1,    1,   40,   20,   21,   40,   40,   40,
362        11,   40,   40,   28,   36,   30,    2,    2,    5,   27,
363        34,   39,   39,    1,   40,   40,   40,   40,   21,   39,
364        11,   40,   40,   20,   39,   18,   24,    1,    1,   20,
365        21,   19,   40,   40,   40,   11,   40,   40,   40,   40,
366        21,   39,   40,   11,   40,   40,   12,   40,   40,   40,
367        40,   12,   40,   40,   14,   40,   40,   40,   14,   40,
368        40,   40,   39,   40,   40,   40,   40,   39,   39,   40,
369        40,   31,   40,   39,   39,   31,   40,   13,   31,   32,
370
371        32,   35,   39,   39,   31,   39,   34,   29
372     } ;
373
374 static yyconst short int yy_accept[736] =
375     {   0,
376         1,    1,    1,    2,    4,    6,    8,   11,   13,   16,
377        18,   21,   25,   29,   31,   34,   37,   40,   43,   46,
378        49,   52,   55,   58,   61,   64,   67,   70,   72,   75,
379        78,   81,   84,   87,   90,   93,   96,   99,  102,  105,
380       108,  111,  114,  117,  119,  121,  124,  127,  131,  135,
381       137,  140,  143,  146,  149,  152,  155,  158,  161,  164,
382       167,  170,  173,  176,  179,  182,  185,  188,  191,  194,
383       197,  200,  203,  206,  209,  212,  215,  218,  221,  223,
384       223,  224,  225,  225,  225,  225,  225,  226,  226,  226,
385       227,  227,  229,  229,  229,  229,  230,  230,  230,  232,
386
387       232,  234,  234,  235,  236,  236,  237,  237,  237,  238,
388       238,  239,  240,  241,  242,  243,  244,  245,  246,  248,
389       249,  250,  251,  252,  253,  254,  254,  254,  254,  254,
390       255,  256,  258,  258,  259,  261,  262,  263,  265,  265,
391       266,  268,  269,  270,  271,  272,  273,  275,  276,  276,
392       276,  276,  277,  277,  278,  278,  279,  281,  281,  282,
393       284,  284,  286,  286,  287,  288,  288,  289,  290,  291,
394       292,  293,  294,  295,  296,  297,  299,  300,  301,  302,
395       303,  304,  305,  306,  308,  308,  309,  311,  312,  313,
396       315,  315,  316,  318,  319,  320,  321,  322,  323,  325,
397
398       326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
399       326,  326,  327,  327,  327,  327,  329,  331,  332,  334,
400       335,  335,  335,  335,  337,  338,  339,  340,  340,  341,
401       341,  342,  342,  342,  344,  344,  344,  344,  344,  345,
402       346,  347,  348,  349,  350,  352,  353,  354,  355,  356,
403       358,  358,  358,  358,  358,  360,  360,  361,  361,  361,
404       363,  365,  366,  367,  367,  369,  369,  371,  372,  374,
405       375,  375,  377,  378,  379,  381,  384,  386,  387,  388,
406       390,  391,  392,  392,  392,  392,  392,  393,  395,  397,
407       399,  401,  401,  402,  402,  403,  404,  404,  405,  407,
408
409       408,  409,  410,  411,  412,  413,  415,  416,  417,  418,
410       419,  421,  423,  424,  424,  426,  428,  429,  431,  433,
411       434,  436,  437,  437,  439,  440,  442,  445,  447,  448,
412       449,  451,  452,  452,  452,  453,  454,  454,  454,  455,
413       455,  455,  456,  456,  457,  457,  457,  457,  458,  458,
414       458,  458,  458,  458,  458,  458,  460,  460,  460,  462,
415       463,  464,  465,  465,  466,  466,  466,  466,  466,  467,
416       468,  470,  470,  471,  473,  475,  476,  477,  478,  479,
417       480,  482,  484,  484,  484,  484,  484,  485,  486,  486,
418       487,  489,  490,  491,  491,  491,  491,  493,  494,  495,
419
420       495,  497,  497,  500,  502,  505,  507,  508,  509,  509,
421       510,  510,  510,  510,  510,  511,  511,  512,  512,  512,
422       514,  516,  517,  517,  518,  519,  520,  522,  523,  525,
423       527,  528,  529,  530,  531,  533,  534,  536,  538,  540,
424       541,  543,  546,  549,  551,  552,  553,  553,  553,  553,
425       553,  553,  553,  553,  553,  553,  553,  553,  553,  553,
426       554,  556,  556,  556,  556,  556,  557,  558,  558,  560,
427       560,  561,  562,  563,  565,  567,  568,  569,  570,  570,
428       570,  572,  572,  572,  573,  573,  573,  575,  576,  576,
429       577,  578,  578,  580,  580,  582,  582,  582,  582,  582,
430
431       582,  582,  583,  583,  583,  585,  586,  587,  589,  590,
432       591,  593,  594,  596,  597,  598,  599,  601,  603,  605,
433       605,  605,  607,  607,  607,  608,  608,  609,  609,  610,
434       610,  611,  611,  612,  612,  613,  613,  613,  614,  614,
435       614,  616,  616,  616,  618,  618,  619,  619,  619,  619,
436       619,  619,  620,  621,  623,  624,  626,  626,  627,  628,
437       629,  630,  630,  630,  632,  632,  632,  633,  634,  634,
438       634,  636,  637,  638,  639,  641,  643,  644,  646,  646,
439       647,  647,  647,  647,  648,  649,  650,  650,  650,  650,
440       652,  652,  652,  653,  653,  653,  653,  653,  654,  655,
441
442       656,  658,  659,  659,  659,  659,  659,  659,  660,  661,
443       663,  664,  666,  667,  667,  667,  667,  667,  667,  667,
444       668,  668,  668,  668,  668,  669,  670,  670,  670,  670,
445       670,  671,  672,  672,  672,  672,  672,  673,  673,  673,
446       673,  674,  675,  677,  677,  677,  677,  677,  678,  678,
447       679,  681,  681,  681,  681,  681,  682,  683,  683,  683,
448       683,  683,  684,  685,  686,  686,  686,  686,  686,  686,
449       687,  688,  688,  688,  688,  688,  689,  690,  691,  692,
450       692,  692,  692,  692,  692,  694,  694,  694,  694,  694,
451       695,  696,  698,  698,  698,  699,  699,  700,  700,  701,
452
453       701,  701,  703,  703,  704,  705,  705,  705,  705,  705,
454       707,  707,  707,  707,  707,  707,  707,  707,  707,  707,
455       707,  707,  707,  707,  707,  707,  707,  707,  707,  707,
456       707,  707,  708,  709,  709
457     } ;
458
459 static yyconst int yy_ec[256] =
460     {   0,
461         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
462         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
463         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
464         1,    4,    1,    5,    6,    7,    8,    1,    9,   10,
465        11,   12,   13,    1,   14,   15,   16,   17,   18,   19,
466        20,   20,   20,   20,   20,   20,   20,   21,   22,    1,
467        23,    1,    1,   24,   25,   26,   27,   28,   29,   30,
468        31,   32,   33,   33,   34,   35,   36,   37,   38,   39,
469        40,   41,   42,   33,   43,   33,   44,   45,   33,   33,
470        46,    1,   47,    1,   48,    1,   49,   50,   51,   52,
471
472        53,   54,   55,   56,   57,   58,   59,   60,   61,   62,
473        63,   64,   40,   65,   66,   67,   68,   33,   69,   45,
474        70,   33,   71,    1,   72,    1,    1,    1,    1,    1,
475         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
476         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
477         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
478         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
479         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
480         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
481         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
482
483         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
484         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
485         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
486         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
487         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
488         1,    1,    1,    1,    1
489     } ;
490
491 static yyconst int yy_meta[73] =
492     {   0,
493         1,    2,    3,    2,    1,    1,    1,    1,    4,    5,
494         6,    1,    1,    7,    1,    1,    8,    8,    8,    8,
495         9,    1,   10,    1,   11,   11,   11,   12,   12,   12,
496        12,   12,    4,   11,    4,    4,   11,   12,   12,   11,
497        11,    4,    4,   12,    7,    1,    1,    1,   13,   13,
498        13,   14,   15,   14,   14,   14,   14,   14,   13,   14,
499         4,   11,   12,   12,   11,    4,    4,    4,    4,    4,
500         1,    1
501     } ;
502
503 static yyconst short int yy_base[824] =
504     {   0,
505         0,   72, 2710, 5057,  120,  129,    0,  140, 2705,  138,
506       149,  169,  160, 2705,  226,  157, 2651,  151, 2679,  130,
507      2639,  131,  227,  271, 2648, 2633,  244,  331,  390,  447,
508       203,  239,  332,  338,  375,  340,  370,  428,  430,  249,
509      2650,  201,  254,  397, 2694,  147,  253,  506,  344,  257,
510       568,  189, 2641,  229, 2672,  339,  294,  248,  335,  620,
511      2642,  284,  574,  667,  724,  318,  640,  555,  608,  709,
512       590,  610,  690,  746,  761,  462,  449,  644,  577, 2639,
513       455,    0, 2683,  303,  781,  309, 5057, 2679,  439,  354,
514      2673, 2673, 2671,  419,  692, 2671,  491,  160,  809, 2670,
515
516         0, 2683, 5057,  782,    0,  829,    0,    0,  499,  862,
517       712,  582, 2636, 2641, 2615, 2616,  736, 2640, 2639,  717,
518       797, 2627,  769,  829, 2613, 2627,  927,  336,  999, 5057,
519      1023, 1074,    0, 1091, 1142,  834, 1159, 1206,    0, 1218,
520      1265,  838,  847,  842, 2606, 2609, 2608, 2613,  303, 2597,
521       890, 2664, 2663,  572, 2662,  594,  633,  298,  634, 1324,
522       401,  688,  429, 1386, 1433, 2661,  851,  927,  900,  903,
523       751,  689,  892,  946, 2626,  946,  951,  960,  973,  968,
524       972,  690, 1445, 1496, 2659, 1513, 1565, 1010, 1582, 1629,
525      2658, 1641, 1688, 1018, 1036, 1040,  972, 1003, 1023,  694,
526
527       804, 2596,  446,  503,  518, 2649,  542, 1153, 1167, 2648,
528      2586, 5057, 2649, 2648, 2647, 2636, 2643, 2638,    0, 5057,
529      2632, 2627, 2626, 2625, 2624,  808, 1023, 1045, 1073,    0,
530      1072, 1085, 1136, 1735, 2570, 2563, 2576, 2571, 1179, 1229,
531      2554, 1154,  930, 2569, 2607,    0, 2563, 2559, 1214, 1795,
532       569, 1240,  605, 1867, 1930,    0, 1947,    0, 2608, 2606,
533      1218, 1204, 1278,    0, 1998, 2606,  755,  398, 1272, 2015,
534         0, 1288, 1317, 1395, 1379, 2062, 1405, 1391, 2564, 2600,
535      2546, 5057, 1446,  750, 2608,  127, 2608,  885, 1185,  996,
536      1447,  789, 2606, 1238, 1410, 2114, 2602, 1452, 2161, 1602,
537
538      1652, 1181, 1707, 1458, 1506, 1412,    0, 1100, 1179, 1637,
539      2221, 2285, 2302, 2601, 1101, 1701, 1706, 2353, 1523, 1580,
540      1383, 2370, 2600, 1742, 1748, 1457, 2417, 1803, 1816, 1411,
541      1499, 1608, 1103, 2550, 5057,  817,  834, 2591, 5057, 1828,
542      2590, 2589, 2527, 2526, 2579, 2578, 2577, 2577,  388, 2576,
543       349, 2575,  890, 1761, 1029,    0, 1326, 1560,    0, 5057,
544      5057, 2429, 1436, 1590, 2525, 2525, 2522, 2522, 2528, 2522,
545       815,  503,  841, 2489,    0, 2542, 2524, 2525, 2522,    0,
546      2561, 2633,  858,  907,  910, 1727, 2565, 2553, 1645, 5057,
547      2696, 1760, 1085,  618, 1805, 2549, 1241, 1003, 2505, 2493,
548
549         0, 1759,    0, 1834, 2752, 1875, 1834, 2491, 1882, 2549,
550      1901, 1902, 2503, 2488, 2547,  434, 1522,  653,  953, 1219,
551      1291, 2809, 2545, 1912, 1875, 1888, 1899, 1572, 2869, 1505,
552      1519, 1604, 1898, 1915, 2941, 2544, 3013, 3077, 1916, 1951,
553      1591,    0, 3133, 1967, 2025, 1841, 1663, 2494, 2535, 1637,
554      2534, 2472, 2532, 2469, 2529, 2467, 2520, 1748, 1924, 5057,
555      3189, 2483, 2479, 2479, 2474, 2526, 1268, 1972, 2525,  870,
556      2498, 2473,    0, 3254, 3326, 2463, 2463, 2519, 1299, 1946,
557      5057, 2515, 1971, 1097, 1394, 1506, 2508, 1319, 1239, 5057,
558      2454, 2439,    0, 2483, 1817, 2013, 2474, 1582, 2448, 2400,
559
560      2393, 1048, 1250, 1594, 3389, 2005, 2020, 2073, 2069, 1937,
561      3454, 2440, 3526, 2041, 1956, 2075, 2440, 2084, 2010, 2077,
562       430, 5057, 2114, 2425, 2424, 2360, 2345, 2405, 2403, 2341,
563      2339, 2397, 2394, 2328, 2326, 2379, 2373, 1850, 2076, 2077,
564      2380, 2325, 2315, 2035, 2311, 2293, 2330, 2286, 2267, 2304,
565      2279, 2288, 2263, 2044, 2278, 5057, 2008, 5057, 2312, 5057,
566      5057, 2306, 2123, 2296, 2238, 2232, 2283, 1861,  872, 1450,
567      2118, 2127, 2135, 2136, 2278, 2137, 2129, 2273, 2177, 5057,
568      2187, 2142, 2203, 2200, 2177, 5057, 2125, 2129, 2103, 5057,
569      2089, 2136, 2126, 2064, 2105, 2066, 1992, 2011, 1986, 1984,
570
571         0, 1960, 2180, 1990, 1924, 1065, 1113, 2229, 2175, 1960,
572      2172, 2083, 2180, 2191, 1900, 1933, 1299, 1883, 1859, 2126,
573      1806, 1072, 1787, 1760, 3598, 1728, 1719, 1697, 1506, 1747,
574      3670, 2230, 2232, 1665, 1664, 1616, 5057, 1582, 1880, 1999,
575      3742, 2081,    0, 1530, 1479, 1752, 1163, 3814, 2244, 2160,
576      2244, 2252, 1487, 1478, 2229, 1476, 1419, 1392, 1372, 1591,
577      1710, 2254, 1312, 1271, 2256, 1158, 1136, 2225, 2227, 1106,
578       942,  906,  918, 1045, 1456, 2259, 2315,  875,  756, 2293,
579      2211,  733, 2243, 2248,    0,  701,  584,  603, 1827, 2312,
580      2314,    0, 2299,  538, 5057,  421, 2242,  473, 5057,  304,
581
582       315, 5057, 2151, 2378, 2346, 2302,  234,  206, 1795, 2379,
583      2317,  203, 1623, 1642, 1664, 1887, 2369, 2370, 2382, 2383,
584      2434, 2436, 2437, 2442, 2443, 2444, 2446, 2449, 2450, 2514,
585      2030,  159, 5057, 5057, 3883, 3898, 3913, 3928, 3943, 3955,
586      3970, 3985, 3999, 4002, 4005, 4008, 4023, 4038, 4041, 4044,
587      4059, 4074, 4086, 4101, 4116, 4131, 4146, 4161, 4176, 4191,
588      4194, 4209, 4224, 4239, 4254, 4269, 1899, 4272, 4283, 2048,
589      4286, 4301, 4316, 4328, 4343, 4358, 4373, 4388, 4403, 4418,
590      4433, 4448, 4457, 4472, 4487, 4502, 4517, 4532, 4547, 4562,
591      4573, 4588, 4603, 4618, 4633, 4648, 4663, 4678, 4693, 4708,
592
593      4723, 4738, 4753, 4768, 4783, 4798, 4813, 4828, 4839, 4852,
594      4867, 4882, 4897, 4908, 4921, 4936, 4951, 4966, 4981, 4996,
595      5011, 5026, 5041
596     } ;
597
598 static yyconst short int yy_def[824] =
599     {   0,
600       734,  734,  734,  734,  734,  734,  735,  736,  734,  734,
601       735,  734,   12,  737,  735,   15,   15,   15,   15,   15,
602       735,   15,   15,  735,   15,  735,   15,  738,   15,   15,
603        29,   29,   29,   29,   29,   29,   29,   29,   30,   29,
604       735,  735,  735,  739,  734,  740,  740,  734,   48,  737,
605       740,   51,   51,   51,   51,   51,  740,   51,   51,  740,
606        51,  740,   51,   51,   51,   64,   64,   64,   64,   64,
607        64,   64,   64,   65,   64,  740,  740,  740,  739,  734,
608       734,  735,  741,  742,  741,  734,  734,  734,  734,  735,
609       734,  735,  734,  743,  743,  735,  743,  734,   12,  734,
610
611       735,  737,  734,  735,  744,  735,  745,  746,  106,  734,
612       106,  106,  735,  735,  735,  735,  106,  104,  735,  735,
613       106,  735,  106,  106,  735,  747,  738,  747,  748,  734,
614       735,  735,  749,  735,  735,  735,  735,  132,  750,  735,
615       135,  106,  106,  735,  735,  735,  735,  735,  739,  751,
616       739,  734,  752,  753,  734,  753,  753,  734,  753,  734,
617       734,  753,  754,  753,  164,  745,  165,  165,  165,  753,
618       753,  753,  753,  165,  164,  753,  753,  165,  753,  165,
619       165,  753,  164,  164,  749,  164,  753,  753,  164,  184,
620       750,  164,  187,  165,  165,  753,  753,  753,  753,  753,
621
622       739,  734,  755,  756,  756,  757,  758,  755,  755,  759,
623       760,  734,  734,  734,  734,  735,  735,  734,  735,  734,
624       734,  734,  734,  735,  734,  734,  735,  734,  106,  761,
625       735,  734,  734,  735,  734,  734,  734,  734,  735,  735,
626       735,  735,  735,  735,  735,  234,  735,  735,  735,  762,
627       763,  764,  765,  766,  735,  767,  735,  768,  767,  735,
628       735,  735,  769,  770,  735,  770,  735,  735,  255,  735,
629       771,  735,  735,  770,  255,  265,  735,  735,  735,  735,
630       735,  734,  739,  734,  772,  734,  773,  774,  774,  774,
631       774,  775,  772,  776,  774,  774,  761,  774,  296,  774,
632
633       774,  774,  774,  774,  774,  774,  299,  774,  774,  774,
634       777,  774,  296,  768,  774,  774,  774,  312,  774,  774,
635       312,  296,  771,  774,  774,  312,  318,  774,  774,  774,
636       774,  774,  739,  734,  734,  778,  778,  779,  734,  780,
637       781,  781,  782,  782,  734,  734,  734,  735,  734,  734,
638       734,  734,  734,  734,  734,  735,  783,  734,  735,  734,
639       734,  735,  783,  735,  734,  734,  734,  734,  735,  735,
640       735,  734,  735,  784,  735,  735,  735,  735,  735,  785,
641       786,  786,  787,  787,  788,  789,  790,  734,  734,  734,
642       735,  791,  734,  734,  791,  395,  735,  735,  734,  734,
643
644       735,  734,  391,  395,  391,  735,  735,  735,  739,  734,
645       734,  734,  734,  734,  792,  734,  774,  793,  793,  774,
646       774,  774,  363,  774,  774,  774,  774,  774,  794,  774,
647       774,  774,  774,  774,  795,  785,  795,  774,  774,  774,
648       774,  438,  438,  774,  774,  774,  739,  734,  796,  797,
649       798,  799,  800,  801,  802,  803,  734,  734,  734,  734,
650       735,  734,  734,  734,  734,  735,  735,  734,  735,  734,
651       735,  735,  804,  805,  805,  735,  735,  735,  806,  807,
652       734,  808,  734,  809,  809,  809,  735,  734,  734,  734,
653       734,  734,  735,  734,  809,  739,  734,  734,  734,  734,
654
655       734,  810,  811,  811,  438,  774,  774,  774,  774,  774,
656       812,  804,  812,  774,  774,  774,  813,  774,  774,  739,
657       734,  734,  797,  798,  798,  799,  799,  800,  800,  801,
658       801,  802,  802,  803,  803,  734,  734,  814,  814,  814,
659       735,  734,  734,  734,  734,  735,  815,  734,  734,  734,
660       734,  735,  735,  735,  735,  734,  734,  734,  734,  734,
661       734,  734,  739,  734,  734,  734,  810,  810,  811,  811,
662       774,  774,  774,  774,  816,  774,  774,  813,  739,  734,
663       734,  797,  734,  734,  734,  734,  734,  734,  734,  734,
664       734,  815,  815,  734,  734,  734,  734,  735,  735,  735,
665
666       735,  735,  739,  734,  734,  811,  811,  774,  774,  816,
667       774,  774,  774,  739,  734,  734,  734,  734,  734,  734,
668       734,  734,  734,  734,  817,  735,  734,  734,  811,  811,
669       818,  774,  739,  734,  734,  734,  734,  734,  819,  819,
670       817,  641,  735,  734,  734,  811,  811,  818,  819,  648,
671       774,  739,  734,  734,  819,  641,  641,  734,  734,  811,
672       811,  820,  648,  648,  739,  734,  734,  819,  819,  641,
673       641,  734,  734,  811,  811,  820,  820,  648,  648,  739,
674       734,  734,  819,  819,  641,  821,  734,  822,  811,  820,
675       820,  648,  739,  734,  734,  734,  819,  821,  734,  734,
676
677       822,  734,  811,  820,  820,  739,  734,  734,  811,  820,
678       739,  734,  811,  739,  823,  823,  823,  823,  823,  823,
679       823,  823,  823,  823,  823,  823,  823,  823,  823,  823,
680       823,  734,  734,    0,  734,  734,  734,  734,  734,  734,
681       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
682       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
683       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
684       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
685       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
686       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
687
688       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
689       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
690       734,  734,  734
691     } ;
692
693 static yyconst short int yy_nxt[5130] =
694     {   0,
695         4,    4,    4,    5,    4,    4,    6,    4,    7,    8,
696         4,    9,   10,    7,    4,    4,   11,   12,   13,   13,
697         4,   14,    4,    4,   15,   16,   17,   18,   19,   19,
698        20,   19,    7,   19,   21,   22,   15,   23,   24,   15,
699        25,   26,    7,   27,    7,   28,    4,    4,   29,   30,
700        31,   32,   33,   34,   35,   36,   37,   38,   39,   40,
701        41,   15,   42,   24,   25,   26,    7,    7,   43,    7,
702        44,    4,    4,    4,    4,    5,    4,   45,    6,   45,
703         7,    8,    4,    9,   10,   46,    4,    4,   47,   48,
704        49,   49,    4,   50,    4,    4,   51,   52,   53,   54,
705
706        55,   55,   56,   55,   46,   55,   57,   58,   51,   59,
707        60,   51,   61,   62,   46,   63,   46,   28,    4,    4,
708        64,   65,   66,   67,   68,   69,   70,   71,   72,   73,
709        74,   75,   76,   51,   77,   60,   61,   62,   46,   46,
710        78,   46,   79,    4,   80,   81,   81,   81,   81,   84,
711        87,   88,   89,  734,  734,   82,   85,   85,   85,   85,
712       110,  733,   90,   94,   91,   92,  114,  155,   80,   93,
713        94,   94,   95,   82,  734,  734,  225,   82,  226,  117,
714       734,  413,   96,   97,   98,   99,   99,   99,   99,  100,
715       414,  115,  110,  101,  101,  101,  101,  101,  101,  101,
716
717       101,   82,  101,   82,   82,  101,  101,  101,  101,  101,
718        82,   82,  101,   82,  146,  113,  111,  101,  101,  101,
719       101,  101,  101,  101,  101,  101,  101,  101,  101,   82,
720       101,  101,  101,  101,   82,   82,   82,   82,   82,  104,
721       118,  105,  106,  106,  106,  106,  107,  110,  168,  108,
722       734,  136,  734,  135,  135,  686,   89,  110,  144,  103,
723       163,   82,  734,  147,  119,  712,  156,  734,   91,  157,
724       104,  734,  734,  158,  109,  109,  109,  109,  109,  109,
725       109,  109,  109,  109,  109,  109,  105,  136,  136,  135,
726       135,  135,   82,  170,  108,  580,  174,  136,  136,  123,
727
728       124,  287,   82,  113,  155,  150,  125,  135,  135,  148,
729       125,  116,  206,  207,  155,  218,  125,  702,  210,  120,
730       120,  120,  120,  120,  120,  120,  120,  120,  120,  120,
731       120,  126,  127,  127,  127,  126,  126,  126,  126,  126,
732       126,  126,  126,  126,  128,  126,  126,   94,  175,  251,
733       179,  126,  126,  126,  126,  734,  173,  154,  734,  734,
734       708,  734,  734,  734,  155,  225,  188,  226,  187,  187,
735       216,  217,  176,  196,  152,  171,  126,  130,  126,  211,
736       136,  136,  130,  135,  135,  135,  136,  136,  136,  136,
737       135,  135,  135,  734,  135,  135,  135,  451,  734,  150,
738
739       172,  126,  126,  131,  287,  734,  132,  132,  132,  132,
740       133,  114,  400,  151,  151,  151,  151,  225,  136,  136,
741        94,   94,   94,  136,  136,  135,  135,  135,  135,  135,
742       135,  293,  294,  734,  134,  502,  115,  502,  135,  135,
743       136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
744       110,  734,  213,  734,  214,  204,  335,   82,  452,  215,
745       137,  401,  198,  138,  138,  138,  138,  139,  152,  155,
746        82,   81,   81,   81,   81,  699,  136,  136,  142,  142,
747       142,  580,  155,  707,  135,  135,  135,  141,  141,  141,
748       581,  140,   94,   94,   94,  141,  141,  141,  142,  142,
749
750       142,  142,  142,  142,  142,  142,  143,   94,   94,   95,
751       197,  199,  206,  336,   82,  234,  234,  234,  234,  159,
752        97,   98,  160,  160,  160,  160,  161,  206,  336,  470,
753       162,  162,  162,  162,  162,  162,  162,  162,  154,  162,
754       154,  154,  162,  162,  162,  162,  162,  154,  154,  162,
755       154,  338,  339,  470,  162,  162,  162,  162,  162,  162,
756       162,  162,  162,  162,  162,  162,  154,  162,  162,  162,
757       162,  154,  154,  154,  154,  154,   82,  110,  734,  150,
758        82,  164,  384,  105,  165,  165,  165,  165,  166,  695,
759       201,  108,  155,  151,  151,  151,  151,  734,  234,  234,
760
761       234,  234,   82,  188,  188,  702,  187,  187,  187,  386,
762       288,  289,  164,  734,  155,  130,  167,  167,  167,  167,
763       167,  167,  167,  167,  167,  167,  167,  167,   82,  180,
764       181,  734,  400,  734,  240,  105,  182,  700,  188,  188,
765       155,   82,   82,  108,  187,  187,  187,  110,  152,  290,
766       291,  387,   82,  155,  155,  103,  188,  188,  188,  188,
767       187,  187,  187,  734,  155,  187,  187,  187,  177,  177,
768       177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
769       183,  490,  734,  184,  184,  184,  184,  185,  188,  188,
770       187,  187,  187,   94,   94,   94,   82,   82,   82,  200,
771
772       182,  503,   82,  699,  170,  221,  182,  222,  155,  155,
773       155,  186,  223,  734,  155,  187,  187,  188,  188,  188,
774       188,  188,  188,  188,  188,  188,  188,  110,  234,  234,
775       234,  234,  734,  246,  246,  246,  246,  189,  188,  188,
776       190,  190,  190,  190,  191,  171,  187,  187,  187,  734,
777       332,  311,  234,  234,  234,  234,  303,  188,  188,   82,
778       239,  410,  187,  187,  187,  399,  411,  412,  192,  734,
779       172,  155,  193,  193,  193,  194,  194,  194,  194,  194,
780       194,  194,  194,  195,  734,  234,  234,  234,  234,  696,
781       204,  293,  294,  303,  194,  194,  194,  208,  208,  208,
782
783       208,  209,  244,  193,  193,  193,  150,  268,  692,  188,
784       188,  354,   94,  234,  234,  234,  234,  333,  468,  187,
785       187,  355,   82,  173,  734,  249,  338,  339,  355,  734,
786       227,  227,  227,  227,  227,  227,  227,  227,  227,  227,
787       227,  227,  229,  338,  339,  234,  234,  234,  234,  230,
788       265,  265,  265,  265,  276,  276,  276,  276,  265,  265,
789       265,  265,  247,  276,  276,  276,  276,  299,  299,  299,
790       299,  384,  471,  229,  103,  152,  469,  231,  231,  231,
791       231,  231,  231,  231,  231,  231,  231,  231,  231,  235,
792       250,  236,  150,   82,  279,  239,  472,  237,  417,  453,
793
794        82,  550,  238,  692,  130,  155,  151,  151,  151,  151,
795       283,   82,  155,  235,  386,  236,  299,  299,  299,  299,
796       479,  687,  237,  155,  606,  551,  238,  126,  127,  127,
797       127,  126,  126,  126,  126,  126,  126,  126,  126,  126,
798       126,  126,  126,  299,  299,  299,  299,  126,  126,  126,
799       126,  302,  301,  130,   82,  103,  387,  304,  686,   82,
800       454,  152,  299,  299,  299,  299,  155,  307,  307,  307,
801       307,  155,  126,  130,  126,  300,  299,  299,  299,  299,
802        82,   82,  374,  290,  299,  299,  299,  299,  299,  299,
803       299,  299,  155,  155,  685,  374,  374,  126,  126,  126,
804
805       252,  252,  252,  253,   82,  126,  126,  126,  126,  126,
806       126,   82,  305,  126,  126,  504,  155,  492,   82,  126,
807       126,  309,  126,  155,  310,  308,  318,  318,  318,  318,
808       155,   82,  457,  311,  327,  327,  327,  327,  305,  356,
809       356,  356,  356,  155,  126,  130,  458,  103,   82,  568,
810       416,  568,  327,  327,  327,  327,  318,  318,  318,  318,
811       155,  357,  357,  357,  357,  331,  493,  103,  629,  126,
812       126,  255,  255,  255,  255,  255,  255,  255,  255,  255,
813       255,  255,  255,  256,  300,  290,   82,  257,  359,  359,
814       359,  359,  330,  734,  258,  399,  259,  688,  260,  260,
815
816       260,  360,  360,  360,  360,  150,  485,  260,   82,   82,
817       260,  390,  548,  260,  260,  103,  447,   82,  257,  486,
818       155,  155,  261,  261,  261,  262,  262,  262,  262,  262,
819       262,  262,  261,  262,  685,  260,  548,  394,  260,  135,
820       135,  135,  135,  135,  135,  135,  135,  135,  135,  135,
821       135,  264,  361,  361,  361,  361,  432,  372,  265,  265,
822       265,  265,  204,  335,  266,  103,  267,  267,  267,  208,
823       208,  208,  208,  209,  152,  267,  204,  335,  267,  630,
824       373,  267,  267,  340,  340,  340,  340,   82,  349,   82,
825       267,  267,  267,   82,  268,  359,  359,  359,  359,  155,
826
827       267,  155,  682,  267,  373,  155,  267,  269,  269,  269,
828       269,  269,  269,  269,  269,  269,  269,  269,  269,  270,
829       391,  391,  391,  391,  681,  661,  271,   82,  390,  369,
830       359,  359,  359,  359,  391,  391,  391,  391,  433,  155,
831       103,  252,  252,  252,  253,  359,  359,  359,  359,  427,
832       270,  491,  103,  492,  272,  272,  272,  273,  273,  273,
833       273,  273,  273,  273,  272,  273,  275,  275,  275,  275,
834       275,  275,  275,  275,  275,  275,  275,  275,  229,  370,
835       379,  276,  276,  276,  276,  230,  130,  264,  356,  356,
836       356,  356,  418,  398,  392,  392,  392,  392,  390,   82,
837
838       266,  419,  561,  546,  403,  403,  403,  403,  455,  229,
839       569,  155,  479,  277,  277,  277,  231,  278,  231,  231,
840       231,  231,  231,  277,  231,   94,   94,   94,  546,  491,
841       394,  679,   82,  403,  403,  403,  403,  154,   97,  363,
842       160,  160,  160,  160,  155,  556,  363,  678,  162,  162,
843       162,  162,  162,  162,  162,  162,  154,  162,  154,  154,
844       162,  162,  162,  162,  162,  154,  154,  162,  154,  456,
845       363,  489,  162,  162,  162,  162,  162,  162,  162,  162,
846       162,  162,  162,  162,  154,  162,  162,  162,  162,  154,
847       154,  154,  154,  154,   82,  405,  405,  405,  405,  420,
848
849       420,  420,  420,  734,  264,  400,  155,  359,  359,  359,
850       359,  404,  404,  404,  404,  399,  734,  266,   82,   82,
851        82,  359,  359,  359,  359,  431,  420,  420,  420,  420,
852       155,  155,  155,  673,  295,  295,  295,  295,  295,  295,
853       295,  295,  295,  295,  295,  295,  296,  394,  150,  734,
854       353,  672,  103,  297,  401,   82,  734,  268,  103,  689,
855        82,  426,  409,  409,  409,  409,   82,  155,  421,  421,
856       421,  421,  155,  443,  443,  443,  443,  296,  155,  671,
857       734,  298,  298,  298,  298,  298,  298,  298,  298,  298,
858       298,  298,  298,  312,  312,  312,  312,  312,  312,  312,
859
860       312,  312,  312,  312,  312,  256,  607,   82,  103,  313,
861       429,  670,  446,   82,   82,  485,  314,  152,  259,  155,
862       315,  315,  315,  429,  429,  155,  155,   82,  734,  315,
863        82,   82,  315,  399,  667,  315,  315,  666,  290,  155,
864       313,  659,  155,  155,  316,  316,  316,  317,  317,  317,
865       317,  317,  317,  317,  316,  317,  290,  315,  430,  646,
866       315,  187,  187,  187,  187,  187,  187,  187,  187,  187,
867       187,  187,  187,   82,  264,  320,  460,  460,  460,  460,
868        82,  318,  318,  318,  318,  155,  658,  266,   82,  319,
869       319,  319,  155,  103,  400,  221,  103,  222,  319,   82,
870
871       155,  319,  223,  509,  319,  319,  461,  461,  461,  461,
872        82,  155,   82,  319,  319,  319,   82,  320,  421,  421,
873       421,  421,  155,  319,  155,  103,  319,  510,  155,  319,
874       321,  321,  321,  321,  321,  321,  321,  321,  321,  321,
875       321,  321,  322,  441,  715,   82,  204,  522,  654,  323,
876       674,  523,  425,  421,  421,  421,  421,  155,  514,  570,
877        82,  484,  484,  484,  484,  150,  717,  637,  421,  421,
878       421,  421,  155,  322,  434,  688,  520,  324,  324,  324,
879       325,  325,  325,  325,  325,  325,  325,  324,  325,  326,
880       326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
881
882       326,  296,  426,  434,  327,  327,  327,  327,  297,   82,
883       372,  390,  103,  152,   82,   82,  653,  438,  438,  438,
884       438,  155,  438,  438,  438,  438,  155,  155,  480,  480,
885       480,  580,  296,  428,  152,  282,  328,  328,  328,  298,
886       329,  298,  298,  298,  298,  298,  328,  298,  362,  103,
887        82,  536,  390,  645,  103,  363,   82,  428,  442,  442,
888       442,  442,  155,  537,  442,  442,  442,  442,  155,  395,
889       455,  675,  644,  481,  355,  495,  495,  495,  495,  362,
890       643,  355,  396,  364,  364,  364,  364,  364,  364,  364,
891       364,  364,  364,  364,  364,  380,  380,  103,  380,  380,
892
893       380,  380,  380,  647,  380,  380,  380,  380,  660,  380,
894       380,   82,  489,  399,  734,  380,  380,  380,  380,  421,
895       421,  421,  421,  155,   82,  639,  485,  734,  639,  103,
896       400,  456,  421,  421,  421,  421,  155,  204,  335,  486,
897       380,  380,  380,  395,  450,  450,  450,  450,  492,   82,
898       461,  461,  461,  461,  713,  320,  396,  734,  638,  539,
899       382,  155,  568,  416,  568,  380,  380,  126,  252,  252,
900       252,  253,  540,  126,  126,  126,  126,  126,  126,  441,
901       703,  126,  126,   82,  150,  491,  489,  126,  126,  717,
902       126,  461,  461,  461,  461,  155,   82,  493,  496,  496,
903
904       496,  496,  468,  290,   89,  498,   82,   82,  155,  388,
905       655,  388,  126,  130,  497,  499,   91,   98,  155,  155,
906        82,   93,  100,   82,   82,  620,  491,  398,  505,  505,
907       505,  505,  155,  506,  655,  155,  155,  126,  126,  264,
908       538,  538,  538,  538,  635,   82,  507,  480,  480,  480,
909       515,  584,  266,  152,  267,  267,  267,  155,  282,   82,
910       508,  634,  416,  267,   82,  492,  267,  516,  440,  267,
911       267,  155,  557,  557,  557,   82,  155,  491,  267,  267,
912       267,  547,  268,  505,  505,  505,  505,  155,  267,  574,
913       628,  267,  481,  627,  267,  262,  262,  262,  262,  262,
914
915       262,  262,  262,  262,  262,  262,  262,  395,  110,  557,
916       557,  557,  548,   82,  519,  150,  577,  558,   82,  440,
917       396,  549,  397,  397,  397,  155,  626,  563,   82,  655,
918       155,  397,  717,   82,  397,  601,  548,  397,  397,  492,
919       155,  505,  505,  505,  505,  155,  397,  397,  397,   82,
920       398,  625,  625,  655,  558,  572,  397,  624,  393,  397,
921       393,  155,  397,  273,  273,  273,  273,  273,  273,  273,
922       273,  273,  273,  273,  273,  362,  468,   82,  110,  150,
923       572,   82,  363,   82,  564,  734,  539,  589,  519,  155,
924       579,   82,   82,  155,  560,  155,  600,  573,  734,  734,
925
926       590,  732,  576,  155,  155,  656,  362,  623,  622,  601,
927       406,  406,  406,  364,  407,  364,  364,  364,  364,  364,
928       406,  364,   82,  204,  335,  150,   82,  621,  586,  657,
929       582,  582,  582,  582,  155,   82,  593,   82,  155,  603,
930       603,  603,  603,   82,   82,   82,  593,  155,  152,  155,
931       620,  204,  522,  103,  590,  155,  155,  155,  582,  582,
932       582,  582,  298,  298,  298,  298,  298,  298,  298,  298,
933       298,  298,  298,  298,  422,  197,  608,  613,  636,  150,
934        82,  423,  150,   82,  663,  619,  618,  586,   82,  611,
935       614,  637,  155,  150,  152,  155,  603,  603,  603,  603,
936
937       155,  609,  612,  617,  633,  422,  616,  709,  664,  424,
938       424,  424,  424,  424,  424,  424,  424,  424,  424,  424,
939       424,  380,  380,  612,  380,  380,  380,  380,  380,  381,
940       380,  380,  380,  380,  150,  380,  380,   82,   82,  615,
941       631,  436,  380,  380,  380,  652,  632,  662,  152,  155,
942       155,  564,   82,  668,  150,  655,  416,  655,  150,  655,
943       683,  416,  152,  694,  155,  665,  380,  380,  380,  680,
944       631,  697,  655,  655,  655,  416,  695,  669,  655,  655,
945       416,  655,  651,  655,  677,  416,  437,  684,  605,  677,
946       604,  380,  380,   82,  264,  150,  655,  655,  655,  284,
947
948       697,  150,  655,  152,  150,  155,  693,  266,  677,  319,
949       319,  319,  706,  677,  416,  711,  416,  416,  319,  150,
950       561,  319,  560,  152,  319,  319,  602,  152,  599,  598,
951       714,  597,  596,  319,  319,  319,  595,  320,  594,  690,
952       593,  145,  677,  319,  677,  677,  319,  704,  416,  319,
953       317,  317,  317,  317,  317,  317,  317,  317,  317,  317,
954       317,  317,  395,  691,  152,  591,  677,  588,  677,  677,
955       152,  717,  717,  152,  705,  396,  677,  439,  439,  439,
956       416,  416,  718,  719,  717,  717,  439,  587,  152,  439,
957       586,  584,  439,  439,  583,  720,  721,  535,  710,  535,
958
959       677,  439,  439,  439,  533,  440,  710,  533,  677,  677,
960       531,  439,  531,  529,  439,  529,  527,  439,  325,  325,
961       325,  325,  325,  325,  325,  325,  325,  325,  325,  325,
962       422,  527,  677,  677,  525,  525,  717,  423,  717,  717,
963       282,  282,  416,  575,  717,  717,  717,  722,  717,  723,
964       724,  717,  717,  282,  282,  725,  726,  727,  566,  728,
965       565,  422,  729,  730,  225,  444,  444,  444,  424,  445,
966       424,  424,  424,  424,  424,  444,  424,  364,  364,  364,
967       364,  364,  364,  364,  364,  364,  364,  364,  364,  473,
968       473,  218,  473,  473,  473,  473,  473,  490,  473,  473,
969
970       473,  473,  562,  473,  473,  282,  489,  282,  282,  473,
971       473,  473,  473,  282,  282,  282,  717,  282,  560,  483,
972       282,  282,  110,  555,  554,  553,  552,  731,  468,  110,
973       545,  544,  543,  542,  473,  473,  473,  458,  535,  533,
974       531,  475,  529,  527,  525,  207,  521,  517,  287,  416,
975       501,  500,   86,  219,  475,  475,  494,  394,  395,  473,
976       473,  380,  380,  390,  380,  380,  380,  380,  380,  483,
977       380,  380,  380,  380,  478,  380,  380,  477,  476,  219,
978       467,  380,  380,  380,  380,  282,  466,  465,  464,  463,
979       462,  225,  225,  219,  218,  218,  218,  344,  344,  342,
980
981       342,  207,  448,  287,  287,  287,  380,  380,  380,  286,
982       416,  286,  379,  408,  370,  264,  390,  256,  378,  377,
983       376,  375,  371,  368,  367,  366,  365,  353,  353,  352,
984       351,  380,  380,  380,  380,  350,  380,  380,  380,  380,
985       380,  349,  380,  380,  380,  380,  349,  380,  380,  348,
986       347,  346,  345,  380,  380,  380,  380,  344,  342,  335,
987       334,  287,  287,  306,  287,  287,  286,  284,  282,  281,
988       219,  280,  244,  130,  250,  248,  219,  245,  380,  380,
989       380,  243,  242,  242,  241,  103,  225,  224,  218,  219,
990       218,  212,  204,  202,  178,  734,  169,  153,  145,  122,
991
992       121,  116,  734,  380,  380,  485,  112,  103,   86,  734,
993       734,  734,  734,  734,  734,  734,  734,  734,  486,  734,
994       487,  487,  487,  734,  734,  734,  734,  734,  734,  487,
995       734,  734,  487,  734,  734,  487,  487,  734,  734,  734,
996       734,  734,  734,  734,  487,  487,  487,  734,  734,  734,
997       734,  734,  734,  734,  487,  734,  734,  487,  734,  734,
998       487,  395,  734,  734,  734,  734,  734,  734,  734,  734,
999       734,  734,  734,  734,  396,  734,  397,  397,  397,  734,
1000       734,  734,  734,  734,  734,  397,  734,  734,  397,  734,
1001       734,  397,  397,  734,  734,  734,  734,  734,  734,  734,
1002
1003       397,  397,  397,  734,  398,  734,  734,  734,  734,  734,
1004       397,  734,  734,  397,  734,  734,  397,   82,  734,  734,
1005       734,  734,  734,  734,  734,  734,  734,  734,  734,  155,
1006       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1007       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1008       734,  734,  734,  734,  734,  734,  734,  424,  424,  424,
1009       424,  424,  424,  424,  424,  424,  424,  424,  424,  473,
1010       473,  734,  473,  473,  473,  473,  473,  474,  473,  473,
1011       473,  473,  734,  473,  473,  734,  734,  734,  734,  512,
1012       473,  473,  473,  734,  734,  734,  734,  734,  734,  734,
1013
1014       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1015       734,  734,  734,  734,  473,  473,  473,  734,  734,  734,
1016       734,  513,  734,  734,  734,  734,  734,  734,  734,  734,
1017       734,  734,  734,  734,  513,  513,  734,  734,  734,  473,
1018       473,  380,  380,  734,  380,  380,  380,  380,  380,  381,
1019       380,  380,  380,  380,  734,  380,  380,  734,  734,  734,
1020       734,  436,  380,  380,  380,  734,  734,  734,  734,  734,
1021       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1022       734,  734,  734,  734,  734,  734,  380,  380,  380,  734,
1023       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1024
1025       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1026       734,  380,  380,  380,  380,  734,  380,  380,  380,  380,
1027       380,  381,  380,  380,  380,  380,  734,  380,  380,  734,
1028       734,  734,  734,  436,  380,  380,  380,  734,  734,  734,
1029       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1030       734,  734,  734,  734,  734,  734,  734,  734,  380,  380,
1031       380,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1032       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1033       734,  734,  734,  380,  380,   82,  485,  734,  734,  734,
1034       734,  734,  734,  734,  734,  734,  734,  155,  734,  486,
1035
1036       734,  518,  518,  518,  734,  734,  734,  734,  734,  734,
1037       518,  734,  734,  518,  734,  734,  518,  518,  734,  734,
1038       734,  734,  734,  734,  734,  518,  518,  518,  734,  734,
1039       734,  734,  734,  734,  734,  518,  734,  734,  518,  734,
1040       734,  518,  395,  734,  734,  734,  734,  734,  734,  734,
1041       734,  734,  734,  734,  734,  396,  734,  439,  439,  439,
1042       734,  734,  734,  734,  734,  734,  439,  734,  734,  439,
1043       734,  734,  439,  439,  734,  734,  734,  734,  734,  734,
1044       734,  439,  439,  439,  734,  440,  734,  734,  734,  734,
1045       734,  439,  734,  734,  439,  734,  734,  439,  539,  734,
1046
1047       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1048       734,  540,  734,  541,  541,  541,  734,  734,  734,  734,
1049       734,  734,  541,  734,  734,  541,  734,  734,  541,  541,
1050       734,  734,  734,  734,  734,  734,  734,  541,  541,  541,
1051       734,  734,  734,  734,  734,  734,  734,  541,  734,  734,
1052       541,  734,  734,  541,  473,  473,  734,  473,  473,  473,
1053       473,  473,  734,  473,  473,  473,  473,  734,  473,  473,
1054       734,  734,  734,  734,  473,  473,  473,  473,  734,  734,
1055       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1056       734,  734,  734,  734,  734,  734,  734,  734,  734,  473,
1057
1058       473,  473,  734,  734,  734,  734,  734,  734,  734,  734,
1059       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1060       734,  734,  734,  734,  473,  473,  473,  473,  734,  473,
1061       473,  473,  473,  473,  734,  473,  473,  473,  473,  734,
1062       473,  473,  734,  734,  734,  734,  473,  473,  473,  473,
1063       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1064       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1065       734,  473,  473,  473,  734,  734,  734,  734,  475,  734,
1066       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1067       734,  475,  475,  734,  734,  734,  473,  473,  539,  734,
1068
1069       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1070       734,  540,  734,  571,  571,  571,  734,  734,  734,  734,
1071       734,  734,  571,  734,  734,  571,  734,  734,  571,  571,
1072       734,  734,  734,  734,  734,  734,  734,  571,  571,  571,
1073       734,  734,  734,  734,  734,  734,  734,  571,  734,  734,
1074       571,  734,  734,  571,  473,  473,  734,  473,  473,  473,
1075       473,  473,  474,  473,  473,  473,  473,  734,  473,  473,
1076       734,  734,  734,  734,  512,  473,  473,  473,  734,  734,
1077       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1078       734,  734,  734,  734,  734,  734,  734,  734,  734,  473,
1079
1080       473,  473,  734,  734,  734,  734,  734,  734,  734,  734,
1081       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1082       734,  734,  734,  734,  473,  473,  473,  473,  734,  473,
1083       473,  473,  473,  473,  474,  473,  473,  473,  473,  734,
1084       473,  473,  734,  734,  734,  734,  512,  473,  473,  473,
1085       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1086       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1087       734,  473,  473,  473,  734,  734,  734,  734,  513,  734,
1088       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1089       734,  513,  513,  734,  734,  734,  473,  473,  640,  640,
1090
1091       734,  640,  640,  640,  640,  640,  734,  640,  640,  640,
1092       640,  734,  640,  640,  734,  734,  734,  734,  640,  640,
1093       640,  640,  734,  734,  734,  734,  734,  734,  642,  734,
1094       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1095       734,  734,  734,  640,  640,  640,  734,  734,  734,  734,
1096       734,  734,  642,  734,  734,  734,  734,  734,  734,  734,
1097       734,  734,  734,  734,  734,  734,  734,  734,  640,  640,
1098       640,  640,  734,  640,  640,  640,  640,  640,  641,  640,
1099       640,  640,  640,  734,  640,  640,  734,  734,  734,  734,
1100       649,  640,  640,  640,  734,  734,  734,  734,  734,  734,
1101
1102       650,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1103       734,  734,  734,  734,  734,  640,  640,  640,  734,  734,
1104       734,  734,  734,  734,  650,  734,  734,  734,  734,  734,
1105       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1106       640,  640,  640,  640,  734,  640,  640,  640,  640,  640,
1107       734,  640,  640,  640,  640,  734,  640,  640,  734,  734,
1108       734,  734,  640,  640,  640,  640,  734,  734,  734,  734,
1109       734,  734,  642,  734,  734,  734,  734,  734,  734,  734,
1110       734,  734,  734,  734,  734,  734,  734,  640,  640,  640,
1111       734,  734,  734,  734,  734,  734,  642,  734,  734,  734,
1112
1113       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1114       734,  734,  640,  640,  640,  640,  734,  640,  640,  640,
1115       640,  640,  641,  640,  640,  640,  640,  734,  640,  640,
1116       734,  734,  734,  734,  649,  640,  640,  640,  734,  734,
1117       734,  734,  734,  734,  650,  734,  734,  734,  734,  734,
1118       734,  734,  734,  734,  734,  734,  734,  734,  734,  640,
1119       640,  640,  734,  734,  734,  734,  734,  734,  650,  734,
1120       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1121       734,  734,  734,  734,  640,  640,   82,  734,  734,   82,
1122        82,  734,  734,   82,   82,   82,   82,   82,   83,   83,
1123
1124        83,   83,   83,  734,   83,   83,   83,   83,   83,   83,
1125        83,   83,   83,  102,  102,  102,  102,  102,  102,  102,
1126       102,  102,  102,  102,  102,  102,  102,  102,  129,  129,
1127       129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
1128       129,  129,  129,  149,  149,  149,  149,  149,  149,  149,
1129       149,  149,  149,  149,  149,  149,  149,  149,  154,  734,
1130       734,  154,  154,  154,  734,  154,  154,  154,  154,  154,
1131       203,  203,  203,  203,  203,  734,  203,  203,  203,  203,
1132       203,  203,  203,  203,  203,  205,  205,  205,  205,  205,
1133       205,  205,  205,  205,  205,  205,  205,  205,  205,  205,
1134
1135       220,  220,  734,  734,  734,  734,  734,  734,  734,  220,
1136       220,  220,  220,  220,  228,  228,  228,  232,  232,  232,
1137       233,  233,  233,  126,  126,  126,  126,  126,  126,  126,
1138       126,  126,  126,  126,  126,  126,  126,  126,  254,  254,
1139       254,  254,  254,  254,  254,  254,  254,  254,  254,  254,
1140       254,  254,  254,  263,  263,  263,  274,  274,  274,  150,
1141       150,  150,  150,  150,  150,  150,  150,  150,  150,  150,
1142       150,  150,  150,  150,  285,  285,  285,  285,  285,  285,
1143       285,  285,  285,  285,  285,  285,  285,  285,  285,  154,
1144       734,  734,  154,  154,  154,  734,  154,  154,  154,  154,
1145
1146       154,  292,  292,  292,  292,  292,  292,  292,  292,  292,
1147       292,  292,  292,  292,  292,  292,  203,  203,  203,  203,
1148       203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
1149       203,  205,  205,  205,  205,  205,  205,  205,  205,  205,
1150       205,  205,  205,  205,  205,  205,  206,  206,  206,  206,
1151       206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
1152       206,  337,  337,  337,  337,  337,  337,  337,  337,  337,
1153       337,  337,  337,  337,  337,  337,  341,  341,  734,  341,
1154       341,  341,  341,  341,  341,  341,  341,  341,  341,  341,
1155       341,  343,  343,  734,  343,  343,  343,  343,  343,  343,
1156
1157       343,  343,  343,  343,  343,  343,  358,  358,  358,  381,
1158       381,  734,  381,  381,  381,  381,  381,  381,  381,  381,
1159       381,  381,  381,  381,  383,  383,  383,  383,  383,  383,
1160       383,  383,  383,  383,  383,  383,  383,  383,  383,  126,
1161       126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
1162       126,  126,  126,  126,  385,  385,  385,  385,  385,  385,
1163       385,  385,  385,  385,  385,  385,  385,  385,  385,  254,
1164       254,  254,  254,  254,  254,  254,  254,  254,  254,  254,
1165       254,  254,  254,  254,  389,  389,  389,  393,  734,  734,
1166       393,  734,  393,  393,  734,  393,  734,  393,  402,  402,
1167
1168       402,  285,  285,  285,  285,  285,  285,  285,  285,  285,
1169       285,  285,  285,  285,  285,  285,  415,  415,  415,  415,
1170       415,  415,  415,  415,  415,  415,  415,  415,  415,  415,
1171       415,  154,  734,  734,  154,  154,  154,  734,  154,  154,
1172       154,  154,  154,  292,  292,  292,  292,  292,  292,  292,
1173       292,  292,  292,  292,  292,  292,  292,  292,  102,  102,
1174       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
1175       102,  102,  102,  435,  435,  734,  435,  435,  435,  435,
1176       435,  435,  435,  435,  435,  435,  435,  435,  337,  337,
1177       337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
1178
1179       337,  337,  337,  449,  449,  449,  449,  734,  449,  449,
1180       449,  449,  449,  449,  449,  449,  449,  449,  203,  203,
1181       203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
1182       203,  203,  203,  341,  341,  734,  341,  341,  341,  341,
1183       341,  341,  341,  341,  341,  341,  341,  341,  343,  343,
1184       734,  343,  343,  343,  343,  343,  343,  343,  343,  343,
1185       343,  343,  343,  459,  734,  459,  734,  734,  734,  459,
1186       459,  459,  474,  474,  734,  474,  474,  474,  474,  474,
1187       474,  474,  474,  474,  474,  474,  474,  380,  380,  734,
1188       380,  380,  380,  380,  380,  380,  380,  380,  380,  380,
1189
1190       380,  380,  381,  381,  734,  381,  381,  381,  381,  381,
1191       381,  381,  381,  381,  381,  381,  381,  383,  383,  383,
1192       383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
1193       383,  383,  385,  385,  385,  385,  385,  385,  385,  385,
1194       385,  385,  385,  385,  385,  385,  385,  126,  126,  126,
1195       126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
1196       126,  126,  482,  482,  482,  482,  482,  482,  482,  482,
1197       482,  482,  482,  482,  482,  482,  482,  488,  734,  734,
1198       734,  734,  488,  488,  734,  488,  734,  488,  415,  415,
1199       415,  415,  415,  415,  415,  415,  415,  415,  415,  415,
1200
1201       415,  415,  415,  102,  102,  102,  102,  102,  102,  102,
1202       102,  102,  102,  102,  102,  102,  102,  102,  511,  511,
1203       734,  511,  511,  511,  511,  511,  511,  511,  511,  511,
1204       511,  511,  511,  435,  435,  734,  435,  435,  435,  435,
1205       435,  435,  435,  435,  435,  435,  435,  435,  449,  449,
1206       449,  449,  734,  449,  449,  449,  449,  449,  449,  449,
1207       449,  449,  449,  203,  203,  203,  203,  203,  203,  203,
1208       203,  203,  203,  203,  203,  203,  203,  203,  524,  524,
1209       734,  524,  524,  524,  524,  524,  524,  524,  524,  524,
1210       524,  524,  524,  526,  526,  734,  526,  526,  526,  526,
1211
1212       526,  526,  526,  526,  526,  526,  526,  526,  528,  528,
1213       734,  528,  528,  528,  528,  528,  528,  528,  528,  528,
1214       528,  528,  528,  530,  530,  734,  530,  530,  530,  530,
1215       530,  530,  530,  530,  530,  530,  530,  530,  532,  532,
1216       734,  532,  532,  532,  532,  532,  532,  532,  532,  532,
1217       532,  532,  532,  534,  534,  734,  534,  534,  534,  534,
1218       534,  534,  534,  534,  534,  534,  534,  534,  473,  473,
1219       734,  473,  473,  473,  473,  473,  473,  473,  473,  473,
1220       473,  473,  473,  474,  474,  734,  474,  474,  474,  474,
1221       474,  474,  474,  474,  474,  474,  474,  474,  383,  383,
1222
1223       383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
1224       383,  383,  383,  126,  126,  126,  126,  126,  126,  126,
1225       126,  126,  126,  126,  126,  126,  126,  126,  482,  482,
1226       482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
1227       482,  482,  482,  559,  734,  734,  734,  734,  559,  559,
1228       734,  559,  567,  567,  567,  567,  567,  567,  567,  567,
1229       567,  567,  567,  567,  567,  567,  567,  102,  102,  102,
1230       102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
1231       102,  102,  511,  511,  734,  511,  511,  511,  511,  511,
1232       511,  511,  511,  511,  511,  511,  511,  578,  578,  578,
1233
1234       578,  578,  578,  578,  578,  578,  578,  578,  578,  578,
1235       578,  578,  585,  734,  734,  734,  734,  585,  585,  734,
1236       585,  592,  592,  734,  592,  592,  592,  592,  592,  592,
1237       592,  592,  592,  592,  592,  592,  610,  610,  610,  610,
1238       610,  610,  610,  610,  610,  610,  610,  610,  610,  610,
1239       610,  641,  641,  734,  641,  641,  641,  641,  641,  641,
1240       641,  641,  641,  641,  641,  641,  648,  648,  734,  648,
1241       648,  648,  648,  648,  648,  648,  648,  648,  648,  648,
1242       648,  640,  640,  734,  640,  640,  640,  640,  640,  640,
1243       640,  640,  640,  640,  640,  640,  676,  676,  676,  676,
1244
1245       676,  676,  676,  676,  676,  676,  676,  676,  676,  676,
1246       676,  698,  698,  698,  698,  698,  698,  698,  698,  698,
1247       698,  698,  698,  698,  698,  698,  701,  701,  701,  701,
1248       701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
1249       701,  716,  716,  716,  716,  716,  716,  716,  716,  716,
1250       716,  716,  716,  716,  716,  716,    3,  734,  734,  734,
1251       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1252       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1253       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1254       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1255
1256       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1257       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1258       734,  734,  734,  734,  734,  734,  734,  734,  734
1259     } ;
1260
1261 static yyconst short int yy_chk[5130] =
1262     {   0,
1263         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1264         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1265         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1266         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1267         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1268         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1269         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1270         1,    1,    2,    2,    2,    2,    2,    2,    2,    2,
1271         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1272         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1273
1274         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1275         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1276         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1277         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1278         2,    2,    2,    2,    5,    6,    6,    6,    6,    8,
1279        10,   10,   11,   20,   22,   46,    8,    8,    8,    8,
1280        16,  732,   11,   13,   11,   11,   20,   46,    5,   11,
1281        12,   12,   12,   13,   18,   13,   98,   12,   98,   22,
1282        13,  286,   12,   12,   12,   12,   12,   12,   12,   12,
1283       286,   20,   52,   12,   12,   12,   12,   12,   12,   12,
1284
1285        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
1286        12,   12,   12,   12,   42,   18,   16,   12,   12,   12,
1287        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
1288        12,   12,   12,   12,   12,   12,   12,   12,   12,   15,
1289        23,   15,   15,   15,   15,   15,   15,   27,   52,   15,
1290        23,   31,   54,   31,   31,  712,   47,   43,   31,   50,
1291        50,   47,   32,   42,   23,  708,   47,   27,   47,   47,
1292        15,   58,   40,   47,   15,   15,   15,   15,   15,   15,
1293        15,   15,   15,   15,   15,   15,   24,   32,   32,   32,
1294        32,   32,   62,   54,   24,  707,   58,   40,   40,   27,
1295
1296        27,  158,   57,   32,   62,  149,   27,   40,   40,   43,
1297        43,   40,   84,   84,   57,  158,   43,  701,   86,   24,
1298        24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
1299        24,   28,   28,   28,   28,   28,   28,   28,   28,   28,
1300        28,   28,   28,   28,   28,   28,   28,   49,   59,  128,
1301        62,   28,   28,   28,   28,   33,   57,   49,   59,   49,
1302       700,   34,   56,   36,   49,  351,   66,  351,   66,   66,
1303        90,   90,   59,   66,  149,   56,   28,   28,   28,   86,
1304        33,   33,  128,   33,   33,   33,   34,   34,   36,   36,
1305        34,   34,   34,   37,   36,   36,   36,  349,   35,   44,
1306
1307        56,   28,   28,   29,  161,   29,   29,   29,   29,   29,
1308        29,   35,  268,   44,   44,   44,   44,  161,   37,   37,
1309        94,   94,   94,   35,   35,   37,   37,   37,   35,   35,
1310        35,  163,  163,   39,   29,  416,   35,  416,   29,   29,
1311        29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
1312        30,   38,   89,   39,   89,  203,  203,   77,  349,   89,
1313        30,  268,   77,   30,   30,   30,   30,   30,   44,   77,
1314        76,   81,   81,   81,   81,  698,   38,   38,   39,   39,
1315        39,  521,   76,  696,   38,   38,   38,   39,   39,   39,
1316       521,   30,   97,   97,   97,   30,   30,   30,   30,   30,
1317
1318        30,   30,   30,   30,   30,   30,   30,   48,   48,   48,
1319        76,   77,  204,  204,   48,  109,  109,  109,  109,   48,
1320        48,   48,   48,   48,   48,   48,   48,  205,  205,  372,
1321        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
1322        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
1323        48,  207,  207,  372,   48,   48,   48,   48,   48,   48,
1324        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
1325        48,   48,   48,   48,   48,   48,   51,   63,   68,   79,
1326       154,   51,  251,   51,   51,   51,   51,   51,   51,  694,
1327        79,   51,  154,   79,   79,   79,   79,   63,  112,  112,
1328
1329       112,  112,  156,   68,   68,  688,   68,   68,   68,  253,
1330       156,  156,   51,   71,  156,  251,   51,   51,   51,   51,
1331        51,   51,   51,   51,   51,   51,   51,   51,   60,   63,
1332        63,   69,  394,   72,  112,   60,   63,  687,   71,   71,
1333        60,  157,  159,   60,   71,   71,   71,   78,   79,  157,
1334       159,  253,   78,  157,  159,  418,   69,   69,   72,   72,
1335        69,   69,   69,   67,   78,   72,   72,   72,   60,   60,
1336        60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
1337        64,  394,   64,   64,   64,   64,   64,   64,   67,   67,
1338        67,   67,   67,   95,   95,   95,  162,  172,  182,   78,
1339
1340        78,  418,  200,  686,   67,   95,   78,   95,  162,  172,
1341       182,   64,   95,   73,  200,   64,   64,   64,   64,   64,
1342        64,   64,   64,   64,   64,   64,   64,   65,  111,  111,
1343       111,  111,   70,  120,  120,  120,  120,   65,   73,   73,
1344        65,   65,   65,   65,   65,   70,   73,   73,   73,   74,
1345       200,  182,  117,  117,  117,  117,  172,   70,   70,  171,
1346       111,  284,   70,   70,   70,  267,  284,  284,   65,   74,
1347        70,  171,   65,   65,   65,   65,   65,   65,   65,   65,
1348        65,   65,   65,   65,   75,  123,  123,  123,  123,  682,
1349        85,  292,  292,  171,   74,   74,   74,   85,   85,   85,
1350
1351        85,   85,  117,   74,   74,   74,  201,  267,  679,   75,
1352        75,  226,   99,  121,  121,  121,  121,  201,  371,   75,
1353        75,  226,   99,   75,   99,  123,  336,  336,  226,   99,
1354       104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
1355       104,  104,  106,  337,  337,  124,  124,  124,  124,  106,
1356       136,  136,  136,  136,  142,  142,  142,  142,  144,  144,
1357       144,  144,  121,  143,  143,  143,  143,  167,  167,  167,
1358       167,  383,  373,  106,  569,  201,  371,  106,  106,  106,
1359       106,  106,  106,  106,  106,  106,  106,  106,  106,  110,
1360       124,  110,  151,  288,  144,  143,  373,  110,  288,  353,
1361
1362       173,  470,  110,  678,  383,  288,  151,  151,  151,  151,
1363       151,  170,  173,  110,  385,  110,  169,  169,  169,  169,
1364       384,  673,  110,  170,  569,  470,  110,  127,  127,  127,
1365       127,  127,  127,  127,  127,  127,  127,  127,  127,  127,
1366       127,  127,  127,  168,  168,  168,  168,  127,  127,  127,
1367       127,  170,  169,  384,  176,  419,  385,  173,  672,  177,
1368       353,  151,  174,  174,  174,  174,  176,  177,  177,  177,
1369       177,  177,  127,  127,  127,  168,  178,  178,  178,  178,
1370       197,  179,  243,  176,  180,  180,  180,  180,  181,  181,
1371       181,  181,  197,  179,  671,  243,  243,  127,  127,  129,
1372
1373       129,  129,  129,  129,  290,  129,  129,  129,  129,  129,
1374       129,  198,  174,  129,  129,  419,  290,  398,  188,  129,
1375       129,  179,  129,  198,  180,  178,  188,  188,  188,  188,
1376       188,  199,  355,  181,  194,  194,  194,  194,  197,  227,
1377       227,  227,  227,  199,  129,  129,  355,  674,  196,  502,
1378       502,  502,  195,  195,  195,  195,  196,  196,  196,  196,
1379       196,  228,  228,  228,  228,  198,  398,  606,  606,  129,
1380       129,  131,  131,  131,  131,  131,  131,  131,  131,  131,
1381       131,  131,  131,  132,  195,  199,  229,  132,  231,  231,
1382       231,  231,  196,  229,  132,  393,  132,  674,  132,  132,
1383
1384       132,  232,  232,  232,  232,  333,  484,  132,  308,  315,
1385       132,  315,  622,  132,  132,  607,  333,  229,  132,  484,
1386       308,  315,  132,  132,  132,  132,  132,  132,  132,  132,
1387       132,  132,  132,  132,  670,  132,  622,  393,  132,  134,
1388       134,  134,  134,  134,  134,  134,  134,  134,  134,  134,
1389       134,  135,  233,  233,  233,  233,  308,  242,  135,  135,
1390       135,  135,  208,  208,  135,  647,  135,  135,  135,  208,
1391       208,  208,  208,  208,  333,  135,  209,  209,  135,  607,
1392       242,  135,  135,  209,  209,  209,  209,  309,  289,  302,
1393       135,  135,  135,  289,  135,  239,  239,  239,  239,  309,
1394
1395       135,  302,  667,  135,  242,  289,  135,  137,  137,  137,
1396       137,  137,  137,  137,  137,  137,  137,  137,  137,  138,
1397       262,  262,  262,  262,  666,  647,  138,  420,  261,  239,
1398       249,  249,  249,  249,  261,  261,  261,  261,  309,  420,
1399       294,  252,  252,  252,  252,  240,  240,  240,  240,  302,
1400       138,  397,  503,  489,  138,  138,  138,  138,  138,  138,
1401       138,  138,  138,  138,  138,  138,  140,  140,  140,  140,
1402       140,  140,  140,  140,  140,  140,  140,  140,  141,  240,
1403       249,  141,  141,  141,  141,  141,  252,  263,  269,  269,
1404       269,  269,  294,  397,  263,  263,  263,  263,  272,  421,
1405
1406       263,  294,  489,  467,  272,  272,  272,  272,  617,  141,
1407       503,  421,  479,  141,  141,  141,  141,  141,  141,  141,
1408       141,  141,  141,  141,  141,  160,  160,  160,  467,  488,
1409       263,  664,  160,  273,  273,  273,  273,  160,  160,  357,
1410       160,  160,  160,  160,  160,  479,  357,  663,  160,  160,
1411       160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
1412       160,  160,  160,  160,  160,  160,  160,  160,  160,  617,
1413       357,  488,  160,  160,  160,  160,  160,  160,  160,  160,
1414       160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
1415       160,  160,  160,  160,  164,  275,  275,  275,  275,  321,
1416
1417       321,  321,  321,  485,  274,  278,  164,  278,  278,  278,
1418       278,  274,  274,  274,  274,  277,  485,  274,  295,  330,
1419       306,  277,  277,  277,  277,  306,  295,  295,  295,  295,
1420       295,  330,  306,  659,  164,  164,  164,  164,  164,  164,
1421       164,  164,  164,  164,  164,  164,  165,  274,  283,  363,
1422       291,  658,  570,  165,  278,  291,  363,  277,  675,  675,
1423       298,  330,  283,  283,  283,  283,  304,  291,  298,  298,
1424       298,  298,  298,  326,  326,  326,  326,  165,  304,  657,
1425       363,  165,  165,  165,  165,  165,  165,  165,  165,  165,
1426       165,  165,  165,  183,  183,  183,  183,  183,  183,  183,
1427
1428       183,  183,  183,  183,  183,  184,  570,  331,  629,  184,
1429       304,  656,  331,  430,  305,  486,  184,  283,  184,  331,
1430       184,  184,  184,  304,  304,  430,  305,  431,  486,  184,
1431       417,  319,  184,  319,  654,  184,  184,  653,  417,  431,
1432       184,  645,  417,  319,  184,  184,  184,  184,  184,  184,
1433       184,  184,  184,  184,  184,  184,  431,  184,  305,  629,
1434       184,  186,  186,  186,  186,  186,  186,  186,  186,  186,
1435       186,  186,  186,  187,  187,  319,  358,  358,  358,  358,
1436       428,  187,  187,  187,  187,  187,  644,  187,  320,  187,
1437       187,  187,  428,  660,  320,  498,  504,  498,  187,  441,
1438
1439       320,  187,  498,  428,  187,  187,  364,  364,  364,  364,
1440       300,  441,  432,  187,  187,  187,  332,  187,  300,  300,
1441       300,  300,  300,  187,  432,  713,  187,  428,  332,  187,
1442       189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
1443       189,  189,  190,  320,  714,  310,  450,  450,  638,  190,
1444       660,  450,  300,  310,  310,  310,  310,  310,  432,  504,
1445       301,  389,  389,  389,  389,  447,  715,  636,  301,  301,
1446       301,  301,  301,  190,  332,  713,  447,  190,  190,  190,
1447       190,  190,  190,  190,  190,  190,  190,  190,  190,  192,
1448       192,  192,  192,  192,  192,  192,  192,  192,  192,  192,
1449
1450       192,  193,  301,  310,  193,  193,  193,  193,  193,  316,
1451       303,  316,  661,  714,  317,  303,  635,  316,  316,  316,
1452       316,  316,  317,  317,  317,  317,  317,  303,  386,  386,
1453       386,  634,  193,  303,  447,  715,  193,  193,  193,  193,
1454       193,  193,  193,  193,  193,  193,  193,  193,  234,  630,
1455       324,  458,  324,  628,  646,  234,  325,  303,  324,  324,
1456       324,  324,  324,  458,  325,  325,  325,  325,  325,  392,
1457       354,  661,  627,  386,  354,  402,  402,  402,  402,  234,
1458       626,  354,  392,  234,  234,  234,  234,  234,  234,  234,
1459       234,  234,  234,  234,  234,  250,  250,  709,  250,  250,
1460
1461       250,  250,  250,  630,  250,  250,  250,  250,  646,  250,
1462       250,  328,  392,  328,  395,  250,  250,  250,  250,  328,
1463       328,  328,  328,  328,  329,  624,  495,  395,  623,  689,
1464       329,  354,  329,  329,  329,  329,  329,  340,  340,  495,
1465       250,  250,  250,  404,  340,  340,  340,  340,  407,  446,
1466       407,  407,  407,  407,  709,  328,  404,  395,  621,  538,
1467       250,  446,  568,  568,  568,  250,  250,  254,  254,  254,
1468       254,  254,  538,  254,  254,  254,  254,  254,  254,  329,
1469       689,  254,  254,  425,  409,  406,  404,  254,  254,  716,
1470       254,  406,  406,  406,  406,  425,  426,  407,  409,  409,
1471
1472       409,  409,  427,  446,  411,  412,  433,  427,  426,  767,
1473       639,  767,  254,  254,  411,  412,  411,  412,  433,  427,
1474       424,  411,  412,  434,  439,  619,  439,  406,  424,  424,
1475       424,  424,  424,  425,  639,  434,  439,  254,  254,  255,
1476       459,  459,  459,  459,  618,  510,  426,  480,  480,  480,
1477       433,  616,  255,  409,  255,  255,  255,  510,  716,  440,
1478       427,  615,  610,  255,  515,  440,  255,  434,  439,  255,
1479       255,  440,  483,  483,  483,  444,  515,  444,  255,  255,
1480       255,  468,  255,  444,  444,  444,  444,  444,  255,  510,
1481       605,  255,  480,  604,  255,  257,  257,  257,  257,  257,
1482
1483       257,  257,  257,  257,  257,  257,  257,  265,  506,  557,
1484       557,  557,  468,  506,  440,  496,  515,  483,  519,  444,
1485       265,  468,  265,  265,  265,  506,  602,  496,  507,  640,
1486       519,  265,  731,  445,  265,  600,  468,  265,  265,  445,
1487       507,  445,  445,  445,  445,  445,  265,  265,  265,  514,
1488       265,  599,  598,  640,  557,  507,  265,  597,  770,  265,
1489       770,  514,  265,  270,  270,  270,  270,  270,  270,  270,
1490       270,  270,  270,  270,  270,  276,  508,  509,  516,  520,
1491       507,  508,  276,  516,  496,  539,  540,  544,  445,  509,
1492       520,  612,  518,  508,  518,  516,  554,  509,  539,  540,
1493
1494       544,  731,  514,  612,  518,  642,  276,  596,  595,  554,
1495       276,  276,  276,  276,  276,  276,  276,  276,  276,  276,
1496       276,  276,  296,  523,  523,  563,  571,  594,  571,  642,
1497       523,  523,  523,  523,  296,  572,  593,  577,  571,  563,
1498       563,  563,  563,  573,  574,  576,  592,  572,  520,  577,
1499       591,  582,  582,  703,  589,  573,  574,  576,  582,  582,
1500       582,  582,  296,  296,  296,  296,  296,  296,  296,  296,
1501       296,  296,  296,  296,  299,  572,  573,  577,  620,  579,
1502       611,  299,  603,  609,  650,  588,  587,  585,  613,  576,
1503       579,  620,  611,  614,  563,  609,  603,  603,  603,  603,
1504
1505       613,  574,  576,  584,  614,  299,  583,  703,  650,  299,
1506       299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
1507       299,  311,  311,  611,  311,  311,  311,  311,  311,  311,
1508       311,  311,  311,  311,  633,  311,  311,  608,  632,  581,
1509       609,  311,  311,  311,  311,  633,  613,  649,  579,  608,
1510       632,  603,  651,  655,  652,  668,  662,  669,  665,  655,
1511       668,  676,  614,  681,  651,  652,  311,  311,  311,  665,
1512       608,  683,  697,  683,  649,  578,  681,  655,  684,  668,
1513       575,  669,  632,  655,  662,  567,  311,  669,  566,  676,
1514       565,  311,  311,  312,  312,  680,  697,  683,  649,  564,
1515
1516       684,  693,  684,  633,  706,  312,  680,  312,  662,  312,
1517       312,  312,  693,  676,  690,  706,  691,  677,  312,  711,
1518       562,  312,  559,  652,  312,  312,  555,  665,  553,  552,
1519       711,  551,  550,  312,  312,  312,  549,  312,  548,  677,
1520       547,  546,  690,  312,  691,  677,  312,  690,  705,  312,
1521       313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
1522       313,  313,  318,  677,  680,  545,  690,  543,  691,  677,
1523       693,  717,  718,  706,  691,  318,  705,  318,  318,  318,
1524       704,  710,  717,  718,  719,  720,  318,  542,  711,  318,
1525       541,  537,  318,  318,  536,  719,  720,  535,  705,  534,
1526
1527       705,  318,  318,  318,  533,  318,  704,  532,  704,  710,
1528       531,  318,  530,  529,  318,  528,  527,  318,  322,  322,
1529       322,  322,  322,  322,  322,  322,  322,  322,  322,  322,
1530       327,  526,  704,  710,  525,  524,  721,  327,  722,  723,
1531       717,  718,  517,  512,  724,  725,  726,  721,  727,  722,
1532       723,  728,  729,  719,  720,  724,  725,  726,  501,  727,
1533       500,  327,  728,  729,  499,  327,  327,  327,  327,  327,
1534       327,  327,  327,  327,  327,  327,  327,  362,  362,  362,
1535       362,  362,  362,  362,  362,  362,  362,  362,  362,  374,
1536       374,  497,  374,  374,  374,  374,  374,  494,  374,  374,
1537
1538       374,  374,  492,  374,  374,  721,  491,  722,  723,  374,
1539       374,  374,  374,  724,  725,  726,  730,  727,  487,  482,
1540       728,  729,  478,  477,  476,  472,  471,  730,  469,  466,
1541       465,  464,  463,  462,  374,  374,  374,  457,  456,  455,
1542       454,  374,  453,  452,  451,  449,  448,  436,  423,  415,
1543       414,  413,  410,  408,  374,  374,  400,  399,  396,  374,
1544       374,  381,  381,  388,  381,  381,  381,  381,  381,  387,
1545       381,  381,  381,  381,  379,  381,  381,  378,  377,  376,
1546       370,  381,  381,  381,  381,  730,  369,  368,  367,  366,
1547       365,  352,  350,  348,  347,  346,  345,  344,  343,  342,
1548
1549       341,  338,  334,  323,  314,  297,  381,  381,  381,  293,
1550       287,  285,  281,  280,  279,  266,  260,  259,  248,  247,
1551       245,  244,  241,  238,  237,  236,  235,  225,  224,  223,
1552       222,  381,  381,  382,  382,  221,  382,  382,  382,  382,
1553       382,  218,  382,  382,  382,  382,  217,  382,  382,  216,
1554       215,  214,  213,  382,  382,  382,  382,  211,  210,  206,
1555       202,  191,  185,  175,  166,  155,  153,  152,  150,  148,
1556       147,  146,  145,  126,  125,  122,  119,  118,  382,  382,
1557       382,  116,  115,  114,  113,  102,  100,   96,   93,   92,
1558        91,   88,   83,   80,   61,   55,   53,   45,   41,   26,
1559
1560        25,   21,   19,  382,  382,  391,   17,   14,    9,    3,
1561         0,    0,    0,    0,    0,    0,    0,    0,  391,    0,
1562       391,  391,  391,    0,    0,    0,    0,    0,    0,  391,
1563         0,    0,  391,    0,    0,  391,  391,    0,    0,    0,
1564         0,    0,    0,    0,  391,  391,  391,    0,    0,    0,
1565         0,    0,    0,    0,  391,    0,    0,  391,    0,    0,
1566       391,  405,    0,    0,    0,    0,    0,    0,    0,    0,
1567         0,    0,    0,    0,  405,    0,  405,  405,  405,    0,
1568         0,    0,    0,    0,    0,  405,    0,    0,  405,    0,
1569         0,  405,  405,    0,    0,    0,    0,    0,    0,    0,
1570
1571       405,  405,  405,    0,  405,    0,    0,    0,    0,    0,
1572       405,    0,    0,  405,    0,    0,  405,  422,    0,    0,
1573         0,    0,    0,    0,    0,    0,    0,    0,    0,  422,
1574         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1575         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1576         0,    0,    0,    0,    0,    0,    0,  422,  422,  422,
1577       422,  422,  422,  422,  422,  422,  422,  422,  422,  429,
1578       429,    0,  429,  429,  429,  429,  429,  429,  429,  429,
1579       429,  429,    0,  429,  429,    0,    0,    0,    0,  429,
1580       429,  429,  429,    0,    0,    0,    0,    0,    0,    0,
1581
1582         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1583         0,    0,    0,    0,  429,  429,  429,    0,    0,    0,
1584         0,  429,    0,    0,    0,    0,    0,    0,    0,    0,
1585         0,    0,    0,    0,  429,  429,    0,    0,    0,  429,
1586       429,  435,  435,    0,  435,  435,  435,  435,  435,  435,
1587       435,  435,  435,  435,    0,  435,  435,    0,    0,    0,
1588         0,  435,  435,  435,  435,    0,    0,    0,    0,    0,
1589         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1590         0,    0,    0,    0,    0,    0,  435,  435,  435,    0,
1591         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1592
1593         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1594         0,  435,  435,  437,  437,    0,  437,  437,  437,  437,
1595       437,  437,  437,  437,  437,  437,    0,  437,  437,    0,
1596         0,    0,    0,  437,  437,  437,  437,    0,    0,    0,
1597         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1598         0,    0,    0,    0,    0,    0,    0,    0,  437,  437,
1599       437,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1600         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1601         0,    0,    0,  437,  437,  438,  438,    0,    0,    0,
1602         0,    0,    0,    0,    0,    0,    0,  438,    0,  438,
1603
1604         0,  438,  438,  438,    0,    0,    0,    0,    0,    0,
1605       438,    0,    0,  438,    0,    0,  438,  438,    0,    0,
1606         0,    0,    0,    0,    0,  438,  438,  438,    0,    0,
1607         0,    0,    0,    0,    0,  438,    0,    0,  438,    0,
1608         0,  438,  443,    0,    0,    0,    0,    0,    0,    0,
1609         0,    0,    0,    0,    0,  443,    0,  443,  443,  443,
1610         0,    0,    0,    0,    0,    0,  443,    0,    0,  443,
1611         0,    0,  443,  443,    0,    0,    0,    0,    0,    0,
1612         0,  443,  443,  443,    0,  443,    0,    0,    0,    0,
1613         0,  443,    0,    0,  443,    0,    0,  443,  461,    0,
1614
1615         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1616         0,  461,    0,  461,  461,  461,    0,    0,    0,    0,
1617         0,    0,  461,    0,    0,  461,    0,    0,  461,  461,
1618         0,    0,    0,    0,    0,    0,    0,  461,  461,  461,
1619         0,    0,    0,    0,    0,    0,    0,  461,    0,    0,
1620       461,    0,    0,  461,  474,  474,    0,  474,  474,  474,
1621       474,  474,    0,  474,  474,  474,  474,    0,  474,  474,
1622         0,    0,    0,    0,  474,  474,  474,  474,    0,    0,
1623         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1624         0,    0,    0,    0,    0,    0,    0,    0,    0,  474,
1625
1626       474,  474,    0,    0,    0,    0,    0,    0,    0,    0,
1627         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1628         0,    0,    0,    0,  474,  474,  475,  475,    0,  475,
1629       475,  475,  475,  475,    0,  475,  475,  475,  475,    0,
1630       475,  475,    0,    0,    0,    0,  475,  475,  475,  475,
1631         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1632         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1633         0,  475,  475,  475,    0,    0,    0,    0,  475,    0,
1634         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1635         0,  475,  475,    0,    0,    0,  475,  475,  505,    0,
1636
1637         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1638         0,  505,    0,  505,  505,  505,    0,    0,    0,    0,
1639         0,    0,  505,    0,    0,  505,    0,    0,  505,  505,
1640         0,    0,    0,    0,    0,    0,    0,  505,  505,  505,
1641         0,    0,    0,    0,    0,    0,    0,  505,    0,    0,
1642       505,    0,    0,  505,  511,  511,    0,  511,  511,  511,
1643       511,  511,  511,  511,  511,  511,  511,    0,  511,  511,
1644         0,    0,    0,    0,  511,  511,  511,  511,    0,    0,
1645         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1646         0,    0,    0,    0,    0,    0,    0,    0,    0,  511,
1647
1648       511,  511,    0,    0,    0,    0,    0,    0,    0,    0,
1649         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1650         0,    0,    0,    0,  511,  511,  513,  513,    0,  513,
1651       513,  513,  513,  513,  513,  513,  513,  513,  513,    0,
1652       513,  513,    0,    0,    0,    0,  513,  513,  513,  513,
1653         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1654         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1655         0,  513,  513,  513,    0,    0,    0,    0,  513,    0,
1656         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1657         0,  513,  513,    0,    0,    0,  513,  513,  625,  625,
1658
1659         0,  625,  625,  625,  625,  625,    0,  625,  625,  625,
1660       625,    0,  625,  625,    0,    0,    0,    0,  625,  625,
1661       625,  625,    0,    0,    0,    0,    0,    0,  625,    0,
1662         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1663         0,    0,    0,  625,  625,  625,    0,    0,    0,    0,
1664         0,    0,  625,    0,    0,    0,    0,    0,    0,    0,
1665         0,    0,    0,    0,    0,    0,    0,    0,  625,  625,
1666       631,  631,    0,  631,  631,  631,  631,  631,  631,  631,
1667       631,  631,  631,    0,  631,  631,    0,    0,    0,    0,
1668       631,  631,  631,  631,    0,    0,    0,    0,    0,    0,
1669
1670       631,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1671         0,    0,    0,    0,    0,  631,  631,  631,    0,    0,
1672         0,    0,    0,    0,  631,    0,    0,    0,    0,    0,
1673         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1674       631,  631,  641,  641,    0,  641,  641,  641,  641,  641,
1675         0,  641,  641,  641,  641,    0,  641,  641,    0,    0,
1676         0,    0,  641,  641,  641,  641,    0,    0,    0,    0,
1677         0,    0,  641,    0,    0,    0,    0,    0,    0,    0,
1678         0,    0,    0,    0,    0,    0,    0,  641,  641,  641,
1679         0,    0,    0,    0,    0,    0,  641,    0,    0,    0,
1680
1681         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1682         0,    0,  641,  641,  648,  648,    0,  648,  648,  648,
1683       648,  648,  648,  648,  648,  648,  648,    0,  648,  648,
1684         0,    0,    0,    0,  648,  648,  648,  648,    0,    0,
1685         0,    0,    0,    0,  648,    0,    0,    0,    0,    0,
1686         0,    0,    0,    0,    0,    0,    0,    0,    0,  648,
1687       648,  648,    0,    0,    0,    0,    0,    0,  648,    0,
1688         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1689         0,    0,    0,    0,  648,  648,  735,    0,    0,  735,
1690       735,    0,    0,  735,  735,  735,  735,  735,  736,  736,
1691
1692       736,  736,  736,    0,  736,  736,  736,  736,  736,  736,
1693       736,  736,  736,  737,  737,  737,  737,  737,  737,  737,
1694       737,  737,  737,  737,  737,  737,  737,  737,  738,  738,
1695       738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
1696       738,  738,  738,  739,  739,  739,  739,  739,  739,  739,
1697       739,  739,  739,  739,  739,  739,  739,  739,  740,    0,
1698         0,  740,  740,  740,    0,  740,  740,  740,  740,  740,
1699       741,  741,  741,  741,  741,    0,  741,  741,  741,  741,
1700       741,  741,  741,  741,  741,  742,  742,  742,  742,  742,
1701       742,  742,  742,  742,  742,  742,  742,  742,  742,  742,
1702
1703       743,  743,    0,    0,    0,    0,    0,    0,    0,  743,
1704       743,  743,  743,  743,  744,  744,  744,  745,  745,  745,
1705       746,  746,  746,  747,  747,  747,  747,  747,  747,  747,
1706       747,  747,  747,  747,  747,  747,  747,  747,  748,  748,
1707       748,  748,  748,  748,  748,  748,  748,  748,  748,  748,
1708       748,  748,  748,  749,  749,  749,  750,  750,  750,  751,
1709       751,  751,  751,  751,  751,  751,  751,  751,  751,  751,
1710       751,  751,  751,  751,  752,  752,  752,  752,  752,  752,
1711       752,  752,  752,  752,  752,  752,  752,  752,  752,  753,
1712         0,    0,  753,  753,  753,    0,  753,  753,  753,  753,
1713
1714       753,  754,  754,  754,  754,  754,  754,  754,  754,  754,
1715       754,  754,  754,  754,  754,  754,  755,  755,  755,  755,
1716       755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
1717       755,  756,  756,  756,  756,  756,  756,  756,  756,  756,
1718       756,  756,  756,  756,  756,  756,  757,  757,  757,  757,
1719       757,  757,  757,  757,  757,  757,  757,  757,  757,  757,
1720       757,  758,  758,  758,  758,  758,  758,  758,  758,  758,
1721       758,  758,  758,  758,  758,  758,  759,  759,    0,  759,
1722       759,  759,  759,  759,  759,  759,  759,  759,  759,  759,
1723       759,  760,  760,    0,  760,  760,  760,  760,  760,  760,
1724
1725       760,  760,  760,  760,  760,  760,  761,  761,  761,  762,
1726       762,    0,  762,  762,  762,  762,  762,  762,  762,  762,
1727       762,  762,  762,  762,  763,  763,  763,  763,  763,  763,
1728       763,  763,  763,  763,  763,  763,  763,  763,  763,  764,
1729       764,  764,  764,  764,  764,  764,  764,  764,  764,  764,
1730       764,  764,  764,  764,  765,  765,  765,  765,  765,  765,
1731       765,  765,  765,  765,  765,  765,  765,  765,  765,  766,
1732       766,  766,  766,  766,  766,  766,  766,  766,  766,  766,
1733       766,  766,  766,  766,  768,  768,  768,  769,    0,    0,
1734       769,    0,  769,  769,    0,  769,    0,  769,  771,  771,
1735
1736       771,  772,  772,  772,  772,  772,  772,  772,  772,  772,
1737       772,  772,  772,  772,  772,  772,  773,  773,  773,  773,
1738       773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
1739       773,  774,    0,    0,  774,  774,  774,    0,  774,  774,
1740       774,  774,  774,  775,  775,  775,  775,  775,  775,  775,
1741       775,  775,  775,  775,  775,  775,  775,  775,  776,  776,
1742       776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
1743       776,  776,  776,  777,  777,    0,  777,  777,  777,  777,
1744       777,  777,  777,  777,  777,  777,  777,  777,  778,  778,
1745       778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
1746
1747       778,  778,  778,  779,  779,  779,  779,    0,  779,  779,
1748       779,  779,  779,  779,  779,  779,  779,  779,  780,  780,
1749       780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
1750       780,  780,  780,  781,  781,    0,  781,  781,  781,  781,
1751       781,  781,  781,  781,  781,  781,  781,  781,  782,  782,
1752         0,  782,  782,  782,  782,  782,  782,  782,  782,  782,
1753       782,  782,  782,  783,    0,  783,    0,    0,    0,  783,
1754       783,  783,  784,  784,    0,  784,  784,  784,  784,  784,
1755       784,  784,  784,  784,  784,  784,  784,  785,  785,    0,
1756       785,  785,  785,  785,  785,  785,  785,  785,  785,  785,
1757
1758       785,  785,  786,  786,    0,  786,  786,  786,  786,  786,
1759       786,  786,  786,  786,  786,  786,  786,  787,  787,  787,
1760       787,  787,  787,  787,  787,  787,  787,  787,  787,  787,
1761       787,  787,  788,  788,  788,  788,  788,  788,  788,  788,
1762       788,  788,  788,  788,  788,  788,  788,  789,  789,  789,
1763       789,  789,  789,  789,  789,  789,  789,  789,  789,  789,
1764       789,  789,  790,  790,  790,  790,  790,  790,  790,  790,
1765       790,  790,  790,  790,  790,  790,  790,  791,    0,    0,
1766         0,    0,  791,  791,    0,  791,    0,  791,  792,  792,
1767       792,  792,  792,  792,  792,  792,  792,  792,  792,  792,
1768
1769       792,  792,  792,  793,  793,  793,  793,  793,  793,  793,
1770       793,  793,  793,  793,  793,  793,  793,  793,  794,  794,
1771         0,  794,  794,  794,  794,  794,  794,  794,  794,  794,
1772       794,  794,  794,  795,  795,    0,  795,  795,  795,  795,
1773       795,  795,  795,  795,  795,  795,  795,  795,  796,  796,
1774       796,  796,    0,  796,  796,  796,  796,  796,  796,  796,
1775       796,  796,  796,  797,  797,  797,  797,  797,  797,  797,
1776       797,  797,  797,  797,  797,  797,  797,  797,  798,  798,
1777         0,  798,  798,  798,  798,  798,  798,  798,  798,  798,
1778       798,  798,  798,  799,  799,    0,  799,  799,  799,  799,
1779
1780       799,  799,  799,  799,  799,  799,  799,  799,  800,  800,
1781         0,  800,  800,  800,  800,  800,  800,  800,  800,  800,
1782       800,  800,  800,  801,  801,    0,  801,  801,  801,  801,
1783       801,  801,  801,  801,  801,  801,  801,  801,  802,  802,
1784         0,  802,  802,  802,  802,  802,  802,  802,  802,  802,
1785       802,  802,  802,  803,  803,    0,  803,  803,  803,  803,
1786       803,  803,  803,  803,  803,  803,  803,  803,  804,  804,
1787         0,  804,  804,  804,  804,  804,  804,  804,  804,  804,
1788       804,  804,  804,  805,  805,    0,  805,  805,  805,  805,
1789       805,  805,  805,  805,  805,  805,  805,  805,  806,  806,
1790
1791       806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
1792       806,  806,  806,  807,  807,  807,  807,  807,  807,  807,
1793       807,  807,  807,  807,  807,  807,  807,  807,  808,  808,
1794       808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
1795       808,  808,  808,  809,    0,    0,    0,    0,  809,  809,
1796         0,  809,  810,  810,  810,  810,  810,  810,  810,  810,
1797       810,  810,  810,  810,  810,  810,  810,  811,  811,  811,
1798       811,  811,  811,  811,  811,  811,  811,  811,  811,  811,
1799       811,  811,  812,  812,    0,  812,  812,  812,  812,  812,
1800       812,  812,  812,  812,  812,  812,  812,  813,  813,  813,
1801
1802       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
1803       813,  813,  814,    0,    0,    0,    0,  814,  814,    0,
1804       814,  815,  815,    0,  815,  815,  815,  815,  815,  815,
1805       815,  815,  815,  815,  815,  815,  816,  816,  816,  816,
1806       816,  816,  816,  816,  816,  816,  816,  816,  816,  816,
1807       816,  817,  817,    0,  817,  817,  817,  817,  817,  817,
1808       817,  817,  817,  817,  817,  817,  818,  818,    0,  818,
1809       818,  818,  818,  818,  818,  818,  818,  818,  818,  818,
1810       818,  819,  819,    0,  819,  819,  819,  819,  819,  819,
1811       819,  819,  819,  819,  819,  819,  820,  820,  820,  820,
1812
1813       820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
1814       820,  821,  821,  821,  821,  821,  821,  821,  821,  821,
1815       821,  821,  821,  821,  821,  821,  822,  822,  822,  822,
1816       822,  822,  822,  822,  822,  822,  822,  822,  822,  822,
1817       822,  823,  823,  823,  823,  823,  823,  823,  823,  823,
1818       823,  823,  823,  823,  823,  823,  734,  734,  734,  734,
1819       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1820       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1821       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1822       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1823
1824       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1825       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1826       734,  734,  734,  734,  734,  734,  734,  734,  734
1827     } ;
1828
1829 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
1830 static char *yy_full_match;
1831 static int yy_lp;
1832 static int yy_looking_for_trail_begin = 0;
1833 static int yy_full_lp;
1834 static int *yy_full_state;
1835 #define YY_TRAILING_MASK 0x2000
1836 #define YY_TRAILING_HEAD_MASK 0x4000
1837 #define REJECT \
1838 { \
1839 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
1840 yy_cp = yy_full_match; /* restore poss. backed-over text */ \
1841 yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \
1842 yy_state_ptr = yy_full_state; /* restore orig. state */ \
1843 yy_current_state = *yy_state_ptr; /* restore curr. state */ \
1844 ++yy_lp; \
1845 goto find_rule; \
1846 }
1847 #define yymore() yymore_used_but_not_detected
1848 #define YY_MORE_ADJ 0
1849 #define YY_RESTORE_YY_MORE_OFFSET
1850 char *yytext;
1851 #define INITIAL 0
1852 /*
1853  * parser.l -- lex parser of algebraic chess moves for XBoard
1854  * $Id: parser.l,v 2.1 2003/10/27 19:21:00 mann Exp $
1855  *
1856  * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
1857  * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
1858  *
1859  * The following terms apply to Digital Equipment Corporation's copyright
1860  * interest in XBoard:
1861  * ------------------------------------------------------------------------
1862  * All Rights Reserved
1863  *
1864  * Permission to use, copy, modify, and distribute this software and its
1865  * documentation for any purpose and without fee is hereby granted,
1866  * provided that the above copyright notice appear in all copies and that
1867  * both that copyright notice and this permission notice appear in
1868  * supporting documentation, and that the name of Digital not be
1869  * used in advertising or publicity pertaining to distribution of the
1870  * software without specific, written prior permission.
1871  *
1872  * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
1873  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
1874  * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
1875  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
1876  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
1877  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
1878  * SOFTWARE.
1879  * ------------------------------------------------------------------------
1880  *
1881  * The following terms apply to the enhanced version of XBoard distributed
1882  * by the Free Software Foundation:
1883  * ------------------------------------------------------------------------
1884  * This program is free software; you can redistribute it and/or modify
1885  * it under the terms of the GNU General Public License as published by
1886  * the Free Software Foundation; either version 2 of the License, or
1887  * (at your option) any later version.
1888  *
1889  * This program is distributed in the hope that it will be useful,
1890  * but WITHOUT ANY WARRANTY; without even the implied warranty of
1891  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1892  * GNU General Public License for more details.
1893  *
1894  * You should have received a copy of the GNU General Public License
1895  * along with this program; if not, write to the Free Software
1896  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1897  * ------------------------------------------------------------------------
1898  */
1899
1900 /* This parser handles all forms of promotion.
1901  * The parser resolves ambiguous moves by searching and check-testing.
1902  * It also parses comments of the form [anything] or (anything).
1903  */
1904
1905 #include "config.h"
1906
1907 #define NO_CONSTRAINT   -1
1908 #undef YYLMAX
1909 #define YYLMAX                  4096
1910 #define UNPUT_BUF_SIZE          YYLMAX
1911
1912 #ifdef FLEX_SCANNER
1913 /* yytext is probably a char*, but could be a char[].  yy_text is set
1914    in YY_DECL below, because if yytext is a char*, its value is not
1915    constant. */
1916 char *yy_text;
1917 #else /*!FLEX_SCANNER*/
1918 /* yytext is definitely a char[], so yy_text can be set here, statically. */
1919 char *yy_text = (char *) yytext;
1920 #endif
1921
1922 #ifdef FLEX_SCANNER
1923 /* This is flex */
1924 #undef YY_INPUT
1925 #define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
1926 #undef YY_DECL
1927 #define YY_DECL                     \
1928     int _yylex YY_PROTO((void));    \
1929     int yylex YY_PROTO((void))      \
1930     {                               \
1931         int result = _yylex();      \
1932         yy_text = (char *) yytext;  \
1933         return(result);             \
1934     }                               \
1935     int _yylex YY_PROTO((void))
1936 #else
1937 /* This is lex */
1938 #undef input
1939 #undef output
1940 #undef unput
1941 #endif
1942
1943 /* The includes must be here, below the #undef input */
1944
1945 #include <ctype.h>
1946
1947 #if STDC_HEADERS
1948 # include <stdlib.h>
1949 # include <string.h>
1950 #else /* not STDC_HEADERS */
1951 # if HAVE_STRING_H
1952 #  include <string.h>
1953 # else /* not HAVE_STRING_H */
1954 #  include <strings.h>
1955 # endif /* not HAVE_STRING_H */
1956 #endif /* not STDC_HEADERS */
1957
1958 #if HAVE_UNISTD_H
1959 # include <unistd.h>
1960 #endif
1961
1962 #if defined(_amigados)
1963 # include <errno.h>
1964 # if HAVE_FCNTL_H
1965 #  include <fcntl.h>    /*  isatty() prototype  */
1966 # endif /*  HAVE_FCNTL_H        */
1967 #endif  /*  defined(_amigados)  */
1968
1969 #include "common.h"
1970 #include "backend.h"
1971 #include "frontend.h"
1972 #include "parser.h"
1973 #include "moves.h"
1974
1975 extern int PosFlags P((int));
1976
1977 extern Board    boards[MAX_MOVES];
1978 int             yyboardindex;
1979 int             yyskipmoves = FALSE;
1980 char            currentMoveString[YYLMAX];
1981 #ifndef FLEX_SCANNER
1982 char            unputBuffer[UNPUT_BUF_SIZE];
1983 int             unputCount = 0;
1984 #endif
1985
1986 #ifdef FLEX_SCANNER
1987 void my_yy_input P((char *buf, int *result, int max_size));
1988 #else /*!FLEX_SCANNER*/
1989 static int input P((void));
1990 static void output P((int ch));
1991 static void unput P((int ch));
1992 int yylook P((void));
1993 int yyback P((int *, int));
1994 #endif
1995 #undef yywrap
1996 int yywrap P((void));
1997 extern void CopyBoard P((Board to, Board from));
1998
1999
2000 /* Macros after this point can all be overridden by user definitions in
2001  * section 1.
2002  */
2003
2004 #ifndef YY_SKIP_YYWRAP
2005 #ifdef __cplusplus
2006 extern "C" int yywrap YY_PROTO(( void ));
2007 #else
2008 extern int yywrap YY_PROTO(( void ));
2009 #endif
2010 #endif
2011
2012 #ifndef YY_NO_UNPUT
2013 static void yyunput YY_PROTO(( int c, char *buf_ptr ));
2014 #endif
2015
2016 #ifndef yytext_ptr
2017 static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
2018 #endif
2019
2020 #ifdef YY_NEED_STRLEN
2021 static int yy_flex_strlen YY_PROTO(( yyconst char * ));
2022 #endif
2023
2024 #ifndef YY_NO_INPUT
2025 #ifdef __cplusplus
2026 static int yyinput YY_PROTO(( void ));
2027 #else
2028 static int input YY_PROTO(( void ));
2029 #endif
2030 #endif
2031
2032 #if YY_STACK_USED
2033 static int yy_start_stack_ptr = 0;
2034 static int yy_start_stack_depth = 0;
2035 static int *yy_start_stack = 0;
2036 #ifndef YY_NO_PUSH_STATE
2037 static void yy_push_state YY_PROTO(( int new_state ));
2038 #endif
2039 #ifndef YY_NO_POP_STATE
2040 static void yy_pop_state YY_PROTO(( void ));
2041 #endif
2042 #ifndef YY_NO_TOP_STATE
2043 static int yy_top_state YY_PROTO(( void ));
2044 #endif
2045
2046 #else
2047 #define YY_NO_PUSH_STATE 1
2048 #define YY_NO_POP_STATE 1
2049 #define YY_NO_TOP_STATE 1
2050 #endif
2051
2052 #ifdef YY_MALLOC_DECL
2053 YY_MALLOC_DECL
2054 #else
2055 #if __STDC__
2056 #ifndef __cplusplus
2057 #include <stdlib.h>
2058 #endif
2059 #else
2060 /* Just try to get by without declaring the routines.  This will fail
2061  * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
2062  * or sizeof(void*) != sizeof(int).
2063  */
2064 #endif
2065 #endif
2066
2067 /* Amount of stuff to slurp up with each read. */
2068 #ifndef YY_READ_BUF_SIZE
2069 #define YY_READ_BUF_SIZE 8192
2070 #endif
2071
2072 /* Copy whatever the last rule matched to the standard output. */
2073
2074 #ifndef ECHO
2075 /* This used to be an fputs(), but since the string might contain NUL's,
2076  * we now use fwrite().
2077  */
2078 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
2079 #endif
2080
2081 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
2082  * is returned in "result".
2083  */
2084 #ifndef YY_INPUT
2085 #define YY_INPUT(buf,result,max_size) \
2086         if ( yy_current_buffer->yy_is_interactive ) \
2087                 { \
2088                 int c = '*', n; \
2089                 for ( n = 0; n < max_size && \
2090                              (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
2091                         buf[n] = (char) c; \
2092                 if ( c == '\n' ) \
2093                         buf[n++] = (char) c; \
2094                 if ( c == EOF && ferror( yyin ) ) \
2095                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
2096                 result = n; \
2097                 } \
2098         else \
2099                 { \
2100                 errno=0; \
2101                 while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
2102                         { \
2103                         if( errno != EINTR) \
2104                                 { \
2105                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
2106                                 break; \
2107                                 } \
2108                         errno=0; \
2109                         clearerr(yyin); \
2110                         } \
2111                 }
2112 #endif
2113
2114 /* No semi-colon after return; correct usage is to write "yyterminate();" -
2115  * we don't want an extra ';' after the "return" because that will cause
2116  * some compilers to complain about unreachable statements.
2117  */
2118 #ifndef yyterminate
2119 #define yyterminate() return YY_NULL
2120 #endif
2121
2122 /* Number of entries by which start-condition stack grows. */
2123 #ifndef YY_START_STACK_INCR
2124 #define YY_START_STACK_INCR 25
2125 #endif
2126
2127 /* Report a fatal error. */
2128 #ifndef YY_FATAL_ERROR
2129 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
2130 #endif
2131
2132 /* Default declaration of generated scanner - a define so the user can
2133  * easily add parameters.
2134  */
2135 #ifndef YY_DECL
2136 #define YY_DECL int yylex YY_PROTO(( void ))
2137 #endif
2138
2139 /* Code executed at the beginning of each rule, after yytext and yyleng
2140  * have been set up.
2141  */
2142 #ifndef YY_USER_ACTION
2143 #define YY_USER_ACTION
2144 #endif
2145
2146 /* Code executed at the end of each rule. */
2147 #ifndef YY_BREAK
2148 #define YY_BREAK break;
2149 #endif
2150
2151 #define YY_RULE_SETUP \
2152         if ( yyleng > 0 ) \
2153                 yy_current_buffer->yy_at_bol = \
2154                                 (yytext[yyleng - 1] == '\n'); \
2155         YY_USER_ACTION
2156
2157 YY_DECL
2158         {
2159         register yy_state_type yy_current_state;
2160         register char *yy_cp, *yy_bp;
2161         register int yy_act;
2162
2163
2164
2165
2166         if ( yy_init )
2167                 {
2168                 yy_init = 0;
2169
2170 #ifdef YY_USER_INIT
2171                 YY_USER_INIT;
2172 #endif
2173
2174                 if ( ! yy_start )
2175                         yy_start = 1;   /* first start state */
2176
2177                 if ( ! yyin )
2178                         yyin = stdin;
2179
2180                 if ( ! yyout )
2181                         yyout = stdout;
2182
2183                 if ( ! yy_current_buffer )
2184                         yy_current_buffer =
2185                                 yy_create_buffer( yyin, YY_BUF_SIZE );
2186
2187                 yy_load_buffer_state();
2188                 }
2189
2190         while ( 1 )             /* loops until end-of-file is reached */
2191                 {
2192                 yy_cp = yy_c_buf_p;
2193
2194                 /* Support of yytext. */
2195                 *yy_cp = yy_hold_char;
2196
2197                 /* yy_bp points to the position in yy_ch_buf of the start of
2198                  * the current run.
2199                  */
2200                 yy_bp = yy_cp;
2201
2202                 yy_current_state = yy_start;
2203                 yy_current_state += YY_AT_BOL();
2204                 yy_state_ptr = yy_state_buf;
2205                 *yy_state_ptr++ = yy_current_state;
2206 yy_match:
2207                 do
2208                         {
2209                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
2210                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2211                                 {
2212                                 yy_current_state = (int) yy_def[yy_current_state];
2213                                 if ( yy_current_state >= 735 )
2214                                         yy_c = yy_meta[(unsigned int) yy_c];
2215                                 }
2216                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2217                         *yy_state_ptr++ = yy_current_state;
2218                         ++yy_cp;
2219                         }
2220                 while ( yy_base[yy_current_state] != 5057 );
2221
2222 yy_find_action:
2223                 yy_current_state = *--yy_state_ptr;
2224                 yy_lp = yy_accept[yy_current_state];
2225 find_rule: /* we branch to this label when backing up */
2226                 for ( ; ; ) /* until we find what rule we matched */
2227                         {
2228                         if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
2229                                 {
2230                                 yy_act = yy_acclist[yy_lp];
2231                                 if ( yy_act & YY_TRAILING_HEAD_MASK ||
2232                                      yy_looking_for_trail_begin )
2233                                         {
2234                                         if ( yy_act == yy_looking_for_trail_begin )
2235                                                 {
2236                                                 yy_looking_for_trail_begin = 0;
2237                                                 yy_act &= ~YY_TRAILING_HEAD_MASK;
2238                                                 break;
2239                                                 }
2240                                         }
2241                                 else if ( yy_act & YY_TRAILING_MASK )
2242                                         {
2243                                         yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
2244                                         yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
2245                                         }
2246                                 else
2247                                         {
2248                                         yy_full_match = yy_cp;
2249                                         yy_full_state = yy_state_ptr;
2250                                         yy_full_lp = yy_lp;
2251                                         break;
2252                                         }
2253                                 ++yy_lp;
2254                                 goto find_rule;
2255                                 }
2256                         --yy_cp;
2257                         yy_current_state = *--yy_state_ptr;
2258                         yy_lp = yy_accept[yy_current_state];
2259                         }
2260
2261                 YY_DO_BEFORE_ACTION;
2262
2263
2264 do_action:      /* This label is used only to access EOF actions. */
2265
2266
2267                 switch ( yy_act )
2268         { /* beginning of action switch */
2269 case 1:
2270 YY_RULE_SETUP
2271 {
2272     /*
2273      * Fully-qualified algebraic move, possibly with promotion
2274      * [HGM] Bigger-than-8x8 boards must rely on long algebraic formats
2275      *       where I allowed piece types A & C (also as promotions)
2276      *       files a-l and ranks 0-9
2277      */
2278     int skip1 = 0, skip2 = 0;
2279     ChessSquare piece;
2280     ChessMove result;
2281     
2282     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2283
2284     /* remove the / */
2285     if (yytext[1] == '/') skip1 = 1;
2286     
2287     /* remove the [xX:-] */
2288     if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
2289         (yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
2290     
2291     currentMoveString[0] = yytext[1+skip1];
2292     currentMoveString[1] = yytext[2+skip1];
2293     currentMoveString[2] = yytext[3+skip1+skip2];
2294     currentMoveString[3] = yytext[4+skip1+skip2];
2295     currentMoveString[4] = NULLCHAR;
2296     
2297     if (yyleng-skip1-skip2 > 5) {
2298         if (yytext[yyleng-1] == ')') {
2299             currentMoveString[4] = ToLower(yytext[yyleng-2]);
2300         } else {
2301             currentMoveString[4] = ToLower(yytext[yyleng-1]);
2302         }
2303         currentMoveString[5] = NULLCHAR;
2304     }
2305
2306     if (appData.debugMode) {
2307         fprintf(debugFP, "parser: %s\n", currentMoveString);
2308     }
2309     /* [HGM] do not allow values beyond board size */
2310     if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
2311        currentMoveString[0] - AAA >= BOARD_WIDTH  ||
2312        currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2313        currentMoveString[2] - AAA >= BOARD_WIDTH     )
2314       return 0;
2315
2316     piece = boards[yyboardindex]
2317       [currentMoveString[1] - ONE][currentMoveString[0] - AAA];
2318     if (ToLower(yytext[0]) != ToLower(PieceToChar(piece)))
2319       return (int) IllegalMove;
2320
2321     result = LegalityTest(boards[yyboardindex],
2322                           PosFlags(yyboardindex), EP_UNKNOWN,
2323                           initialRights, /* [HGM] assume all castlings allowed */
2324                           currentMoveString[1] - ONE,
2325                           currentMoveString[0] - AAA,
2326                           currentMoveString[3] - ONE,
2327                           currentMoveString[2] - AAA,
2328                           currentMoveString[4]);
2329
2330     if (currentMoveString[4] == NULLCHAR &&
2331         (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2332         currentMoveString[4] = 'q';
2333         currentMoveString[5] = NULLCHAR;
2334     }
2335
2336     return (int) result;
2337 }
2338         YY_BREAK
2339 case 2:
2340 YY_RULE_SETUP
2341 {
2342     /*
2343      * Simple algebraic move, possibly with promotion
2344      * [HGM] Bigger-than-8x8 boards must rely on this format
2345      *       where I allowed piece types A & C (also as promotions)
2346      *       files a-l and ranks 0-9
2347      */
2348     int skip = 0;
2349     ChessMove result;
2350
2351     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2352
2353     /* remove the [xX:-] */
2354     if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
2355         (yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
2356
2357     currentMoveString[0] = yytext[0];
2358     currentMoveString[1] = yytext[1];
2359     currentMoveString[2] = yytext[2+skip];
2360     currentMoveString[3] = yytext[3+skip];
2361     currentMoveString[4] = NULLCHAR;
2362
2363     if (yyleng-skip > 4) {
2364         if (yytext[yyleng-1] == ')') {
2365             currentMoveString[4] = ToLower(yytext[yyleng-2]);
2366         } else {
2367             currentMoveString[4] = ToLower(yytext[yyleng-1]);
2368         }
2369         currentMoveString[5] = NULLCHAR;
2370     }
2371
2372     /* [HGM] do not allow values beyond board size */
2373     if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
2374        currentMoveString[0] - AAA >= BOARD_WIDTH  ||
2375        currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2376        currentMoveString[2] - AAA >= BOARD_WIDTH     )
2377       return 0;
2378
2379     result = LegalityTest(boards[yyboardindex],
2380                           PosFlags(yyboardindex), EP_UNKNOWN,
2381                           initialRights, /* [HGM] assume all castlings allowed */
2382                           currentMoveString[1] - ONE,
2383                           currentMoveString[0] - AAA,
2384                           currentMoveString[3] - ONE,
2385                           currentMoveString[2] - AAA,
2386                           currentMoveString[4]);
2387
2388     if (currentMoveString[4] == NULLCHAR &&
2389         (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2390         currentMoveString[4] = 'q';
2391         currentMoveString[5] = NULLCHAR;
2392     }
2393
2394     return (int) result;
2395 }
2396         YY_BREAK
2397 case 3:
2398 YY_RULE_SETUP
2399 {
2400     /*
2401      * Pawn move, possibly with promotion
2402      */
2403     DisambiguateClosure cl;
2404     int skip = 0;
2405
2406     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2407
2408     /* remove the =() */
2409     if (yytext[2] == '=') skip++;
2410     if (yytext[2+skip] == '(') skip++;
2411
2412     cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2413     cl.rfIn = -1;
2414     cl.ffIn = yytext[0] - AAA;
2415     cl.rtIn = yytext[1] - ONE;
2416     cl.ftIn = yytext[0] - AAA;
2417     cl.promoCharIn = yytext[2+skip];
2418
2419     /* [HGM] do not allow values beyond board size */
2420     if(cl.rtIn >= BOARD_HEIGHT ||
2421        cl.ffIn >= BOARD_WIDTH  ||
2422        cl.ftIn >= BOARD_WIDTH     )
2423       return 0;
2424
2425
2426     Disambiguate(boards[yyboardindex],
2427                  PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2428
2429     currentMoveString[0] = cl.ff + AAA;
2430     currentMoveString[1] = cl.rf + ONE;
2431     currentMoveString[2] = cl.ft + AAA;
2432     currentMoveString[3] = cl.rt + ONE;
2433     currentMoveString[4] = cl.promoChar;
2434     currentMoveString[5] = NULLCHAR;
2435
2436     return (int) cl.kind;
2437 }
2438         YY_BREAK
2439 case 4:
2440 YY_RULE_SETUP
2441 {
2442     /*
2443      * Pawn capture, possibly with promotion, possibly ambiguous
2444      */
2445     DisambiguateClosure cl;
2446     int skip1 = 0, skip2 = 0;
2447
2448     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2449
2450     /* remove trailing ep or e.p. (nonstandard PGN) */
2451     if (yytext[yyleng-1] == 'p') {
2452       yyleng -= 2;
2453       yytext[yyleng] = NULLCHAR;
2454     } else if (yytext[yyleng-1] == '.') {
2455       yyleng -= 4;
2456       yytext[yyleng] = NULLCHAR;
2457     }
2458
2459     /* remove the [xX:-] and =() */
2460     if ((yytext[1] == 'x') || (yytext[1] == 'X')
2461         || (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
2462     if (yytext[2+skip1] == '=') skip2++;
2463     if (yytext[2+skip1+skip2] == '(') skip2++;
2464
2465     cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2466     cl.rfIn = -1;
2467     cl.ffIn = yytext[0] - AAA;
2468     cl.rtIn = -1;
2469     cl.ftIn = yytext[1+skip1] - AAA;
2470     cl.promoCharIn = yytext[2+skip1+skip2];
2471
2472     /* [HGM] do not allow values beyond board size */
2473     if(cl.ffIn >= BOARD_WIDTH  ||
2474        cl.ftIn >= BOARD_WIDTH     )
2475       return 0;
2476
2477     Disambiguate(boards[yyboardindex],
2478                  PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2479
2480     currentMoveString[0] = cl.ff + AAA;
2481     currentMoveString[1] = cl.rf + ONE;
2482     currentMoveString[2] = cl.ft + AAA;
2483     currentMoveString[3] = cl.rt + ONE;
2484     currentMoveString[4] = cl.promoChar;
2485     currentMoveString[5] = NULLCHAR;
2486
2487     return (int) cl.kind;
2488 }
2489         YY_BREAK
2490 case 5:
2491 YY_RULE_SETUP
2492 {
2493     /*
2494      * unambiguously abbreviated Pawn capture, possibly with promotion
2495      */
2496     int skip = 0;
2497     ChessMove result;
2498
2499     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2500
2501     /* remove trailing ep or e.p. (nonstandard PGN) */
2502     if (yytext[yyleng-1] == 'p') {
2503       yyleng -= 2;
2504       yytext[yyleng] = NULLCHAR;
2505     } else if (yytext[yyleng-1] == '.') {
2506       yyleng -= 4;
2507       yytext[yyleng] = NULLCHAR;
2508     }
2509
2510     /* remove the [xX:-] */
2511     if ((yytext[1] == 'x') || (yytext[1] == 'X')
2512         || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
2513
2514     currentMoveString[0] = yytext[0];
2515     currentMoveString[2] = yytext[1+skip];
2516     currentMoveString[3] = yytext[2+skip];
2517
2518     /* [HGM] do not allow values beyond board size */
2519     if(currentMoveString[0] - AAA >= BOARD_WIDTH  ||
2520        currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2521        currentMoveString[2] - AAA >= BOARD_WIDTH     )
2522       return 0;
2523
2524     if (gameInfo.variant == VariantXiangqi && /* [HGM] In Xiangqi rank stays same */
2525          currentMoveString[0] != currentMoveString[2] ) {
2526         if (yytext[2+skip] == ONE) return (int) ImpossibleMove;
2527         currentMoveString[1] = yytext[2+skip];
2528     } else 
2529     if (WhiteOnMove(yyboardindex)) {
2530         if (yytext[2+skip] == ONE) return (int) ImpossibleMove;
2531         currentMoveString[1] = yytext[2+skip] - 1;
2532     } else {
2533         currentMoveString[1] = currentMoveString[3] + 1;
2534         if (currentMoveString[3] == ONE+BOARD_HEIGHT-1) return (int) ImpossibleMove;
2535     }
2536     if (yyleng-skip > 3) {
2537         if (yytext[yyleng-1] == ')')
2538           currentMoveString[4] = ToLower(yytext[yyleng-2]);
2539         else
2540           currentMoveString[4] = ToLower(yytext[yyleng-1]);
2541         currentMoveString[5] = NULLCHAR;
2542     } else {
2543         currentMoveString[4] = NULLCHAR;
2544     }
2545
2546     result = LegalityTest(boards[yyboardindex],
2547                           PosFlags(yyboardindex), EP_UNKNOWN,
2548                           initialRights, /* [HGM] assume all castlings allowed */
2549                           currentMoveString[1] - ONE,
2550                           currentMoveString[0] - AAA,
2551                           currentMoveString[3] - ONE,
2552                           currentMoveString[2] - AAA,
2553                           currentMoveString[4]);
2554
2555     if (currentMoveString[4] == NULLCHAR &&
2556         (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2557         currentMoveString[4] = 'q';
2558         currentMoveString[5] = NULLCHAR;
2559     }
2560
2561     if (result != IllegalMove) return (int) result;
2562
2563     /* Special case: improperly written en passant capture */
2564     if (WhiteOnMove(yyboardindex)) {
2565         if (currentMoveString[3] == '5') {
2566             currentMoveString[1] = '5';
2567             currentMoveString[3] = '6';
2568         } else {
2569             return (int) IllegalMove;
2570         }
2571     } else {
2572         if (currentMoveString[3] == '4') {
2573             currentMoveString[1] = '4';
2574             currentMoveString[3] = '3';
2575         } else {
2576             return (int) IllegalMove;
2577         }
2578     }
2579
2580     result = LegalityTest(boards[yyboardindex],
2581                           PosFlags(yyboardindex), EP_UNKNOWN,
2582                           initialRights, /* [HGM] assume all castlings allowed */
2583                           currentMoveString[1] - ONE,
2584                           currentMoveString[0] - AAA,
2585                           currentMoveString[3] - ONE,
2586                           currentMoveString[2] - AAA,
2587                           currentMoveString[4]);
2588
2589     if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
2590       return (int) result;
2591     else
2592       return (int) IllegalMove;
2593 }
2594         YY_BREAK
2595 case 6:
2596 YY_RULE_SETUP
2597 {
2598     /*
2599      * piece move, possibly ambiguous
2600      */
2601     DisambiguateClosure cl;
2602     int skip = 0;
2603
2604     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2605
2606     /* remove the [xX:-] */
2607     if ((yytext[1] == 'x') || (yytext[1] == 'X')
2608         || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
2609
2610     if (WhiteOnMove(yyboardindex)) {
2611         cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
2612     } else {
2613         cl.pieceIn = CharToPiece(ToLower(yytext[0]));
2614     }
2615     cl.rfIn = -1;
2616     cl.ffIn = -1;
2617     cl.rtIn = yytext[2+skip] - ONE;
2618     cl.ftIn = yytext[1+skip] - AAA;
2619     cl.promoCharIn = NULLCHAR;
2620
2621     /* [HGM] but do not allow values beyond board size */
2622     if(cl.rtIn >= BOARD_HEIGHT ||
2623        cl.ftIn >= BOARD_WIDTH     )
2624       return 0;
2625
2626     Disambiguate(boards[yyboardindex],
2627                  PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2628
2629     currentMoveString[0] = cl.ff + AAA;
2630     currentMoveString[1] = cl.rf + ONE;
2631     currentMoveString[2] = cl.ft + AAA;
2632     currentMoveString[3] = cl.rt + ONE;
2633     currentMoveString[4] = cl.promoChar;
2634     currentMoveString[5] = NULLCHAR;
2635
2636     return (int) cl.kind;
2637 }
2638         YY_BREAK
2639 case 7:
2640 YY_RULE_SETUP
2641 {
2642     /*
2643      * piece move with rank or file disambiguator
2644      */
2645     DisambiguateClosure cl;
2646     int skip = 0;
2647
2648     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2649
2650     /* remove the [xX:-] */
2651     if ((yytext[2] == 'x') || (yytext[2] == 'X')
2652         || (yytext[2] == ':') || (yytext[2] == '-')) skip = 1;
2653
2654     if (WhiteOnMove(yyboardindex)) {
2655         cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
2656     } else {
2657         cl.pieceIn = CharToPiece(ToLower(yytext[0]));
2658     }
2659     if (isalpha(yytext[1])) {
2660         cl.rfIn = -1;
2661         cl.ffIn = yytext[1] - AAA;
2662     } else {
2663         cl.rfIn = yytext[1] - ONE;
2664         cl.ffIn = -1;
2665     }
2666     cl.rtIn = yytext[3+skip] - ONE;
2667     cl.ftIn = yytext[2+skip] - AAA;
2668     cl.promoCharIn = NULLCHAR;
2669
2670     /* [HGM] do not allow values beyond board size */
2671     if(cl.rtIn >= BOARD_HEIGHT ||
2672        cl.rfIn >= BOARD_HEIGHT ||
2673        cl.ffIn >= BOARD_WIDTH  ||
2674        cl.ftIn >= BOARD_WIDTH     )
2675       return 0;
2676
2677     Disambiguate(boards[yyboardindex],
2678                  PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2679
2680     currentMoveString[0] = cl.ff + AAA;
2681     currentMoveString[1] = cl.rf + ONE;
2682     currentMoveString[2] = cl.ft + AAA;
2683     currentMoveString[3] = cl.rt + ONE;
2684     currentMoveString[4] = cl.promoChar;
2685     currentMoveString[5] = NULLCHAR;
2686
2687     return (int) cl.kind;
2688 }
2689         YY_BREAK
2690 case 8:
2691 YY_RULE_SETUP
2692 {
2693     int rf, ff, rt, ft;
2694
2695     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2696
2697     /* [HGM] all squares referenced to board edges in stead of absolute */
2698     if (WhiteOnMove(yyboardindex)) {
2699         if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
2700             /* ICS wild castling */
2701             rf = 0;
2702             ff = (BOARD_WIDTH-1)>>1;
2703             rt = 0;
2704             ft = BOARD_RGHT-3;
2705             sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2706         } else {
2707             rf = 0;
2708             ff = BOARD_WIDTH>>1;
2709             rt = 0;
2710             ft = BOARD_LEFT+2;
2711             sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2712         }
2713     } else{ 
2714         if (boards[yyboardindex][BOARD_HEIGHT-1][3] == BlackKing) {
2715             /* ICS wild castling */
2716             rf = BOARD_HEIGHT-1;
2717             ff = (BOARD_WIDTH-1)>>1;
2718             rt = BOARD_HEIGHT-1;
2719             ft = BOARD_RGHT-3;
2720             sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2721         } else {
2722             rf = BOARD_HEIGHT-1;
2723             ff = BOARD_WIDTH>>1;
2724             rt = BOARD_HEIGHT-1;
2725             ft = BOARD_LEFT+2;
2726             sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2727         }
2728     }
2729     return (int) LegalityTest(boards[yyboardindex],
2730                               PosFlags(yyboardindex), EP_UNKNOWN,
2731                               initialRights, /* [HGM] assume all castlings allowed */
2732                               rf, ff, rt, ft, NULLCHAR);
2733 }
2734         YY_BREAK
2735 case 9:
2736 YY_RULE_SETUP
2737 {
2738     int rf, ff, rt, ft;
2739
2740     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2741
2742     if (WhiteOnMove(yyboardindex)) {
2743         if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
2744             /* ICS wild castling */
2745             rf = 0;
2746             ff = (BOARD_WIDTH-1)>>1;
2747             rt = 0;
2748             ft = BOARD_LEFT+1;
2749             sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2750         } else {
2751             rf = 0;
2752             ff = BOARD_WIDTH>>1;
2753             rt = 0;
2754             ft = BOARD_RGHT-2;
2755             sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2756         }
2757     } else {
2758         if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {
2759             /* ICS wild castling */
2760             rf = BOARD_HEIGHT-1;
2761             ff = (BOARD_WIDTH-1)>>1;
2762             rt = BOARD_HEIGHT-1;
2763             ft = BOARD_LEFT+1;
2764             sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2765         } else {
2766             rf = BOARD_HEIGHT-1;
2767             ff = BOARD_WIDTH>>1;
2768             rt = BOARD_HEIGHT-1;
2769             ft = BOARD_RGHT-2;
2770             sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2771         }
2772     }
2773     return (int) LegalityTest(boards[yyboardindex],
2774                               PosFlags(yyboardindex), EP_UNKNOWN,
2775                               initialRights, /* [HGM] assume all castlings allowed */
2776                               rf, ff, rt, ft, NULLCHAR);
2777 }
2778         YY_BREAK
2779 case 10:
2780 YY_RULE_SETUP
2781 {
2782     /* Bughouse piece drop.  No legality checking for now. */
2783     currentMoveString[1] = '@';
2784     currentMoveString[2] = yytext[2];
2785     currentMoveString[3] = yytext[3];
2786     currentMoveString[4] = NULLCHAR;
2787
2788     if (appData.debugMode) {
2789         fprintf(debugFP, "Drop: %s\n", currentMoveString);
2790     }
2791     /* [HGM] do not allow values beyond board size */
2792     if(currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2793        currentMoveString[2] - AAA >= BOARD_WIDTH     )
2794       return 0;
2795
2796     if (WhiteOnMove(yyboardindex)) {
2797         currentMoveString[0] = ToUpper(yytext[0]);
2798         return (int) WhiteDrop;
2799     } else {
2800         currentMoveString[0] = ToLower(yytext[0]);
2801         return (int) BlackDrop;
2802     }
2803 }
2804         YY_BREAK
2805 case 11:
2806 YY_RULE_SETUP
2807 {
2808     if (WhiteOnMove(yyboardindex))
2809       return (int) BlackWins;
2810     else
2811       return (int) WhiteWins;
2812 }
2813         YY_BREAK
2814 case 12:
2815 YY_RULE_SETUP
2816 {
2817     return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2818 }
2819         YY_BREAK
2820 case 13:
2821 YY_RULE_SETUP
2822 {
2823     return (int) GameUnfinished;
2824 }
2825         YY_BREAK
2826 case 14:
2827 YY_RULE_SETUP
2828 {
2829     return (int) GameIsDrawn;
2830 }
2831         YY_BREAK
2832 case 15:
2833 YY_RULE_SETUP
2834 {
2835     return (int) GameIsDrawn;
2836 }
2837         YY_BREAK
2838 case 16:
2839 YY_RULE_SETUP
2840 {
2841     if (WhiteOnMove(yyboardindex))
2842       return (int) BlackWins;
2843     else
2844       return (int) WhiteWins;
2845 }
2846         YY_BREAK
2847 case 17:
2848 YY_RULE_SETUP
2849 {
2850     if (WhiteOnMove(yyboardindex))
2851       return (int) BlackWins;
2852     else
2853       return (int) WhiteWins;
2854 }
2855         YY_BREAK
2856 case 18:
2857 YY_RULE_SETUP
2858 {
2859     return (int) GameIsDrawn;
2860 }
2861         YY_BREAK
2862 case 19:
2863 YY_RULE_SETUP
2864 {
2865     return (int) GameIsDrawn;
2866 }
2867         YY_BREAK
2868 case 20:
2869 YY_RULE_SETUP
2870 {
2871     return (int) (ToUpper(yytext[0]) == 'W' ? WhiteWins : BlackWins);
2872 }
2873         YY_BREAK
2874 case 21:
2875 YY_RULE_SETUP
2876 {
2877     return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2878 }
2879         YY_BREAK
2880 case 22:
2881 YY_RULE_SETUP
2882
2883     return (int) WhiteWins;
2884 }
2885         YY_BREAK
2886 case 23:
2887 YY_RULE_SETUP
2888
2889     return (int) BlackWins;
2890 }
2891         YY_BREAK
2892 case 24:
2893 YY_RULE_SETUP
2894 {
2895     return (int) GameIsDrawn;
2896 }
2897         YY_BREAK
2898 case 25:
2899 YY_RULE_SETUP
2900 {
2901     return (int) GameUnfinished;
2902 }
2903         YY_BREAK
2904 case 26:
2905 YY_RULE_SETUP
2906 {
2907     /* move numbers */
2908     if ((yyleng == 1) && (yytext[0] == '1'))
2909       return (int) MoveNumberOne;
2910 }
2911         YY_BREAK
2912 case 27:
2913 YY_RULE_SETUP
2914 {
2915     /* elapsed time indication, e.g. (0:12) or {10:21.071} */ 
2916     return (int) ElapsedTime;
2917 }
2918         YY_BREAK
2919 case 28:
2920 YY_RULE_SETUP
2921 {
2922     /* position diagram enclosed in [-- --] */
2923     return (int) PositionDiagram;
2924 }
2925         YY_BREAK
2926 case 29:
2927 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2928 yy_c_buf_p = yy_cp -= 1;
2929 YY_DO_BEFORE_ACTION; /* set up yytext again */
2930 YY_RULE_SETUP
2931 {
2932     /* position diagram enclosed in {-- --} */
2933     return (int) PositionDiagram;
2934 }
2935         YY_BREAK
2936 case 30:
2937 YY_RULE_SETUP
2938 {
2939     return (int) PGNTag;
2940 }    
2941         YY_BREAK
2942 case 31:
2943 YY_RULE_SETUP
2944 {
2945     return (int) GNUChessGame;
2946 }
2947         YY_BREAK
2948 case 32:
2949 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2950 yy_c_buf_p = yy_cp -= 1;
2951 YY_DO_BEFORE_ACTION; /* set up yytext again */
2952 YY_RULE_SETUP
2953 {
2954     return (int) XBoardGame;
2955 }
2956         YY_BREAK
2957 case 33:
2958 YY_RULE_SETUP
2959 {                               /* numeric annotation glyph */
2960     return (int) NAG;
2961 }
2962         YY_BREAK
2963 case 34:
2964 YY_RULE_SETUP
2965 {                               /* anything in {} */
2966     return (int) Comment; 
2967 }
2968         YY_BREAK
2969 case 35:
2970 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2971 yy_c_buf_p = yy_cp -= 1;
2972 YY_DO_BEFORE_ACTION; /* set up yytext again */
2973 YY_RULE_SETUP
2974 {                                          /* ; to end of line */
2975     return (int) Comment;
2976 }
2977         YY_BREAK
2978 case 36:
2979 YY_RULE_SETUP
2980 {                               /* anything in [] */
2981     return (int) Comment; 
2982 }
2983         YY_BREAK
2984 case 37:
2985 YY_RULE_SETUP
2986 {               /* nested () */
2987     return (int) Comment; 
2988 }
2989         YY_BREAK
2990 case 38:
2991 YY_RULE_SETUP
2992 {                               /* >=2 chars in () */
2993     return (int) Comment; 
2994 }       
2995         YY_BREAK
2996 case 39:
2997 YY_RULE_SETUP
2998 {
2999         /* Skip mail headers */
3000 }
3001         YY_BREAK
3002 case 40:
3003 YY_RULE_SETUP
3004 {
3005         /* Skip random words */
3006 }
3007         YY_BREAK
3008 case 41:
3009 YY_RULE_SETUP
3010 {
3011         /* Skip everything else */
3012 }
3013         YY_BREAK
3014 case 42:
3015 YY_RULE_SETUP
3016 ECHO;
3017         YY_BREAK
3018                         case YY_STATE_EOF(INITIAL):
3019                                 yyterminate();
3020
3021         case YY_END_OF_BUFFER:
3022                 {
3023                 /* Amount of text matched not including the EOB char. */
3024                 int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
3025
3026                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
3027                 *yy_cp = yy_hold_char;
3028                 YY_RESTORE_YY_MORE_OFFSET
3029
3030                 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
3031                         {
3032                         /* We're scanning a new file or input source.  It's
3033                          * possible that this happened because the user
3034                          * just pointed yyin at a new source and called
3035                          * yylex().  If so, then we have to assure
3036                          * consistency between yy_current_buffer and our
3037                          * globals.  Here is the right place to do so, because
3038                          * this is the first action (other than possibly a
3039                          * back-up) that will match for the new input source.
3040                          */
3041                         yy_n_chars = yy_current_buffer->yy_n_chars;
3042                         yy_current_buffer->yy_input_file = yyin;
3043                         yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
3044                         }
3045
3046                 /* Note that here we test for yy_c_buf_p "<=" to the position
3047                  * of the first EOB in the buffer, since yy_c_buf_p will
3048                  * already have been incremented past the NUL character
3049                  * (since all states make transitions on EOB to the
3050                  * end-of-buffer state).  Contrast this with the test
3051                  * in input().
3052                  */
3053                 if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
3054                         { /* This was really a NUL. */
3055                         yy_state_type yy_next_state;
3056
3057                         yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
3058
3059                         yy_current_state = yy_get_previous_state();
3060
3061                         /* Okay, we're now positioned to make the NUL
3062                          * transition.  We couldn't have
3063                          * yy_get_previous_state() go ahead and do it
3064                          * for us because it doesn't know how to deal
3065                          * with the possibility of jamming (and we don't
3066                          * want to build jamming into it because then it
3067                          * will run more slowly).
3068                          */
3069
3070                         yy_next_state = yy_try_NUL_trans( yy_current_state );
3071
3072                         yy_bp = yytext_ptr + YY_MORE_ADJ;
3073
3074                         if ( yy_next_state )
3075                                 {
3076                                 /* Consume the NUL. */
3077                                 yy_cp = ++yy_c_buf_p;
3078                                 yy_current_state = yy_next_state;
3079                                 goto yy_match;
3080                                 }
3081
3082                         else
3083                                 {
3084                                 yy_cp = yy_c_buf_p;
3085                                 goto yy_find_action;
3086                                 }
3087                         }
3088
3089                 else switch ( yy_get_next_buffer() )
3090                         {
3091                         case EOB_ACT_END_OF_FILE:
3092                                 {
3093                                 yy_did_buffer_switch_on_eof = 0;
3094
3095                                 if ( yywrap() )
3096                                         {
3097                                         /* Note: because we've taken care in
3098                                          * yy_get_next_buffer() to have set up
3099                                          * yytext, we can now set up
3100                                          * yy_c_buf_p so that if some total
3101                                          * hoser (like flex itself) wants to
3102                                          * call the scanner after we return the
3103                                          * YY_NULL, it'll still work - another
3104                                          * YY_NULL will get returned.
3105                                          */
3106                                         yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
3107
3108                                         yy_act = YY_STATE_EOF(YY_START);
3109                                         goto do_action;
3110                                         }
3111
3112                                 else
3113                                         {
3114                                         if ( ! yy_did_buffer_switch_on_eof )
3115                                                 YY_NEW_FILE;
3116                                         }
3117                                 break;
3118                                 }
3119
3120                         case EOB_ACT_CONTINUE_SCAN:
3121                                 yy_c_buf_p =
3122                                         yytext_ptr + yy_amount_of_matched_text;
3123
3124                                 yy_current_state = yy_get_previous_state();
3125
3126                                 yy_cp = yy_c_buf_p;
3127                                 yy_bp = yytext_ptr + YY_MORE_ADJ;
3128                                 goto yy_match;
3129
3130                         case EOB_ACT_LAST_MATCH:
3131                                 yy_c_buf_p =
3132                                 &yy_current_buffer->yy_ch_buf[yy_n_chars];
3133
3134                                 yy_current_state = yy_get_previous_state();
3135
3136                                 yy_cp = yy_c_buf_p;
3137                                 yy_bp = yytext_ptr + YY_MORE_ADJ;
3138                                 goto yy_find_action;
3139                         }
3140                 break;
3141                 }
3142
3143         default:
3144                 YY_FATAL_ERROR(
3145                         "fatal flex scanner internal error--no action found" );
3146         } /* end of action switch */
3147                 } /* end of scanning one token */
3148         } /* end of yylex */
3149
3150
3151 /* yy_get_next_buffer - try to read in a new buffer
3152  *
3153  * Returns a code representing an action:
3154  *      EOB_ACT_LAST_MATCH -
3155  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
3156  *      EOB_ACT_END_OF_FILE - end of file
3157  */
3158
3159 static int yy_get_next_buffer()
3160         {
3161         register char *dest = yy_current_buffer->yy_ch_buf;
3162         register char *source = yytext_ptr;
3163         register int number_to_move, i;
3164         int ret_val;
3165
3166         if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
3167                 YY_FATAL_ERROR(
3168                 "fatal flex scanner internal error--end of buffer missed" );
3169
3170         if ( yy_current_buffer->yy_fill_buffer == 0 )
3171                 { /* Don't try to fill the buffer, so this is an EOF. */
3172                 if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
3173                         {
3174                         /* We matched a single character, the EOB, so
3175                          * treat this as a final EOF.
3176                          */
3177                         return EOB_ACT_END_OF_FILE;
3178                         }
3179
3180                 else
3181                         {
3182                         /* We matched some text prior to the EOB, first
3183                          * process it.
3184                          */
3185                         return EOB_ACT_LAST_MATCH;
3186                         }
3187                 }
3188
3189         /* Try to read more data. */
3190
3191         /* First move last chars to start of buffer. */
3192         number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
3193
3194         for ( i = 0; i < number_to_move; ++i )
3195                 *(dest++) = *(source++);
3196
3197         if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
3198                 /* don't do the read, it's not guaranteed to return an EOF,
3199                  * just force an EOF
3200                  */
3201                 yy_current_buffer->yy_n_chars = yy_n_chars = 0;
3202
3203         else
3204                 {
3205                 int num_to_read =
3206                         yy_current_buffer->yy_buf_size - number_to_move - 1;
3207
3208                 while ( num_to_read <= 0 )
3209                         { /* Not enough room in the buffer - grow it. */
3210 #ifdef YY_USES_REJECT
3211                         YY_FATAL_ERROR(
3212 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
3213 #else
3214
3215                         /* just a shorter name for the current buffer */
3216                         YY_BUFFER_STATE b = yy_current_buffer;
3217
3218                         int yy_c_buf_p_offset =
3219                                 (int) (yy_c_buf_p - b->yy_ch_buf);
3220
3221                         if ( b->yy_is_our_buffer )
3222                                 {
3223                                 int new_size = b->yy_buf_size * 2;
3224
3225                                 if ( new_size <= 0 )
3226                                         b->yy_buf_size += b->yy_buf_size / 8;
3227                                 else
3228                                         b->yy_buf_size *= 2;
3229
3230                                 b->yy_ch_buf = (char *)
3231                                         /* Include room in for 2 EOB chars. */
3232                                         yy_flex_realloc( (void *) b->yy_ch_buf,
3233                                                          b->yy_buf_size + 2 );
3234                                 }
3235                         else
3236                                 /* Can't grow it, we don't own it. */
3237                                 b->yy_ch_buf = 0;
3238
3239                         if ( ! b->yy_ch_buf )
3240                                 YY_FATAL_ERROR(
3241                                 "fatal error - scanner input buffer overflow" );
3242
3243                         yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
3244
3245                         num_to_read = yy_current_buffer->yy_buf_size -
3246                                                 number_to_move - 1;
3247 #endif
3248                         }
3249
3250                 if ( num_to_read > YY_READ_BUF_SIZE )
3251                         num_to_read = YY_READ_BUF_SIZE;
3252
3253                 /* Read in more data. */
3254                 YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
3255                         yy_n_chars, num_to_read );
3256
3257                 yy_current_buffer->yy_n_chars = yy_n_chars;
3258                 }
3259
3260         if ( yy_n_chars == 0 )
3261                 {
3262                 if ( number_to_move == YY_MORE_ADJ )
3263                         {
3264                         ret_val = EOB_ACT_END_OF_FILE;
3265                         yyrestart( yyin );
3266                         }
3267
3268                 else
3269                         {
3270                         ret_val = EOB_ACT_LAST_MATCH;
3271                         yy_current_buffer->yy_buffer_status =
3272                                 YY_BUFFER_EOF_PENDING;
3273                         }
3274                 }
3275
3276         else
3277                 ret_val = EOB_ACT_CONTINUE_SCAN;
3278
3279         yy_n_chars += number_to_move;
3280         yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
3281         yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
3282
3283         yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
3284
3285         return ret_val;
3286         }
3287
3288
3289 /* yy_get_previous_state - get the state just before the EOB char was reached */
3290
3291 static yy_state_type yy_get_previous_state()
3292         {
3293         register yy_state_type yy_current_state;
3294         register char *yy_cp;
3295
3296         yy_current_state = yy_start;
3297         yy_current_state += YY_AT_BOL();
3298         yy_state_ptr = yy_state_buf;
3299         *yy_state_ptr++ = yy_current_state;
3300
3301         for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
3302                 {
3303                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
3304                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3305                         {
3306                         yy_current_state = (int) yy_def[yy_current_state];
3307                         if ( yy_current_state >= 735 )
3308                                 yy_c = yy_meta[(unsigned int) yy_c];
3309                         }
3310                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3311                 *yy_state_ptr++ = yy_current_state;
3312                 }
3313
3314         return yy_current_state;
3315         }
3316
3317
3318 /* yy_try_NUL_trans - try to make a transition on the NUL character
3319  *
3320  * synopsis
3321  *      next_state = yy_try_NUL_trans( current_state );
3322  */
3323
3324 #ifdef YY_USE_PROTOS
3325 static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
3326 #else
3327 static yy_state_type yy_try_NUL_trans( yy_current_state )
3328 yy_state_type yy_current_state;
3329 #endif
3330         {
3331         register int yy_is_jam;
3332
3333         register YY_CHAR yy_c = 1;
3334         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3335                 {
3336                 yy_current_state = (int) yy_def[yy_current_state];
3337                 if ( yy_current_state >= 735 )
3338                         yy_c = yy_meta[(unsigned int) yy_c];
3339                 }
3340         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3341         yy_is_jam = (yy_current_state == 734);
3342         if ( ! yy_is_jam )
3343                 *yy_state_ptr++ = yy_current_state;
3344
3345         return yy_is_jam ? 0 : yy_current_state;
3346         }
3347
3348
3349 #ifndef YY_NO_UNPUT
3350 #ifdef YY_USE_PROTOS
3351 static void yyunput( int c, register char *yy_bp )
3352 #else
3353 static void yyunput( c, yy_bp )
3354 int c;
3355 register char *yy_bp;
3356 #endif
3357         {
3358         register char *yy_cp = yy_c_buf_p;
3359
3360         /* undo effects of setting up yytext */
3361         *yy_cp = yy_hold_char;
3362
3363         if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3364                 { /* need to shift things up to make room */
3365                 /* +2 for EOB chars. */
3366                 register int number_to_move = yy_n_chars + 2;
3367                 register char *dest = &yy_current_buffer->yy_ch_buf[
3368                                         yy_current_buffer->yy_buf_size + 2];
3369                 register char *source =
3370                                 &yy_current_buffer->yy_ch_buf[number_to_move];
3371
3372                 while ( source > yy_current_buffer->yy_ch_buf )
3373                         *--dest = *--source;
3374
3375                 yy_cp += (int) (dest - source);
3376                 yy_bp += (int) (dest - source);
3377                 yy_current_buffer->yy_n_chars =
3378                         yy_n_chars = yy_current_buffer->yy_buf_size;
3379
3380                 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3381                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
3382                 }
3383
3384         *--yy_cp = (char) c;
3385
3386
3387         yytext_ptr = yy_bp;
3388         yy_hold_char = *yy_cp;
3389         yy_c_buf_p = yy_cp;
3390         }
3391 #endif  /* ifndef YY_NO_UNPUT */
3392
3393
3394 #ifdef __cplusplus
3395 static int yyinput()
3396 #else
3397 static int input()
3398 #endif
3399         {
3400         int c;
3401
3402         *yy_c_buf_p = yy_hold_char;
3403
3404         if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
3405                 {
3406                 /* yy_c_buf_p now points to the character we want to return.
3407                  * If this occurs *before* the EOB characters, then it's a
3408                  * valid NUL; if not, then we've hit the end of the buffer.
3409                  */
3410                 if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
3411                         /* This was really a NUL. */
3412                         *yy_c_buf_p = '\0';
3413
3414                 else
3415                         { /* need more input */
3416                         int offset = yy_c_buf_p - yytext_ptr;
3417                         ++yy_c_buf_p;
3418
3419                         switch ( yy_get_next_buffer() )
3420                                 {
3421                                 case EOB_ACT_LAST_MATCH:
3422                                         /* This happens because yy_g_n_b()
3423                                          * sees that we've accumulated a
3424                                          * token and flags that we need to
3425                                          * try matching the token before
3426                                          * proceeding.  But for input(),
3427                                          * there's no matching to consider.
3428                                          * So convert the EOB_ACT_LAST_MATCH
3429                                          * to EOB_ACT_END_OF_FILE.
3430                                          */
3431
3432                                         /* Reset buffer status. */
3433                                         yyrestart( yyin );
3434
3435                                         /* fall through */
3436
3437                                 case EOB_ACT_END_OF_FILE:
3438                                         {
3439                                         if ( yywrap() )
3440                                                 return EOF;
3441
3442                                         if ( ! yy_did_buffer_switch_on_eof )
3443                                                 YY_NEW_FILE;
3444 #ifdef __cplusplus
3445                                         return yyinput();
3446 #else
3447                                         return input();
3448 #endif
3449                                         }
3450
3451                                 case EOB_ACT_CONTINUE_SCAN:
3452                                         yy_c_buf_p = yytext_ptr + offset;
3453                                         break;
3454                                 }
3455                         }
3456                 }
3457
3458         c = *(unsigned char *) yy_c_buf_p;      /* cast for 8-bit char's */
3459         *yy_c_buf_p = '\0';     /* preserve yytext */
3460         yy_hold_char = *++yy_c_buf_p;
3461
3462         yy_current_buffer->yy_at_bol = (c == '\n');
3463
3464         return c;
3465         }
3466
3467
3468 #ifdef YY_USE_PROTOS
3469 void yyrestart( FILE *input_file )
3470 #else
3471 void yyrestart( input_file )
3472 FILE *input_file;
3473 #endif
3474         {
3475         if ( ! yy_current_buffer )
3476                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
3477
3478         yy_init_buffer( yy_current_buffer, input_file );
3479         yy_load_buffer_state();
3480         }
3481
3482
3483 #ifdef YY_USE_PROTOS
3484 void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
3485 #else
3486 void yy_switch_to_buffer( new_buffer )
3487 YY_BUFFER_STATE new_buffer;
3488 #endif
3489         {
3490         if ( yy_current_buffer == new_buffer )
3491                 return;
3492
3493         if ( yy_current_buffer )
3494                 {
3495                 /* Flush out information for old buffer. */
3496                 *yy_c_buf_p = yy_hold_char;
3497                 yy_current_buffer->yy_buf_pos = yy_c_buf_p;
3498                 yy_current_buffer->yy_n_chars = yy_n_chars;
3499                 }
3500
3501         yy_current_buffer = new_buffer;
3502         yy_load_buffer_state();
3503
3504         /* We don't actually know whether we did this switch during
3505          * EOF (yywrap()) processing, but the only time this flag
3506          * is looked at is after yywrap() is called, so it's safe
3507          * to go ahead and always set it.
3508          */
3509         yy_did_buffer_switch_on_eof = 1;
3510         }
3511
3512
3513 #ifdef YY_USE_PROTOS
3514 void yy_load_buffer_state( void )
3515 #else
3516 void yy_load_buffer_state()
3517 #endif
3518         {
3519         yy_n_chars = yy_current_buffer->yy_n_chars;
3520         yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
3521         yyin = yy_current_buffer->yy_input_file;
3522         yy_hold_char = *yy_c_buf_p;
3523         }
3524
3525
3526 #ifdef YY_USE_PROTOS
3527 YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
3528 #else
3529 YY_BUFFER_STATE yy_create_buffer( file, size )
3530 FILE *file;
3531 int size;
3532 #endif
3533         {
3534         YY_BUFFER_STATE b;
3535
3536         b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3537         if ( ! b )
3538                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3539
3540         b->yy_buf_size = size;
3541
3542         /* yy_ch_buf has to be 2 characters longer than the size given because
3543          * we need to put in 2 end-of-buffer characters.
3544          */
3545         b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
3546         if ( ! b->yy_ch_buf )
3547                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3548
3549         b->yy_is_our_buffer = 1;
3550
3551         yy_init_buffer( b, file );
3552
3553         return b;
3554         }
3555
3556
3557 #ifdef YY_USE_PROTOS
3558 void yy_delete_buffer( YY_BUFFER_STATE b )
3559 #else
3560 void yy_delete_buffer( b )
3561 YY_BUFFER_STATE b;
3562 #endif
3563         {
3564         if ( ! b )
3565                 return;
3566
3567         if ( b == yy_current_buffer )
3568                 yy_current_buffer = (YY_BUFFER_STATE) 0;
3569
3570         if ( b->yy_is_our_buffer )
3571                 yy_flex_free( (void *) b->yy_ch_buf );
3572
3573         yy_flex_free( (void *) b );
3574         }
3575
3576
3577 #ifndef _WIN32
3578 #include <unistd.h>
3579 #else
3580 #ifndef YY_ALWAYS_INTERACTIVE
3581 #ifndef YY_NEVER_INTERACTIVE
3582 extern int isatty YY_PROTO(( int ));
3583 #endif
3584 #endif
3585 #endif
3586
3587 #ifdef YY_USE_PROTOS
3588 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
3589 #else
3590 void yy_init_buffer( b, file )
3591 YY_BUFFER_STATE b;
3592 FILE *file;
3593 #endif
3594
3595
3596         {
3597         yy_flush_buffer( b );
3598
3599         b->yy_input_file = file;
3600         b->yy_fill_buffer = 1;
3601
3602 #if YY_ALWAYS_INTERACTIVE
3603         b->yy_is_interactive = 1;
3604 #else
3605 #if YY_NEVER_INTERACTIVE
3606         b->yy_is_interactive = 0;
3607 #else
3608         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
3609 #endif
3610 #endif
3611         }
3612
3613
3614 #ifdef YY_USE_PROTOS
3615 void yy_flush_buffer( YY_BUFFER_STATE b )
3616 #else
3617 void yy_flush_buffer( b )
3618 YY_BUFFER_STATE b;
3619 #endif
3620
3621         {
3622         if ( ! b )
3623                 return;
3624
3625         b->yy_n_chars = 0;
3626
3627         /* We always need two end-of-buffer characters.  The first causes
3628          * a transition to the end-of-buffer state.  The second causes
3629          * a jam in that state.
3630          */
3631         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
3632         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
3633
3634         b->yy_buf_pos = &b->yy_ch_buf[0];
3635
3636         b->yy_at_bol = 1;
3637         b->yy_buffer_status = YY_BUFFER_NEW;
3638
3639         if ( b == yy_current_buffer )
3640                 yy_load_buffer_state();
3641         }
3642
3643
3644 #ifndef YY_NO_SCAN_BUFFER
3645 #ifdef YY_USE_PROTOS
3646 YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
3647 #else
3648 YY_BUFFER_STATE yy_scan_buffer( base, size )
3649 char *base;
3650 yy_size_t size;
3651 #endif
3652         {
3653         YY_BUFFER_STATE b;
3654
3655         if ( size < 2 ||
3656              base[size-2] != YY_END_OF_BUFFER_CHAR ||
3657              base[size-1] != YY_END_OF_BUFFER_CHAR )
3658                 /* They forgot to leave room for the EOB's. */
3659                 return 0;
3660
3661         b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3662         if ( ! b )
3663                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
3664
3665         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
3666         b->yy_buf_pos = b->yy_ch_buf = base;
3667         b->yy_is_our_buffer = 0;
3668         b->yy_input_file = 0;
3669         b->yy_n_chars = b->yy_buf_size;
3670         b->yy_is_interactive = 0;
3671         b->yy_at_bol = 1;
3672         b->yy_fill_buffer = 0;
3673         b->yy_buffer_status = YY_BUFFER_NEW;
3674
3675         yy_switch_to_buffer( b );
3676
3677         return b;
3678         }
3679 #endif
3680
3681
3682 #ifndef YY_NO_SCAN_STRING
3683 #ifdef YY_USE_PROTOS
3684 YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
3685 #else
3686 YY_BUFFER_STATE yy_scan_string( yy_str )
3687 yyconst char *yy_str;
3688 #endif
3689         {
3690         int len;
3691         for ( len = 0; yy_str[len]; ++len )
3692                 ;
3693
3694         return yy_scan_bytes( yy_str, len );
3695         }
3696 #endif
3697
3698
3699 #ifndef YY_NO_SCAN_BYTES
3700 #ifdef YY_USE_PROTOS
3701 YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
3702 #else
3703 YY_BUFFER_STATE yy_scan_bytes( bytes, len )
3704 yyconst char *bytes;
3705 int len;
3706 #endif
3707         {
3708         YY_BUFFER_STATE b;
3709         char *buf;
3710         yy_size_t n;
3711         int i;
3712
3713         /* Get memory for full buffer, including space for trailing EOB's. */
3714         n = len + 2;
3715         buf = (char *) yy_flex_alloc( n );
3716         if ( ! buf )
3717                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
3718
3719         for ( i = 0; i < len; ++i )
3720                 buf[i] = bytes[i];
3721
3722         buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
3723
3724         b = yy_scan_buffer( buf, n );
3725         if ( ! b )
3726                 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
3727
3728         /* It's okay to grow etc. this buffer, and we should throw it
3729          * away when we're done.
3730          */
3731         b->yy_is_our_buffer = 1;
3732
3733         return b;
3734         }
3735 #endif
3736
3737
3738 #ifndef YY_NO_PUSH_STATE
3739 #ifdef YY_USE_PROTOS
3740 static void yy_push_state( int new_state )
3741 #else
3742 static void yy_push_state( new_state )
3743 int new_state;
3744 #endif
3745         {
3746         if ( yy_start_stack_ptr >= yy_start_stack_depth )
3747                 {
3748                 yy_size_t new_size;
3749
3750                 yy_start_stack_depth += YY_START_STACK_INCR;
3751                 new_size = yy_start_stack_depth * sizeof( int );
3752
3753                 if ( ! yy_start_stack )
3754                         yy_start_stack = (int *) yy_flex_alloc( new_size );
3755
3756                 else
3757                         yy_start_stack = (int *) yy_flex_realloc(
3758                                         (void *) yy_start_stack, new_size );
3759
3760                 if ( ! yy_start_stack )
3761                         YY_FATAL_ERROR(
3762                         "out of memory expanding start-condition stack" );
3763                 }
3764
3765         yy_start_stack[yy_start_stack_ptr++] = YY_START;
3766
3767         BEGIN(new_state);
3768         }
3769 #endif
3770
3771
3772 #ifndef YY_NO_POP_STATE
3773 static void yy_pop_state()
3774         {
3775         if ( --yy_start_stack_ptr < 0 )
3776                 YY_FATAL_ERROR( "start-condition stack underflow" );
3777
3778         BEGIN(yy_start_stack[yy_start_stack_ptr]);
3779         }
3780 #endif
3781
3782
3783 #ifndef YY_NO_TOP_STATE
3784 static int yy_top_state()
3785         {
3786         return yy_start_stack[yy_start_stack_ptr - 1];
3787         }
3788 #endif
3789
3790 #ifndef YY_EXIT_FAILURE
3791 #define YY_EXIT_FAILURE 2
3792 #endif
3793
3794 #ifdef YY_USE_PROTOS
3795 static void yy_fatal_error( yyconst char msg[] )
3796 #else
3797 static void yy_fatal_error( msg )
3798 char msg[];
3799 #endif
3800         {
3801         (void) fprintf( stderr, "%s\n", msg );
3802         exit( YY_EXIT_FAILURE );
3803         }
3804
3805
3806
3807 /* Redefine yyless() so it works in section 3 code. */
3808
3809 #undef yyless
3810 #define yyless(n) \
3811         do \
3812                 { \
3813                 /* Undo effects of setting up yytext. */ \
3814                 yytext[yyleng] = yy_hold_char; \
3815                 yy_c_buf_p = yytext + n; \
3816                 yy_hold_char = *yy_c_buf_p; \
3817                 *yy_c_buf_p = '\0'; \
3818                 yyleng = n; \
3819                 } \
3820         while ( 0 )
3821
3822
3823 /* Internal utility routines. */
3824
3825 #ifndef yytext_ptr
3826 #ifdef YY_USE_PROTOS
3827 static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
3828 #else
3829 static void yy_flex_strncpy( s1, s2, n )
3830 char *s1;
3831 yyconst char *s2;
3832 int n;
3833 #endif
3834         {
3835         register int i;
3836         for ( i = 0; i < n; ++i )
3837                 s1[i] = s2[i];
3838         }
3839 #endif
3840
3841 #ifdef YY_NEED_STRLEN
3842 #ifdef YY_USE_PROTOS
3843 static int yy_flex_strlen( yyconst char *s )
3844 #else
3845 static int yy_flex_strlen( s )
3846 yyconst char *s;
3847 #endif
3848         {
3849         register int n;
3850         for ( n = 0; s[n]; ++n )
3851                 ;
3852
3853         return n;
3854         }
3855 #endif
3856
3857
3858 #ifdef YY_USE_PROTOS
3859 static void *yy_flex_alloc( yy_size_t size )
3860 #else
3861 static void *yy_flex_alloc( size )
3862 yy_size_t size;
3863 #endif
3864         {
3865         return (void *) malloc( size );
3866         }
3867
3868 #ifdef YY_USE_PROTOS
3869 static void *yy_flex_realloc( void *ptr, yy_size_t size )
3870 #else
3871 static void *yy_flex_realloc( ptr, size )
3872 void *ptr;
3873 yy_size_t size;
3874 #endif
3875         {
3876         /* The cast to (char *) in the following accommodates both
3877          * implementations that use char* generic pointers, and those
3878          * that use void* generic pointers.  It works with the latter
3879          * because both ANSI C and C++ allow castless assignment from
3880          * any pointer type to void*, and deal with argument conversions
3881          * as though doing an assignment.
3882          */
3883         return (void *) realloc( (char *) ptr, size );
3884         }
3885
3886 #ifdef YY_USE_PROTOS
3887 static void yy_flex_free( void *ptr )
3888 #else
3889 static void yy_flex_free( ptr )
3890 void *ptr;
3891 #endif
3892         {
3893         free( ptr );
3894         }
3895
3896 #if YY_MAIN
3897 int main()
3898         {
3899         yylex();
3900         return 0;
3901         }
3902 #endif
3903
3904
3905
3906 static char *StringToLex;
3907
3908 #ifndef FLEX_SCANNER
3909 static FILE *lexFP;
3910
3911 static int input()
3912 {
3913     int ret;
3914     
3915     if (StringToLex != NULL) {
3916         ret = *StringToLex;
3917         if (ret == NULLCHAR)
3918           ret = EOF;
3919         else
3920           StringToLex++;
3921     } else if (unputCount > 0) {
3922         ret = unputBuffer[--unputCount];
3923     } else {
3924         ret = fgetc(lexFP);
3925     }    
3926
3927     if (ret == EOF) 
3928       return 0;
3929     else
3930       return ret;
3931 }
3932
3933 /*
3934  * Return offset of next pattern within current file
3935  */
3936 int yyoffset()
3937 {
3938     int offset = ftell(lexFP) - unputCount;
3939
3940     if (offset < 0) {
3941         offset = 0;
3942     }
3943     return(offset);
3944 }
3945  
3946 static void output(ch)
3947      int ch;
3948 {
3949     fprintf(stderr, "PARSER BUG: unmatched character '%c' (0%o)\n",
3950             ch, ch);
3951 }
3952
3953 static void unput(ch)
3954      int ch;
3955 {
3956     if (ch == 0) return;
3957     if (StringToLex != NULL) {
3958         StringToLex--;
3959     } else {
3960         if (unputCount >= UNPUT_BUF_SIZE)
3961           fprintf(stderr, "PARSER BUG: unput buffer overflow '%c' (0%o)\n",
3962                   ch, ch);
3963         unputBuffer[unputCount++] = ch;
3964     }
3965 }
3966
3967 /* Get ready to lex from a new file.  Kludge below sticks
3968    an artificial newline at the front of the file, which the
3969    above grammar ignores, but which makes ^ at start of pattern
3970    match at the real start of the file.
3971 */
3972 void yynewfile(f)
3973      FILE *f;
3974 {
3975     lexFP = f;
3976     StringToLex = NULL;
3977     unputCount = 0;
3978     unput('\n'); /* kludge */
3979 }
3980
3981 /* Get ready to lex from a string.  ^ at start of pattern WON'T
3982    match at the start of the string!
3983 */
3984 void yynewstr(s)
3985      char *s;
3986 {
3987     lexFP = NULL;
3988     StringToLex = s;
3989     unputCount = 0;
3990 }
3991 #endif /*!FLEX_SCANNER*/
3992
3993 #ifdef FLEX_SCANNER
3994 void my_yy_input(buf, result, max_size)
3995      char *buf;
3996      int *result;
3997      int max_size;
3998 {
3999     int count;
4000
4001     if (StringToLex != NULL) {
4002         count = 0;
4003         while (*StringToLex != NULLCHAR) {
4004             *buf++ = *StringToLex++;
4005             count++;
4006         }
4007         *result = count;
4008         return;
4009     } else {
4010         count = fread(buf, 1, max_size, yyin);
4011         if (count == 0) {
4012             *result = YY_NULL;
4013         } else {
4014             *result = count;
4015         }
4016         return;
4017     }    
4018 }
4019
4020 static YY_BUFFER_STATE my_file_buffer = NULL;
4021
4022 /*
4023     Return offset of next pattern in the current file.
4024 */
4025 int yyoffset()
4026 {
4027     int pos = yy_c_buf_p - yy_current_buffer->yy_ch_buf;
4028
4029     return(ftell(yy_current_buffer->yy_input_file) -
4030          yy_n_chars + pos);
4031 }
4032
4033
4034 void yynewstr(s)
4035      char *s;
4036 {
4037     if (my_file_buffer != NULL)
4038       yy_delete_buffer(my_file_buffer);
4039     StringToLex = s;
4040     my_file_buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
4041     yy_switch_to_buffer(my_file_buffer);
4042 }
4043
4044 void yynewfile(f)
4045      FILE *f;
4046 {
4047     if (my_file_buffer != NULL)
4048       yy_delete_buffer(my_file_buffer);
4049     StringToLex = NULL;
4050     my_file_buffer = yy_create_buffer(f, YY_BUF_SIZE);
4051     yy_switch_to_buffer(my_file_buffer);
4052 }
4053 #endif /*FLEX_SCANNER*/
4054
4055 int yywrap()
4056 {
4057     return TRUE;
4058 }
4059
4060 /* Parse a move from the given string s */
4061 /* ^ at start of pattern WON'T work here unless using flex */
4062 ChessMove yylexstr(boardIndex, s)
4063      int boardIndex;
4064      char *s;
4065 {
4066     ChessMove ret;
4067     char *oldStringToLex;
4068 #ifdef FLEX_SCANNER
4069     YY_BUFFER_STATE buffer, oldBuffer;
4070 #endif
4071     
4072     yyboardindex = boardIndex;
4073     oldStringToLex = StringToLex;
4074     StringToLex = s;
4075 #ifdef FLEX_SCANNER
4076     buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
4077     oldBuffer = YY_CURRENT_BUFFER;
4078     yy_switch_to_buffer(buffer);
4079 #endif /*FLEX_SCANNER*/
4080
4081     ret = (ChessMove) yylex();
4082
4083 #ifdef FLEX_SCANNER
4084     if (oldBuffer != NULL) 
4085       yy_switch_to_buffer(oldBuffer);
4086     yy_delete_buffer(buffer);
4087 #endif /*FLEX_SCANNER*/
4088     StringToLex = oldStringToLex;
4089
4090     return ret;
4091 }