Annotation of embedaddon/sudo/plugins/sudoers/toke.c, revision 1.1.1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>