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