#line 2 "ldlex.c"

#line 4 "ldlex.c"

#define  YY_INT_ALIGNED short int

/* A lexical scanner generated by flex */

#define yy_create_buffer ld_create_buffer
#define yy_delete_buffer ld_delete_buffer
#define yy_flex_debug ld_flex_debug
#define yy_init_buffer ld_init_buffer
#define yy_flush_buffer ld_flush_buffer
#define yy_load_buffer_state ld_load_buffer_state
#define yy_switch_to_buffer ld_switch_to_buffer
#define yyin ldin
#define yyleng ldleng
#define yylex ldlex
#define yylineno ldlineno
#define yyout ldout
#define yyrestart ldrestart
#define yytext ldtext
#define yywrap ldwrap
#define yyalloc ldalloc
#define yyrealloc ldrealloc
#define yyfree ldfree

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
#define YY_FLEX_SUBMINOR_VERSION 37
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif

/* First, we deal with  platform-specific or compiler-specific issues. */

/* begin standard C headers. */
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>

/* end standard C headers. */

/* flex integer type definitions */

#ifndef FLEXINT_H
#define FLEXINT_H

/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */

#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L

/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
 * if you want the limit (max/min) macros for int types. 
 */
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS 1
#endif

#include <inttypes.h>
typedef int8_t flex_int8_t;
typedef uint8_t flex_uint8_t;
typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
#else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
typedef int flex_int32_t;
typedef unsigned char flex_uint8_t; 
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;

/* Limits of integral types. */
#ifndef INT8_MIN
#define INT8_MIN               (-128)
#endif
#ifndef INT16_MIN
#define INT16_MIN              (-32767-1)
#endif
#ifndef INT32_MIN
#define INT32_MIN              (-2147483647-1)
#endif
#ifndef INT8_MAX
#define INT8_MAX               (127)
#endif
#ifndef INT16_MAX
#define INT16_MAX              (32767)
#endif
#ifndef INT32_MAX
#define INT32_MAX              (2147483647)
#endif
#ifndef UINT8_MAX
#define UINT8_MAX              (255U)
#endif
#ifndef UINT16_MAX
#define UINT16_MAX             (65535U)
#endif
#ifndef UINT32_MAX
#define UINT32_MAX             (4294967295U)
#endif

#endif /* ! C99 */

#endif /* ! FLEXINT_H */

#ifdef __cplusplus

/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST

#else	/* ! __cplusplus */

/* C99 requires __STDC__ to be defined as 1. */
#if defined (__STDC__)

#define YY_USE_CONST

#endif	/* defined (__STDC__) */
#endif	/* ! __cplusplus */

#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif

/* Returned upon end-of-file. */
#define YY_NULL 0

/* Promotes a possibly negative, possibly signed char to an unsigned
 * integer for use as an array index.  If the signed char is negative,
 * we want to instead treat it as an 8-bit unsigned char, hence the
 * double cast.
 */
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)

/* Enter a start condition.  This macro really ought to take a parameter,
 * but we do it the disgusting crufty way forced on us by the ()-less
 * definition of BEGIN.
 */
#define BEGIN (yy_start) = 1 + 2 *

/* Translate the current start state into a value that can be later handed
 * to BEGIN to return to the state.  The YYSTATE alias is for lex
 * compatibility.
 */
#define YY_START (((yy_start) - 1) / 2)
#define YYSTATE YY_START

/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)

/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE ldrestart(ldin  )

#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
#define YY_BUF_SIZE 16384
#endif

/* The state buf must be large enough to hold one state per character in the main buffer.
 */
#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))

#ifndef YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
#endif

#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef size_t yy_size_t;
#endif

extern yy_size_t ldleng;

extern FILE *ldin, *ldout;

#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2

    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
     *       access to the local variable yy_act. Since yyless() is a macro, it would break
     *       existing scanners that call yyless() from OUTSIDE ldlex. 
     *       One obvious solution it to make yy_act a global. I tried that, and saw
     *       a 5% performance hit in a non-ldlineno scanner, because yy_act is
     *       normally declared as a register variable-- so it is not worth it.
     */
    #define  YY_LESS_LINENO(n) \
            do { \
                int yyl;\
                for ( yyl = n; yyl < ldleng; ++yyl )\
                    if ( ldtext[yyl] == '\n' )\
                        --ldlineno;\
            }while(0)
    
/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up ldtext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		*yy_cp = (yy_hold_char); \
		YY_RESTORE_YY_MORE_OFFSET \
		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
		YY_DO_BEFORE_ACTION; /* set up ldtext again */ \
		} \
	while ( 0 )

#define unput(c) yyunput( c, (yytext_ptr)  )

#ifndef YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
	{
	FILE *yy_input_file;

	char *yy_ch_buf;		/* input buffer */
	char *yy_buf_pos;		/* current position in input buffer */

	/* Size of input buffer in bytes, not including room for EOB
	 * characters.
	 */
	yy_size_t yy_buf_size;

	/* Number of characters read into yy_ch_buf, not including EOB
	 * characters.
	 */
	yy_size_t yy_n_chars;

	/* Whether we "own" the buffer - i.e., we know we created it,
	 * and can realloc() it to grow it, and should free() it to
	 * delete it.
	 */
	int yy_is_our_buffer;

	/* Whether this is an "interactive" input source; if so, and
	 * if we're using stdio for input, then we want to use getc()
	 * instead of fread(), to make sure we stop fetching input after
	 * each newline.
	 */
	int yy_is_interactive;

	/* Whether we're considered to be at the beginning of a line.
	 * If so, '^' rules will be active on the next match, otherwise
	 * not.
	 */
	int yy_at_bol;

    int yy_bs_lineno; /**< The line count. */
    int yy_bs_column; /**< The column count. */
    
	/* Whether to try to fill the input buffer when we reach the
	 * end of it.
	 */
	int yy_fill_buffer;

	int yy_buffer_status;

#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
	/* When an EOF's been seen but there's still some text to process
	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
	 * shouldn't try reading from the input source any more.  We might
	 * still have a bunch of tokens to match, though, because of
	 * possible backing-up.
	 *
	 * When we actually see the EOF, we change the status to "new"
	 * (via ldrestart()), so that the user can continue scanning by
	 * just pointing ldin at a new input file.
	 */
#define YY_BUFFER_EOF_PENDING 2

	};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */

/* Stack of input buffers. */
static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */

/* We provide macros for accessing buffer states in case in the
 * future we want to put the buffer states in a more general
 * "scanner state".
 *
 * Returns the top of the stack, or NULL.
 */
#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
                          : NULL)

/* Same as previous macro, but useful when we know that the buffer stack is not
 * NULL or when we need an lvalue. For internal use only.
 */
#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]

/* yy_hold_char holds the character lost when ldtext is formed. */
static char yy_hold_char;
static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
yy_size_t ldleng;

/* Points to current character in buffer. */
static char *yy_c_buf_p = (char *) 0;
static int yy_init = 0;		/* whether we need to initialize */
static int yy_start = 0;	/* start state number */

/* Flag which is used to allow ldwrap()'s to do buffer switches
 * instead of setting up a fresh ldin.  A bit of a hack ...
 */
static int yy_did_buffer_switch_on_eof;

void ldrestart (FILE *input_file  );
void ld_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
YY_BUFFER_STATE ld_create_buffer (FILE *file,int size  );
void ld_delete_buffer (YY_BUFFER_STATE b  );
void ld_flush_buffer (YY_BUFFER_STATE b  );
void ldpush_buffer_state (YY_BUFFER_STATE new_buffer  );
void ldpop_buffer_state (void );

static void ldensure_buffer_stack (void );
static void ld_load_buffer_state (void );
static void ld_init_buffer (YY_BUFFER_STATE b,FILE *file  );

#define YY_FLUSH_BUFFER ld_flush_buffer(YY_CURRENT_BUFFER )

YY_BUFFER_STATE ld_scan_buffer (char *base,yy_size_t size  );
YY_BUFFER_STATE ld_scan_string (yyconst char *yy_str  );
YY_BUFFER_STATE ld_scan_bytes (yyconst char *bytes,yy_size_t len  );

void *ldalloc (yy_size_t  );
void *ldrealloc (void *,yy_size_t  );
void ldfree (void *  );

#define yy_new_buffer ld_create_buffer

#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){ \
        ldensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            ld_create_buffer(ldin,YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
	}

#define yy_set_bol(at_bol) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){\
        ldensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            ld_create_buffer(ldin,YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
	}

#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)

/* Begin user sect3 */

#define ldwrap() 1
#define YY_SKIP_YYWRAP

typedef unsigned char YY_CHAR;

FILE *ldin = (FILE *) 0, *ldout = (FILE *) 0;

typedef int yy_state_type;

extern int ldlineno;

int ldlineno = 1;

extern char *ldtext;
#define yytext_ptr ldtext

static yy_state_type yy_get_previous_state (void );
static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
static int yy_get_next_buffer (void );
static void yy_fatal_error (yyconst char msg[]  );

/* Done after the current pattern has been matched and before the
 * corresponding action - sets up ldtext.
 */
#define YY_DO_BEFORE_ACTION \
	(yytext_ptr) = yy_bp; \
	ldleng = (size_t) (yy_cp - yy_bp); \
	(yy_hold_char) = *yy_cp; \
	*yy_cp = '\0'; \
	(yy_c_buf_p) = yy_cp;

#define YY_NUM_RULES 50
#define YY_END_OF_BUFFER 51
/* This struct is not used in this scanner,
   but its presence is necessary. */
struct yy_trans_info
	{
	flex_int32_t yy_verify;
	flex_int32_t yy_nxt;
	};
static yyconst flex_int16_t yy_accept[219] =
    {   0,
        0,    0,    0,    0,   51,   49,   48,   48,   41,   42,
       32,   33,   39,   37,   44,   38,   46,   40,   45,   45,
       34,   35,   36,   46,   46,   46,   46,   46,   46,   46,
       46,   46,   46,   49,   49,   46,   46,   30,   43,   31,
       49,    9,    9,   48,   46,   47,   46,   10,   45,   45,
       45,   46,   45,   46,   46,   46,   46,   46,   46,   46,
       46,   46,   46,   46,   46,   46,   46,    0,   29,   46,
       46,    0,    0,    0,    0,   45,   46,   46,   46,   46,
       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
       46,   46,    0,   46,   46,    0,    0,    0,    0,    0,

        0,   45,   46,   46,   46,   46,   46,   46,   46,   19,
       46,   46,   46,   46,   46,   46,   27,   46,    0,   46,
       46,    0,    0,    0,    0,    0,    0,    0,    0,   11,
       46,   13,   46,   16,   17,   46,   46,   46,   46,   46,
       46,   46,   46,   46,   46,    0,    0,    0,    0,    0,
        0,    0,    0,   46,   46,   18,   46,   46,   46,   46,
       46,   46,   46,   46,   20,    0,    2,    0,    0,    0,
        6,    0,    0,   46,   46,   46,   46,   23,   46,   25,
       46,   28,   15,    0,    4,    1,    0,    8,    5,   46,
       46,   46,   22,   46,   46,    0,    0,   12,   46,   46,

       46,   46,    3,    7,   46,   46,   24,   46,   46,   46,
       46,   14,   46,   46,   21,   46,   26,    0
    } ;

static yyconst flex_int32_t yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        2,    2,    2,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    2,    1,    1,    4,    1,    5,    6,    1,    7,
        8,    9,   10,   11,   12,   13,   14,   15,   16,   16,
       16,   16,   16,   16,   16,   17,   17,   18,   19,    1,
       20,    1,   21,    1,   22,   23,   24,   25,   26,   27,
       28,   29,   30,   13,   31,   32,   33,   34,   35,   36,
       13,   37,   38,   39,   40,   41,   42,   43,   44,   45,
       46,   47,   48,    1,   49,    1,   50,   51,   52,   53,

       54,   55,   56,   13,   57,   13,   58,   59,   58,   60,
       61,   13,   13,   13,   62,   13,   13,   13,   13,   63,
       13,   13,   64,   65,   66,   47,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,

        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1
    } ;

static yyconst flex_int32_t yy_meta[67] =
    {   0,
        1,    2,    2,    1,    1,    1,    2,    2,    3,    1,
        1,    3,    3,    1,    3,    3,    3,    2,    2,    1,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    2,    1,    2,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    2,    1,    2
    } ;

static yyconst flex_int16_t yy_base[223] =
    {   0,
        0,  217,    0,  216,  216, 2250,   65,   67, 2250, 2250,
     2250, 2250,    0, 2250, 2250, 2250,   70,  206,  135,   62,
     2250, 2250, 2250,    0,  186,   70,  127,  146,  179,  210,
      259,  308,  246,   46,    0,  268,  297, 2250, 2250, 2250,
       25, 2250,   42,   70,    0,    0,  304,    0,   48,  224,
      337,  386,  389,  438,  441,  444,  493,  496,  545,  532,
      554,  583,  589,  638,  634,  641,  672,   73, 2250,  691,
      695,   38,  159,   47,  158,   69,  728,  747,  751,  780,
      784,  813,  819,  842,  848,  871,  877,  900,  908,  929,
      937,  958,   81,  966,  987,   52,  158,  155,   69,  154,

      153,  995, 1018, 1031, 1039, 1070, 1062, 1091, 1120, 1127,
     1131, 1160, 1171, 1193, 1204, 1164, 1226, 1233,  151, 1237,
     1266,  142,  138,  134,  134,  132,  132,  124,  115, 1277,
     1288, 1301, 1322, 1341, 1345, 1374, 1380, 1409, 1430, 1433,
     1464, 1485, 1488, 1509, 1538,  114,  135,  110,  104,   81,
      145,   77,   75, 1545, 1549, 1578, 1582, 1589, 1611, 1633,
     1640, 1644, 1684, 1693, 2250,   68, 2250,  151,  154,   65,
     2250,  169,  171, 1697, 1728, 1737, 1750, 1772, 1781, 1794,
     1803, 1825, 2250,   57, 2250, 2250,   53, 2250, 2250, 1834,
     1847, 1838, 1869, 1878, 1900,  173,  181, 1907, 1929, 1936,

     1960, 1967, 2250, 2250, 1989, 1996, 2000, 2040, 2051, 2029,
     2064, 2085, 2108, 2119, 2142, 2148, 2177, 2250, 2240,   89,
     2243, 2246
    } ;

static yyconst flex_int16_t yy_def[223] =
    {   0,
      218,    1,  219,  219,  218,  218,  218,  218,  218,  218,
      218,  218,  220,  218,  218,  218,  221,  222,  221,   19,
      218,  218,  218,  220,   19,   19,   19,   19,   19,   19,
       19,   19,   19,  218,  222,   19,   19,  218,  218,  218,
      218,  218,  218,  218,  220,  222,   19,  222,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,  218,  218,   19,
       19,  218,  218,  218,  218,   52,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,  218,   19,   19,  218,  218,  218,  218,  218,

      218,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,  218,   19,
       19,  218,  218,  218,  218,  218,  218,  218,  218,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,  218,  218,  218,  218,  218,
      218,  218,  218,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,  218,  218,  218,  218,  218,  218,
      218,  218,  218,   19,   19,   19,   19,   19,   19,   19,
       19,   19,  218,  218,  218,  218,  218,  218,  218,   19,
       19,   19,   19,   19,   19,  218,  218,   19,   19,   19,

       19,   19,  218,  218,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,    0,  218,  218,
      218,  218
    } ;

static yyconst flex_int16_t yy_nxt[2317] =
    {   0,
        6,    7,    8,    6,    9,   10,   11,   12,   13,   14,
       15,   16,   17,   18,   19,   20,   20,   21,   22,   23,
       24,   25,   17,   17,   17,   26,   17,   27,   17,   28,
       29,   17,   17,   17,   30,   31,   17,   32,   17,   17,
       33,   17,   17,   17,   17,   34,   35,    6,   17,   17,
       17,   17,   17,   17,   17,   36,   17,   17,   37,   17,
       17,   17,   17,   38,   39,   40,   44,   44,   44,   44,
       46,   44,   44,   46,   46,   46,   50,   50,   72,   46,
       46,   73,   68,   46,   47,   47,   47,   68,   68,   46,
       47,   45,   53,   69,   53,   74,   96,   97,   75,  102,

       47,  102,   47,   56,   47,   99,  100,  197,  122,   93,
       47,  196,   57,  123,   93,   93,   46,  119,  187,   53,
       69,  184,  119,  119,   47,  126,  102,   47,   69,  173,
      127,  172,   47,  170,   46,   46,  167,  167,   46,   46,
       46,   47,   47,   47,   46,   46,  171,  171,   46,   49,
       49,   50,  185,  185,   46,  186,  186,   47,  169,   47,
       47,   47,   47,   58,  168,   51,  166,   51,  153,   47,
      188,  188,  189,  189,  203,  203,   47,   52,   47,   59,
      152,   46,  204,  204,   47,  151,  150,  149,   47,   47,
      148,  147,   51,   47,   47,   47,  146,   52,   69,   46,

       47,   47,   47,   47,   60,  129,  128,  125,   47,   47,
      124,   47,  101,   98,   48,  218,   47,   54,   47,   43,
       41,   47,  218,   55,   47,   47,   47,  218,   47,  218,
      218,  218,  218,  218,  218,  218,   47,  218,   50,   50,
       47,   47,   47,   47,  218,  218,  218,  218,   47,   61,
      218,  218,   47,  218,   53,  218,   53,  218,  218,  218,
       47,   47,   47,  218,  218,  218,   47,   47,  218,  218,
      218,   67,   47,   47,   47,   47,   47,  218,   47,  218,
       62,   53,   47,   47,   47,  218,   47,  218,   47,   47,
      218,   47,  218,  218,  218,   63,  218,  218,   47,  218,

       47,   47,  218,   47,  218,  218,  218,  218,   47,  218,
       47,   47,   47,   47,  218,  218,   47,  218,   47,   47,
       47,   47,   47,   47,   47,   47,   70,   47,  218,   47,
       47,  218,  218,   64,   47,  218,   47,   65,   47,   47,
       47,  218,   66,  218,  218,  218,   47,  218,  218,  218,
       47,   47,   47,   47,   47,  218,  218,   71,  218,   47,
      218,   47,  218,  218,  218,   47,   47,   47,  218,   47,
       47,  218,  218,  218,  218,  218,  218,  218,  218,   47,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,   47,  218,  218,  218,  218,   47,

       76,   76,   76,   47,   47,   47,  218,   76,   76,   76,
       76,   76,   76,  218,  218,  218,   47,  218,   47,   47,
      218,   47,  218,  218,  218,  218,  218,  218,   47,  218,
      218,   47,  218,  218,  218,   76,   76,   76,   76,   76,
       76,  218,  218,   47,  218,  218,   47,  218,   47,  218,
      218,   47,   47,   47,   47,   47,   47,   47,   47,   47,
       47,  218,  218,  218,  218,  218,  218,   77,   47,  218,
       47,   47,  218,   47,   47,  218,   47,  218,  218,  218,
       47,  218,   79,   47,  218,  218,   47,  218,  218,   78,
      218,  218,  218,  218,  218,   47,  218,  218,   47,  218,

       47,   47,  218,   47,  218,  218,   47,   47,   47,   47,
       47,   47,   47,  218,  218,  218,   80,  218,  218,  218,
      218,  218,  218,   47,  218,   47,   47,  218,   47,  218,
       81,  218,  218,  218,  218,   47,  218,  218,   47,  218,
      218,  218,  218,  218,  218,  218,   47,   47,   47,  218,
       47,  218,  218,   47,  218,   47,  218,   84,   47,   47,
       47,   47,   47,  218,   47,  218,  218,  218,   47,   47,
       47,  218,  218,  218,   47,   47,  218,   47,  218,  218,
       82,  218,  218,   83,   47,  218,   47,   47,  218,   47,
      218,  218,   85,  218,   47,  218,   47,   47,   47,   47,

      218,  218,   47,   47,   47,   47,  218,   47,  218,  218,
       86,   47,  218,   47,  218,   47,   47,  218,  218,   47,
      218,   47,  218,   87,  218,   47,  218,  218,  218,  218,
      218,   47,  218,  218,  218,  218,  218,  218,  218,  218,
       47,  218,  218,  218,  218,   47,   47,  218,   47,   47,
       47,   47,   47,   47,   47,   47,   47,   47,  218,   88,
      218,  218,  218,  218,   47,   89,   47,  218,   47,  218,
       47,   47,  218,   47,  218,  218,   47,   91,   90,  218,
       47,  218,  218,   47,  218,  218,   47,   47,   47,  218,
      218,   47,  218,  218,  218,   47,   47,  218,   47,  218,

       47,  218,   47,   47,   47,   47,   47,   47,   92,   47,
       47,   47,  218,  218,   47,  218,  218,  218,  218,  218,
      218,   47,  218,   47,  218,   47,  218,   47,  218,   47,
      218,  218,  218,   47,   47,  218,  218,   47,  218,  218,
      218,  218,   47,   47,   47,  218,   95,  218,   47,  218,
      218,   94,   47,   47,  218,  103,  218,   47,   47,  218,
       47,   47,   47,   47,  218,   47,   47,   47,  218,  218,
       47,  218,  218,  218,  218,  218,  218,   47,  218,   47,
      104,   47,  218,   47,  218,   47,  218,  105,  218,   47,
       47,  218,  218,   47,   47,   47,   47,  218,   47,   47,

       47,  218,  218,  218,   47,  218,  218,  218,   47,   47,
       47,  106,   47,   47,   47,  218,   47,  218,  218,  218,
      218,  218,   47,  107,  218,  218,   47,   47,   47,   47,
      218,  218,  218,   47,   47,   47,  218,   47,  218,  218,
      218,   47,   47,   47,  109,   47,   47,  218,  218,   47,
      218,   47,  108,  218,  218,   47,   47,   47,   47,  218,
      218,   47,   47,   47,   47,  218,  218,  218,  218,  218,
       47,  218,   47,  218,   47,   47,   47,  110,   47,  218,
       47,   47,  218,  111,   47,   47,   47,   47,  218,  218,
       47,   47,   47,   47,  218,  218,  112,  218,  218,   47,

      218,   47,  218,   47,   47,   47,  218,   47,  218,   47,
       47,  218,  218,   47,   47,   47,   47,  113,  218,   47,
      218,  218,   47,   47,   47,  218,  218,  218,   47,  218,
       47,  218,   47,   47,   47,  218,  114,  218,   47,   47,
      115,  218,   47,   47,   47,   47,  218,  218,  218,  218,
       47,   47,   47,   47,  116,  218,  218,   47,  218,   47,
      218,   47,   47,  218,  218,   47,  218,   47,  218,   47,
       47,   47,   47,   47,   47,  117,  218,  218,  218,   47,
       47,   47,   47,  218,  218,  218,   47,  218,   47,  218,
       47,   47,  218,  218,   47,  118,   47,  218,   47,   47,

       47,   47,   47,   47,  218,  218,  218,  218,   47,   47,
       47,   47,  218,  218,  218,   47,  120,   47,  218,   47,
       47,  218,  218,   47,  218,   47,  218,   47,   47,   47,
      218,  218,   47,   47,   47,  218,  121,   47,  218,  218,
      218,  218,  218,  218,   47,   47,   47,   47,   47,   47,
       47,  130,   47,   47,   47,   47,  131,   47,  218,  218,
       47,   47,  218,   47,  218,  218,  218,  218,  218,   47,
      218,   47,  218,   47,  218,   47,   47,   47,   47,  218,
       47,   47,  132,  218,   47,   47,   47,  218,   47,  218,
      218,  218,   47,   47,   47,  218,   47,  134,  218,  218,

       47,   47,   47,  218,   47,   47,   47,   47,  218,  133,
      218,  218,   47,  218,  218,  218,  218,  218,  218,   47,
      218,   47,  218,   47,   47,  218,  218,   47,  218,  135,
      218,  218,   47,   47,   47,   47,   47,  218,  218,  218,
      218,   47,   47,   47,  218,   47,   47,   47,   47,  218,
       47,  218,   47,   47,  218,  218,  136,   47,  218,   47,
      218,   47,   47,   47,  218,  218,  218,  218,  218,   47,
      137,  218,  218,   47,   47,   47,   47,   47,   47,   47,
       47,  218,   47,  218,   47,   47,   47,   47,   47,   47,
       47,  218,   47,   47,   47,  218,   47,  138,  142,  218,

      139,   47,   47,   47,  218,  218,   47,   47,   47,   47,
      218,  218,  218,   47,  218,  218,  140,   47,   47,   47,
       47,   47,   47,   47,  218,   47,   47,  218,   47,  141,
      218,  218,  218,   47,   47,   47,   47,  218,  218,  218,
       47,   47,   47,  218,  218,  218,   47,   47,   47,   47,
       47,   47,   47,   47,  218,   47,   47,  218,   47,  218,
      218,   47,  143,   47,  218,   47,   47,   47,   47,   47,
      218,  218,  218,  218,  218,   47,  218,  218,  218,   47,
       47,   47,   47,   47,  218,  218,  144,  218,   47,  218,
       47,   47,   47,   47,   47,   47,   47,  218,   47,   47,

      218,  218,   47,   47,   47,  218,  218,   47,   47,   47,
      218,  218,  218,  154,  218,   47,   47,   47,   47,   47,
       47,  218,  218,   47,  145,  218,  218,  218,   47,  218,
       47,   47,  218,   47,   47,  218,   47,   47,   47,   47,
      218,  218,  218,   47,  218,   47,  155,  218,  218,  218,
       47,  218,   47,  218,   47,   47,   47,   47,   47,   47,
       47,   47,  218,   47,   47,  218,  218,  218,  218,  218,
      218,   47,  218,   47,  218,   47,  218,   47,  218,   47,
      218,  218,  218,   47,   47,  218,  218,   47,   47,   47,
       47,  218,  218,  218,   47,   47,   47,  218,   47,  218,

      218,  218,   47,   47,   47,  218,   47,   47,  218,  156,
       47,  218,   47,  218,  218,  218,   47,  218,  157,  218,
      218,  218,   47,   47,   47,   47,  218,  218,  218,  218,
      218,   47,  218,  218,  218,  218,   47,   47,  158,   47,
      218,   47,   47,  218,   47,   47,   47,   47,   47,   47,
      218,   47,  218,  218,  159,  218,  218,  218,  218,  218,
       47,  160,   47,   47,  218,   47,   47,  218,  218,  218,
      218,   47,   47,  218,  218,   47,  218,  218,   47,   47,
       47,  218,  218,  218,  218,  218,  218,   47,  218,  218,
       47,  218,   47,  218,   47,   47,   47,  161,  218,   47,

       47,   47,   47,   47,   47,  218,   47,  218,  218,  218,
      218,  162,  218,  218,  218,   47,  218,   47,   47,  218,
       47,   47,  163,   47,   47,   47,   47,   47,  218,  218,
       47,  218,  218,  218,  218,  218,  218,  218,  218,   47,
      218,   47,   47,  218,  218,   47,  218,   47,  218,  218,
       47,   47,   47,   47,   47,  165,  218,  218,  218,   47,
       47,   47,  218,   47,   47,   47,   47,  164,   47,  174,
       47,   47,  218,  218,  175,   47,  218,   47,  218,   47,
       47,   47,  218,  218,  218,  218,  218,   47,  218,  218,
      218,   47,   47,   47,   47,   47,   47,   47,   47,  218,

       47,  218,   47,   47,   47,   47,   47,   47,   47,  218,
       47,   47,   47,  218,   47,  218,  218,  218,  218,   47,
       47,   47,  218,  218,   47,   47,   47,   47,  218,  218,
      176,   47,  218,  177,  218,   47,  178,  218,  218,   47,
       47,   47,  218,   47,   47,  218,   47,   47,   47,   47,
      218,   47,  218,   47,   47,   47,   47,  218,   47,   47,
       47,  218,  218,   47,  218,   47,  218,  218,   47,  218,
       47,  218,   47,   47,   47,   47,   47,  218,  180,  218,
      218,  179,   47,  218,  218,  218,   47,  218,  218,  218,
       47,  218,  181,  218,  218,   47,  218,   47,   47,   47,

       47,   47,   47,  218,  218,  218,   47,   47,   47,   47,
      183,   47,   47,   47,   47,  218,   47,  182,  218,  218,
      218,  218,  190,   47,  218,   47,   47,   47,  218,   47,
      218,  218,  218,  218,  218,   47,  218,  218,  218,   47,
      218,   47,   47,   47,   47,  218,   47,  218,  218,  218,
       47,   47,   47,   47,   47,   47,  218,  218,   47,   47,
       47,  218,  218,  192,   47,   47,   47,   47,  218,   47,
       47,  218,  218,  218,  218,  193,  191,  218,  218,   47,
       47,  218,   47,  218,  218,   47,   47,   47,   47,  218,
       47,  218,   47,  218,   47,   47,   47,   47,  218,   47,

      218,  218,   47,  218,   47,  194,  218,   47,   47,   47,
       47,   47,   47,   47,   47,  218,  218,   47,   47,   47,
      218,  218,  218,   47,   47,  218,   47,  218,  218,   47,
      218,  195,  218,   47,   47,   47,   47,  218,   47,   47,
       47,   47,  218,   47,  218,   47,  218,  218,   47,   47,
       47,   47,   47,   47,   47,   47,   47,   47,  198,  218,
       47,   47,   47,   47,   47,   47,   47,   47,   47,  218,
       47,  218,  200,  199,  218,  218,   47,   47,  218,   47,
       47,  218,   47,   47,   47,   47,  218,   47,  218,   47,
      218,   47,   47,   47,   47,   47,   47,  218,  218,   47,

       47,   47,  218,  218,   47,  218,  218,  201,   47,   47,
       47,   47,  218,  218,   47,   47,   47,  218,  218,  218,
       47,   47,   47,   47,  218,  202,   47,  218,  218,  218,
       47,   47,   47,  218,  218,   47,  218,   47,  218,   47,
       47,  218,   47,   47,   47,   47,  218,  218,  218,   47,
       47,   47,   47,  218,  218,  218,  218,   47,  205,   47,
      218,   47,   47,  218,   47,  218,   47,  218,   47,   47,
      218,   47,  206,  218,   47,   47,   47,  218,   47,  218,
      218,   47,   47,   47,  218,  218,   47,  218,  208,  218,
       47,   47,   47,   47,  218,  218,  207,   47,   47,   47,

      218,  218,   47,   47,   47,   47,  218,  218,  218,   47,
       47,   47,   47,  218,   47,   47,   47,   47,  218,   47,
      209,   47,   47,  218,   47,  218,   47,  218,  210,   47,
       47,   47,   47,  218,  218,  218,  218,  218,   47,  218,
      218,  218,   47,   47,   47,   47,   47,  218,  218,  218,
      213,   47,  218,   47,   47,   47,   47,   47,   47,   47,
      218,   47,   47,  218,  211,   47,   47,   47,  218,  218,
       47,   47,   47,  218,  218,  218,  212,  218,   47,   47,
       47,   47,   47,   47,  218,  218,   47,  218,  218,  214,
      218,   47,  218,   47,   47,  218,   47,   47,  218,   47,

       47,   47,   47,  218,  218,  218,   47,  218,   47,  218,
      218,  218,  218,   47,  218,   47,  218,   47,  218,  218,
      218,   47,   47,   47,   47,  218,   47,   47,  218,  218,
      218,  218,  218,   47,   47,   47,  218,  218,   47,  218,
       47,  218,   47,  218,  218,  218,  215,   47,  218,   47,
       47,   47,  218,  218,  218,  216,   47,   47,   47,  218,
      218,   47,   47,   47,   47,   47,  218,  218,  218,  218,
       47,  218,   47,  218,   47,  218,   47,  218,   47,  218,
       47,   47,  218,  218,   47,  217,  218,  218,  218,  218,
       47,   47,   47,   47,  218,  218,  218,  218,  218,   47,

      218,  218,  218,  218,   47,   47,  218,   47,  218,   47,
       47,  218,  218,  218,  218,  218,  218,  218,  218,   47,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,   47,  218,  218,  218,  218,   47,
       42,   42,   42,   47,  218,   47,   46,  218,   46,    5,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,

      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218
    } ;

static yyconst flex_int16_t yy_chk[2317] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    7,    7,    8,    8,
       17,   44,   44,   17,   17,   17,   20,   20,   41,   17,
       17,   41,   34,   17,   26,   26,   26,   34,   34,   17,
       49,  220,   20,   34,   20,   43,   72,   72,   43,   76,

       26,   76,   26,   26,   20,   74,   74,  187,   96,   68,
       49,  184,   26,   96,   68,   68,   17,   93,  170,   20,
       68,  166,   93,   93,   20,   99,   76,   26,   93,  153,
       99,  152,   26,  150,   17,   19,  147,  147,   19,   19,
       19,   27,   27,   27,   19,   19,  151,  151,   19,   19,
       19,   19,  168,  168,   19,  169,  169,   27,  149,   27,
       28,   28,   28,   27,  148,   19,  146,   19,  129,   27,
      172,  172,  173,  173,  196,  196,   28,   19,   28,   28,
      128,   19,  197,  197,   27,  127,  126,  125,   28,   27,
      124,  123,   19,   29,   29,   29,  122,   19,  119,   19,

       25,   25,   25,   28,   29,  101,  100,   98,   28,   29,
       97,   29,   75,   73,   18,    5,   25,   25,   25,    4,
        2,   29,    0,   25,   30,   30,   30,    0,   25,    0,
        0,    0,    0,    0,    0,    0,   29,    0,   50,   50,
       30,   29,   30,   25,    0,    0,    0,    0,   25,   30,
        0,    0,   30,    0,   50,    0,   50,    0,    0,    0,
       33,   33,   33,    0,    0,    0,   50,   30,    0,    0,
        0,   33,   30,   31,   31,   31,   33,    0,   33,    0,
       31,   50,   36,   36,   36,    0,   50,    0,   33,   31,
        0,   31,    0,    0,    0,   31,    0,    0,   36,    0,

       36,   31,    0,   33,    0,    0,    0,    0,   33,    0,
       36,   37,   37,   37,    0,    0,   31,    0,   47,   47,
       47,   31,   32,   32,   32,   36,   36,   37,    0,   37,
       36,    0,    0,   32,   47,    0,   47,   32,   32,   37,
       32,    0,   32,    0,    0,    0,   47,    0,    0,    0,
       32,   51,   51,   51,   37,    0,    0,   37,    0,   37,
        0,   47,    0,    0,    0,   32,   47,   51,    0,   51,
       32,    0,    0,    0,    0,    0,    0,    0,    0,   51,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,   51,    0,    0,    0,    0,   51,

       52,   52,   52,   53,   53,   53,    0,   52,   52,   52,
       52,   52,   52,    0,    0,    0,   52,    0,   52,   53,
        0,   53,    0,    0,    0,    0,    0,    0,   52,    0,
        0,   53,    0,    0,    0,   52,   52,   52,   52,   52,
       52,    0,    0,   52,    0,    0,   53,    0,   52,    0,
        0,   53,   54,   54,   54,   55,   55,   55,   56,   56,
       56,    0,    0,    0,    0,    0,    0,   54,   54,    0,
       54,   55,    0,   55,   56,    0,   56,    0,    0,    0,
       54,    0,   56,   55,    0,    0,   56,    0,    0,   55,
        0,    0,    0,    0,    0,   54,    0,    0,   55,    0,

       54,   56,    0,   55,    0,    0,   56,   57,   57,   57,
       58,   58,   58,    0,    0,    0,   57,    0,    0,    0,
        0,    0,    0,   57,    0,   57,   58,    0,   58,    0,
       58,    0,    0,    0,    0,   57,    0,    0,   58,    0,
        0,    0,    0,    0,    0,    0,   60,   60,   60,    0,
       57,    0,    0,   58,    0,   57,    0,   60,   58,   59,
       59,   59,   60,    0,   60,    0,    0,    0,   61,   61,
       61,    0,    0,    0,   60,   59,    0,   59,    0,    0,
       59,    0,    0,   59,   61,    0,   61,   59,    0,   60,
        0,    0,   61,    0,   60,    0,   61,   62,   62,   62,

        0,    0,   59,   63,   63,   63,    0,   59,    0,    0,
       62,   61,    0,   62,    0,   62,   61,    0,    0,   63,
        0,   63,    0,   63,    0,   62,    0,    0,    0,    0,
        0,   63,    0,    0,    0,    0,    0,    0,    0,    0,
       62,    0,    0,    0,    0,   62,   63,    0,   65,   65,
       65,   63,   64,   64,   64,   66,   66,   66,    0,   64,
        0,    0,    0,    0,   65,   64,   65,    0,   64,    0,
       64,   66,    0,   66,    0,    0,   65,   66,   65,    0,
       64,    0,    0,   66,    0,    0,   67,   67,   67,    0,
        0,   65,    0,    0,    0,   64,   65,    0,   66,    0,

       64,    0,   67,   66,   67,   70,   70,   70,   67,   71,
       71,   71,    0,    0,   67,    0,    0,    0,    0,    0,
        0,   70,    0,   70,    0,   71,    0,   71,    0,   67,
        0,    0,    0,   70,   67,    0,    0,   71,    0,    0,
        0,    0,   77,   77,   77,    0,   71,    0,   70,    0,
        0,   70,   71,   70,    0,   77,    0,   71,   77,    0,
       77,   78,   78,   78,    0,   79,   79,   79,    0,    0,
       77,    0,    0,    0,    0,    0,    0,   78,    0,   78,
       78,   79,    0,   79,    0,   77,    0,   79,    0,   78,
       77,    0,    0,   79,   80,   80,   80,    0,   81,   81,

       81,    0,    0,    0,   78,    0,    0,    0,   79,   78,
       80,   80,   80,   79,   81,    0,   81,    0,    0,    0,
        0,    0,   80,   81,    0,    0,   81,   82,   82,   82,
        0,    0,    0,   83,   83,   83,    0,   80,    0,    0,
        0,   81,   80,   82,   83,   82,   81,    0,    0,   83,
        0,   83,   82,    0,    0,   82,   84,   84,   84,    0,
        0,   83,   85,   85,   85,    0,    0,    0,    0,    0,
       82,    0,   84,    0,   84,   82,   83,   84,   85,    0,
       85,   83,    0,   85,   84,   86,   86,   86,    0,    0,
       85,   87,   87,   87,    0,    0,   86,    0,    0,   84,

        0,   86,    0,   86,   84,   85,    0,   87,    0,   87,
       85,    0,    0,   86,   88,   88,   88,   87,    0,   87,
        0,    0,   89,   89,   89,    0,    0,    0,   86,    0,
       88,    0,   88,   86,   87,    0,   88,    0,   89,   87,
       89,    0,   88,   90,   90,   90,    0,    0,    0,    0,
       89,   91,   91,   91,   90,    0,    0,   88,    0,   90,
        0,   90,   88,    0,    0,   89,    0,   91,    0,   91,
       89,   90,   92,   92,   92,   91,    0,    0,    0,   91,
       94,   94,   94,    0,    0,    0,   90,    0,   92,    0,
       92,   90,    0,    0,   91,   92,   94,    0,   94,   91,

       92,   95,   95,   95,    0,    0,    0,    0,   94,  102,
      102,  102,    0,    0,    0,   92,   94,   95,    0,   95,
       92,    0,    0,   94,    0,  102,    0,  102,   94,   95,
        0,    0,  103,  103,  103,    0,   95,  102,    0,    0,
        0,    0,    0,    0,   95,  104,  104,  104,  103,   95,
      103,  103,  102,  105,  105,  105,  104,  102,    0,    0,
      103,  104,    0,  104,    0,    0,    0,    0,    0,  105,
        0,  105,    0,  104,    0,  103,  107,  107,  107,    0,
      103,  105,  105,    0,  106,  106,  106,    0,  104,    0,
        0,    0,  107,  104,  107,    0,  105,  107,    0,    0,

      106,  105,  106,    0,  107,  108,  108,  108,    0,  106,
        0,    0,  106,    0,    0,    0,    0,    0,    0,  107,
        0,  108,    0,  108,  107,    0,    0,  106,    0,  108,
        0,    0,  106,  108,  109,  109,  109,    0,    0,    0,
        0,  110,  110,  110,    0,  111,  111,  111,  108,    0,
      109,    0,  109,  108,    0,    0,  109,  110,    0,  110,
        0,  111,  109,  111,    0,    0,    0,    0,    0,  110,
      111,    0,    0,  111,  112,  112,  112,  109,  116,  116,
      116,    0,  109,    0,  110,  113,  113,  113,  111,  110,
      112,    0,  112,  111,  116,    0,  116,  112,  116,    0,

      113,  113,  112,  113,    0,    0,  116,  114,  114,  114,
        0,    0,    0,  113,    0,    0,  114,  112,  115,  115,
      115,  116,  112,  114,    0,  114,  116,    0,  113,  115,
        0,    0,    0,  113,  115,  114,  115,    0,    0,    0,
      117,  117,  117,    0,    0,    0,  115,  118,  118,  118,
      114,  120,  120,  120,    0,  114,  117,    0,  117,    0,
        0,  115,  118,  118,    0,  118,  115,  120,  117,  120,
        0,    0,    0,    0,    0,  118,    0,    0,    0,  120,
      121,  121,  121,  117,    0,    0,  120,    0,  117,    0,
      118,  130,  130,  130,  120,  118,  121,    0,  121,  120,

        0,    0,  131,  131,  131,    0,    0,  130,  121,  130,
        0,    0,    0,  131,    0,  132,  132,  132,  131,  130,
      131,    0,    0,  121,  121,    0,    0,    0,  121,    0,
      131,  132,    0,  132,  130,    0,  133,  133,  133,  130,
        0,    0,    0,  132,    0,  131,  133,    0,    0,    0,
      131,    0,  133,    0,  133,  134,  134,  134,  132,  135,
      135,  135,    0,  132,  133,    0,    0,    0,    0,    0,
        0,  134,    0,  134,    0,  135,    0,  135,    0,  133,
        0,    0,    0,  134,  133,    0,    0,  135,  136,  136,
      136,    0,    0,    0,  137,  137,  137,    0,  134,    0,

        0,    0,  135,  134,  136,    0,  136,  135,    0,  136,
      137,    0,  137,    0,    0,    0,  136,    0,  137,    0,
        0,    0,  137,  138,  138,  138,    0,    0,    0,    0,
        0,  136,    0,    0,    0,    0,  136,  137,  138,  138,
        0,  138,  137,    0,  139,  139,  139,  140,  140,  140,
        0,  138,    0,    0,  139,    0,    0,    0,    0,    0,
      139,  140,  139,  140,    0,  140,  138,    0,    0,    0,
        0,  138,  139,    0,    0,  140,    0,    0,  141,  141,
      141,    0,    0,    0,    0,    0,    0,  139,    0,    0,
      140,    0,  139,    0,  141,  140,  141,  141,    0,  142,

      142,  142,  143,  143,  143,    0,  141,    0,    0,    0,
        0,  142,    0,    0,    0,  142,    0,  142,  143,    0,
      143,  141,  143,  144,  144,  144,  141,  142,    0,    0,
      143,    0,    0,    0,    0,    0,    0,    0,    0,  144,
        0,  144,  142,    0,    0,  143,    0,  142,    0,    0,
      143,  144,  145,  145,  145,  145,    0,    0,    0,  154,
      154,  154,    0,  155,  155,  155,  144,  144,  145,  154,
      145,  144,    0,    0,  155,  154,    0,  154,    0,  155,
      145,  155,    0,    0,    0,    0,    0,  154,    0,    0,
        0,  155,  156,  156,  156,  145,  157,  157,  157,    0,

      145,    0,  154,  158,  158,  158,  155,  154,  156,    0,
      156,  155,  157,    0,  157,    0,    0,    0,    0,  158,
      156,  158,    0,    0,  157,  159,  159,  159,    0,    0,
      157,  158,    0,  158,    0,  156,  159,    0,    0,  157,
      156,  159,    0,  159,  157,    0,  158,  160,  160,  160,
        0,  158,    0,  159,  161,  161,  161,    0,  162,  162,
      162,    0,    0,  160,    0,  160,    0,    0,  159,    0,
      161,    0,  161,  159,  162,  160,  162,    0,  161,    0,
        0,  160,  161,    0,    0,    0,  162,    0,    0,    0,
      160,    0,  162,    0,    0,  160,    0,  161,  163,  163,

      163,  162,  161,    0,    0,    0,  162,  164,  164,  164,
      164,  174,  174,  174,  163,    0,  163,  163,    0,    0,
        0,    0,  174,  164,    0,  164,  163,  174,    0,  174,
        0,    0,    0,    0,    0,  164,    0,    0,    0,  174,
        0,  163,  175,  175,  175,    0,  163,    0,    0,    0,
      164,  176,  176,  176,  174,  164,    0,    0,  175,  174,
      175,    0,    0,  176,  177,  177,  177,  176,    0,  176,
      175,    0,    0,    0,    0,  177,  175,    0,    0,  176,
      177,    0,  177,    0,    0,  175,  178,  178,  178,    0,
      175,    0,  177,    0,  176,  179,  179,  179,    0,  176,

        0,    0,  178,    0,  178,  179,    0,  177,  180,  180,
      180,  179,  177,  179,  178,    0,    0,  181,  181,  181,
        0,    0,    0,  179,  180,    0,  180,    0,    0,  178,
        0,  181,    0,  181,  178,  181,  180,    0,  179,  182,
      182,  182,    0,  179,    0,  181,    0,    0,  190,  190,
      190,  180,  192,  192,  192,  182,  180,  182,  190,    0,
      181,  191,  191,  191,  190,  181,  190,  182,  192,    0,
      192,    0,  192,  191,    0,    0,  190,  191,    0,  191,
      192,    0,  182,  193,  193,  193,    0,  182,    0,  191,
        0,  190,  194,  194,  194,  192,  190,    0,    0,  193,

      192,  193,    0,    0,  191,    0,    0,  194,  194,  191,
      194,  193,    0,    0,  195,  195,  195,    0,    0,    0,
      194,  198,  198,  198,    0,  195,  193,    0,    0,    0,
      195,  193,  195,    0,    0,  194,    0,  198,    0,  198,
      194,    0,  195,  199,  199,  199,    0,    0,    0,  198,
      200,  200,  200,    0,    0,    0,    0,  195,  199,  199,
        0,  199,  195,    0,  198,    0,  200,    0,  200,  198,
        0,  199,  200,    0,  201,  201,  201,    0,  200,    0,
        0,  202,  202,  202,    0,    0,  199,    0,  202,    0,
      201,  199,  201,  200,    0,    0,  201,  202,  200,  202,

        0,    0,  201,  205,  205,  205,    0,    0,    0,  202,
      206,  206,  206,    0,  207,  207,  207,  201,    0,  205,
      205,  205,  201,    0,  202,    0,  206,    0,  206,  202,
      207,  205,  207,    0,    0,    0,    0,    0,  206,    0,
        0,    0,  207,  210,  210,  210,  205,    0,    0,    0,
      210,  205,    0,  206,  208,  208,  208,  207,  206,  210,
        0,  210,  207,    0,  208,  209,  209,  209,    0,    0,
      208,  210,  208,    0,    0,    0,  209,    0,  211,  211,
      211,  209,  208,  209,    0,    0,  210,    0,    0,  211,
        0,  210,    0,  209,  211,    0,  211,  208,    0,  212,

      212,  212,  208,    0,    0,    0,  211,    0,  209,    0,
        0,    0,    0,  209,    0,  212,    0,  212,    0,    0,
        0,  211,  213,  213,  213,    0,  211,  212,    0,    0,
        0,    0,    0,  214,  214,  214,    0,    0,  213,    0,
      213,    0,  212,    0,    0,    0,  213,  212,    0,  214,
      213,  214,    0,    0,    0,  214,  215,  215,  215,    0,
        0,  214,  216,  216,  216,  213,    0,    0,    0,    0,
      213,    0,  215,    0,  215,    0,  214,    0,  216,    0,
      216,  214,    0,    0,  215,  216,    0,    0,    0,    0,
      216,  217,  217,  217,    0,    0,    0,    0,    0,  215,

        0,    0,    0,    0,  215,  216,    0,  217,    0,  217,
      216,    0,    0,    0,    0,    0,    0,    0,    0,  217,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,  217,    0,    0,    0,    0,  217,
      219,  219,  219,  221,    0,  221,  222,    0,  222,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,

      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218
    } ;

/* Table of booleans, true if rule could match eol. */
static yyconst flex_int32_t yy_rule_can_match_eol[51] =
    {   0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,     };

static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;

extern int ld_flex_debug;
int ld_flex_debug = 0;

/* The intent behind this definition is that it'll catch
 * any uses of REJECT which flex missed.
 */
#define REJECT reject_used_but_not_detected
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *ldtext;
#line 1 "/home/mark/src/elfutils/src/ldlex.l"
#line 2 "/home/mark/src/elfutils/src/ldlex.l"
/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2008 Red Hat, Inc.
   This file is part of elfutils.
   Written by Ulrich Drepper <drepper@redhat.com>, 2001.

   This file is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   elfutils is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

#include <assert.h>
#include <ctype.h>
#include <elf.h>
#include <error.h>
#include <inttypes.h>
#include <libintl.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>

#include <system.h>
#include <ld.h>
#include "ldscript.h"

/* We sure use no threads to read the stream, so use the _unlocked
   variants of the functions.  */
#undef getc
#define getc(s) getc_unlocked (s)
#undef ferror
#define ferror(s) ferror_unlocked (s)
#undef fread
#define fread(b, m, n, s) fread_unlocked (b, m, n, s)
#undef fwrite
#define fwrite(b, m, n, s) fwrite_unlocked (b, m, n, s)

/* ECHO must be redefined since the default implementation ignores
   the return value of fwrite_unlocked.  */
#define ECHO do { size_t n__ __attribute__ ((unused)) \
			   = fwrite (ldtext, ldleng, 1, ldout); } while (0)

/* Defined in ld.c.  */
extern int ld_scan_version_script;

#define MAX_PREPDEPTH 20
static enum prepstate
{
  prep_normal,
  skip_if,
  skip_to_endif
} prepstate[MAX_PREPDEPTH];
static int prepdepth;

static void eat_comment (void);
static void eat_to_eol (bool empty);
static int attrib_convert (int c);
static void push_state (enum prepstate);
static int pop_state (void);
static int handle_ifdef (void);
static void invalid_char (int ch);

#line 1150 "ldlex.c"

#define INITIAL 0
#define IGNORE 1

#ifndef YY_NO_UNISTD_H
/* Special case for "unistd.h", since it is non-ANSI. We include it way
 * down here because we want the user's section 1 to have been scanned first.
 * The user has a chance to override it with an option.
 */
#include <unistd.h>
#endif

#ifndef YY_EXTRA_TYPE
#define YY_EXTRA_TYPE void *
#endif

static int yy_init_globals (void );

/* Accessor methods to globals.
   These are made visible to non-reentrant scanners for convenience. */

int ldlex_destroy (void );

int ldget_debug (void );

void ldset_debug (int debug_flag  );

YY_EXTRA_TYPE ldget_extra (void );

void ldset_extra (YY_EXTRA_TYPE user_defined  );

FILE *ldget_in (void );

void ldset_in  (FILE * in_str  );

FILE *ldget_out (void );

void ldset_out  (FILE * out_str  );

yy_size_t ldget_leng (void );

char *ldget_text (void );

int ldget_lineno (void );

void ldset_lineno (int line_number  );

/* Macros after this point can all be overridden by user definitions in
 * section 1.
 */

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int ldwrap (void );
#else
extern int ldwrap (void );
#endif
#endif

    static void yyunput (int c,char *buf_ptr  );
    
#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int );
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * );
#endif

#ifndef YY_NO_INPUT

#ifdef __cplusplus
static int yyinput (void );
#else
static int input (void );
#endif

#endif

/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#endif

/* Copy whatever the last rule matched to the standard output. */
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
 * we now use fwrite().
 */
#define ECHO do { if (fwrite( ldtext, ldleng, 1, ldout )) {} } while (0)
#endif

/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
 * is returned in "result".
 */
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
		{ \
		int c = '*'; \
		size_t n; \
		for ( n = 0; n < max_size && \
			     (c = getc( ldin )) != EOF && c != '\n'; ++n ) \
			buf[n] = (char) c; \
		if ( c == '\n' ) \
			buf[n++] = (char) c; \
		if ( c == EOF && ferror( ldin ) ) \
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
		result = n; \
		} \
	else \
		{ \
		errno=0; \
		while ( (result = fread(buf, 1, max_size, ldin))==0 && ferror(ldin)) \
			{ \
			if( errno != EINTR) \
				{ \
				YY_FATAL_ERROR( "input in flex scanner failed" ); \
				break; \
				} \
			errno=0; \
			clearerr(ldin); \
			} \
		}\
\

#endif

/* No semi-colon after return; correct usage is to write "yyterminate();" -
 * we don't want an extra ';' after the "return" because that will cause
 * some compilers to complain about unreachable statements.
 */
#ifndef yyterminate
#define yyterminate() return YY_NULL
#endif

/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif

/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif

/* end tables serialization structures and prototypes */

/* Default declaration of generated scanner - a define so the user can
 * easily add parameters.
 */
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1

extern int ldlex (void);

#define YY_DECL int ldlex (void)
#endif /* !YY_DECL */

/* Code executed at the beginning of each rule, after ldtext and ldleng
 * have been set up.
 */
#ifndef YY_USER_ACTION
#define YY_USER_ACTION
#endif

/* Code executed at the end of each rule. */
#ifndef YY_BREAK
#define YY_BREAK break;
#endif

#define YY_RULE_SETUP \
	if ( ldleng > 0 ) \
		YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
				(ldtext[ldleng - 1] == '\n'); \
	YY_USER_ACTION

/** The main scanner function which does all the work.
 */
YY_DECL
{
	register yy_state_type yy_current_state;
	register char *yy_cp, *yy_bp;
	register int yy_act;
    
#line 88 "/home/mark/src/elfutils/src/ldlex.l"

				if (unlikely (ld_scan_version_script))
				  {
				    ld_scan_version_script = -1;
				    return kVERSION_SCRIPT;
				  }

#line 1344 "ldlex.c"

	if ( !(yy_init) )
		{
		(yy_init) = 1;

#ifdef YY_USER_INIT
		YY_USER_INIT;
#endif

		if ( ! (yy_start) )
			(yy_start) = 1;	/* first start state */

		if ( ! ldin )
			ldin = stdin;

		if ( ! ldout )
			ldout = stdout;

		if ( ! YY_CURRENT_BUFFER ) {
			ldensure_buffer_stack ();
			YY_CURRENT_BUFFER_LVALUE =
				ld_create_buffer(ldin,YY_BUF_SIZE );
		}

		ld_load_buffer_state( );
		}

	while ( 1 )		/* loops until end-of-file is reached */
		{
		yy_cp = (yy_c_buf_p);

		/* Support of ldtext. */
		*yy_cp = (yy_hold_char);

		/* yy_bp points to the position in yy_ch_buf of the start of
		 * the current run.
		 */
		yy_bp = yy_cp;

		yy_current_state = (yy_start);
		yy_current_state += YY_AT_BOL();
yy_match:
		do
			{
			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
			if ( yy_accept[yy_current_state] )
				{
				(yy_last_accepting_state) = yy_current_state;
				(yy_last_accepting_cpos) = yy_cp;
				}
			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
				{
				yy_current_state = (int) yy_def[yy_current_state];
				if ( yy_current_state >= 219 )
					yy_c = yy_meta[(unsigned int) yy_c];
				}
			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
			++yy_cp;
			}
		while ( yy_current_state != 218 );
		yy_cp = (yy_last_accepting_cpos);
		yy_current_state = (yy_last_accepting_state);

yy_find_action:
		yy_act = yy_accept[yy_current_state];

		YY_DO_BEFORE_ACTION;

		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
			{
			yy_size_t yyl;
			for ( yyl = 0; yyl < ldleng; ++yyl )
				if ( ldtext[yyl] == '\n' )
					   
    ldlineno++;
;
			}

do_action:	/* This label is used only to access EOF actions. */

		switch ( yy_act )
	{ /* beginning of action switch */
			case 0: /* must back up */
			/* undo the effects of YY_DO_BEFORE_ACTION */
			*yy_cp = (yy_hold_char);
			yy_cp = (yy_last_accepting_cpos);
			yy_current_state = (yy_last_accepting_state);
			goto yy_find_action;

case 1:
/* rule 1 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 95 "/home/mark/src/elfutils/src/ldlex.l"
{ BEGIN (handle_ifdef ()); }
	YY_BREAK
case 2:
/* rule 2 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 96 "/home/mark/src/elfutils/src/ldlex.l"
{ eat_to_eol (true);
				  push_state (skip_to_endif);
				  BEGIN (IGNORE); }
	YY_BREAK
case 3:
/* rule 3 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 8;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 99 "/home/mark/src/elfutils/src/ldlex.l"
{ eat_to_eol (false);
				  push_state (skip_to_endif);
				  BEGIN (IGNORE); }
	YY_BREAK
case 4:
/* rule 4 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 102 "/home/mark/src/elfutils/src/ldlex.l"
{ eat_to_eol (true) ; }
	YY_BREAK
case 5:
/* rule 5 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 104 "/home/mark/src/elfutils/src/ldlex.l"
{ eat_to_eol (false);
				  push_state (skip_to_endif); }
	YY_BREAK
case 6:
/* rule 6 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 106 "/home/mark/src/elfutils/src/ldlex.l"
{ eat_to_eol (true);
				  assert (prepdepth > 0);
				  if (prepstate[prepdepth - 1] == skip_if)
				    {
				      /* Back to normal processing.  */
				      assert (prepdepth == 1);
				      BEGIN (pop_state ());
				    }
				}
	YY_BREAK
case 7:
/* rule 7 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 8;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 115 "/home/mark/src/elfutils/src/ldlex.l"
{ assert (prepdepth > 0);
				  if (prepstate[prepdepth - 1] == skip_if)
				    {
				      /* Maybe this symbol is defined.  */
				      pop_state ();
				      BEGIN (handle_ifdef ());
				    }
				}
	YY_BREAK
case 8:
/* rule 8 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 123 "/home/mark/src/elfutils/src/ldlex.l"
{ eat_to_eol (true);
				  BEGIN (pop_state ()); }
	YY_BREAK
case 9:
/* rule 9 can match eol */
YY_RULE_SETUP
#line 125 "/home/mark/src/elfutils/src/ldlex.l"
{ /* nothing */ }
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 128 "/home/mark/src/elfutils/src/ldlex.l"
{ eat_comment (); }
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 130 "/home/mark/src/elfutils/src/ldlex.l"
{ return kALIGN; }
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 131 "/home/mark/src/elfutils/src/ldlex.l"
{ return kAS_NEEDED; }
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 132 "/home/mark/src/elfutils/src/ldlex.l"
{ return kENTRY; }
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 133 "/home/mark/src/elfutils/src/ldlex.l"
{ return kEXCLUDE_FILE; }
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 134 "/home/mark/src/elfutils/src/ldlex.l"
{ return kGLOBAL; }
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 135 "/home/mark/src/elfutils/src/ldlex.l"
{ return kGROUP; }
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 136 "/home/mark/src/elfutils/src/ldlex.l"
{ return kINPUT; }
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 137 "/home/mark/src/elfutils/src/ldlex.l"
{ return kINTERP; }
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 138 "/home/mark/src/elfutils/src/ldlex.l"
{ return kKEEP; }
	YY_BREAK
case 20:
YY_RULE_SETUP
#line 139 "/home/mark/src/elfutils/src/ldlex.l"
{ return kLOCAL; }
	YY_BREAK
case 21:
YY_RULE_SETUP
#line 140 "/home/mark/src/elfutils/src/ldlex.l"
{ return kOUTPUT_FORMAT; }
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 141 "/home/mark/src/elfutils/src/ldlex.l"
{ return kPAGESIZE; }
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 142 "/home/mark/src/elfutils/src/ldlex.l"
{ return kPROVIDE; }
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 143 "/home/mark/src/elfutils/src/ldlex.l"
{ return kSEARCH_DIR; }
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 144 "/home/mark/src/elfutils/src/ldlex.l"
{ return kSEGMENT; }
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 145 "/home/mark/src/elfutils/src/ldlex.l"
{ return kSIZEOF_HEADERS; }
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 146 "/home/mark/src/elfutils/src/ldlex.l"
{ return kSORT; }
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 147 "/home/mark/src/elfutils/src/ldlex.l"
{ return kVERSION; }
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 149 "/home/mark/src/elfutils/src/ldlex.l"
{ int cnt = 1 ;
				  ldlval.num = 0;
				  while (cnt < ldleng - 1)
				    ldlval.num |= attrib_convert (ldtext[cnt++]);
				  return kMODE; }
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 155 "/home/mark/src/elfutils/src/ldlex.l"
{ return '{'; }
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 156 "/home/mark/src/elfutils/src/ldlex.l"
{ return '}'; }
	YY_BREAK
case 32:
YY_RULE_SETUP
#line 157 "/home/mark/src/elfutils/src/ldlex.l"
{ return '('; }
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 158 "/home/mark/src/elfutils/src/ldlex.l"
{ return ')'; }
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 159 "/home/mark/src/elfutils/src/ldlex.l"
{ return ':'; }
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 160 "/home/mark/src/elfutils/src/ldlex.l"
{ return ';'; }
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 161 "/home/mark/src/elfutils/src/ldlex.l"
{ return '='; }
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 162 "/home/mark/src/elfutils/src/ldlex.l"
{ ldlval.op = exp_plus; return kADD_OP; }
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 163 "/home/mark/src/elfutils/src/ldlex.l"
{ ldlval.op = exp_minus; return kADD_OP; }
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 164 "/home/mark/src/elfutils/src/ldlex.l"
{ return '*'; }
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 165 "/home/mark/src/elfutils/src/ldlex.l"
{ ldlval.op = exp_div; return kMUL_OP; }
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 166 "/home/mark/src/elfutils/src/ldlex.l"
{ ldlval.op = exp_mod; return kMUL_OP; }
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 167 "/home/mark/src/elfutils/src/ldlex.l"
{ return '&'; }
	YY_BREAK
case 43:
YY_RULE_SETUP
#line 168 "/home/mark/src/elfutils/src/ldlex.l"
{ return '|'; }
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 170 "/home/mark/src/elfutils/src/ldlex.l"
{ return ','; }
	YY_BREAK
case 45:
YY_RULE_SETUP
#line 172 "/home/mark/src/elfutils/src/ldlex.l"
{ char *endp;
				  ldlval.num = strtoumax (ldtext, &endp, 0);
				  if (*endp != '\0')
				    {
				      if (tolower (*endp) == 'k')
					ldlval.num *= 1024;
				      else
					{
					  assert (tolower (*endp) == 'm');
					  ldlval.num *= 1024 * 1024;
					}
				    }
				  return kNUM; }
	YY_BREAK
case 46:
YY_RULE_SETUP
#line 186 "/home/mark/src/elfutils/src/ldlex.l"
{ ldlval.str = obstack_strndup (&ld_state.smem,
								ldtext, ldleng);
				  return kID; }
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 190 "/home/mark/src/elfutils/src/ldlex.l"
{ ldlval.str = obstack_strndup (&ld_state.smem,
								ldtext, ldleng);
				  return kFILENAME; }
	YY_BREAK
case 48:
/* rule 48 can match eol */
YY_RULE_SETUP
#line 194 "/home/mark/src/elfutils/src/ldlex.l"
{ /* IGNORE */ }
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 196 "/home/mark/src/elfutils/src/ldlex.l"
{ invalid_char (*ldtext); }
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 198 "/home/mark/src/elfutils/src/ldlex.l"
ECHO;
	YY_BREAK
#line 1759 "ldlex.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(IGNORE):
	yyterminate();

	case YY_END_OF_BUFFER:
		{
		/* Amount of text matched not including the EOB char. */
		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;

		/* Undo the effects of YY_DO_BEFORE_ACTION. */
		*yy_cp = (yy_hold_char);
		YY_RESTORE_YY_MORE_OFFSET

		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
			{
			/* We're scanning a new file or input source.  It's
			 * possible that this happened because the user
			 * just pointed ldin at a new source and called
			 * ldlex().  If so, then we have to assure
			 * consistency between YY_CURRENT_BUFFER and our
			 * globals.  Here is the right place to do so, because
			 * this is the first action (other than possibly a
			 * back-up) that will match for the new input source.
			 */
			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
			YY_CURRENT_BUFFER_LVALUE->yy_input_file = ldin;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
			}

		/* Note that here we test for yy_c_buf_p "<=" to the position
		 * of the first EOB in the buffer, since yy_c_buf_p will
		 * already have been incremented past the NUL character
		 * (since all states make transitions on EOB to the
		 * end-of-buffer state).  Contrast this with the test
		 * in input().
		 */
		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
			{ /* This was really a NUL. */
			yy_state_type yy_next_state;

			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;

			yy_current_state = yy_get_previous_state(  );

			/* Okay, we're now positioned to make the NUL
			 * transition.  We couldn't have
			 * yy_get_previous_state() go ahead and do it
			 * for us because it doesn't know how to deal
			 * with the possibility of jamming (and we don't
			 * want to build jamming into it because then it
			 * will run more slowly).
			 */

			yy_next_state = yy_try_NUL_trans( yy_current_state );

			yy_bp = (yytext_ptr) + YY_MORE_ADJ;

			if ( yy_next_state )
				{
				/* Consume the NUL. */
				yy_cp = ++(yy_c_buf_p);
				yy_current_state = yy_next_state;
				goto yy_match;
				}

			else
				{
				yy_cp = (yy_last_accepting_cpos);
				yy_current_state = (yy_last_accepting_state);
				goto yy_find_action;
				}
			}

		else switch ( yy_get_next_buffer(  ) )
			{
			case EOB_ACT_END_OF_FILE:
				{
				(yy_did_buffer_switch_on_eof) = 0;

				if ( ldwrap( ) )
					{
					/* Note: because we've taken care in
					 * yy_get_next_buffer() to have set up
					 * ldtext, we can now set up
					 * yy_c_buf_p so that if some total
					 * hoser (like flex itself) wants to
					 * call the scanner after we return the
					 * YY_NULL, it'll still work - another
					 * YY_NULL will get returned.
					 */
					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;

					yy_act = YY_STATE_EOF(YY_START);
					goto do_action;
					}

				else
					{
					if ( ! (yy_did_buffer_switch_on_eof) )
						YY_NEW_FILE;
					}
				break;
				}

			case EOB_ACT_CONTINUE_SCAN:
				(yy_c_buf_p) =
					(yytext_ptr) + yy_amount_of_matched_text;

				yy_current_state = yy_get_previous_state(  );

				yy_cp = (yy_c_buf_p);
				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
				goto yy_match;

			case EOB_ACT_LAST_MATCH:
				(yy_c_buf_p) =
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];

				yy_current_state = yy_get_previous_state(  );

				yy_cp = (yy_c_buf_p);
				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
				goto yy_find_action;
			}
		break;
		}

	default:
		YY_FATAL_ERROR(
			"fatal flex scanner internal error--no action found" );
	} /* end of action switch */
		} /* end of scanning one token */
} /* end of ldlex */

/* yy_get_next_buffer - try to read in a new buffer
 *
 * Returns a code representing an action:
 *	EOB_ACT_LAST_MATCH -
 *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
 *	EOB_ACT_END_OF_FILE - end of file
 */
static int yy_get_next_buffer (void)
{
    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
	register char *source = (yytext_ptr);
	register int number_to_move, i;
	int ret_val;

	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
		YY_FATAL_ERROR(
		"fatal flex scanner internal error--end of buffer missed" );

	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
		{ /* Don't try to fill the buffer, so this is an EOF. */
		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
			{
			/* We matched a single character, the EOB, so
			 * treat this as a final EOF.
			 */
			return EOB_ACT_END_OF_FILE;
			}

		else
			{
			/* We matched some text prior to the EOB, first
			 * process it.
			 */
			return EOB_ACT_LAST_MATCH;
			}
		}

	/* Try to read more data. */

	/* First move last chars to start of buffer. */
	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;

	for ( i = 0; i < number_to_move; ++i )
		*(dest++) = *(source++);

	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
		/* don't do the read, it's not guaranteed to return an EOF,
		 * just force an EOF
		 */
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;

	else
		{
			yy_size_t num_to_read =
			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;

		while ( num_to_read <= 0 )
			{ /* Not enough room in the buffer - grow it. */

			/* just a shorter name for the current buffer */
			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;

			int yy_c_buf_p_offset =
				(int) ((yy_c_buf_p) - b->yy_ch_buf);

			if ( b->yy_is_our_buffer )
				{
				yy_size_t new_size = b->yy_buf_size * 2;

				if ( new_size <= 0 )
					b->yy_buf_size += b->yy_buf_size / 8;
				else
					b->yy_buf_size *= 2;

				b->yy_ch_buf = (char *)
					/* Include room in for 2 EOB chars. */
					ldrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
				}
			else
				/* Can't grow it, we don't own it. */
				b->yy_ch_buf = 0;

			if ( ! b->yy_ch_buf )
				YY_FATAL_ERROR(
				"fatal error - scanner input buffer overflow" );

			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];

			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
						number_to_move - 1;

			}

		if ( num_to_read > YY_READ_BUF_SIZE )
			num_to_read = YY_READ_BUF_SIZE;

		/* Read in more data. */
		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
			(yy_n_chars), num_to_read );

		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	if ( (yy_n_chars) == 0 )
		{
		if ( number_to_move == YY_MORE_ADJ )
			{
			ret_val = EOB_ACT_END_OF_FILE;
			ldrestart(ldin  );
			}

		else
			{
			ret_val = EOB_ACT_LAST_MATCH;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
				YY_BUFFER_EOF_PENDING;
			}
		}

	else
		ret_val = EOB_ACT_CONTINUE_SCAN;

	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
		/* Extend the array by 50%, plus the number we really need. */
		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) ldrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
	}

	(yy_n_chars) += number_to_move;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;

	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];

	return ret_val;
}

/* yy_get_previous_state - get the state just before the EOB char was reached */

    static yy_state_type yy_get_previous_state (void)
{
	register yy_state_type yy_current_state;
	register char *yy_cp;
    
	yy_current_state = (yy_start);
	yy_current_state += YY_AT_BOL();

	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
		{
		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
		if ( yy_accept[yy_current_state] )
			{
			(yy_last_accepting_state) = yy_current_state;
			(yy_last_accepting_cpos) = yy_cp;
			}
		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
			{
			yy_current_state = (int) yy_def[yy_current_state];
			if ( yy_current_state >= 219 )
				yy_c = yy_meta[(unsigned int) yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
		}

	return yy_current_state;
}

/* yy_try_NUL_trans - try to make a transition on the NUL character
 *
 * synopsis
 *	next_state = yy_try_NUL_trans( current_state );
 */
    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
{
	register int yy_is_jam;
    	register char *yy_cp = (yy_c_buf_p);

	register YY_CHAR yy_c = 1;
	if ( yy_accept[yy_current_state] )
		{
		(yy_last_accepting_state) = yy_current_state;
		(yy_last_accepting_cpos) = yy_cp;
		}
	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
		{
		yy_current_state = (int) yy_def[yy_current_state];
		if ( yy_current_state >= 219 )
			yy_c = yy_meta[(unsigned int) yy_c];
		}
	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
	yy_is_jam = (yy_current_state == 218);

		return yy_is_jam ? 0 : yy_current_state;
}

    static void yyunput (int c, register char * yy_bp )
{
	register char *yy_cp;
    
    yy_cp = (yy_c_buf_p);

	/* undo effects of setting up ldtext */
	*yy_cp = (yy_hold_char);

	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
		{ /* need to shift things up to make room */
		/* +2 for EOB chars. */
		register yy_size_t number_to_move = (yy_n_chars) + 2;
		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
		register char *source =
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];

		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			*--dest = *--source;

		yy_cp += (int) (dest - source);
		yy_bp += (int) (dest - source);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;

		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
			YY_FATAL_ERROR( "flex scanner push-back overflow" );
		}

	*--yy_cp = (char) c;

    if ( c == '\n' ){
        --ldlineno;
    }

	(yytext_ptr) = yy_bp;
	(yy_hold_char) = *yy_cp;
	(yy_c_buf_p) = yy_cp;
}

#ifndef YY_NO_INPUT
#ifdef __cplusplus
    static int yyinput (void)
#else
    static int input  (void)
#endif

{
	int c;
    
	*(yy_c_buf_p) = (yy_hold_char);

	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
		{
		/* yy_c_buf_p now points to the character we want to return.
		 * If this occurs *before* the EOB characters, then it's a
		 * valid NUL; if not, then we've hit the end of the buffer.
		 */
		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
			/* This was really a NUL. */
			*(yy_c_buf_p) = '\0';

		else
			{ /* need more input */
			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
			++(yy_c_buf_p);

			switch ( yy_get_next_buffer(  ) )
				{
				case EOB_ACT_LAST_MATCH:
					/* This happens because yy_g_n_b()
					 * sees that we've accumulated a
					 * token and flags that we need to
					 * try matching the token before
					 * proceeding.  But for input(),
					 * there's no matching to consider.
					 * So convert the EOB_ACT_LAST_MATCH
					 * to EOB_ACT_END_OF_FILE.
					 */

					/* Reset buffer status. */
					ldrestart(ldin );

					/*FALLTHROUGH*/

				case EOB_ACT_END_OF_FILE:
					{
					if ( ldwrap( ) )
						return EOF;

					if ( ! (yy_did_buffer_switch_on_eof) )
						YY_NEW_FILE;
#ifdef __cplusplus
					return yyinput();
#else
					return input();
#endif
					}

				case EOB_ACT_CONTINUE_SCAN:
					(yy_c_buf_p) = (yytext_ptr) + offset;
					break;
				}
			}
		}

	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
	*(yy_c_buf_p) = '\0';	/* preserve ldtext */
	(yy_hold_char) = *++(yy_c_buf_p);

	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
	if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )
		   
    ldlineno++;
;

	return c;
}
#endif	/* ifndef YY_NO_INPUT */

/** Immediately switch to a different input stream.
 * @param input_file A readable stream.
 * 
 * @note This function does not reset the start condition to @c INITIAL .
 */
    void ldrestart  (FILE * input_file )
{
    
	if ( ! YY_CURRENT_BUFFER ){
        ldensure_buffer_stack ();
		YY_CURRENT_BUFFER_LVALUE =
            ld_create_buffer(ldin,YY_BUF_SIZE );
	}

	ld_init_buffer(YY_CURRENT_BUFFER,input_file );
	ld_load_buffer_state( );
}

/** Switch to a different input buffer.
 * @param new_buffer The new input buffer.
 * 
 */
    void ld_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
{
    
	/* TODO. We should be able to replace this entire function body
	 * with
	 *		ldpop_buffer_state();
	 *		ldpush_buffer_state(new_buffer);
     */
	ldensure_buffer_stack ();
	if ( YY_CURRENT_BUFFER == new_buffer )
		return;

	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*(yy_c_buf_p) = (yy_hold_char);
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	YY_CURRENT_BUFFER_LVALUE = new_buffer;
	ld_load_buffer_state( );

	/* We don't actually know whether we did this switch during
	 * EOF (ldwrap()) processing, but the only time this flag
	 * is looked at is after ldwrap() is called, so it's safe
	 * to go ahead and always set it.
	 */
	(yy_did_buffer_switch_on_eof) = 1;
}

static void ld_load_buffer_state  (void)
{
    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
	ldin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
	(yy_hold_char) = *(yy_c_buf_p);
}

/** Allocate and initialize an input buffer state.
 * @param file A readable stream.
 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
 * 
 * @return the allocated buffer state.
 */
    YY_BUFFER_STATE ld_create_buffer  (FILE * file, int  size )
{
	YY_BUFFER_STATE b;
    
	b = (YY_BUFFER_STATE) ldalloc(sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in ld_create_buffer()" );

	b->yy_buf_size = size;

	/* yy_ch_buf has to be 2 characters longer than the size given because
	 * we need to put in 2 end-of-buffer characters.
	 */
	b->yy_ch_buf = (char *) ldalloc(b->yy_buf_size + 2  );
	if ( ! b->yy_ch_buf )
		YY_FATAL_ERROR( "out of dynamic memory in ld_create_buffer()" );

	b->yy_is_our_buffer = 1;

	ld_init_buffer(b,file );

	return b;
}

/** Destroy the buffer.
 * @param b a buffer created with ld_create_buffer()
 * 
 */
    void ld_delete_buffer (YY_BUFFER_STATE  b )
{
    
	if ( ! b )
		return;

	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;

	if ( b->yy_is_our_buffer )
		ldfree((void *) b->yy_ch_buf  );

	ldfree((void *) b  );
}

/* Initializes or reinitializes a buffer.
 * This function is sometimes called more than once on the same buffer,
 * such as during a ldrestart() or at EOF.
 */
    static void ld_init_buffer  (YY_BUFFER_STATE  b, FILE * file )

{
	int oerrno = errno;
    
	ld_flush_buffer(b );

	b->yy_input_file = file;
	b->yy_fill_buffer = 1;

    /* If b is the current buffer, then ld_init_buffer was _probably_
     * called from ldrestart() or through yy_get_next_buffer.
     * In that case, we don't want to reset the lineno or column.
     */
    if (b != YY_CURRENT_BUFFER){
        b->yy_bs_lineno = 1;
        b->yy_bs_column = 0;
    }

        b->yy_is_interactive = 0;
    
	errno = oerrno;
}

/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
 * 
 */
    void ld_flush_buffer (YY_BUFFER_STATE  b )
{
    	if ( ! b )
		return;

	b->yy_n_chars = 0;

	/* We always need two end-of-buffer characters.  The first causes
	 * a transition to the end-of-buffer state.  The second causes
	 * a jam in that state.
	 */
	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;

	b->yy_buf_pos = &b->yy_ch_buf[0];

	b->yy_at_bol = 1;
	b->yy_buffer_status = YY_BUFFER_NEW;

	if ( b == YY_CURRENT_BUFFER )
		ld_load_buffer_state( );
}

/** Pushes the new state onto the stack. The new state becomes
 *  the current state. This function will allocate the stack
 *  if necessary.
 *  @param new_buffer The new state.
 *  
 */
void ldpush_buffer_state (YY_BUFFER_STATE new_buffer )
{
    	if (new_buffer == NULL)
		return;

	ldensure_buffer_stack();

	/* This block is copied from ld_switch_to_buffer. */
	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*(yy_c_buf_p) = (yy_hold_char);
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	/* Only push if top exists. Otherwise, replace top. */
	if (YY_CURRENT_BUFFER)
		(yy_buffer_stack_top)++;
	YY_CURRENT_BUFFER_LVALUE = new_buffer;

	/* copied from ld_switch_to_buffer. */
	ld_load_buffer_state( );
	(yy_did_buffer_switch_on_eof) = 1;
}

/** Removes and deletes the top of the stack, if present.
 *  The next element becomes the new top.
 *  
 */
void ldpop_buffer_state (void)
{
    	if (!YY_CURRENT_BUFFER)
		return;

	ld_delete_buffer(YY_CURRENT_BUFFER );
	YY_CURRENT_BUFFER_LVALUE = NULL;
	if ((yy_buffer_stack_top) > 0)
		--(yy_buffer_stack_top);

	if (YY_CURRENT_BUFFER) {
		ld_load_buffer_state( );
		(yy_did_buffer_switch_on_eof) = 1;
	}
}

/* Allocates the stack if it does not exist.
 *  Guarantees space for at least one push.
 */
static void ldensure_buffer_stack (void)
{
	yy_size_t num_to_alloc;
    
	if (!(yy_buffer_stack)) {

		/* First allocation is just for 2 elements, since we don't know if this
		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
		 * immediate realloc on the next call.
         */
		num_to_alloc = 1;
		(yy_buffer_stack) = (struct yy_buffer_state**)ldalloc
								(num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in ldensure_buffer_stack()" );
								  
		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
				
		(yy_buffer_stack_max) = num_to_alloc;
		(yy_buffer_stack_top) = 0;
		return;
	}

	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){

		/* Increase the buffer to prepare for a possible push. */
		int grow_size = 8 /* arbitrary grow size */;

		num_to_alloc = (yy_buffer_stack_max) + grow_size;
		(yy_buffer_stack) = (struct yy_buffer_state**)ldrealloc
								((yy_buffer_stack),
								num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in ldensure_buffer_stack()" );

		/* zero only the new slots.*/
		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
		(yy_buffer_stack_max) = num_to_alloc;
	}
}

/** Setup the input buffer state to scan directly from a user-specified character buffer.
 * @param base the character buffer
 * @param size the size in bytes of the character buffer
 * 
 * @return the newly allocated buffer state object. 
 */
YY_BUFFER_STATE ld_scan_buffer  (char * base, yy_size_t  size )
{
	YY_BUFFER_STATE b;
    
	if ( size < 2 ||
	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
	     base[size-1] != YY_END_OF_BUFFER_CHAR )
		/* They forgot to leave room for the EOB's. */
		return 0;

	b = (YY_BUFFER_STATE) ldalloc(sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in ld_scan_buffer()" );

	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
	b->yy_buf_pos = b->yy_ch_buf = base;
	b->yy_is_our_buffer = 0;
	b->yy_input_file = 0;
	b->yy_n_chars = b->yy_buf_size;
	b->yy_is_interactive = 0;
	b->yy_at_bol = 1;
	b->yy_fill_buffer = 0;
	b->yy_buffer_status = YY_BUFFER_NEW;

	ld_switch_to_buffer(b  );

	return b;
}

/** Setup the input buffer state to scan a string. The next call to ldlex() will
 * scan from a @e copy of @a str.
 * @param yystr a NUL-terminated string to scan
 * 
 * @return the newly allocated buffer state object.
 * @note If you want to scan bytes that may contain NUL values, then use
 *       ld_scan_bytes() instead.
 */
YY_BUFFER_STATE ld_scan_string (yyconst char * yystr )
{
    
	return ld_scan_bytes(yystr,strlen(yystr) );
}

/** Setup the input buffer state to scan the given bytes. The next call to ldlex() will
 * scan from a @e copy of @a bytes.
 * @param yybytes the byte buffer to scan
 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
 * 
 * @return the newly allocated buffer state object.
 */
YY_BUFFER_STATE ld_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n;
	yy_size_t i;
    
	/* Get memory for full buffer, including space for trailing EOB's. */
	n = _yybytes_len + 2;
	buf = (char *) ldalloc(n  );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in ld_scan_bytes()" );

	for ( i = 0; i < _yybytes_len; ++i )
		buf[i] = yybytes[i];

	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;

	b = ld_scan_buffer(buf,n );
	if ( ! b )
		YY_FATAL_ERROR( "bad buffer in ld_scan_bytes()" );

	/* It's okay to grow etc. this buffer, and we should throw it
	 * away when we're done.
	 */
	b->yy_is_our_buffer = 1;

	return b;
}

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

static void yy_fatal_error (yyconst char* msg )
{
    	(void) fprintf( stderr, "%s\n", msg );
	exit( YY_EXIT_FAILURE );
}

/* Redefine yyless() so it works in section 3 code. */

#undef yyless
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up ldtext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		ldtext[ldleng] = (yy_hold_char); \
		(yy_c_buf_p) = ldtext + yyless_macro_arg; \
		(yy_hold_char) = *(yy_c_buf_p); \
		*(yy_c_buf_p) = '\0'; \
		ldleng = yyless_macro_arg; \
		} \
	while ( 0 )

/* Accessor  methods (get/set functions) to struct members. */

/** Get the current line number.
 * 
 */
int ldget_lineno  (void)
{
        
    return ldlineno;
}

/** Get the input stream.
 * 
 */
FILE *ldget_in  (void)
{
        return ldin;
}

/** Get the output stream.
 * 
 */
FILE *ldget_out  (void)
{
        return ldout;
}

/** Get the length of the current token.
 * 
 */
yy_size_t ldget_leng  (void)
{
        return ldleng;
}

/** Get the current token.
 * 
 */

char *ldget_text  (void)
{
        return ldtext;
}

/** Set the current line number.
 * @param line_number
 * 
 */
void ldset_lineno (int  line_number )
{
    
    ldlineno = line_number;
}

/** Set the input stream. This does not discard the current
 * input buffer.
 * @param in_str A readable stream.
 * 
 * @see ld_switch_to_buffer
 */
void ldset_in (FILE *  in_str )
{
        ldin = in_str ;
}

void ldset_out (FILE *  out_str )
{
        ldout = out_str ;
}

int ldget_debug  (void)
{
        return ld_flex_debug;
}

void ldset_debug (int  bdebug )
{
        ld_flex_debug = bdebug ;
}

static int yy_init_globals (void)
{
        /* Initialization is the same as for the non-reentrant scanner.
     * This function is called from ldlex_destroy(), so don't allocate here.
     */

    /* We do not touch ldlineno unless the option is enabled. */
    ldlineno =  1;
    
    (yy_buffer_stack) = 0;
    (yy_buffer_stack_top) = 0;
    (yy_buffer_stack_max) = 0;
    (yy_c_buf_p) = (char *) 0;
    (yy_init) = 0;
    (yy_start) = 0;

/* Defined in main.c */
#ifdef YY_STDINIT
    ldin = stdin;
    ldout = stdout;
#else
    ldin = (FILE *) 0;
    ldout = (FILE *) 0;
#endif

    /* For future reference: Set errno on error, since we are called by
     * ldlex_init()
     */
    return 0;
}

/* ldlex_destroy is for both reentrant and non-reentrant scanners. */
int ldlex_destroy  (void)
{
    
    /* Pop the buffer stack, destroying each element. */
	while(YY_CURRENT_BUFFER){
		ld_delete_buffer(YY_CURRENT_BUFFER  );
		YY_CURRENT_BUFFER_LVALUE = NULL;
		ldpop_buffer_state();
	}

	/* Destroy the stack itself. */
	ldfree((yy_buffer_stack) );
	(yy_buffer_stack) = NULL;

    /* Reset the globals. This is important in a non-reentrant scanner so the next time
     * ldlex() is called, initialization will occur. */
    yy_init_globals( );

    return 0;
}

/*
 * Internal utility routines.
 */

#ifndef yytext_ptr
static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
{
	register int i;
	for ( i = 0; i < n; ++i )
		s1[i] = s2[i];
}
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * s )
{
	register int n;
	for ( n = 0; s[n]; ++n )
		;

	return n;
}
#endif

void *ldalloc (yy_size_t  size )
{
	return (void *) malloc( size );
}

void *ldrealloc  (void * ptr, yy_size_t  size )
{
	/* The cast to (char *) in the following accommodates both
	 * implementations that use char* generic pointers, and those
	 * that use void* generic pointers.  It works with the latter
	 * because both ANSI C and C++ allow castless assignment from
	 * any pointer type to void*, and deal with argument conversions
	 * as though doing an assignment.
	 */
	return (void *) realloc( (char *) ptr, size );
}

void ldfree (void * ptr )
{
	free( (char *) ptr );	/* see ldrealloc() for (char *) cast */
}

#define YYTABLES_NAME "yytables"

#line 198 "/home/mark/src/elfutils/src/ldlex.l"



static void
eat_comment (void)
{
  while (1)
    {
      int c = input ();

      while (c != '*' && c != EOF)
	c = input ();

      if (c == '*')
	{
	  c = input ();
	  while (c == '*')
	    c = input ();
	  if (c == '/')
	    break;
	}

      if (c == EOF)
	{
	  /* XXX Use the setjmp buffer and signal EOF in comment */
	  error (0, 0, gettext ("EOF in comment"));
	  break;
	}
    }
}


static void
eat_to_eol (bool empty)
{
  bool warned = false;

  while (1)
    {
      int c = input ();

      if (c == EOF)
	break;
      if (c == '\n')
	{
	  ++ldlineno;
	  break;
	}

      if (empty && ! isspace (c) && ! warned)
	{
	  error (0, 0, gettext ("%d: garbage at end of line"), ldlineno);
	  warned = true;
	}
    }
}


static int
attrib_convert (int c)
{
  if (c == 'X')
    return PF_X;
  if (c == 'W')
    return PF_W;
  assert (c == 'R');
  return PF_R;
}


static void
push_state (enum prepstate state)
{
  if (prepdepth >= MAX_PREPDEPTH)
    error (EXIT_FAILURE, 0, gettext ("%d: conditionals nested too deep"),
	   ldlineno);

  prepstate[prepdepth++] = state;
}


static int
pop_state (void)
{
  if (prepdepth == 0)
    error (0, 0, gettext ("%d: unexpected #endif"), ldlineno);
  else
    --prepdepth;

  return prepdepth == 0 ? INITIAL : IGNORE;
}


static int
handle_ifdef (void)
{
  char idbuf[50];
  char *id = idbuf;
  size_t idlen = 0;
  size_t idmax = sizeof (idbuf);
  bool ignore_ws = true;
  bool defined = false;
  int result;

  while (1)
    {
      int c = input ();

      if (isspace (c) && ignore_ws)
	continue;

      if (c != '_' && (c < 'a' || c > 'z') && (c < 'A' || c > 'Z')
	  && (idlen == 0 || c < '0' || c > '9'))
	{
	  unput (c);
	  break;
	}

      if (idlen == idmax)
	{
	  char *newp = (char *) alloca (idmax *= 2);
	  id = memcpy (newp, id, idlen);
	}

      id[idlen++] = c;
      ignore_ws = false;
    }

  /* XXX Compare in a better way.  */
  if (idlen == 6 && strncmp (id, "SHARED", 6) == 0)
    defined = ld_state.file_type == dso_file_type;

  if (defined)
    result = INITIAL;
  else
    {
      push_state (skip_if);
      result = IGNORE;
    }

  return result;
}


static void
invalid_char (int ch)
{
  error (0, 0, (isascii (ch)
		? gettext ("invalid character '%c' at line %d; ignored")
		: gettext ("invalid character '\\%o' at line %d; ignored")),
	 ch, ldlineno);
}


// Local Variables:
// mode: C
// End:

