#line 3 "<stdout>"

#define  YY_INT_ALIGNED short int

/* A lexical scanner generated by flex */

#define yy_create_buffer commentscanYY_create_buffer
#define yy_delete_buffer commentscanYY_delete_buffer
#define yy_flex_debug commentscanYY_flex_debug
#define yy_init_buffer commentscanYY_init_buffer
#define yy_flush_buffer commentscanYY_flush_buffer
#define yy_load_buffer_state commentscanYY_load_buffer_state
#define yy_switch_to_buffer commentscanYY_switch_to_buffer
#define yyin commentscanYYin
#define yyleng commentscanYYleng
#define yylex commentscanYYlex
#define yylineno commentscanYYlineno
#define yyout commentscanYYout
#define yyrestart commentscanYYrestart
#define yytext commentscanYYtext
#define yywrap commentscanYYwrap
#define yyalloc commentscanYYalloc
#define yyrealloc commentscanYYrealloc
#define yyfree commentscanYYfree

#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 commentscanYYrestart(commentscanYYin  )

#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
#define YY_BUF_SIZE 262144
#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 commentscanYYleng;

extern FILE *commentscanYYin, *commentscanYYout;

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

    #define YY_LESS_LINENO(n)
    
/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up commentscanYYtext. */ \
        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 commentscanYYtext 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 commentscanYYrestart()), so that the user can continue scanning by
	 * just pointing commentscanYYin 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 commentscanYYtext 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 commentscanYYleng;

/* 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 commentscanYYwrap()'s to do buffer switches
 * instead of setting up a fresh commentscanYYin.  A bit of a hack ...
 */
static int yy_did_buffer_switch_on_eof;

void commentscanYYrestart (FILE *input_file  );
void commentscanYY_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
YY_BUFFER_STATE commentscanYY_create_buffer (FILE *file,int size  );
void commentscanYY_delete_buffer (YY_BUFFER_STATE b  );
void commentscanYY_flush_buffer (YY_BUFFER_STATE b  );
void commentscanYYpush_buffer_state (YY_BUFFER_STATE new_buffer  );
void commentscanYYpop_buffer_state (void );

static void commentscanYYensure_buffer_stack (void );
static void commentscanYY_load_buffer_state (void );
static void commentscanYY_init_buffer (YY_BUFFER_STATE b,FILE *file  );

#define YY_FLUSH_BUFFER commentscanYY_flush_buffer(YY_CURRENT_BUFFER )

YY_BUFFER_STATE commentscanYY_scan_buffer (char *base,yy_size_t size  );
YY_BUFFER_STATE commentscanYY_scan_string (yyconst char *yy_str  );
YY_BUFFER_STATE commentscanYY_scan_bytes (yyconst char *bytes,yy_size_t len  );

void *commentscanYYalloc (yy_size_t  );
void *commentscanYYrealloc (void *,yy_size_t  );
void commentscanYYfree (void *  );

#define yy_new_buffer commentscanYY_create_buffer

#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){ \
        commentscanYYensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            commentscanYY_create_buffer(commentscanYYin,YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
	}

#define yy_set_bol(at_bol) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){\
        commentscanYYensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            commentscanYY_create_buffer(commentscanYYin,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 commentscanYYwrap() 1
#define YY_SKIP_YYWRAP

typedef unsigned char YY_CHAR;

FILE *commentscanYYin = (FILE *) 0, *commentscanYYout = (FILE *) 0;

typedef int yy_state_type;

extern int commentscanYYlineno;

int commentscanYYlineno = 1;

extern char *commentscanYYtext;
#define yytext_ptr commentscanYYtext

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 commentscanYYtext.
 */
#define YY_DO_BEFORE_ACTION \
	(yytext_ptr) = yy_bp; \
	commentscanYYleng = (size_t) (yy_cp - yy_bp); \
	(yy_hold_char) = *yy_cp; \
	*yy_cp = '\0'; \
	(yy_c_buf_p) = yy_cp;

#define YY_NUM_RULES 202
#define YY_END_OF_BUFFER 203
/* 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_acclist[807] =
    {   0,
       77,   77,  121,  121,  134,  134,  149,  149,  193,  193,
      140,  140,  203,  202,   44,  202,   44,  202,   43,  202,
       44,  202,   44,  202,   44,  202,   44,  202,   42,   44,
      202,   44,  202,   44,  202,   27,   44,  202,   44,  202,
       44,  202,   44,  202,   44,  202,   44,  202,   42,   44,
      202,   44,  202,   44,  202,   90,  202,   89,  202,   90,
      202,   87,   90,  202,   90,  202,   90,  202,  202,   91,
      202,  111,  202,  110,  202,  111,  202,  108,  111,  202,
      111,  202,   72,  202,   72,  202,   71,  202,   72,  202,
       72,  202,   72,  202,   68,   72,  202,   72,  202,   72,

      202,   76,  202,   75,  202,   76,  202,   73,   76,  202,
       76,  202,   76,  202,   76,  202,   80,  202,   79,  202,
       77,   80,  202,   77,   80,  202,   80,  202,   77,   80,
      202,   77,   80,  202,   80,  202,   72,  202,   71,  202,
       72,  202,   72,  202,   72,  202,   72,  202,   72,  202,
       99,  202,   98,  202,   96,   99,  202,   99,  202,  103,
      202,  102,  202,  103,  202,  103,  202,  107,  202,  106,
      202,  107,  202,  107,  202,   95,  202,   92,  202,   95,
      202,   93,   95,  202,   95,  202,   95,  202,   58,  202,
       57,  202,   58,  202,   55,   58,  202,   58,  202,   62,

      202,   62,  202,   61,  202,   62,  202,   62,  202,   62,
      202,   59,   62,  202,   62,  202,   62,  202,   66,  202,
       65,  202,   66,  202,   63,   66,  202,   66,  202,   83,
      202,   81,  202,  202,   85,  202,   86,  202,  202,  117,
      202,  116,  202,  115,  117,  202,  117,  202,  121,  124,
      202,  118,  202,  121,  124,  202,  124,  202,  124,  202,
      126,  202,  125,  202,  202,  129,  202,  129,  202,  127,
      202,  129,  202,  129,  202,  134,  138,  202,  135,  202,
      138,  202,  138,  202,  138,  202,  138,  202,  138,  202,
      114,  202,  112,  202,  114,  202,  147,  202,  145,  202,

      139,  147,  202,  144,  147,  202,  147,  202,  150,  202,
      149,  150,  202,  148,  202,  150,  202,  157,  158,  202,
      156,  202,  158,  202,  158,  202,  158,  202,  168,  169,
      202,  159,  202,  169,  202,  169,  202,  169,  202,  172,
      202,  170,  202,  172,  202,  176,  202,  174,  202,  173,
      176,  202,  176,  202,  179,  182,  202,  177,  202,  180,
      182,  202,  181,  182,  202,  182,  202,  182,  202,  185,
      202,  183,  202,  185,  202,  188,  202,  187,  202,  188,
      202,  186,  188,  202,  188,  202,  191,  202,  190,  202,
      191,  202,  189,  191,  202,  191,  202,   52,   54,  202,

       53,  202,   54,  202,   54,  202,  132,  202,  131,  202,
      130,  132,  202,  132,  202,   47,   48,  202,   46,  202,
       48,  202,   48,  202,  193,  195,  202,  194,  202,  195,
      202,  195,  202,  195,  202,  198,  202,  197,  202,  196,
      198,  202,  198,  202,  200,  201,  202,  199,  202,  201,
      202,  140,  202,  140,  143,  202,  141,  202,  142,  202,
       41,    4,   34,   36,   38,   36,   26,   26,   18,   26,
       18,   18,   18,   18,   18,   18,   24,   25,   20,   26,
       27,   18,   18,   18,   18,   18,   18,   18,   18,   30,
       31,   34,   28,   87,   87,   88,   87,   91,  108,  108,

      109,   68,   68,   70,   68,   73,   73,   74,   73,   77,
       77,   77,   77,   77,   77,   78,   77,   96,   97,  100,
      101,  105,  104,  105,   93,   93,   94,   93,   55,   55,
       55,   56,   59,   59,   60,   59,   63,   63,   64,   81,
       82,   85,   84,  115,  121,  118,  121,  123,  123,  120,
      125,  128,  134,  137,  136,  113,  144,  146,  149,  148,
      157,  168,  171,  173,  175,  179,  178,  184,  186,  186,
      189,  189,   52,  130,   47,  193,  192,  196,  200,  140,
       26,   35,   33,   40,   36,   40,   40,   40,   36,   40,
       40,   37,    7,    1,    1,    2,   18,   18,   18,   18,

       22,   23,   18,   18,   18,   20,    5,   18,   18,   18,
       18,   18,   18,   18,   32,   33,   29,   87,   87,   68,
       73,   73,   77,   77,   77,   93,   93,   55,   55,   55,
       55,   59,   63,  122,   49,   50,   51,   45,  192,   40,
       40,   16,    1,   19,    2, 8198,   18,16390,   18,   18,
       18,   18,   18,   18, 8198,   18,16390,   18,   18,   18,
       18,   18,   87,   67,   73,   77,   77,   69,   93,   55,
       55,   55,   63,  122,  152,  160,   45,   15,   39,    7,
       13, 8198, 8198,   18,   18,   18,   21,   18,   18,    5,
     8198,   18,   18,   18,   87,   73,   77,   93,    3,   14,

        8,   18,   18,   21,   18,   18,   18,   18,   18,   87,
       73,   77,   93,   81,  154,  162,   18,   18,   18,   18,
       18,   18,   18,   87,   73,   77,   93,  153,  151,  161,
       18,   18,   18,   18,   18,   18,   18,   87,   89,  110,
       71,   73,   75,   77,   79,   98,  102,  106,   92,   93,
       57,   61,   65,   83,   86,  116,  119,  126,  127,  133,
      135,  112,  145,  155,  156,  159,  170,  174,  177,  183,
      187,  190,  131,   46,  194,  197,  199,   10,    9,   18,
       18,   18,    5,   18,   18,  163,   12,   11,   18,   18,
       18,   18,   18,   18,  166,   17,   18,   17,   18,  167,

      164,   17,   18,  167,  165,   41
    } ;

static yyconst flex_int16_t yy_accept[1168] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    2,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    4,
        5,    5,    5,    5,    5,    6,    7,    7,    7,    7,
        7,    8,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,   10,   11,   11,
       11,   11,   11,   12,   13,   14,   15,   17,   19,   21,
       23,   25,   27,   29,   32,   34,   36,   39,   41,   43,

       45,   47,   49,   52,   54,   56,   58,   60,   62,   65,
       67,   69,   70,   72,   74,   76,   78,   81,   83,   85,
       87,   89,   91,   93,   95,   98,  100,  102,  104,  106,
      108,  111,  113,  115,  117,  119,  121,  124,  127,  129,
      132,  135,  137,  139,  141,  143,  145,  147,  149,  151,
      153,  155,  158,  160,  162,  164,  166,  168,  170,  172,
      174,  176,  178,  180,  182,  185,  187,  189,  191,  193,
      195,  198,  200,  202,  204,  206,  208,  210,  212,  215,
      217,  219,  221,  223,  225,  228,  230,  232,  234,  235,
      237,  239,  240,  242,  244,  247,  249,  252,  254,  257,

      259,  261,  263,  265,  266,  268,  270,  272,  274,  276,
      279,  281,  283,  285,  287,  289,  291,  293,  295,  297,
      299,  301,  304,  307,  309,  311,  314,  316,  318,  321,
      323,  325,  327,  329,  332,  334,  336,  338,  340,  342,
      344,  346,  348,  350,  353,  355,  358,  360,  363,  366,
      368,  370,  372,  374,  376,  378,  380,  382,  385,  387,
      389,  391,  393,  396,  398,  401,  403,  405,  407,  409,
      411,  414,  416,  419,  421,  423,  425,  428,  430,  432,
      434,  436,  438,  440,  443,  445,  448,  450,  452,  454,
      457,  459,  461,  461,  461,  461,  461,  462,  462,  462,

      463,  463,  463,  463,  463,  463,  464,  465,  466,  466,
      467,  467,  467,  467,  467,  467,  467,  467,  467,  467,
      467,  467,  467,  467,  468,  469,  470,  471,  472,  473,
      474,  475,  476,  477,  478,  479,  481,  482,  483,  484,
      485,  486,  487,  488,  489,  490,  490,  490,  490,  490,
      490,  490,  491,  492,  493,  493,  494,  494,  494,  494,
      494,  494,  495,  496,  496,  496,  496,  497,  498,  498,
      499,  500,  500,  501,  501,  501,  502,  502,  502,  502,
      502,  502,  503,  503,  503,  504,  504,  504,  505,  505,
      505,  505,  506,  506,  507,  508,  508,  508,  508,  509,

      510,  510,  511,  512,  512,  513,  514,  515,  515,  515,
      516,  516,  517,  518,  518,  518,  518,  518,  518,  518,
      518,  518,  518,  518,  518,  518,  518,  519,  519,  520,
      520,  520,  521,  521,  523,  523,  523,  524,  524,  525,
      525,  525,  526,  527,  527,  527,  527,  528,  529,  530,
      530,  530,  531,  531,  532,  532,  533,  533,  533,  533,
      533,  533,  534,  534,  534,  535,  535,  536,  536,  536,
      536,  537,  538,  538,  539,  539,  540,  540,  541,  541,
      541,  542,  542,  543,  543,  544,  544,  545,  545,  546,
      547,  548,  548,  549,  550,  550,  551,  551,  552,  552,

      552,  552,  552,  553,  553,  554,  555,  556,  556,  556,
      556,  557,  557,  558,  558,  559,  559,  560,  561,  561,
      561,  562,  562,  562,  562,  563,  563,  563,  563,  563,
      563,  563,  564,  564,  565,  565,  566,  566,  567,  567,
      568,  568,  568,  569,  569,  570,  570,  571,  571,  571,
      572,  572,  573,  573,  573,  574,  574,  574,  575,  575,
      576,  576,  576,  577,  578,  578,  579,  579,  580,  580,
      581,  582,  582,  582,  582,  582,  583,  584,  585,  587,
      588,  589,  591,  592,  593,  593,  593,  593,  593,  593,
      593,  593,  593,  594,  594,  594,  594,  594,  594,  595,

      596,  597,  598,  599,  600,  601,  602,  603,  603,  604,
      605,  606,  607,  608,  609,  610,  611,  612,  613,  614,
      615,  615,  615,  615,  615,  616,  617,  617,  618,  619,
      619,  620,  620,  620,  620,  620,  620,  621,  622,  622,
      623,  624,  624,  625,  625,  626,  626,  626,  626,  626,
      626,  626,  627,  627,  628,  629,  630,  631,  632,  632,
      632,  633,  633,  634,  634,  634,  634,  634,  634,  634,
      635,  635,  635,  635,  635,  635,  635,  635,  635,  635,
      635,  635,  635,  635,  635,  635,  635,  635,  635,  635,
      635,  635,  635,  635,  635,  635,  635,  636,  637,  638,

      638,  638,  639,  639,  640,  640,  640,  640,  640,  640,
      640,  640,  641,  642,  643,  643,  643,  643,  643,  643,
      643,  643,  643,  643,  643,  643,  644,  645,  646,  649,
      650,  651,  651,  652,  653,  654,  654,  655,  658,  659,
      660,  661,  662,  663,  663,  663,  663,  664,  664,  664,
      665,  665,  665,  666,  667,  667,  668,  669,  669,  669,
      669,  670,  670,  671,  672,  673,  673,  673,  674,  674,
      674,  674,  674,  674,  675,  675,  675,  675,  675,  675,
      675,  675,  675,  675,  675,  676,  676,  676,  676,  677,
      677,  677,  677,  677,  677,  677,  677,  677,  677,  677,

      677,  677,  678,  678,  678,  678,  678,  678,  679,  679,
      679,  680,  680,  680,  680,  680,  680,  682,  682,  682,
      682,  683,  685,  686,  687,  688,  689,  690,  692,  693,
      694,  695,  695,  696,  696,  696,  697,  698,  698,  698,
      698,  699,  699,  699,  699,  699,  699,  699,  699,  699,
      699,  699,  699,  699,  699,  699,  699,  699,  699,  699,
      699,  699,  699,  699,  699,  699,  699,  699,  699,  699,
      699,  699,  699,  699,  699,  699,  699,  699,  699,  699,
      699,  699,  699,  699,  699,  699,  699,  700,  701,  701,
      701,  701,  702,  702,  702,  702,  702,  703,  704,  705,

      706,  707,  708,  709,  710,  711,  711,  711,  712,  713,
      713,  713,  713,  714,  714,  714,  714,  714,  714,  715,
      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
      715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
      716,  716,  716,  716,  716,  717,  717,  717,  717,  717,
      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
      717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
      717,  718,  719,  720,  721,  722,  723,  724,  725,  725,
      725,  726,  727,  727,  727,  727,  728,  728,  728,  728,
      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,

      728,  728,  728,  728,  728,  728,  728,  728,  728,  728,
      728,  729,  730,  730,  730,  731,  731,  731,  731,  731,
      731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
      731,  731,  731,  731,  731,  731,  731,  732,  733,  734,
      735,  736,  737,  738,  740,  741,  742,  744,  746,  747,
      748,  749,  751,  752,  753,  754,  755,  756,  757,  758,
      759,  760,  760,  761,  761,  761,  761,  761,  761,  761,
      761,  762,  763,  764,  765,  766,  766,  766,  766,  766,
      766,  767,  768,  769,  770,  771,  772,  773,  774,  775,
      776,  777,  778,  778,  778,  779,  780,  781,  782,  783,

      784,  785,  786,  786,  786,  786,  786,  786,  786,  786,
      786,  786,  786,  787,  787,  787,  788,  789,  790,  791,
      791,  792,  793,  793,  793,  793,  793,  793,  793,  793,
      793,  793,  793,  793,  793,  794,  794,  795,  795,  795,
      795,  795,  795,  795,  796,  796,  796,  798,  798,  800,
      800,  800,  801,  802,  802,  804,  804,  804,  805,  805,
      805,  805,  805,  805,  806,  807,  807
    } ;

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

       51,   52,   53,   54,   55,   32,   56,   57,   58,   59,
       60,   61,   32,   62,   63,   64,   65,   66,   67,   68,
       69,   32,   70,   71,   72,   73,    1,   74,   74,   74,
       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,

       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
       74,   74,   74,   74,   74
    } ;

static yyconst flex_int32_t yy_meta[75] =
    {   0,
        1,    2,    3,    4,    5,    1,    6,    7,    8,    9,
        7,   10,   11,   12,   13,   14,   15,   16,   17,   18,
       18,   18,   19,   20,   21,   22,   23,   23,   23,   23,
       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
       23,   23,    1,   24,    1,   25,   23,   23,   23,   23,
       23,   23,   23,   23,   26,   23,   23,   23,   27,   23,
       23,   23,   23,   23,   23,   23,   23,   23,   23,   28,
       29,   30,   31,   32
    } ;

static yyconst flex_int16_t yy_base[1396] =
    {   0,
        0,    0,    0,   73,  144,  217, 5206, 5205,  290,    0,
      364,    0,  438,  511,  584,  657,  730,    0,  804,    0,
       73,   74,   76,   79,  878,  951, 1024,    0, 1098,    0,
     1172,    0, 1246,    0,   86,   89, 1320,    0,   90,   95,
     1394,    0,  108,  122,  156,  229,   82,   94, 1468, 1542,
      169,  181,   96,  202,  242,  450,   99,  111, 1616,    0,
      241,  446,  129,  132, 1690,    0, 1764,    0,  443,  462,
      463,  475, 1838,    0,  162,  193,  519,  523, 1912,    0,
      133,  134,  178,  182, 5176, 9736, 9736,  526,  206, 5165,
     5162, 5144,  248,  525, 1981, 2039,  453, 2105, 2177,  103,

      542,  608,  681,  257,  475, 9736, 9736, 5162,  240,  555,
      922, 5159, 9736, 9736, 9736,    0,   89,  555, 9736,  615,
      619,  908, 1496, 5138,  685,  559,  267, 9736, 9736, 5148,
      621,  628, 5128, 1557, 9736, 9736, 2248,  964, 1565, 1983,
     9736, 2049,  975,  997, 1989, 2115, 5129, 1504,  708, 9736,
     9736,    0,  647, 9736, 9736, 5144,  913, 9736, 9736, 5143,
      927, 9736, 9736, 5142,  967, 1555, 2079, 9736, 9736,    0,
     2138, 1483, 9736, 2035, 2162, 2202, 2210, 5095, 2233, 1518,
      717, 9736, 9736,    0, 5096, 1531, 9736, 5095, 2023,    0,
     9736, 2075, 9736, 9736,    0, 5066,  488, 9736, 5067, 2221,

     2143, 9736,    0, 5061, 9736,  196, 9736, 5098, 5058,    0,
     9736, 9736, 5084, 5088, 5050,  146, 9736, 9736, 2181, 9736,
     9736, 9736,    0, 2238, 9736,  609, 9736, 5054,    0, 9736,
     9736,  409,  449,    0, 9736, 9736,  442, 1543, 9736, 9736,
     2276, 9736, 9736,    0, 2283,    0, 9736, 9736, 9736, 9736,
     2293, 9736, 9736, 2297, 9736, 9736,    0,  181, 5053, 9736,
     9736,    0,  234, 5052,    0, 9736, 5045, 5044, 9736, 9736,
        0, 5049,    0, 9736, 5077, 5047,    0, 9736, 9736, 5019,
      166, 9736, 9736,    0, 5044,    0, 9736, 5043,    0,    0,
     9736, 9736,  893, 2336, 2402,  902, 2083, 5037, 5075, 9736,

        0, 5058, 5054,    0,  126,  176, 9736, 9736, 2475, 5050,
      494, 5057,  514,   46,  514,  922,  522,  579, 2301,  545,
      638, 5022, 5004, 9736,  633, 2548, 4994, 5001, 5014, 5005,
      634,  488, 5001, 9736, 9736,    0,  992,  884, 2016, 1526,
     2130, 2272, 2306, 2166, 2307, 2620,  630, 2350,  713, 1575,
     2351,  643, 2373, 2381,  931, 9736, 2074, 2312, 2377, 2397,
     5055, 9736, 2052, 1980, 2178, 1001, 9736, 2374, 5058, 9736,
      891, 5051,  921, 5036, 1014, 9736, 5001, 2432, 2438, 5028,
     2455, 2503, 2520, 2558, 2512, 2529, 1605, 9736, 4993, 2535,
     2566, 5025, 5038, 9736, 2347, 1990, 2559, 2103, 9736, 2566,

     5036,  257, 2691, 2764, 5035, 9736, 2572, 2257, 2586, 5034,
     2134, 9736, 2626, 2596, 2650, 5016, 2658, 2715, 2675, 2737,
     2788,    0, 2800, 2685, 2745, 1513,    0, 2302, 9736, 4981,
     5029, 9736, 2322, 9736, 4978, 5027, 9736, 2414, 9736, 4976,
     5025, 9736, 2707, 2291, 2776, 2427, 9736, 2796, 2822, 2624,
        0, 2845, 5008, 2853, 2460, 9736, 4973, 2867, 2875, 5005,
     2892, 2884, 2909, 2917, 2926, 2464, 9736, 4970, 2934, 2948,
        0, 5003, 5011, 5001, 2507, 9736, 4961, 4996, 4958, 2549,
     9736, 4954,    0, 2610, 9736, 4953,    0, 4950, 2149, 9736,
     4960, 4957, 9736, 4993, 2669, 9736, 4944,    0, 4940, 1530,

     4955, 4954, 9736, 4903,    0, 9736, 9736, 4900, 4895, 2719,
     9736, 4894,    0, 2754, 9736, 4888, 2901, 9736, 4897, 4885,
        0,  192, 4889, 4883,    0, 4880, 4856, 4856,  215, 4836,
     2827, 9736, 4835,    0, 2836, 9736, 4834,    0, 2858, 9736,
     4833, 2922, 9736, 4832,  924, 4879,  974, 4864, 4829, 1472,
     4876, 1479, 4861, 4820,    0, 4865,  534,    0, 4816,    0,
      461, 4815,    0,    0, 4813,    0, 4810,    0, 4806,    0,
     4801, 4795, 4828,    0, 4832,  933, 4823, 9736, 9736, 4822,
     2990, 4821, 4828, 9736, 4828,   79, 4793, 4769,  870, 1577,
     1471, 2352, 9736,  102, 1479, 1969, 4775, 4774,  986, 2967,

        0, 2027, 2237, 2578, 2335, 9736, 9736,    0, 2099, 2796,
     2770,    0,    0, 2903, 2968, 2975, 2973, 2980, 2981, 3024,
     3025, 2475, 2941, 3036, 9736, 3053, 3049, 2664, 2923, 2937,
     3027,    0, 4775, 3081, 3085, 4770, 4796, 3055, 3074, 3082,
      698, 3137, 3096, 3104, 3145, 4804, 3123, 3164, 4761, 4760,
     4758, 3090, 3113, 3160, 3209, 3182, 3217, 3239, 4755, 4752,
        0,    0, 4788, 4750, 4740, 4745, 4743, 4742,    0,    0,
     4741, 4740, 4739, 4743, 4737, 4736, 4735, 4731, 4691, 3895,
     3884, 3887, 3884, 2727, 3869, 3880, 3872, 3857, 3851, 3839,
     3831, 3829,    0, 3827,    0, 3823, 9736, 9736, 9736, 3810,

     3829, 2680, 3791,    0, 3787, 3785, 3779, 2923, 3768, 3812,
        0, 3175, 2697, 9736, 2103, 3761, 3751, 2119, 3774, 3042,
     2197, 3169, 1460, 3740, 3723, 2706, 9736,    0, 3262, 2987,
     3075, 3708, 3170, 3193, 2966, 3735, 3335, 3394, 3378, 3201,
     3379, 3384, 3341, 3350, 3354, 3424, 3331, 3712, 3428, 9736,
     3452, 3708, 3440, 3499, 3572, 3507, 9736, 3706, 3704, 3702,
     3475,    0, 3467, 3536, 3359, 3698, 3696, 3733, 3687, 3684,
     3681, 3679, 3673,    0, 3671, 3655, 3654, 3544, 3653, 3638,
     3627, 3626, 3587, 3573, 9736, 3567, 3567, 3567, 9736, 3560,
     3540, 3504, 3504, 3502, 3495, 3489, 3488, 3487, 3478, 3476,

     3472, 2779, 3457, 3437, 3433, 3427, 3426, 9736, 3457, 3210,
     9736, 3449, 3426, 3404, 3340, 3367, 9736, 2238, 3399, 3413,
        0, 2811, 3336, 3386, 3376, 3194, 3476, 3645, 3477, 3505,
     3447, 3602, 3590, 3391, 3385, 3656, 3676, 3384, 3383, 3373,
     3658, 3701, 3327, 3325, 3323, 3313, 3315, 3309, 3307, 3288,
     3207, 3206, 3186, 3175, 3169, 3177, 1941, 3153, 2933, 3158,
     3151, 3146, 3126, 3122, 3112, 3113, 3095, 3107,  847, 3090,
     3092, 3078,  627, 3066, 3065, 3061, 3053, 3051, 3030, 3018,
     3014, 3006, 2989, 2981, 2971, 2969, 2993, 9736, 2933, 2941,
     3550, 9736, 2954, 3558, 2918, 2902, 3531, 3560, 9736, 3616,

     3587, 3682, 3628, 3634, 3710, 2906, 2886, 3716, 3718, 2885,
     2875, 2869, 3726, 3773, 3781, 2868, 2861, 2852, 9736, 2851,
     2844, 2843, 2835, 2834, 2833, 2814,  577, 2801, 2788, 2792,
     2784, 2776, 2760, 2767, 2740, 2748, 2737, 2731, 2719, 9736,
     2706,    0,    0, 2705, 9736, 2688, 3089, 2683, 2684, 2694,
     2689, 2680, 2665, 2664, 2658, 2638, 2627, 2617, 2610, 2609,
     2608, 2602, 2600, 2592, 2580, 2570, 2599, 3598, 2554, 2539,
     3635, 3446, 3478, 3706, 3767, 3754, 3786, 3789, 2545, 2544,
     3797, 3799, 2540, 2534, 2532, 3808, 2526, 2525, 2524, 2504,
     2503, 2502, 2493, 2481, 2480, 2490, 2465,    0, 2447, 2452,

     2442, 2437, 2448, 2438, 2411, 2408, 2389, 2387, 2383,    0,
     9736, 9736, 2377, 2387, 9736, 2386, 2366, 2360, 2360, 2353,
     2343, 2341, 2339, 2333, 2327, 2319, 2310, 2309, 2302, 2297,
     2296, 2280, 2273, 2254, 2292, 2288, 3627, 3691, 3787, 3833,
     3823, 3795, 3827, 3729, 9736, 9736, 3830, 3837, 9736, 9736,
     9736, 3845, 9736, 9736, 9736, 9736, 9736, 9736, 9736, 9736,
     9736, 2237, 9736, 2227, 2214, 2211, 2209, 2216, 2207, 2175,
     9736, 9736, 9736, 9736, 9736, 2161, 2157, 3093, 2161, 2158,
     9736, 9736, 9736, 9736, 9736, 9736, 9736, 9736, 9736, 9736,
     9736, 9736, 2183, 2177, 9736, 9736, 3548, 3845, 3870, 2011,

     3864, 3874, 2130, 2117, 2112, 2087, 2071, 2046, 2042, 2037,
     2033, 2012, 9736, 2001, 2010, 9736, 9736, 3808, 3878, 1548,
     3886, 3888, 1977, 1957, 1946, 1926, 1502, 1471, 1443, 1420,
      958, 3245,  913,  660, 3890, 1556, 3894,  654,  622,  611,
      572,  537,  538, 9736, 3249,  511, 3250,  849, 3895,  506,
      416, 3342, 9736,  424, 3346, 1945,  224, 3609,  179, 2078,
      111, 3896, 1519, 9736, 3900, 9736, 3951, 3983, 4015, 4047,
     4079, 4111, 4143, 4175, 4207, 4239, 4271, 4303, 4335, 4367,
     4399, 4431, 4463, 4495, 4527, 4559, 4591, 4623, 4655, 4687,
     4719, 4751, 4776, 4796, 4813, 4834, 4853, 4874, 4905, 4931,

     4963, 4973, 4990, 5021, 5052, 5083, 5115, 5141, 5173, 5200,
     5231, 5262, 5293, 5311, 5343, 5375, 5407, 5433, 5443, 5474,
     5505, 5536, 5567, 5577, 5594, 5612, 5644, 5662, 5694, 5726,
     5757, 5774, 5806, 5838, 5856, 5883, 5915, 5933, 5965, 5975,
     5992, 6002, 6019, 6051, 6069, 6101, 6133, 6151, 6183, 6215,
     6241, 6272, 6282, 6297, 6317, 6330, 6357, 6367, 3884, 6386,
     6412, 6439, 6465, 6491, 6523, 6540, 6565, 6596, 6627, 6658,
     6690, 6705, 6737, 6763, 6789, 6821, 6853, 6880, 6906, 6937,
     6968, 6999, 7031, 7062, 7080, 7112, 7144, 7176, 7202, 7228,
     7259, 7269, 7300, 7331, 7362, 7393, 7408, 7425, 7450, 7468,

     7500, 7518, 7550, 7582, 7607, 7625, 7657, 7689, 7707, 7734,
     7766, 7784, 7816, 7833, 7858, 7875, 7900, 7932, 7950, 7982,
     8014, 3890, 8032, 8064, 8096, 8111, 8143, 8161, 8176, 8203,
     8235, 8266, 3896, 8292, 8319, 3901, 3923, 8350, 8371, 8397,
     8407, 8439, 8454, 8480, 8506, 8538, 8565, 8592, 8624, 8655,
     8681, 8707, 8738, 8769, 8800, 8815, 8825, 8842, 8852, 8867,
     8899, 8909, 8919, 3914, 8951, 8969, 8986, 9013, 4762, 9044,
     9071, 9081, 9107, 9133, 9156, 9188, 9214, 9246, 9273, 9299,
     9309, 9340, 9371, 9388, 9403, 9421, 9448, 9480, 9511, 9543,
     9575, 9607, 9639, 9671, 9703

    } ;

static yyconst flex_int16_t yy_def[1396] =
    {   0,
     1167, 1167, 1166,    3, 1168, 1168, 1169, 1169, 1166,    9,
     1166,   11, 1170, 1170, 1171, 1171, 1166,   17, 1166,   19,
     1172, 1172, 1173, 1173, 1174, 1174, 1166,   27, 1166,   29,
     1166,   31, 1166,   33, 1175, 1175, 1166,   37, 1176, 1176,
     1166,   41, 1177, 1177, 1178, 1178, 1179, 1179, 1180, 1180,
     1181, 1181, 1182, 1182, 1183, 1183, 1184, 1184, 1166,   59,
     1185, 1185, 1186, 1186, 1166,   65, 1166,   67, 1187, 1187,
     1187, 1187, 1166,   73, 1188, 1188, 1189, 1189, 1166,   79,
     1190, 1190, 1191, 1191, 1166, 1166, 1166, 1166, 1166, 1192,
     1193, 1194, 1194, 1195, 1166, 1196, 1197, 1198, 1166, 1166,

     1194, 1194, 1195, 1194, 1166, 1166, 1166, 1199, 1200, 1200,
     1200, 1201, 1166, 1166, 1166, 1202, 1203, 1166, 1166, 1166,
     1166, 1204, 1204, 1166, 1205, 1166, 1206, 1166, 1166, 1207,
     1208, 1208, 1166, 1208, 1166, 1166, 1209, 1210, 1210, 1210,
     1166, 1210, 1166, 1166, 1211, 1211, 1166, 1212, 1213, 1166,
     1166, 1214, 1166, 1166, 1166, 1215, 1166, 1166, 1166, 1216,
     1166, 1166, 1166, 1217, 1218, 1218, 1218, 1166, 1166, 1219,
     1220, 1166, 1166, 1166, 1166, 1221, 1221, 1166, 1222, 1166,
     1223, 1166, 1166, 1224, 1225, 1166, 1166, 1226, 1166, 1227,
     1166, 1166, 1166, 1166, 1228, 1166, 1229, 1166, 1230, 1166,

     1231, 1166, 1232, 1166, 1166, 1166, 1166, 1233, 1166, 1234,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1235, 1166, 1166, 1166, 1166, 1166, 1236, 1166,
     1166, 1166, 1166, 1237, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1238, 1166, 1239, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1240, 1241, 1166, 1166,
     1166, 1242, 1243, 1166, 1244, 1166, 1166, 1166, 1166, 1166,
     1245, 1166, 1246, 1166, 1166, 1166, 1247, 1166, 1166, 1166,
     1166, 1166, 1166, 1248, 1166, 1249, 1166, 1166, 1250, 1250,
     1166, 1166, 1166, 1251, 1251, 1166, 1166, 1166, 1252, 1166,

     1253, 1254, 1255, 1256, 1166, 1255, 1166, 1166, 1257, 1255,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1258, 1251, 1258,  326,  326,  326,
      326,  326,  326, 1166, 1166, 1259, 1260, 1261, 1261, 1261,
     1261, 1261, 1261, 1261, 1261, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1255, 1166, 1166, 1255, 1255, 1166, 1166,
     1262, 1166, 1263, 1264, 1263, 1166, 1166, 1263, 1265, 1166,
     1266, 1267, 1266, 1166, 1166, 1166, 1166, 1166, 1268, 1166,
     1268, 1269, 1270, 1268, 1269, 1271, 1166, 1166, 1166, 1270,
     1270, 1272, 1273, 1166, 1274, 1275, 1274, 1166, 1166, 1274,

     1276, 1276, 1277, 1277, 1276, 1166, 1278, 1279, 1278, 1276,
     1166, 1166, 1278, 1166, 1280, 1166, 1280, 1281, 1282, 1280,
     1166, 1283, 1281, 1282, 1282, 1284, 1285, 1166, 1166, 1166,
     1286, 1166, 1166, 1166, 1166, 1287, 1166, 1166, 1166, 1166,
     1288, 1166, 1289, 1290, 1289, 1166, 1166, 1289, 1291, 1166,
     1292, 1291, 1166, 1293, 1166, 1166, 1166, 1166, 1294, 1166,
     1294, 1295, 1296, 1294, 1295, 1166, 1166, 1166, 1296, 1296,
     1297, 1298, 1299, 1298, 1166, 1166, 1166, 1300, 1166, 1166,
     1166, 1166, 1301, 1166, 1166, 1166, 1302, 1166, 1303, 1166,
     1304, 1166, 1166, 1305, 1166, 1166, 1166, 1306, 1166, 1166,

     1307, 1307, 1166, 1166, 1308, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1309, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1310, 1166, 1166, 1166, 1311, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1312, 1166, 1166, 1166, 1313, 1166, 1166,
     1166, 1166, 1166, 1166, 1314, 1315, 1314, 1166, 1166, 1316,
     1317, 1316, 1166, 1166, 1318, 1166, 1166, 1319, 1166, 1320,
     1166, 1166, 1321, 1322, 1166, 1323, 1166, 1324, 1166, 1325,
     1166, 1166, 1326, 1327, 1328, 1166, 1329, 1166, 1166, 1329,
     1330, 1329, 1328, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1331, 1166, 1166, 1166, 1166, 1166, 1166, 1332, 1332,

     1333, 1166, 1334, 1334, 1334, 1166, 1166, 1335, 1334, 1334,
     1334, 1336, 1337, 1338, 1338, 1338, 1338, 1338, 1338, 1338,
     1166, 1166, 1166, 1166, 1166, 1329, 1166, 1166, 1339, 1339,
     1340, 1341, 1166, 1342, 1342, 1166, 1343, 1344, 1344, 1345,
     1166, 1346, 1347, 1347, 1348, 1349, 1166, 1350, 1166, 1166,
     1166, 1351, 1351, 1352, 1353, 1354, 1355, 1355, 1166, 1166,
     1356, 1357, 1358, 1166, 1166, 1166, 1166, 1166, 1359, 1360,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1361, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1362, 1166, 1363, 1166, 1166, 1166, 1166, 1166,

     1166, 1166, 1166, 1364, 1166, 1166, 1166, 1166, 1166, 1365,
     1366, 1367, 1166, 1166, 1166, 1166, 1166, 1166, 1368, 1368,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1369, 1166, 1370,
     1370, 1371, 1370, 1370, 1370, 1372, 1373, 1373, 1373, 1373,
     1373, 1373, 1373, 1166, 1166, 1374, 1375, 1166, 1376, 1166,
     1376, 1166, 1377, 1378, 1378, 1379, 1166, 1166, 1166, 1166,
     1380, 1381, 1382, 1382, 1383, 1166, 1166, 1384, 1166, 1166,
     1166, 1166, 1166, 1385, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,

     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1386, 1367,
     1166, 1166, 1166, 1166, 1166, 1387, 1166, 1166, 1166, 1166,
     1388, 1388, 1370, 1370, 1166, 1370, 1373, 1372, 1373, 1373,
     1373, 1166, 1375, 1166, 1166, 1377, 1379, 1166, 1166, 1166,
     1380, 1389, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1390, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1386, 1166, 1166, 1166,
     1391, 1166, 1387, 1387, 1166, 1166, 1370, 1370, 1166, 1370,

     1373, 1373, 1373, 1373, 1375, 1166, 1166, 1377, 1379, 1166,
     1166, 1166, 1380, 1389, 1389, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1392, 1393, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1391, 1391, 1166, 1166,
     1370, 1370, 1370, 1373, 1373, 1373, 1373, 1375, 1166, 1166,
     1377, 1379, 1166, 1166, 1166, 1380, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1394, 1166, 1166,

     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1395,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1370, 1370, 1370, 1373,
     1373, 1373, 1373, 1375, 1166, 1166, 1377, 1379, 1166, 1166,
     1166, 1380, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1370, 1370, 1166, 1372,

     1373, 1373, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1370, 1370, 1372,
     1373, 1373, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1370, 1372, 1373, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1370, 1372, 1373, 1166,
     1166, 1166, 1166, 1166, 1166, 1372, 1166, 1166, 1166, 1372,
     1166, 1166, 1372, 1166, 1372,    0, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,

     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,

     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166

    } ;

static yyconst flex_int16_t yy_nxt[9811] =
    {   0,
       87,   88,   89,   87,   88,   87,   90,   87,   91,   87,
       87,   87,   87,   87,   92,   87,   93,   94,   87,   92,
       92,   92,   87,   95,   87,   96,   97,   97,   97,   97,
       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
       97,   97,   87,   98,   87,   97,   97,   97,   97,   97,
       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
       97,   97,   97,   97,   97,   97,   97,   97,   97,   87,
       87,   87,   87,   87,   99,  155,  155,   99,  159,  156,
      156,  159,  160,  589,  218,  160,  100,  101,  191,  102,
      103,  191,  198,  104,  104,  105,  218,  198,  230,   86,

      231,  240,   86,  199,  352,  589,  372,  352,  199,  206,
      207,  374,  206,  240,  208,  200,  157,  157,  715,  161,
      200,  232,  161,  206,  207,  219,  206,  576,  208,  192,
      576,  253,  192,  201,  253,  287,  287,  219,  201,  233,
      715,  721,  241,  105,  106,  106,  107,  106,  106,  106,
      108,  209,  106,  106,  241,  106,  106,  106,  211,  106,
      212,  106,  110,  721,  274,  209,  110,  106,  106,  213,
      226,  227,  254,  226,  214,  254,  288,  288,  275,  998,
      290,  215,  226,  227,  290,  226,  106,  111,  106,  291,
      292,  509,  577,  291,  292,  274,  508,  500,  546,  216,

      500,  304,  501,  548,  230,  276,  231,  296,  297,  275,
      296,  565,  228,  106,  106,  106,  106,  106,  106,  107,
      106,  106,  106,  108,  228,  106,  106,  232,  106,  106,
      106,  211,  106,  212,  106,  110,  276, 1162,  564,  110,
      106,  106,  213,  247,  235,  233,  236,  214,  679,  298,
      680,  551,  248,  249,  215,  305,  553,  364,  365,  106,
      111,  106,  365,  641,  306,  686,  250,  237,  390,  390,
      390,  390,  216,  304,  357,  391,  358,  358,  358,  687,
     1161,  405,  304,  365,  251,  238,  106,  106,  106,  106,
      114,  114,  115,  114,  114,  114,  114,  114,  116,  114,

      114,  114,  114,  114,  114,  114,  114,  114,  114,  114,
      114,  114,  114,  114,  114,  114,  117,  117,  117,  117,
      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
      117,  117,  114,  118,  114,  117,  117,  117,  117,  117,
      117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
      117,  117,  117,  117,  117,  117,  117,  117,  117,  114,
      114,  114,  114,  117,  119,  120,  121,  120,  120,  119,
      119,  119,  122,  119,  119,  119,  119,  119,  119,  119,
      119,  123,  119,  119,  119,  119,  124,  119,  119,  119,
      125,  125,  125,  125,  125,  125,  125,  125,  125,  125,

      125,  125,  125,  125,  125,  125,  119,  126,  119,  125,
      125,  125,  125,  125,  125,  125,  125,  125,  125,  125,
      125,  125,  125,  125,  125,  125,  125,  125,  125,  125,
      125,  125,  125,  119,  119,  119,  127,  125,  128,  128,
      129,  128,  128,  128,  130,  266,  128,  128,  247,  128,
      128,  128,  235,  128,  236,  128,  132,  248,  249,  522,
      132,  133,  128,  523,  266,  266,  701,  303,  267,  303,
      303,  250,  303,  303,  303,  237,  359,  266,  304,  359,
      128,  134,  128, 1159,  998,  702,  267,  267,  268,  251,
      490,  360,  526,  238,  524,  584,  527,  351,  584,  522,

      268,  491,  528,  523,  529,  267,  268,  128,  128,  128,
      128,  128,  128,  129,  128,  128,  128,  130,  268,  128,
      128,  278,  128,  128,  128,  278,  128,  293,  128,  132,
      293,  492,  279,  132,  133,  128,  279,  307,  609,  303,
      308,  303,  309,  352,  280,  351,  352,  610,  280,  590,
      304,  294,  586,  128,  134,  128,  375,  376,  591,  375,
      387,  388,  281,  387, 1157, 1154,  281,  304,  311,  295,
      590,  596, 1166,  365,  586,  587,  588,  365,  698,  591,
      128,  128,  128,  128,  135,  135,  136,  135,  135,  135,
      137,  596,  135,  135, 1152,  135,  135,  135,  365,  135,

      377,  135,  139,  998,  389,  699,  139,  140,  141,  353,
      517,  518,  353,  517,  590,  305,  378,  378,  378,  378,
      378,  378,  378,  378,  354,  997,  135,  142,  135,  998,
      351,  352,  379,  304,  352,  590,  379,  380,  396,  397,
      998,  380,  606,  397,  352, 1166,  397,  352,  428,  429,
      397,  428,  519,  135,  135,  135,  135,  135,  135,  136,
      135,  135,  135,  137,  397,  135,  135, 1151,  135,  135,
      135,  397,  135,  590,  135,  139,  607,  950,  351,  139,
      140,  141,  355,  356,  600,  355,  378,  378,  378,  378,
      998,  951,  430,  307,  590,  303,  308,  303,  309,  135,

      142,  135,  379,  608,  406,  601,  304,  380,  386,  424,
      424,  424,  424, 1150,  355,  356,  425,  355,  469,  469,
      469,  469,  406, 1146,  311,  470,  135,  135,  135,  135,
      119,  143,  144,  143,  143,  119,  119,  119,  145,  119,
      119,  119,  119,  119,  119,  119,  119,  146,  119,  119,
      119,  119,  147,  119,  119,  119,  148,  148,  148,  148,
      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
      148,  148,  119,  126,  119,  148,  148,  148,  148,  148,
      148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
      148,  148,  148,  148,  148,  148,  148,  148,  148,  119,

      119,  119,  149,  148,  150,  150,  151,  150,  150,  150,
      150,  150,  150,  150,  150,  150,  150,  150,  150,  150,
      150,  150,  150,  150,  150,  150,  150,  150,  150,  150,
      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
      152,  152,  152,  152,  152,  152,  150,  153,  150,  152,
      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
      152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
      152,  152,  152,  150,  150,  150,  150,  152,  162,  162,
      163,  162,  162,  162,  164,  602,  162,  162,  602,  162,
      162,  162,  613,  162,  293,  162,  166,  293,  945,  718,

      166,  162,  162,  296,  297,  946,  296, 1156,  372,  378,
      378,  378,  378,  374,  433,  434,  381,  433,  294,  718,
      162,  167,  162,  366,  367,  379,  366,  613,  438,  439,
      380,  438,  355,  356,  576,  355,  295,  576,  372, 1166,
      365,  546,  590,  374,  365,  298,  548,  162,  162,  162,
      162,  162,  162,  163,  162,  162,  162,  164,  435,  162,
      162,  590,  162,  162,  162,  365,  162,  368,  162,  166,
      406, 1145,  440,  166,  162,  162,  414,  414,  414,  414,
      383,  408,  409,  590,  444,  445,  409,  726,  406,  445,
      726,  546,  415,  162,  167,  162,  548,  416,  414,  414,

      414,  414,  366,  367, 1143,  366,  303,  409,  303,  303,
      445,  303,  303,  303,  415,  375,  376,  304,  375,  416,
      162,  162,  162,  162,  168,  168,  169,  168,  168,  168,
      168,  168,  170,  168,  168,  168,  168,  168,  168,  168,
      168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
      171,  171,  171,  171,  171,  171,  168,  172,  168,  171,
      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
      171,  171,  171,  168,  168,  168,  168,  171,  173,  174,

      175,  174,  174,  173,  173,  173,  176,  173,  173,  173,
      173,  173,  173,  173,  173,  177,  173,  173,  173,  173,
      178,  173,  173,  173,  179,  179,  179,  179,  179,  179,
      179,  179,  179,  179,  179,  179,  179,  179,  179,  179,
      173,  180,  173,  179,  179,  179,  179,  179,  179,  179,
      179,  179,  179,  179,  179,  179,  179,  179,  179,  179,
      179,  179,  179,  179,  179,  179,  179,  173,  173,  173,
      181,  179,  182,  182,  183,  182,  182,  182,  182,  182,
      184,  182,  182,  182,  182,  182,  182,  182,  182,  182,
      182,  182,  182,  182,  182,  182,  182,  182,  185,  185,

      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
      185,  185,  185,  185,  182,  186,  182,  185,  185,  185,
      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
      185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
      185,  182,  182,  182,  182,  185,   86,   86,  187,   86,
       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
       86,   86,  188,  188,  188,  188,  188,  188,  188,  188,
      188,  188,  188,  188,  188,  188,  188,  188,   86,  189,
       86,  188,  188,  188,  188,  188,  188,  188,  188,  188,

      188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
      188,  188,  188,  188,  188,   86,   86,   86,   86,  188,
      193,  193,  194,  193,  193,  193,  193,  193,  193,  193,
      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
      193,  193,  193,  193,  193,  193,  195,  195,  195,  195,
      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
      195,  195,  193,  196,  193,  195,  195,  195,  195,  195,
      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
      195,  195,  195,  195,  195,  195,  195,  195,  195,  193,
      193,  193,  193,  195,   86,   86,  202,   86,   86,   86,

       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
      203,  203,  203,  203,  203,  203,   86,  204,   86,  203,
      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
      203,  203,  203,   86,   86,   86,   86,  203,  220,  220,
      221,  220,  220,  220,  220,  220,  220,  220,  220,  222,
      220,  220,  220,  220,  455,  456,  220,  455,  998,  551,
      220,  220,  220,  220,  553,  818,  551,  384,  384,  384,

      384,  553, 1142,  590,  381,  421,  414,  414,  421,  722,
      220,  224,  220,  379,  647,  422,  818,  647,  380,  466,
      467,  415,  466,  590,  422, 1141,  416,  602,  457,  722,
      602,  500,  475,  476,  500,  475,  501,  220,  220,  220,
      220,  220,  220,  220,  221,  220,  220,  220,  220,  220,
      220,  220,  220,  222,  220,  220,  220,  220,  398,  399,
      220,  398,  613,  468,  220,  220,  220,  220,  383,  613,
      998, 1166, 1166,  445, 1166,  397,  477,  445,  592,  397,
     1165,  592, 1166,  409,  220,  224,  220,  409,  530, 1166,
      615,  613,  622,  526,  623,  623,  623,  527,  445,  613,

      397,  593,  400,  528, 1136,  529,  387,  388,  409,  387,
     1148,  220,  220,  220,  220,  220,  242,  242,  243,  242,
      242,  242,  242,  242,  242,  242,  242,  242,  242,  242,
      242,  242,  242,  242,  242,  242,  242,  242,  242,  242,
      242,  242,  244,  244,  244,  244,  244,  244,  244,  244,
      244,  244,  244,  244,  244,  244,  244,  244,  242,  245,
      242,  244,  244,  244,  244,  244,  244,  244,  244,  244,
      244,  244,  244,  244,  244,  244,  244,  244,  244,  244,
      244,  244,  244,  244,  244,  242,  242,  242,  242,  244,
      255,  255,  256,  255,  255,  255,  255,  255,  257,  255,

      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
      255,  255,  255,  255,  255,  255,  258,  258,  258,  258,
      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
      258,  258,  255,  259,  255,  258,  258,  258,  258,  258,
      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
      258,  258,  258,  258,  258,  258,  258,  258,  258,  255,
      255,  255,  255,  258,  260,  260,  261,  260,  260,  260,
      260,  260,  262,  260,  260,  260,  260,  260,  260,  260,
      260,  260,  260,  260,  260,  260,  260,  260,  260,  260,
      263,  263,  263,  263,  263,  263,  263,  263,  263,  263,

      263,  263,  263,  263,  263,  263,  260,  264,  260,  263,
      263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
      263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
      263,  263,  263,  260,  260,  260,  260,  263,  269,  269,
      270,  269,  269,  269,  269,  269,  269,  269,  269,  269,
      269,  269,  269,  269,  269,  269,  269,  269,  269,  269,
      269,  269,  269,  269,  271,  271,  271,  271,  271,  271,
      271,  271,  271,  271,  271,  271,  271,  271,  271,  271,
      269,  272,  269,  271,  271,  271,  271,  271,  271,  271,
      271,  271,  271,  271,  271,  271,  271,  271,  271,  271,

      271,  271,  271,  271,  271,  271,  271,  269,  269,  269,
      269,  271,  282,  282,  283,  282,  282,  282,  282,  282,
      282,  282,  282,  282,  282,  282,  282,  282,  282,  282,
      282,  282,  282,  282,  282,  282,  282,  282,  284,  284,
      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
      284,  284,  284,  284,  282,  285,  282,  284,  284,  284,
      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
      284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
      284,  282,  282,  282,  282,  284,  312,  930,  613,  410,
      414,  414,  414,  414,  998, 1160,  723,  417,  630,  313,

     1166,  409,  630,  931, 1140,  409,  415,  406,  639,  314,
      315,  416,  639, 1139,  316,  317,  723,  602,  318,  319,
      602,  320,  321,  630,  480,  481,  409,  480,  602,  314,
      315,  602, 1138,  639,  316,  317,  458,  458,  458,  458,
      318,  319,  322,  323,  320,  321,  324,  324,  324,  324,
      411,  412,  459,  411, 1166, 1166, 1120,  460, 1134,  613,
     1133,  419,  324,  324,  325, 1132, 1166,  409,  482,  364,
      365,  409,  614, 1166,  365,  628,  484,  485,  628,  484,
      446,  447,  327,  446,  296,  297,  328,  296,  329,  330,
      331, 1131,  409, 1130,  413,  365, 1166,  445, 1129,  304,

      602,  445,  332,  602,  398,  399,  333,  398,  334, 1128,
      335,  336,  324,  324,  324,  324,  420,  420,  420,  420,
      486,  613,  445,  417,  448, 1163,  298, 1127,  324,  324,
      327,  602,  415,  812,  602,  411,  412,  416,  411,  450,
      450,  450,  450, 1126,  495,  496,  451,  495,  325,  815,
      339,  490,  340,  812,  341,  342,  343,  452,  452,  452,
      453,  733,  491,  458,  458,  458,  458,  602,  344,  815,
      602, 1125,  345,  613,  334, 1124,  335,  336,  346,  459,
      616,  346,  510,  511,  460,  510,  494,  419,  497, 1123,
      347,  347,  492,  348,  349, 1166,  365,  350,  350,  351,

      365, 1117,  294,  458,  458,  458,  458, 1116, 1115,  613,
      461,  464,  464,  464,  464, 1114,  618, 1112,  461,  459,
      295,  365, 1111,  590,  460,  619,  512,  459,  493,  493,
      493,  493,  460, 1110,  458,  458,  458,  458,  602,  514,
      515,  602,  514,  590,  493,  493,  494,  351,  401,  401,
      459,  401,  401,  401,  402,  460,  401,  401, 1109,  401,
      401,  401, 1108,  401,  493,  401,  404, 1107,  590, 1106,
      404,  401,  405,  602,  463,  644,  602,  531,  532,  644,
      531, 1105,  463,  516,  535,  536, 1104,  535,  590,  729,
      401,  404,  401,  493,  539,  540, 1103,  539,  542,  543,

      644,  542,  592,  428,  429,  592,  428,  602,  602,  653,
      602,  602, 1096,  653,  606,  613, 1095,  401,  401,  401,
      401,  533, 1094,  433,  434,  593,  433,  594,  537,  357,
      617,  358,  358,  358,  653, 1093,  602,  304,  541,  602,
      595,  297,  544,  324,  324,  324,  324,  594,  607,  613,
      613,  353,  359,  720,  353,  359,  720, 1092, 1091,  324,
      324,  571,  595, 1090,  396,  397,  621,  360,  620,  397,
     1089, 1088,  351,  351,  353,  608,  593,  353,  359,  324,
     1087,  359,  624,  625,  731,  624,  330,  331, 1086,  360,
      397,  364,  365,  360, 1085,  351,  365,  626,  359,  351,

     1084,  359, 1083,  627, 1082,  334,  304,  335,  336,  324,
      324,  324,  324,  621, 1081,  438,  439,  365,  438,  351,
      351,  351, 1080, 1079, 1078,  324,  324,  324,  446,  447,
      631,  446, 1077,  378,  378,  378,  378, 1076, 1075,  384,
      384,  384,  384,  351,  518,  571,  381,  351, 1073,  379,
     1072,  627,  330,  331,  380,  379, 1166, 1166, 1166, 1166,
      380,  455,  456, 1166,  455,  466,  467,  351,  466, 1071,
     1070,  334, 1166,  335,  336,  578,  628, 1166,  578,  628,
      578,  578,  578,  578,  578,  578,  578,  579,  578,  580,
      578,  580,  581,  578, 1069, 1068, 1067,  578,  578,  578,

      583, 1066, 1065, 1064,  378,  378,  378,  378,  475,  476,
      383,  475, 1062,  378,  378,  378,  378,  578,  578,  578,
      379,  390,  390,  390,  390,  380,  386, 1166,  391,  379,
      635,  635,  635,  635,  380,  386,  390,  390,  390,  390,
      998, 1061, 1060,  391,  578,  578,  578,  578,  578,  602,
      480,  481,  602,  480, 1059, 1166, 1166, 1166, 1166,  384,
      384,  384,  384, 1058, 1057, 1056,  381, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166,  379, 1166,  397,  406,  602,
      380,  397,  602,  396,  397, 1055, 1054, 1053,  397,  408,
      409, 1166, 1166, 1051,  409, 1050,  406,  414,  414,  414,

      414, 1049,  397, 1166,  409, 1046, 1045, 1036,  409,  397,
     1166,  484,  485,  415,  484,  409, 1035, 1166,  416, 1166,
     1166,  346,  640,  892,  346,  450,  450,  450,  450,  409,
      383, 1034,  406,  347,  347, 1033,  348,  349,  730, 1032,
      350,  350,  351,  408,  409,  294,  453, 1031,  409, 1030,
      406,  420,  420,  420,  420, 1029, 1028, 1027,  417, 1166,
     1166, 1166, 1166,  295, 1026,  628, 1166,  415,  628,  409,
      495,  496,  416,  495, 1025, 1166,  424,  424,  424,  424,
     1166,  802,  645,  425,  802, 1024,  424,  424,  424,  424,
      351,  401,  401,  425,  401,  401,  401,  641,  811,  401,

      401,  811,  401,  401,  401, 1023,  401,  726,  642,  404,
      726, 1022, 1021,  404,  401,  405,  421,  414,  414,  421,
      510,  511,  419,  510,  444,  445,  422, 1020,  789,  445,
     1166,  789,  415,  401,  404,  401, 1019,  416,  420,  420,
      420,  420, 1018, 1017, 1016,  417, 1166, 1166, 1166, 1166,
      445, 1014, 1013, 1166,  415,  514,  515, 1010,  514,  416,
      401,  401,  401,  401,  401,  401, 1009,  401,  401,  401,
      641,  602,  401,  401,  602,  401,  401,  401, 1008,  401,
      802,  401,  404,  802, 1007,  790,  404,  401,  401,  421,
      414,  414,  421, 1166,  445, 1006, 1005,  602,  445,  422,

      602,  421,  414,  414,  421,  415,  401,  404,  401,  419,
      416,  422,  822,  444,  445,  822, 1004,  415,  445,  445,
      735, 1003,  416,  450,  450,  450,  450, 1002,  531,  532,
      451,  531,  998,  401,  401,  401,  401,  535,  536,  445,
      535,  452,  452,  452,  453,  734,  450,  450,  450,  450,
     1001, 1000,  654,  451,  450,  450,  450,  450,  999,  539,
      540,  451,  539,  996,  452,  452,  452,  453,  458,  458,
      458,  458,  657,  657,  657,  453,  464,  464,  464,  464,
      995,  994,  993,  461,  459,  458,  458,  458,  458,  460,
      992,  991,  459, 1166, 1166, 1166, 1166,  460,  990,  989,

     1166,  459,  517,  518,  602,  517,  460,  602,  988, 1166,
      469,  469,  469,  469, 1166,  987,  985,  470,  464,  464,
      464,  464,  984,  542,  543,  461,  542,  458,  458,  458,
      458,  727,  983,  980,  459,  469,  469,  469,  469,  460,
      364,  630,  470,  459,  519,  630,  613,  463,  460, 1166,
     1166, 1166, 1166,  979, 1166,  630, 1166,  737,  622,  630,
      623,  623,  623,  970, 1166,  727,  630,  602,  726,  602,
      602,  726,  602,  969,  602,  727,  602,  602,  817,  602,
      630,  602,  602,  933,  602,  602,  934,  966,  602,  463,
      578,  602,  727,  578,  965,  578,  578,  578,  578,  578,

      578,  578,  579,  578,  580,  578,  580,  712,  578,  727,
      711,  613,  578,  578,  578,  583,  613,  826,  613,  964,
      738,  963,  740,  613,  613,  602,  624,  625,  602,  624,
      742,  962,  578,  713,  578,  739,  727,  624,  625,  961,
      624,  744,  741,  720,  364,  365,  720,  627,  823,  365,
      624,  625,  745,  624,  624,  625,  960,  624,  627,  578,
      578,  578,  578,  578,  959,  745,  593,  613,  958,  746,
      365,  627,  396,  639,  743,  627,  602,  639,  304,  602,
      957,  747,  749,  749,  749,  749,  751,  751,  751,  751,
     1015, 1166,  639, 1015, 1113,  627,  639, 1113,  639,  396,

      397,  956,  406,  955,  397,  750,  627,  444,  653,  750,
     1166,  954,  653,  408,  644,  953,  952,  639,  644,  627,
      406, 1166,  644,  627,  647,  397,  644,  647, 1166,  824,
     1166,  653,  949,  653,  422,  653,  753,  401,  401,  644,
      401,  401,  401,  641,  948,  401,  401,  644,  401,  401,
      401,  406,  401,  947,  401,  755,  653,  944,  943,  755,
      401,  401,  408,  409,  942,  647,  941,  409,  647,  406,
      816,  602,  939,  816,  602,  422,  938,  444,  445,  401,
      755,  401,  445,  765,  765,  765,  765,  307,  409,  303,
      451,  303,  810,  817,  602,  602,  937,  602,  602,  756,

      304,  936,  602,  445,  453,  602,  401,  401,  401,  401,
      450,  450,  450,  450,  761,  935,  932,  762,  450,  450,
      450,  450,  307,  929,  303,  451,  303,  810,  763,  763,
      763,  453,  928,  729,  927,  304,  657,  657,  657,  453,
      450,  450,  450,  450,  613,  926, 1144,  451,  900, 1144,
     1153, 1155,  729, 1153, 1155,  830,  925,  924,  657,  657,
      657,  453,  821,  822,  821,  821,  822,  821,  821,  821,
      821,  821,  821,  821,  821,  821,  821,  821,  821,  821,
      821,  821,  821,  821,  821,  821,  821,  821,  326,  326,
      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,

      326,  326,  326,  326,  821,  821,  821,  326,  326,  326,
      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
      326,  326,  326,  326,  326,  326,  326,  326,  326,  326,
      326,  821,  821,  821,  821,  821,  602,  602,  923,  602,
      602,  891,  602, 1158,  891,  602, 1158, 1155,  364,  365,
     1155,  624,  625,  365,  624,  624,  625,  922,  624,  921,
      765,  765,  765,  765,  892,  920,  744,  451,  894,  919,
      832,  894,  627,  918,  365,  917,  627,  916,  613,  602,
      602,  453,  602,  602,  613,  602,  897,  602,  602,  833,
      602,  817,  831,  827,  821,  822,  821,  821,  822,  821,

      821,  821,  821,  821,  821,  821,  821,  821,  821,  821,
      821,  821,  821,  821,  821,  821,  821,  821,  821,  821,
      627,  613,  613,  912,  627,  624,  625,  613,  624,  749,
      749,  749,  749,  911,  910,  907,  821,  828,  821,  829,
      746,  906,  738,  738,  898,  899,  627,  602,  602,  304,
      602,  602,  750,  751,  751,  751,  751,  396,  397,  896,
      895,  890,  397,  821,  821,  821,  821,  821,  450,  450,
      450,  450,  889,  888,  711,  762,  750,  602,  602,  602,
      602,  602,  602,  397,  886,  885,  763,  763,  763,  453,
      613,  884,  444,  445,  627,  883, 1038,  445,  836,  401,

      401,  904,  401,  401,  401,  641,  602,  401,  401,  602,
      401,  401,  401,  406,  401,  882,  642,  755,  445,  613,
      613,  755,  401,  405,  408,  409,  901,  902, 1039,  409,
      881,  406,  602,  841,  880,  602,  879,  450,  450,  450,
      450,  401,  755,  401,  762,  878,  877,  876,  613,  602,
      409,  968,  602,  875,  968,  763,  763,  763,  453,  894,
      874,  602,  894,  903,  602,  837,  873,  872,  401,  401,
      401,  401,  401,  401,  892,  401,  401,  401,  641,  971,
      401,  401,  817,  401,  401,  401,  871,  401,  602,  401,
      755,  602,  853,  854,  755,  401,  401,  855, 1118,  968,

      856,  857,  968,  624,  625,  858,  624,  364,  365,  859,
     1158,  860,  365, 1158,  401,  755,  401,  602,  744,  870,
      602,  869,  892,  972,  627,  868,  867,  866,  602,  602,
      613,  602,  602,  365,  974,  602,  602,  865,  602,  602,
      905,  401,  401,  401,  401,  821,  821,  821,  821,  821,
      821,  821,  821,  821,  821,  821,  821,  821,  821,  821,
      821,  821,  821,  821,  821,  821,  821,  821,  821,  821,
      821,  613,  627,  396,  397,  444,  445,  613,  397,  973,
      445, 1037,  406,  602,  864,  863,  602,  821,  821,  821,
     1097,  976,  602,  408,  409,  602,  862,  977,  409,  397,

      406,  445,  450,  450,  450,  450,  908,  602,  913,  762,
      602,  861,  852,  851,  821,  821,  821,  821,  821,  409,
      914,  914,  914,  453,  406,  613,  909,  364,  365,  850,
      975,  849,  365,  396,  397,  408,  409,  848,  397,  847,
      409,  846,  406,  444,  445,  845,  364,  365,  445,  613,
      473,  365, 1098,  365,  844,  602,  843,  978,  602,  397,
      840,  409,  839,  981,  838,  982,  835, 1040,  602,  445,
      834,  602,  365,  986,  450,  450,  450,  450,  613,  825,
      820,  762,  450,  450,  450,  450,  819,  602,  602,  762,
      602,  602,  914,  914,  914,  453,  602,  613,  593,  602,

      914,  914,  914,  453, 1042,  406,  364,  365,  814,  602,
      613,  365,  602, 1041,  396,  397,  408,  409,  813,  397,
      808,  409,  807,  406,  602,  444,  445,  602,  602,  613,
      445,  602,  365,  806, 1099,  297, 1043, 1099,  613,  805,
      397,  804,  409,  406,  729,  803,  602,  396,  397,  602,
     1044,  445,  397,  702,  408,  409, 1102,  729, 1047,  409,
     1048,  406,  444,  445,  801,  602,  613,  445,  602, 1052,
      613, 1099,  297,  397, 1099,  602, 1100,  800,  602,  602,
      409,  799,  602,  798,  738,  797, 1101,  602,  445,  602,
      602,  602,  602,  796,  602,  602, 1155, 1164,  602, 1155,

     1164,  296,  297, 1119,  296,  795,  612,  613,  612,  612,
      612,  794,  704,  298, 1121,  704,  704,  613,  728,  793,
      728,  728,  728,  612, 1135,  612,  612,  612,  792,  613,
      791,  613, 1122,  788, 1137,  738,  704,  613,  613,  704,
      704,  787,  786, 1100,  784,  736, 1147,  736,  736,  736,
     1149,   86,   86,   86,   86,   86,   86,   86,   86,   86,
       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
       86,   86,   86,  109,  109,  109,  109,  109,  109,  109,
      109,  109,  109,  109,  109,  109,  109,  109,  109,  109,

      109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
      109,  109,  109,  109,  109,  112,  112,  112,  112,  112,
      112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
      112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
      112,  112,  112,  112,  112,  112,  112,  131,  131,  131,
      131,  131,  131,  131,  131,  131,  131,  131,  131,  131,
      131,  131,  131,  131,  131,  131,  131,  131,  131,  131,
      131,  131,  131,  131,  131,  131,  131,  131,  131,  138,
      138,  138,  138,  138,  138,  138,  138,  138,  138,  138,
      138,  138,  138,  138,  138,  138,  138,  138,  138,  138,

      138,  138,  138,  138,  138,  138,  138,  138,  138,  138,
      138,  154,  154,  154,  154,  154,  154,  154,  154,  154,
      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
      154,  154,  154,  158,  158,  158,  158,  158,  158,  158,
      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
      158,  158,  158,  158,  158,  165,  165,  165,  165,  165,
      165,  165,  165,  165,  165,  165,  165,  165,  165,  165,
      165,  165,  165,  165,  165,  165,  165,  165,  165,  165,

      165,  165,  165,  165,  165,  165,  165,  190,  190,  190,
      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
      190,  190,  190,  190,  190,  190,  190,  190,  190,  190,
      190,  190,  190,  190,  190,  190,  190,  190,  190,  197,
      197,  197,  197,  197,  197,  197,  197,  197,  197,  197,
      197,  197,  197,  197,  197,  197,  197,  197,  197,  197,
      197,  197,  197,  197,  197,  197,  197,  197,  197,  197,
      197,  205,  205,  205,  205,  205,  205,  205,  205,  205,
      205,  205,  205,  205,  205,  205,  205,  205,  205,  205,
      205,  205,  205,  205,  205,  205,  205,  205,  205,  205,

      205,  205,  205,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  217,  217,  217,  217,  217,
      217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
      217,  217,  217,  217,  217,  217,  217,  217,  217,  217,
      217,  217,  217,  217,  217,  217,  217,  223,  223,  223,
      223,  223,  223,  223,  223,  223,  223,  223,  223,  223,
      223,  223,  223,  223,  223,  223,  223,  223,  223,  223,
      223,  223,  223,  223,  223,  223,  223,  223,  223,  225,

      225,  225,  225,  225,  225,  225,  225,  225,  225,  225,
      225,  225,  225,  225,  225,  225,  225,  225,  225,  225,
      225,  225,  225,  225,  225,  225,  225,  225,  225,  225,
      225,  229,  229,  229,  229,  229,  229,  229,  229,  229,
      229,  229,  229,  229,  229,  229,  229,  229,  229,  229,
      229,  229,  229,  229,  229,  229,  229,  229,  229,  229,
      229,  229,  229,  234,  234,  234,  234,  234,  234,  234,
      234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
      234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
      234,  234,  234,  234,  234,  239,  239,  239,  239,  239,

      239,  239,  239,  239,  239,  239,  239,  239,  239,  239,
      239,  239,  239,  239,  239,  239,  239,  239,  239,  239,
      239,  239,  239,  239,  239,  239,  239,  246,  246,  246,
      246,  246,  246,  246,  246,  246,  246,  246,  246,  246,
      246,  246,  246,  246,  246,  246,  246,  246,  246,  246,
      246,  246,  246,  246,  246,  246,  246,  246,  246,  252,
      252,  252,  252,  252,  252,  252,  252,  252,  252,  252,
      252,  252,  252,  252,  252,  252,  252,  252,  252,  252,
      252,  252,  252,  252,  252,  252,  252,  252,  252,  252,
      252,  265,  265,  265,  265,  265,  265,  265,  265,  265,

      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
      265,  265,  265,  265,  265,  265,  265,  265,  265,  265,
      265,  265,  265,  273,  273,  273,  273,  273,  273,  273,
      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
      273,  273,  273,  273,  273,  277,  277,  277,  277,  277,
      277,  277,  277,  277,  277,  277,  277,  277,  277,  277,
      277,  277,  277,  277,  277,  277,  277,  277,  277,  277,
      277,  277,  277,  277,  277,  277,  277,  286,  286,  286,
      286,  286,  286,  286,  286,  286,  286,  286,  286,  286,

      286,  286,  286,  286,  286,  286,  286,  286,  286,  286,
      286,  286,  286,  286,  286,  286,  286,  286,  286,  289,
      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
      289,  299,  299,  783,  299,  299,  299,  299,  299,  299,
      299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
      299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
      299,  299,  299,  302,  728,  782,  728,  728,  728,  781,
      780,  779,  778,  777,  776,  775,  773,  772,  302,  771,

      302,  302,  302,  770,  769,  473,  767,  302,  303,  766,
      303,  303,  760,  303,  759,  758,  757,  303,  303,  386,
      303,  303,  303,  310,  752,  310,  310,  310,  310,  748,
      310,  725,  724,  717,  310,  310,  310,  310,  310,  310,
      326,  326,  326,  716,  714, 1166,  304,  304,  304,  711,
      574,  709,  708,  326,  326,  326,  326,  326,  326,  326,
      326,  326,  707,  326,  326,  337,  706,  337,  337,  705,
      337,  703,  700,  697,  337,  337,  696,  337,  337,  337,
      338,  338,  338,  551,  695,  694,  546,  693,  692,  691,
      690,  689,  688,  338,  338,  338,  338,  338,  338,  338,

      338,  338,  685,  338,  338,  361,  361,  684,  361,  361,
      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
      361,  361,  361,  361,  361,  361,  361,  363,  683,  682,
      681,  678,  520,  363,  677,  363,  363,  363,  363,  363,
      676,  675,  363,  363,  363,  363,  363,  363,  674,  673,
      503,  503,  363,  369,  369,  369,  369,  369,  369,  369,
      369,  369,  369,  369,  369,  369,  369,  369,  369,  369,
      369,  369,  369,  369,  369,  369,  369,  369,  369,  369,
      369,  369,  369,  369,  369,  371,  672,  371,  371,  371,

      671,  669,  497,  492,  371,  373,  668,  373,  373,  667,
      666,  665,  373,  479,  373,  373,  373,  664,  473,  662,
      473,  373,  382,  382,  382,  382,  660,  459,  382,  659,
      656,  442,  651,  437,  650,  432,  382,  649,  415,  382,
      641,  641,  641,  382,  394,  382,  382,  382,  386,  636,
      379,  382,  382,  385,  385,  385,  385,  633,  372,  632,
      370,  362,  611,  605,  604,  603,  601,  385,  598,  385,
      385,  385,  597,  585,  385,  304,  385,  385,  385,  304,
      574,  300,  572,  385,  392,  392,  392,  392,  569,  567,
      392,  564,  562,  561,  559,  557,  556,  554,  549,  520,

      508,  507,  506,  504,  503,  392,  499,  392,  392,  392,
      492,  488,  479,  473,  392,  393,  393,  459,  393,  393,
      393,  393,  393,  393,  393,  393,  393,  393,  393,  393,
      393,  393,  393,  393,  393,  393,  393,  393,  393,  393,
      393,  393,  393,  393,  393,  393,  393,  395,  442,  437,
      432,  415,  394,  395,  394,  395,  395,  395,  395,  395,
      379,  370,  395,  395,  395,  395,  395,  395,  362,  304,
      301,  300,  395,  403,  403, 1166,  403,  403,  403,  403,
      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,

      403,  403,  403,  403,  403,  407,  407,  113,  113, 1166,
     1166, 1166,  407, 1166,  407,  407,  407,  407,  407, 1166,
      407,  407,  407,  407,  407,  407,  407, 1166, 1166, 1166,
     1166,  407,  418,  418,  418,  418, 1166, 1166,  418, 1166,
     1166, 1166, 1166, 1166, 1166, 1166,  418, 1166, 1166,  418,
     1166, 1166, 1166,  418, 1166,  418,  418,  418, 1166, 1166,
     1166,  418,  418,  423,  423,  423,  423, 1166, 1166, 1166,
     1166,  423, 1166, 1166, 1166, 1166, 1166,  423, 1166,  423,
      423, 1166, 1166, 1166,  423, 1166,  423,  423,  423, 1166,
     1166, 1166, 1166,  423,  426,  426,  426,  426, 1166, 1166,

      426, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166,  426, 1166,  426,  426,  426,
     1166, 1166, 1166, 1166,  426,  427, 1166, 1166,  427, 1166,
     1166, 1166, 1166,  427, 1166,  427,  427,  427, 1166, 1166,
     1166, 1166,  427,  431,  431, 1166,  431,  431,  431,  431,
      431,  431,  431,  431,  431,  431,  431,  431,  431,  431,
      431,  431,  431,  431,  431,  431,  431,  431,  431,  431,
      431,  431,  431,  431,  431,  436,  436, 1166,  436,  436,
      436,  436,  436,  436,  436,  436,  436,  436,  436,  436,
      436,  436,  436,  436,  436,  436,  436,  436,  436,  436,

      436,  436,  436,  436,  436,  436,  436,  441,  441, 1166,
      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
      441,  441,  441,  441,  441,  441,  441,  441,  441,  443,
     1166, 1166, 1166, 1166, 1166,  443, 1166,  443,  443,  443,
      443,  443, 1166, 1166,  443,  443,  443,  443,  443,  443,
     1166, 1166, 1166, 1166,  443,  449, 1166,  449,  449,  449,
     1166, 1166, 1166, 1166,  449,  454,  454,  454,  454, 1166,
     1166,  454, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166,  454,  454, 1166, 1166, 1166,  454, 1166,  454,  454,

      454, 1166, 1166, 1166, 1166,  454,  462,  462,  462,  462,
     1166, 1166,  462, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
      462, 1166, 1166,  462, 1166, 1166, 1166,  462, 1166,  462,
      462,  462, 1166, 1166, 1166,  462,  462,  465,  465,  465,
      465, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166,  465, 1166,  465,  465, 1166, 1166, 1166,  465, 1166,
      465,  465,  465, 1166, 1166, 1166, 1166,  465,  471,  471,
      471,  471, 1166, 1166,  471, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,  471,
     1166,  471,  471,  471, 1166, 1166, 1166, 1166,  471,  472,

     1166,  472,  472,  472, 1166, 1166, 1166, 1166,  472,  474,
     1166,  474, 1166, 1166, 1166, 1166,  474, 1166,  474,  474,
      474, 1166, 1166, 1166, 1166,  474,  478,  478, 1166,  478,
     1166, 1166, 1166, 1166,  478, 1166,  478,  478,  478, 1166,
     1166, 1166, 1166,  478,  483,  483, 1166,  483,  483,  483,
      483,  483,  483,  483,  483, 1166,  483,  483,  483,  483,
      483,  483,  483,  483,  483,  483,  483, 1166,  483,  483,
      483,  483,  483,  483,  483,  483,  487, 1166, 1166,  487,
     1166, 1166, 1166, 1166,  487, 1166,  487,  487,  487, 1166,
     1166, 1166, 1166,  487,  489,  489,  489,  489,  489,  489,

      489,  489,  489,  489,  489,  489,  489,  489,  489,  489,
      489,  489,  489,  489,  489, 1166,  489,  489,  489,  489,
      489,  489,  489,  489,  489,  489,  491,  491, 1166,  491,
      491,  491,  491,  491,  491,  491,  491,  491,  491,  491,
      491,  491,  491,  491,  491,  491,  491, 1166,  491,  491,
      491,  491,  491,  491,  491,  491,  491,  491,  493,  493,
     1166,  493, 1166,  493,  493,  493, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166,  493,  493,  493, 1166,
      493,  493, 1166, 1166, 1166, 1166, 1166,  493,  498, 1166,
     1166,  498, 1166, 1166, 1166, 1166,  498, 1166,  498,  498,

      498, 1166, 1166, 1166, 1166,  498,  502,  502, 1166,  502,
      502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
      502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
      502,  502,  502,  502,  502,  502,  502,  502,  505,  505,
     1166,  505, 1166,  505,  505,  505,  505,  505,  505, 1166,
      505,  505,  505,  505, 1166,  505,  505,  505,  505, 1166,
      505, 1166,  505,  505,  505,  505,  505,  505,  505,  505,
      513,  513, 1166,  513, 1166, 1166, 1166, 1166,  513, 1166,
      513,  513,  513,  521,  521, 1166,  521, 1166,  521,  521,
      521,  521,  521,  521,  521,  521,  521,  521,  521,  521,

      521,  521,  521,  521, 1166,  521, 1166,  521,  521,  521,
      521,  521,  521,  521,  521,  525,  525, 1166,  525, 1166,
      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
      525,  525,  525,  525,  525,  525, 1166,  525, 1166,  525,
      525,  525,  525,  525,  525,  525,  525,  534, 1166, 1166,
      534, 1166, 1166, 1166, 1166,  534, 1166,  534,  534,  534,
     1166, 1166, 1166, 1166,  534,  538,  538, 1166,  538,  538,
      538,  538,  538,  538, 1166, 1166,  538,  538,  538,  538,
      538,  538,  538,  538,  538,  538, 1166,  538, 1166,  538,
      538,  538,  538,  538,  538,  538,  538,  545, 1166,  545,

      545,  545, 1166, 1166, 1166, 1166,  545,  547, 1166,  547,
      547, 1166, 1166, 1166,  547, 1166,  547,  547,  547, 1166,
     1166, 1166, 1166,  547,  550, 1166,  550,  550,  550, 1166,
     1166, 1166, 1166,  550,  552, 1166,  552,  552, 1166, 1166,
     1166,  552, 1166,  552,  552,  552, 1166, 1166, 1166, 1166,
      552,  555,  555, 1166,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555, 1166,  555, 1166,  555,  555,  555,  555,  555,
      555,  555,  555,  558, 1166, 1166,  558, 1166, 1166, 1166,
     1166,  558, 1166,  558,  558,  558, 1166, 1166, 1166, 1166,

      558,  560,  560, 1166,  560,  560,  560,  560,  560,  560,
      560,  560,  560,  560,  560, 1166,  560,  560,  560,  560,
      560,  560,  560,  560, 1166,  560,  560,  560,  560,  560,
      560,  560,  560,  563,  563, 1166,  563,  563,  563,  563,
      563,  563,  563,  563, 1166,  563,  563,  563,  563,  563,
      563,  563,  563,  563, 1166,  563, 1166,  563,  563,  563,
      563,  563,  563,  563,  563,  566, 1166,  566,  566,  566,
     1166, 1166, 1166,  566, 1166,  566,  566,  566, 1166, 1166,
     1166, 1166,  566,  568,  568, 1166,  568,  568,  568,  568,
      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,

      568,  568,  568,  568,  568,  568, 1166,  568,  568,  568,
      568,  568,  568,  568,  568,  570,  570,  570,  570,  570,
      570,  570,  570,  570, 1166, 1166,  570,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  326,  326,  326,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
      326,  326,  326,  326,  326,  326,  326,  326,  326, 1166,
      326,  326,  299,  299, 1166,  299,  299,  299,  299,  299,
      299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
      299,  299,  299,  299,  299,  299,  299,  299,  299,  299,

      299,  299,  299,  299,  302, 1166,  302,  302,  302, 1166,
     1166, 1166, 1166,  302,  573,  573, 1166, 1166, 1166,  573,
     1166,  573,  573,  573, 1166, 1166, 1166, 1166,  573,  303,
     1166,  303,  303, 1166,  303, 1166, 1166, 1166,  303,  303,
     1166,  303,  303,  303,  575, 1166, 1166,  575, 1166, 1166,
     1166, 1166,  575, 1166,  575,  575,  575,  582, 1166, 1166,
      582, 1166,  582,  582,  582,  582,  582,  582,  582,  582,
      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
      582,  582,  582,  582,  582,  582,  582,  582,  582,  599,
     1166,  599,  599,  599, 1166, 1166, 1166,  599,  337, 1166,

      337,  337, 1166,  337, 1166, 1166, 1166,  337,  337, 1166,
      337,  337,  337,  338, 1166, 1166,  338, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166,  338,  338,  338,  338,  338,  361,
      361, 1166,  361,  361,  361,  361,  361,  361,  361,  361,
      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
      361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
      361,  363, 1166, 1166, 1166, 1166, 1166,  363, 1166,  363,
      363,  363,  363,  363, 1166, 1166,  363,  363,  363,  363,
      363,  363, 1166, 1166, 1166, 1166,  363,  629, 1166, 1166,

     1166, 1166, 1166,  629, 1166,  629, 1166,  629,  629,  629,
     1166, 1166,  629,  629,  629,  629,  629,  629, 1166, 1166,
     1166, 1166,  629,  369,  369,  369,  369,  369,  369,  369,
      369,  369,  369,  369,  369,  369,  369,  369,  369,  369,
      369,  369,  369,  369,  369,  369,  369,  369,  369,  369,
      369,  369,  369,  369,  369,  373, 1166,  373,  373, 1166,
     1166, 1166,  373, 1166,  373,  373,  373, 1166, 1166, 1166,
     1166,  373,  371, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166,  371, 1166,  371,
      371,  371, 1166, 1166, 1166, 1166,  371,  382,  382,  382,

      382, 1166, 1166,  382, 1166, 1166, 1166, 1166, 1166, 1166,
     1166,  382, 1166, 1166,  382, 1166, 1166, 1166,  382, 1166,
      382,  382,  382, 1166, 1166, 1166,  382,  382,  385,  385,
      385,  385, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166,  385, 1166,  385,  385,  385, 1166, 1166,  385,
     1166,  385,  385,  385, 1166, 1166, 1166, 1166,  385,  392,
      392,  392,  392, 1166, 1166,  392, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
      392, 1166,  392,  392,  392, 1166, 1166, 1166, 1166,  392,
      634,  634,  634,  634,  634,  634,  634,  634,  634,  634,

      634,  634,  634,  634,  634,  634,  634,  634,  634,  634,
     1166,  634,  634,  634,  634,  634,  634,  634,  634,  634,
      634,  634,  637, 1166,  637, 1166, 1166,  637, 1166,  637,
      637,  637, 1166, 1166, 1166, 1166,  637,  393,  393, 1166,
      393,  393,  393,  393,  393,  393,  393,  393,  393,  393,
      393,  393,  393,  393,  393,  393,  393,  393,  393,  393,
      393,  393,  393,  393,  393,  393,  393,  393,  393,  395,
     1166, 1166, 1166, 1166, 1166,  395, 1166,  395,  395,  395,
      395,  395, 1166, 1166,  395,  395,  395,  395,  395,  395,
     1166, 1166, 1166, 1166,  395,  638, 1166, 1166, 1166, 1166,

     1166,  638, 1166,  638, 1166,  638,  638,  638, 1166, 1166,
      638,  638,  638,  638,  638,  638, 1166, 1166, 1166, 1166,
      638,  401,  401, 1166,  401,  401,  401,  401,  401,  401,
      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
      401,  401,  401,  403,  403, 1166,  403,  403,  403,  403,
      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
      403,  403,  403,  403,  403,  407,  407, 1166, 1166, 1166,
     1166, 1166,  407, 1166,  407,  407,  407,  407,  407, 1166,

      407,  407,  407,  407,  407,  407,  407, 1166, 1166, 1166,
     1166,  407,  643, 1166, 1166, 1166, 1166, 1166,  643, 1166,
      643, 1166,  643,  643,  643, 1166, 1166,  643,  643,  643,
      643,  643,  643, 1166, 1166, 1166, 1166,  643,  418,  418,
      418,  418, 1166, 1166,  418, 1166, 1166, 1166, 1166, 1166,
     1166, 1166,  418, 1166, 1166,  418, 1166, 1166, 1166,  418,
     1166,  418,  418,  418, 1166, 1166, 1166,  418,  418,  423,
      423,  423,  423, 1166, 1166, 1166, 1166,  423, 1166, 1166,
     1166, 1166, 1166,  423, 1166,  423,  423, 1166, 1166, 1166,
      423, 1166,  423,  423,  423, 1166, 1166, 1166, 1166,  423,

      426,  426,  426,  426, 1166, 1166,  426, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166,  426, 1166,  426,  426,  426, 1166, 1166, 1166, 1166,
      426,  646,  646,  646,  646,  646,  646,  646,  646,  646,
      646, 1166,  646,  646,  646,  646,  646,  646,  646,  646,
      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
      646,  646,  646,  648, 1166, 1166,  648, 1166, 1166, 1166,
     1166,  648, 1166, 1166, 1166, 1166, 1166, 1166, 1166,  648,
     1166, 1166, 1166, 1166,  648, 1166,  648,  648,  648, 1166,
     1166, 1166, 1166,  648,  427, 1166, 1166,  427, 1166, 1166,

     1166, 1166,  427, 1166,  427,  427,  427, 1166, 1166, 1166,
     1166,  427,  431,  431, 1166,  431,  431,  431,  431,  431,
      431,  431,  431,  431,  431,  431,  431,  431,  431,  431,
      431,  431,  431,  431,  431,  431,  431,  431,  431,  431,
      431,  431,  431,  431,  436,  436, 1166,  436,  436,  436,
      436,  436,  436,  436,  436,  436,  436,  436,  436,  436,
      436,  436,  436,  436,  436,  436,  436,  436,  436,  436,
      436,  436,  436,  436,  436,  436,  441,  441, 1166,  441,
      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,
      441,  441,  441,  441,  441,  441,  441,  441,  441,  441,

      441,  441,  441,  441,  441,  441,  441,  441,  443, 1166,
     1166, 1166, 1166, 1166,  443, 1166,  443,  443,  443,  443,
      443, 1166, 1166,  443,  443,  443,  443,  443,  443, 1166,
     1166, 1166, 1166,  443,  652, 1166, 1166, 1166, 1166, 1166,
      652, 1166,  652, 1166,  652,  652,  652, 1166, 1166,  652,
      652,  652,  652,  652,  652, 1166, 1166, 1166, 1166,  652,
      454,  454,  454,  454, 1166, 1166,  454, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166,  454,  454, 1166, 1166,
     1166,  454, 1166,  454,  454,  454, 1166, 1166, 1166, 1166,
      454,  655, 1166,  655,  655,  655, 1166, 1166, 1166, 1166,

      655,  658,  658,  658,  658, 1166, 1166,  658, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166,  658,  658, 1166,
     1166, 1166,  658, 1166,  658,  658,  658, 1166, 1166, 1166,
     1166,  658,  462,  462,  462,  462, 1166, 1166,  462, 1166,
     1166, 1166, 1166, 1166, 1166, 1166,  462, 1166, 1166,  462,
     1166, 1166, 1166,  462, 1166,  462,  462,  462, 1166, 1166,
     1166,  462,  462,  465,  465,  465,  465, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166,  465, 1166,  465,
      465, 1166, 1166, 1166,  465, 1166,  465,  465,  465, 1166,
     1166, 1166, 1166,  465,  471,  471,  471,  471, 1166, 1166,

      471, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166,  471, 1166,  471,  471,  471,
     1166, 1166, 1166, 1166,  471,  661, 1166, 1166, 1166, 1166,
      661, 1166,  661,  661,  661, 1166, 1166, 1166, 1166,  661,
      474, 1166,  474, 1166, 1166, 1166, 1166,  474, 1166,  474,
      474,  474, 1166, 1166, 1166, 1166,  474,  663, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166,  663, 1166,  663,  663,  663, 1166, 1166, 1166,
     1166,  663,  478,  478, 1166,  478, 1166, 1166, 1166, 1166,
      478, 1166,  478,  478,  478, 1166, 1166, 1166, 1166,  478,

      483,  483, 1166,  483,  483,  483,  483,  483,  483,  483,
      483, 1166,  483,  483,  483,  483,  483,  483,  483,  483,
      483,  483,  483, 1166,  483,  483,  483,  483,  483,  483,
      483,  483,  487, 1166, 1166,  487, 1166, 1166, 1166, 1166,
      487, 1166,  487,  487,  487, 1166, 1166, 1166, 1166,  487,
      489,  489,  489,  489,  489,  489,  489,  489,  489,  489,
      489,  489,  489,  489,  489,  489,  489,  489,  489,  489,
      489, 1166,  489,  489,  489,  489,  489,  489,  489,  489,
      489,  489,  491,  491, 1166,  491,  491,  491,  491,  491,
      491,  491,  491,  491,  491,  491,  491,  491,  491,  491,

      491,  491,  491, 1166,  491,  491,  491,  491,  491,  491,
      491,  491,  491,  491,  670, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,  670,
     1166,  670,  670,  670, 1166, 1166, 1166, 1166,  670,  498,
     1166, 1166,  498, 1166, 1166, 1166, 1166,  498, 1166,  498,
      498,  498, 1166, 1166, 1166, 1166,  498,  502,  502, 1166,
      502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
      502,  502,  502,  502,  502,  502,  502,  502,  502,  502,
      502,  502,  502,  502,  502,  502,  502,  502,  502,  505,
      505, 1166,  505, 1166,  505,  505,  505,  505,  505,  505,

     1166,  505,  505,  505,  505, 1166,  505,  505,  505,  505,
     1166,  505, 1166,  505,  505,  505,  505,  505,  505,  505,
      505,  513,  513, 1166,  513, 1166, 1166, 1166, 1166,  513,
     1166,  513,  513,  513,  521,  521, 1166,  521, 1166,  521,
      521,  521,  521,  521,  521,  521,  521,  521,  521,  521,
      521,  521,  521,  521,  521, 1166,  521, 1166,  521,  521,
      521,  521,  521,  521,  521,  521,  525,  525, 1166,  525,
     1166,  525,  525,  525,  525,  525,  525,  525,  525,  525,
      525,  525,  525,  525,  525,  525,  525, 1166,  525, 1166,
      525,  525,  525,  525,  525,  525,  525,  525,  534, 1166,

     1166,  534, 1166, 1166, 1166, 1166,  534, 1166,  534,  534,
      534, 1166, 1166, 1166, 1166,  534,  538,  538, 1166,  538,
      538,  538,  538,  538,  538, 1166, 1166,  538,  538,  538,
      538,  538,  538,  538,  538,  538,  538, 1166,  538, 1166,
      538,  538,  538,  538,  538,  538,  538,  538,  547, 1166,
      547,  547, 1166, 1166, 1166,  547, 1166,  547,  547,  547,
     1166, 1166, 1166, 1166,  547,  545, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
      545, 1166,  545,  545,  545, 1166, 1166, 1166, 1166,  545,
      552, 1166,  552,  552, 1166, 1166, 1166,  552, 1166,  552,

      552,  552, 1166, 1166, 1166, 1166,  552,  550, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166,  550, 1166,  550,  550,  550, 1166, 1166, 1166,
     1166,  550,  555,  555, 1166,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555, 1166,  555, 1166,  555,  555,  555,  555,
      555,  555,  555,  555,  558, 1166, 1166,  558, 1166, 1166,
     1166, 1166,  558, 1166,  558,  558,  558, 1166, 1166, 1166,
     1166,  558,  560,  560, 1166,  560,  560,  560,  560,  560,
      560,  560,  560,  560,  560,  560, 1166,  560,  560,  560,

      560,  560,  560,  560,  560, 1166,  560,  560,  560,  560,
      560,  560,  560,  560,  563,  563, 1166,  563,  563,  563,
      563,  563,  563,  563,  563, 1166,  563,  563,  563,  563,
      563,  563,  563,  563,  563, 1166,  563, 1166,  563,  563,
      563,  563,  563,  563,  563,  563,  566, 1166,  566,  566,
      566, 1166, 1166, 1166,  566, 1166,  566,  566,  566, 1166,
     1166, 1166, 1166,  566,  568,  568, 1166,  568,  568,  568,
      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
      568,  568,  568,  568,  568,  568,  568, 1166,  568,  568,
      568,  568,  568,  568,  568,  568,  570,  570,  570,  570,

      570,  570,  570,  570,  570, 1166, 1166,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  570,  573,  573,
     1166, 1166, 1166,  573, 1166,  573,  573,  573, 1166, 1166,
     1166, 1166,  573,  710,  710, 1166,  710,  710,  710,  710,
     1166,  710,  710,  710,  710,  710,  710,  710,  710,  710,
      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
      710,  710,  710,  710,  710,  575,  575, 1166,  575, 1166,
     1166, 1166, 1166,  575, 1166,  575,  575,  575,  303, 1166,
      303,  303, 1166,  303, 1166, 1166, 1166,  303,  303, 1166,

      303,  303,  303,  582, 1166, 1166,  582, 1166,  582,  582,
      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
      582,  582,  582,  582,  582,  719,  719, 1166,  719,  719,
      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
      719,  719,  719,  719,  719,  719,  719,  599, 1166, 1166,
      599, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,  599, 1166,
      599,  599,  599,  326, 1166, 1166,  326, 1166, 1166, 1166,

     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166,  326, 1166,  326,  326,  326,  732,
      732, 1166,  732,  732,  732,  732,  732,  732,  732,  732,
      732,  732,  732,  732,  732,  732,  732,  732,  732,  732,
      732,  732,  732,  732,  732,  732,  732,  732, 1166,  732,
      732,  338, 1166, 1166,  338, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166,  338,  338,  338,  338,  338,  629, 1166, 1166,
     1166, 1166, 1166,  629, 1166,  629,  629,  629,  629,  629,
     1166, 1166,  629,  629,  629,  629,  629,  629, 1166, 1166,

     1166, 1166,  629,  363, 1166, 1166, 1166, 1166, 1166,  363,
     1166,  363,  363,  363,  363,  363, 1166, 1166,  363,  363,
      363,  363,  363,  363, 1166, 1166, 1166, 1166,  363,  371,
     1166,  371,  371,  371, 1166, 1166, 1166, 1166,  371,  634,
      634,  634,  634,  634,  634,  634,  634,  634,  634,  634,
      634,  634,  634,  634,  634,  634,  634,  634,  634,  634,
      634,  634,  634,  634,  634,  634,  634,  634,  634,  634,
      634,  637, 1166,  637, 1166, 1166,  637, 1166,  637,  637,
      637, 1166, 1166, 1166, 1166,  637,  638, 1166, 1166, 1166,
     1166, 1166,  638, 1166,  638,  638,  638,  638,  638, 1166,

     1166,  638,  638,  638,  638,  638,  638, 1166, 1166, 1166,
     1166,  638,  395, 1166, 1166, 1166, 1166, 1166,  395, 1166,
      395,  395,  395,  395,  395, 1166, 1166,  395,  395,  395,
      395,  395,  395, 1166, 1166, 1166, 1166,  395,  754,  754,
     1166,  754,  754,  754,  754,  754,  754,  754,  754,  754,
      754,  754,  754,  754,  754,  754,  754,  754,  754,  754,
      754,  754,  754,  754,  754,  754,  754,  754,  754,  754,
      643,  643, 1166, 1166, 1166, 1166, 1166,  643, 1166,  643,
      643,  643,  643,  643, 1166,  643,  643,  643,  643,  643,
      643,  643, 1166, 1166, 1166, 1166,  643,  407,  407, 1166,

     1166, 1166, 1166, 1166,  407, 1166,  407,  407,  407,  407,
      407, 1166,  407,  407,  407,  407,  407,  407,  407, 1166,
     1166, 1166, 1166,  407,  646,  646,  646,  646,  646,  646,
      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
      646,  646,  646,  646,  646,  646,  646,  646,  646,  646,
      646,  646,  646,  646,  646,  646,  648, 1166, 1166,  648,
     1166, 1166, 1166, 1166,  648, 1166, 1166, 1166, 1166, 1166,
     1166, 1166,  648, 1166, 1166, 1166, 1166,  648, 1166,  648,
      648,  648, 1166, 1166, 1166, 1166,  648,  652, 1166, 1166,
     1166, 1166, 1166,  652, 1166,  652,  652,  652,  652,  652,

     1166, 1166,  652,  652,  652,  652,  652,  652, 1166, 1166,
     1166, 1166,  652,  443, 1166, 1166, 1166, 1166, 1166,  443,
     1166,  443,  443,  443,  443,  443, 1166, 1166,  443,  443,
      443,  443,  443,  443, 1166, 1166, 1166, 1166,  443,  764,
      764,  764,  764, 1166, 1166,  764, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166,  764,  764, 1166, 1166, 1166,
      764, 1166,  764,  764,  764, 1166, 1166, 1166, 1166,  764,
      655,  655,  655,  655, 1166, 1166,  655, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166,  655, 1166, 1166,
     1166,  655, 1166,  655,  655,  655, 1166, 1166, 1166, 1166,

      655,  658,  658,  658,  658, 1166, 1166,  658, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166,  658,  658, 1166,
     1166, 1166,  658, 1166,  658,  658,  658, 1166, 1166, 1166,
     1166,  658,  661, 1166, 1166, 1166, 1166,  661, 1166,  661,
      661,  661, 1166, 1166, 1166, 1166,  661,  663, 1166,  663,
      663,  663, 1166, 1166, 1166, 1166,  663,  768, 1166,  768,
     1166, 1166, 1166, 1166,  768, 1166,  768,  768,  768, 1166,
     1166, 1166, 1166,  768,  670, 1166,  670,  670,  670, 1166,
     1166, 1166, 1166,  670,  774, 1166, 1166, 1166, 1166,  774,
     1166,  774,  774,  774, 1166, 1166, 1166, 1166,  774,  785,

      785,  785,  785,  785,  785,  785,  785,  785,  785,  785,
      785,  785,  785,  785,  785,  785, 1166,  785,  785,  785,
      785, 1166,  785, 1166, 1166,  785,  785,  785,  785,  785,
      785,  545, 1166,  545,  545,  545, 1166, 1166, 1166, 1166,
      545,  550, 1166,  550,  550,  550, 1166, 1166, 1166, 1166,
      550,  710,  710, 1166,  710,  710,  710,  710,  710,  710,
      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
      710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
      710,  710,  710,  809, 1166, 1166,  809, 1166, 1166, 1166,
     1166,  809, 1166,  809,  809,  809,  310, 1166,  310, 1166,

      310,  310, 1166,  310, 1166, 1166, 1166,  310,  310, 1166,
      310,  310,  310,  719,  719, 1166,  719,  719,  719,  719,
      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
      719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
      719,  719,  719,  719,  719,  326, 1166, 1166,  326, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166,  326, 1166,  326,  326,
      326,  732,  732, 1166,  732,  732,  732,  732,  732,  732,
      732,  732,  732,  732,  732,  732,  732,  732,  732,  732,
      732,  732,  732,  732,  732,  732,  732,  732,  732,  732,

      732,  732,  732,  736,  736,  736,  736,  736,  338, 1166,
     1166,  338, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,  338,
      338,  338,  338,  338,  303,  303, 1166,  303, 1166, 1166,
     1166, 1166, 1166, 1166, 1166,  303, 1166,  303,  303, 1166,
      303,  303, 1166, 1166,  303,  303, 1166,  303,  303,  303,
     1166,  303,  363, 1166, 1166, 1166, 1166, 1166,  363, 1166,
      363,  363,  363,  363,  363, 1166, 1166,  363,  363,  363,
      363,  363,  363, 1166, 1166, 1166, 1166,  363,  634,  634,
      634,  634,  634,  634,  634,  634,  634,  634,  634,  634,

      634,  634,  634,  634,  634,  634,  634,  634,  634,  634,
      634,  634,  634,  634,  634,  634,  634,  634,  634,  634,
      395, 1166, 1166, 1166, 1166, 1166,  395, 1166,  395,  395,
      395,  395,  395, 1166, 1166,  395,  395,  395,  395,  395,
      395, 1166, 1166, 1166, 1166,  395,  754,  754, 1166,  754,
      754,  754,  754,  754,  754,  754,  754,  754,  754,  754,
      754,  754,  754,  754,  754,  754,  754,  754,  754,  754,
      754,  754,  754,  754,  754,  754,  754,  754,  407,  407,
     1166, 1166, 1166, 1166, 1166,  407, 1166,  407,  407,  407,
      407,  407, 1166,  407,  407,  407,  407,  407,  407,  407,

     1166, 1166, 1166, 1166,  407,  443, 1166, 1166, 1166, 1166,
     1166,  443, 1166,  443,  443,  443,  443,  443, 1166, 1166,
      443,  443,  443,  443,  443,  443, 1166, 1166, 1166, 1166,
      443,  842, 1166,  842,  842,  842, 1166, 1166, 1166, 1166,
      842,  764,  764,  764,  764, 1166, 1166,  764, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166,  764,  764, 1166,
     1166, 1166,  764, 1166,  764,  764,  764, 1166, 1166, 1166,
     1166,  764,  655,  655,  655,  655, 1166, 1166,  655, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,  655,
     1166, 1166, 1166,  655, 1166,  655,  655,  655, 1166, 1166,

     1166, 1166,  655,  768, 1166,  768, 1166, 1166, 1166, 1166,
      768, 1166,  768,  768,  768, 1166, 1166, 1166, 1166,  768,
      774, 1166, 1166, 1166, 1166,  774, 1166,  774,  774,  774,
     1166, 1166, 1166, 1166,  774,  887,  887, 1166,  887, 1166,
     1166, 1166, 1166,  887, 1166,  887,  887,  887,  893,  893,
     1166,  893,  893,  893,  893,  893,  893,  893,  893,  893,
      893,  893,  893,  893,  893,  893,  893,  893,  893,  893,
      893,  893,  893,  893,  893,  893,  893,  893,  893,  893,
      821,  821,  821,  821,  821,  821,  821,  821,  821,  821,
      821,  821,  821,  821,  821,  821,  821,  821,  821,  821,

      821,  821, 1166,  821, 1166, 1166, 1166,  821,  821,  821,
      821,  821,  915,  915,  915,  915, 1166, 1166,  915, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,  915,  915,
     1166, 1166, 1166,  915, 1166,  915,  915,  915, 1166, 1166,
     1166, 1166,  915,  940,  940,  940,  940,  940,  940,  940,
      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
     1166,  940,  940,  940,  940, 1166,  940, 1166,  940, 1166,
      940,  940,  940,  940,  940,  967,  967, 1166,  967,  967,
      967,  967,  967,  967,  967,  967,  967,  967,  967,  967,
      967,  967,  967,  967,  967,  967,  967,  967,  967,  967,

      967,  967,  967,  967,  967,  967,  967, 1011, 1011, 1011,
     1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011,
     1011, 1011, 1011, 1011, 1166, 1011, 1011, 1011, 1011, 1166,
     1011, 1166, 1166, 1166, 1011, 1011, 1011, 1011, 1011, 1012,
     1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012,
     1012, 1012, 1012, 1012, 1012, 1012, 1166, 1012, 1012, 1012,
     1012, 1166, 1012, 1166, 1166, 1166, 1012, 1012, 1012, 1012,
     1012, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063,
     1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1166, 1063,
     1063, 1063, 1063, 1166, 1063, 1166, 1166, 1166, 1063, 1063,

     1063, 1063, 1063, 1074, 1074, 1074, 1074, 1074, 1074, 1074,
     1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074,
     1166, 1074, 1074, 1074, 1074, 1166, 1074, 1166, 1166, 1166,
     1074, 1074, 1074, 1074, 1074,   85, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,

     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166
    } ;

static yyconst flex_int16_t yy_chk[9811] =
    {   0,
        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,    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,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    4,   21,   22,    4,   23,   21,
       22,   24,   23,  314,   47,   24,    4,    4,   35,    4,
        4,   36,   39,    4,    4,    4,   48,   40,   53,   35,

       53,   57,   36,   39,  100,  314,  117,  100,   40,   43,
       43,  117,   43,   58,   43,   39,   21,   22,  586,   23,
       40,   53,   24,   44,   44,   47,   44,  305,   44,   35,
      305,   63,   36,   39,   64,   81,   82,   48,   40,   53,
      586,  594,   57,    4,    5,    5,    5,    5,    5,    5,
        5,   43,    5,    5,   58,    5,    5,    5,   45,    5,
       45,    5,    5,  594,   75,   44,    5,    5,    5,   45,
       51,   51,   63,   51,   45,   64,   81,   82,   75, 1161,
       83,   45,   52,   52,   84,   52,    5,    5,    5,   83,
       83,  216,  306,   84,   84,   76,  216,  206,  258,   45,

      206,  306,  206,  258,   54,   75,   54,   89,   89,   76,
       89,  281,   51,    5,    5,    5,    5,    6,    6,    6,
        6,    6,    6,    6,   52,    6,    6,   54,    6,    6,
        6,   46,    6,   46,    6,    6,   76, 1159,  281,    6,
        6,    6,   46,   61,   55,   54,   55,   46,  522,   89,
      522,  263,   61,   61,   46,   93,  263,  109,  109,    6,
        6,    6,  109,  402,   93,  529,   61,   55,  127,  127,
      127,  127,   46,   93,  104,  127,  104,  104,  104,  529,
     1157,  402,  104,  109,   61,   55,    6,    6,    6,    6,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,

        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,

       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   13,   13,
       13,   13,   13,   13,   13,   69,   13,   13,   62,   13,
       13,   13,   56,   13,   56,   13,   13,   62,   62,  232,
       13,   13,   13,  232,   70,   71,  561,   97,   69,   97,
       97,   62,   97,   97,   97,   56,  105,   72,   97,  105,
       13,   13,   13, 1154, 1151,  561,   69,   70,   71,   62,
      197,  105,  237,   56,  233,  311,  237,  105,  311,  233,

       72,  197,  237,  233,  237,   70,   71,   13,   13,   13,
       13,   14,   14,   14,   14,   14,   14,   14,   72,   14,
       14,   77,   14,   14,   14,   78,   14,   88,   14,   14,
       88,  197,   77,   14,   14,   14,   78,   94,  332,   94,
       94,   94,   94,  101,   77,  105,  101,  332,   78,  315,
       94,   88,  313,   14,   14,   14,  118,  118,  317,  118,
      126,  126,   77,  126, 1150, 1146,   78,  101,   94,   88,
      315,  320,  110,  110,  313,  313,  313,  110,  557,  317,
       14,   14,   14,   14,   15,   15,   15,   15,   15,   15,
       15,  320,   15,   15, 1143,   15,   15,   15,  110,   15,

      118,   15,   15, 1142,  126,  557,   15,   15,   15,  102,
      226,  226,  102,  226,  318,  102,  120,  120,  120,  120,
      121,  121,  121,  121,  102,  927,   15,   15,   15, 1141,
      102,  347,  120,  102,  347,  318,  121,  120,  131,  131,
      927,  121,  331,  131,  352,  132,  132,  352,  153,  153,
      132,  153,  226,   15,   15,   15,   15,   16,   16,   16,
       16,   16,   16,   16,  131,   16,   16, 1140,   16,   16,
       16,  132,   16,  321,   16,   16,  331,  873,  102,   16,
       16,   16,  103,  103,  325,  103,  125,  125,  125,  125,
     1139,  873,  153,  103,  321,  103,  103,  103,  103,   16,

       16,   16,  125,  331,  641,  325,  103,  125,  125,  149,
      149,  149,  149, 1138,  349,  349,  149,  349,  181,  181,
      181,  181,  641, 1134,  103,  181,   16,   16,   16,   16,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,

       17,   17,   17,   17,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   25,   25,
       25,   25,   25,   25,   25,  338,   25,   25,  338,   25,
       25,   25, 1148,   25,  293,   25,   25,  293,  869,  589,

       25,   25,   25,  296,  296,  869,  296, 1148,  371,  122,
      122,  122,  122,  371,  157,  157,  122,  157,  293,  589,
       25,   25,   25,  111,  111,  122,  111,  338,  161,  161,
      122,  161,  355,  355,  576,  355,  293,  576,  373,  111,
      111,  545,  316,  373,  111,  296,  545,   25,   25,   25,
       25,   26,   26,   26,   26,   26,   26,   26,  157,   26,
       26,  316,   26,   26,   26,  111,   26,  111,   26,   26,
      138, 1133,  161,   26,   26,   26,  143,  143,  143,  143,
      122,  138,  138,  316,  165,  165,  138,  599,  138,  165,
      599,  547,  143,   26,   26,   26,  547,  143,  144,  144,

      144,  144,  366,  366, 1131,  366,  337,  138,  337,  337,
      165,  337,  337,  337,  144,  375,  375,  337,  375,  144,
       26,   26,   26,   26,   27,   27,   27,   27,   27,   27,
       27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
       27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
       27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
       27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
       27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
       27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
       27,   27,   27,   27,   27,   27,   27,   27,   29,   29,

       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,

       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   31,   31,   31,   33,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,

       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   41,   41,   41,   41,   41,   41,

       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   49,   49,
       49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
       49,   49,   49,   49,  172,  172,   49,  172, 1130,  550,
       49,   49,   49,   49,  550,  723,  552,  123,  123,  123,

      123,  552, 1129,  591,  123,  148,  148,  148,  148,  595,
       49,   49,   49,  123,  426,  148,  723,  426,  123,  180,
      180,  148,  180,  591,  426, 1128,  148,  340,  172,  595,
      340,  500,  186,  186,  500,  186,  500,   49,   49,   49,
       49,   49,   50,   50,   50,   50,   50,   50,   50,   50,
       50,   50,   50,   50,   50,   50,   50,   50,  134,  134,
       50,  134, 1163,  180,   50,   50,   50,   50,  123,  340,
     1127,  139,  166,  166,  134,  134,  186,  166,  590,  134,
     1163,  590,  139,  139,   50,   50,   50,  139,  238,  139,
      340, 1120,  350,  238,  350,  350,  350,  238,  166, 1136,

      134,  590,  134,  238, 1120,  238,  387,  387,  139,  387,
     1136,   50,   50,   50,   50,   50,   59,   59,   59,   59,
       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
       59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
       65,   65,   65,   65,   65,   65,   65,   65,   65,   65,

       65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
       65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
       65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
       65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
       65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
       65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
       65,   65,   65,   65,   67,   67,   67,   67,   67,   67,
       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,

       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
       67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
       67,   67,   67,   67,   67,   67,   67,   67,   73,   73,
       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,

       73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
       73,   73,   79,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   95,  857, 1156,  140,
      145,  145,  145,  145, 1126, 1156,  596,  145,  364,   95,

      140,  140,  364,  857, 1125,  140,  145,  140,  396,   95,
       95,  145,  396, 1124,   95,   95,  596,  339,   95,   95,
      339,   95,   95,  364,  189,  189,  140,  189,  602,   95,
       95,  602, 1123,  396,   95,   95,  174,  174,  174,  174,
       95,   95,   95,   95,   95,   95,   96,   96,   96,   96,
      142,  142,  174,  142, 1100,  142, 1100,  174, 1115,  339,
     1114,  145,   96,   96,   96, 1112,  142,  142,  189,  363,
      363,  142,  339,  142,  363,  357,  192,  192,  357,  192,
      167,  167,   96,  167,  297,  297,   96,  297,   96,   96,
       96, 1111,  142, 1110,  142,  363,  167,  167, 1109,  357,

      609,  167,   96,  609,  398,  398,   96,  398,   96, 1108,
       96,   96,   98,   98,   98,   98,  146,  146,  146,  146,
      192, 1160,  167,  146,  167, 1160,  297, 1107,   98,   98,
       98,  341,  146,  715,  341,  411,  411,  146,  411,  171,
      171,  171,  171, 1106,  201,  201,  171,  201,   98,  718,
       98,  489,   98,  715,   98,   98,   98,  171,  171,  171,
      171,  609,  489,  175,  175,  175,  175,  344,   98,  718,
      344, 1105,   98,  341,   98, 1104,   98,   98,   99,  175,
      341,   99,  219,  219,  175,  219,  201,  146,  201, 1103,
       99,   99,  489,   99,   99,  365,  365,   99,   99,   99,

      365, 1094,   99,  176,  176,  176,  176, 1093, 1080,  344,
      176,  177,  177,  177,  177, 1079,  344, 1077,  177,  176,
       99,  365, 1076,  721,  176,  344,  219,  177,  200,  200,
      200,  200,  177, 1070,  179,  179,  179,  179,  603,  224,
      224,  603,  224,  721,  200,  200,  200,   99,  137,  137,
      179,  137,  137,  137,  137,  179,  137,  137, 1069,  137,
      137,  137, 1068,  137,  200,  137,  137, 1067,  818, 1066,
      137,  137,  137,  342,  176,  408,  342,  241,  241,  408,
      241, 1065,  177,  224,  245,  245, 1064,  245,  818,  603,
      137,  137,  137,  200,  251,  251, 1062,  251,  254,  254,

      408,  254,  319,  428,  428,  319,  428,  343,  345,  444,
      343,  345, 1036,  444,  343,  342, 1035,  137,  137,  137,
      137,  241, 1034,  433,  433,  319,  433,  319,  245,  358,
      342,  358,  358,  358,  444, 1033,  605,  358,  251,  605,
      319, 1032,  254,  294,  294,  294,  294,  319,  343,  343,
      345,  348,  351,  592,  348,  351,  592, 1031, 1030,  294,
      294,  294,  319, 1029,  395,  395,  348,  351,  345,  395,
     1028, 1027,  348,  351,  353,  343,  592,  353,  359,  294,
     1026,  359,  354,  354,  605,  354,  294,  294, 1025,  353,
      395,  368,  368,  359, 1024,  353,  368,  354,  360,  359,

     1023,  360, 1022,  354, 1021,  294,  354,  294,  294,  295,
      295,  295,  295,  360, 1020,  438,  438,  368,  438,  360,
      348,  351, 1019, 1018, 1017,  295,  295,  295,  446,  446,
      368,  446, 1016,  378,  378,  378,  378, 1014, 1013,  379,
      379,  379,  379,  353, 1009,  295,  379,  359, 1008,  378,
     1007,  354,  295,  295,  378,  379,  381,  381,  381,  381,
      379,  455,  455,  381,  455,  466,  466,  360,  466, 1006,
     1005,  295,  381,  295,  295,  309,  622,  381,  309,  622,
      309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
      309,  309,  309,  309, 1004, 1003, 1002,  309,  309,  309,

      309, 1001, 1000,  999,  382,  382,  382,  382,  475,  475,
      379,  475,  997,  385,  385,  385,  385,  309,  309,  309,
      382,  383,  383,  383,  383,  382,  382,  381,  383,  385,
      386,  386,  386,  386,  385,  385,  390,  390,  390,  390,
      996,  995,  994,  390,  309,  309,  309,  309,  309,  326,
      480,  480,  326,  480,  993,  326,  326,  326,  326,  384,
      384,  384,  384,  992,  991,  990,  384,  391,  391,  391,
      391,  326,  326,  326,  391,  384,  397,  397,  407,  604,
      384,  397,  604,  400,  400,  989,  988,  987,  400,  407,
      407,  326,  409,  985,  407,  984,  407,  414,  414,  414,

      414,  983,  397,  409,  409,  980,  979,  970,  409,  400,
      409,  484,  484,  414,  484,  407,  969,  326,  414,  326,
      326,  346,  400,  967,  346,  450,  450,  450,  450,  409,
      384,  966,  413,  346,  346,  965,  346,  346,  604,  964,
      346,  346,  346,  413,  413,  346,  450,  963,  413,  962,
      413,  415,  415,  415,  415,  961,  960,  959,  415,  417,
      417,  417,  417,  346,  958,  628,  417,  415,  628,  413,
      495,  495,  415,  495,  957,  417,  419,  419,  419,  419,
      417,  702,  413,  419,  702,  956,  424,  424,  424,  424,
      346,  403,  403,  424,  403,  403,  403,  403,  713,  403,

      403,  713,  403,  403,  403,  955,  403,  726,  403,  403,
      726,  954,  953,  403,  403,  403,  418,  418,  418,  418,
      510,  510,  415,  510,  443,  443,  418,  952,  684,  443,
      417,  684,  418,  403,  403,  403,  951,  418,  420,  420,
      420,  420,  950,  949,  948,  420,  425,  425,  425,  425,
      443,  946,  944,  425,  420,  514,  514,  941,  514,  420,
      403,  403,  403,  403,  404,  404,  939,  404,  404,  404,
      404,  611,  404,  404,  611,  404,  404,  404,  938,  404,
      802,  404,  404,  802,  937,  684,  404,  404,  404,  421,
      421,  421,  421,  445,  445,  936,  935,  610,  445,  421,

      610,  423,  423,  423,  423,  421,  404,  404,  404,  420,
      421,  423,  822,  448,  448,  822,  934,  423,  448,  445,
      611,  933,  423,  449,  449,  449,  449,  932,  531,  531,
      449,  531,  931,  404,  404,  404,  404,  535,  535,  448,
      535,  449,  449,  449,  449,  610,  452,  452,  452,  452,
      930,  929,  448,  452,  454,  454,  454,  454,  928,  539,
      539,  454,  539,  926,  452,  452,  452,  452,  458,  458,
      458,  458,  454,  454,  454,  454,  459,  459,  459,  459,
      925,  924,  923,  459,  458,  462,  462,  462,  462,  458,
      922,  921,  459,  461,  461,  461,  461,  459,  920,  918,

      461,  462,  517,  517,  614,  517,  462,  614,  917,  461,
      463,  463,  463,  463,  461,  916,  912,  463,  464,  464,
      464,  464,  911,  542,  542,  464,  542,  465,  465,  465,
      465,  708,  910,  907,  464,  469,  469,  469,  469,  464,
      629,  629,  469,  465,  517,  629,  614,  459,  465,  470,
      470,  470,  470,  906,  630,  630,  470,  614,  623,  630,
      623,  623,  623,  896,  461,  708,  629,  735,  600,  615,
      735,  600,  615,  895,  617,  600,  616,  617,  893,  616,
      630,  618,  619,  859,  618,  619,  859,  890,  730,  464,
      581,  730,  708,  581,  889,  581,  581,  581,  581,  581,

      581,  581,  581,  581,  581,  581,  581,  581,  581,  600,
      887,  615,  581,  581,  581,  581,  617,  735,  616,  886,
      615,  885,  617,  618,  619,  620,  621,  621,  620,  621,
      619,  884,  581,  581,  581,  616,  600,  624,  624,  883,
      624,  621,  618,  720,  631,  631,  720,  621,  730,  631,
      627,  627,  624,  627,  626,  626,  882,  626,  624,  581,
      581,  581,  581,  581,  881,  627,  720,  620,  880,  626,
      631,  627,  638,  638,  620,  626,  731,  638,  626,  731,
      879,  631,  634,  634,  634,  634,  635,  635,  635,  635,
      947,  639,  639,  947, 1078,  621,  639, 1078,  638,  640,

      640,  878,  643,  877,  640,  634,  624,  652,  652,  635,
      644,  876,  652,  643,  643,  875,  874,  639,  643,  627,
      643,  644,  644,  626,  647,  640,  644,  647,  644,  731,
      653,  653,  872,  652,  647,  653,  640,  642,  642,  643,
      642,  642,  642,  642,  871,  642,  642,  644,  642,  642,
      642,  645,  642,  870,  642,  642,  653,  868,  867,  642,
      642,  642,  645,  645,  866,  648,  865,  645,  648,  645,
      722,  733,  864,  722,  733,  648,  863,  654,  654,  642,
      642,  642,  654,  656,  656,  656,  656,  712,  645,  712,
      656,  712,  712,  722,  734,  826,  862,  734,  826,  645,

      712,  861,  740,  654,  656,  740,  642,  642,  642,  642,
      655,  655,  655,  655,  654,  860,  858,  655,  657,  657,
      657,  657,  810,  856,  810,  657,  810,  810,  655,  655,
      655,  655,  855,  733,  854,  810,  657,  657,  657,  657,
      658,  658,  658,  658,  740,  853, 1132,  658,  826, 1132,
     1145, 1147,  734, 1145, 1147,  740,  852,  851,  658,  658,
      658,  658,  729,  729,  729,  729,  729,  729,  729,  729,
      729,  729,  729,  729,  729,  729,  729,  729,  729,  729,
      729,  729,  729,  729,  729,  729,  729,  729,  729,  729,
      729,  729,  729,  729,  729,  729,  729,  729,  729,  729,

      729,  729,  729,  729,  729,  729,  729,  729,  729,  729,
      729,  729,  729,  729,  729,  729,  729,  729,  729,  729,
      729,  729,  729,  729,  729,  729,  729,  729,  729,  729,
      729,  729,  729,  729,  729,  729,  737,  823,  850,  737,
      823,  815,  743, 1152,  815,  743, 1152, 1155,  747,  747,
     1155,  744,  744,  747,  744,  745,  745,  849,  745,  848,
      765,  765,  765,  765,  815,  847,  744,  765,  816,  846,
      745,  816,  744,  845,  747,  844,  745,  843,  737,  739,
      741,  765,  739,  741,  743,  742,  823,  824,  742,  747,
      824,  816,  743,  737,  738,  738,  738,  738,  738,  738,

      738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
      738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
      744,  739,  741,  840,  745,  746,  746,  742,  746,  749,
      749,  749,  749,  839,  838,  835,  738,  738,  738,  739,
      746,  834,  741,  742,  824,  825,  746,  972,  831,  746,
      972,  831,  749,  751,  751,  751,  751,  753,  753,  820,
      819,  814,  753,  738,  738,  738,  738,  738,  763,  763,
      763,  763,  813,  812,  809,  763,  751,  827,  829,  973,
      827,  829,  973,  753,  807,  806,  763,  763,  763,  763,
      831,  805,  761,  761,  746,  804,  972,  761,  753,  754,

      754,  831,  754,  754,  754,  754,  830,  754,  754,  830,
      754,  754,  754,  756,  754,  803,  754,  754,  761,  827,
      829,  754,  754,  754,  756,  756,  827,  829,  973,  756,
      801,  756,  897,  761,  800,  897,  799,  764,  764,  764,
      764,  754,  754,  754,  764,  798,  797,  796,  830, 1097,
      756,  891, 1097,  795,  891,  764,  764,  764,  764,  894,
      794,  898,  894,  830,  898,  756,  793,  792,  754,  754,
      754,  754,  755,  755,  891,  755,  755,  755,  755,  897,
      755,  755,  894,  755,  755,  755,  791,  755,  901,  755,
      755,  901,  778,  778,  755,  755,  755,  778, 1097,  968,

      778,  778,  968,  832,  832,  778,  832,  833,  833,  778,
     1158,  778,  833, 1158,  755,  755,  755,  900,  832,  790,
      900,  788,  968,  898,  832,  787,  786,  784, 1037,  903,
      901, 1037,  903,  833,  901,  904,  971,  783,  904,  971,
      833,  755,  755,  755,  755,  828,  828,  828,  828,  828,
      828,  828,  828,  828,  828,  828,  828,  828,  828,  828,
      828,  828,  828,  828,  828,  828,  828,  828,  828,  828,
      828,  903,  832,  836,  836,  841,  841,  904,  836,  900,
      841,  971,  837,  902,  782,  781,  902,  828,  828,  828,
     1037,  903, 1038,  837,  837, 1038,  780,  904,  837,  836,

      837,  841,  842,  842,  842,  842,  836,  974,  841,  842,
      974,  779,  777,  776,  828,  828,  828,  828,  828,  837,
      842,  842,  842,  842,  909,  902,  837,  905,  905,  775,
      902,  773,  905,  908,  908,  909,  909,  772,  908,  771,
      909,  770,  909,  913,  913,  769, 1044, 1044,  913,  974,
      768, 1044, 1038,  905,  767,  976,  766,  905,  976,  908,
      760,  909,  759,  908,  758,  909,  752,  974,  975,  913,
      748,  975, 1044,  913,  914,  914,  914,  914,  736,  732,
      725,  914,  915,  915,  915,  915,  724,  977, 1039,  915,
      977, 1039,  914,  914,  914,  914, 1042,  976,  719, 1042,

      915,  915,  915,  915,  976,  982,  978,  978,  717, 1118,
      975,  978, 1118,  975,  981,  981,  982,  982,  716,  981,
      710,  982,  709,  982, 1041,  986,  986, 1041, 1043,  977,
      986, 1043,  978,  707, 1040, 1040,  977, 1040, 1042,  706,
      981,  705,  982, 1048, 1039,  703, 1098, 1047, 1047, 1098,
      978,  986, 1047,  701, 1048, 1048, 1042, 1118,  981, 1048,
      982, 1048, 1052, 1052,  700, 1101, 1041, 1052, 1101,  986,
     1043, 1099, 1099, 1047, 1099, 1102, 1040,  696, 1102, 1119,
     1048,  694, 1119,  692, 1043,  691, 1041, 1121, 1052, 1122,
     1121, 1135, 1122,  690, 1135, 1137, 1149, 1162, 1137, 1149,

     1162, 1165, 1165, 1098, 1165,  689, 1259, 1101, 1259, 1259,
     1259,  688, 1322, 1099, 1101, 1322, 1322, 1102, 1333,  687,
     1333, 1333, 1333, 1336, 1119, 1336, 1336, 1336,  686, 1121,
      685, 1122, 1102,  683, 1122, 1121, 1364, 1137, 1149, 1364,
     1364,  682,  681, 1165,  680, 1337, 1135, 1337, 1337, 1337,
     1137, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
     1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
     1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
     1167, 1167, 1167, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,

     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168,
     1168, 1168, 1168, 1168, 1168, 1169, 1169, 1169, 1169, 1169,
     1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
     1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
     1169, 1169, 1169, 1169, 1169, 1169, 1169, 1170, 1170, 1170,
     1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170,
     1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170,
     1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1171,
     1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
     1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,

     1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
     1171, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172,
     1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172,
     1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172,
     1172, 1172, 1172, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
     1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
     1173, 1173, 1173, 1173, 1173, 1174, 1174, 1174, 1174, 1174,
     1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174,
     1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174,

     1174, 1174, 1174, 1174, 1174, 1174, 1174, 1175, 1175, 1175,
     1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
     1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
     1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1176,
     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
     1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
     1176, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
     1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,

     1177, 1177, 1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
     1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
     1178, 1178, 1178, 1178, 1178, 1179, 1179, 1179, 1179, 1179,
     1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
     1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
     1179, 1179, 1179, 1179, 1179, 1179, 1179, 1180, 1180, 1180,
     1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
     1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
     1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1181,

     1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
     1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
     1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
     1181, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
     1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
     1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
     1182, 1182, 1182, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
     1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
     1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
     1183, 1183, 1183, 1183, 1183, 1184, 1184, 1184, 1184, 1184,

     1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
     1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
     1184, 1184, 1184, 1184, 1184, 1184, 1184, 1185, 1185, 1185,
     1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185,
     1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185,
     1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1186,
     1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186,
     1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186,
     1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186,
     1186, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,

     1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
     1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
     1187, 1187, 1187, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
     1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
     1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
     1188, 1188, 1188, 1188, 1188, 1189, 1189, 1189, 1189, 1189,
     1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189,
     1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189,
     1189, 1189, 1189, 1189, 1189, 1189, 1189, 1190, 1190, 1190,
     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,

     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
     1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1191,
     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
     1191, 1192, 1192,  679, 1192, 1192, 1192, 1192, 1192, 1192,
     1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192,
     1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192, 1192,
     1192, 1192, 1192, 1193, 1369,  678, 1369, 1369, 1369,  677,
      676,  675,  674,  673,  672,  671,  668,  667, 1193,  666,

     1193, 1193, 1193,  665,  664,  663,  660, 1193, 1194,  659,
     1194, 1194,  651, 1194,  650,  649,  646, 1194, 1194,  637,
     1194, 1194, 1194, 1195,  636, 1195, 1195, 1195, 1195,  633,
     1195,  598,  597,  588, 1195, 1195, 1195, 1195, 1195, 1195,
     1196, 1196, 1196,  587,  585,  583,  582,  580,  577,  575,
      573,  572,  571, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
     1196, 1196,  569, 1196, 1196, 1197,  567, 1197, 1197,  565,
     1197,  562,  559,  556, 1197, 1197,  554, 1197, 1197, 1197,
     1198, 1198, 1198,  553,  551,  549,  548,  546,  544,  541,
      537,  533,  530, 1198, 1198, 1198, 1198, 1198, 1198, 1198,

     1198, 1198,  528, 1198, 1198, 1199, 1199,  527, 1199, 1199,
     1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
     1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
     1199, 1199, 1199, 1199, 1199, 1199, 1199, 1200,  526,  524,
      523,  520,  519, 1200,  516, 1200, 1200, 1200, 1200, 1200,
      512,  509, 1200, 1200, 1200, 1200, 1200, 1200,  508,  504,
      502,  501, 1200, 1201, 1201, 1201, 1201, 1201, 1201, 1201,
     1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201,
     1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201,
     1201, 1201, 1201, 1201, 1201, 1202,  499, 1202, 1202, 1202,

      497,  494,  492,  491, 1202, 1203,  488, 1203, 1203,  486,
      482,  479, 1203,  478, 1203, 1203, 1203,  477,  474,  473,
      472, 1203, 1204, 1204, 1204, 1204,  468,  460, 1204,  457,
      453,  441,  440,  436,  435,  431, 1204,  430,  416, 1204,
      410,  405,  401, 1204,  393, 1204, 1204, 1204,  392,  389,
      380, 1204, 1204, 1205, 1205, 1205, 1205,  377,  374,  372,
      369,  361,  333,  330,  329,  328,  327, 1205,  323, 1205,
     1205, 1205,  322,  312, 1205,  310, 1205, 1205, 1205,  303,
      302,  299,  298, 1205, 1206, 1206, 1206, 1206,  288,  285,
     1206,  280,  276,  275,  272,  268,  267,  264,  259,  228,

      215,  214,  213,  209,  208, 1206,  204, 1206, 1206, 1206,
      199,  196,  188,  185, 1206, 1207, 1207,  178, 1207, 1207,
     1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
     1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
     1207, 1207, 1207, 1207, 1207, 1207, 1207, 1208,  164,  160,
      156,  147,  133, 1208,  130, 1208, 1208, 1208, 1208, 1208,
      124,  112, 1208, 1208, 1208, 1208, 1208, 1208,  108,   92,
       91,   90, 1208, 1209, 1209,   85, 1209, 1209, 1209, 1209,
     1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,
     1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 1209,

     1209, 1209, 1209, 1209, 1209, 1210, 1210,    8,    7,    0,
        0,    0, 1210,    0, 1210, 1210, 1210, 1210, 1210,    0,
     1210, 1210, 1210, 1210, 1210, 1210, 1210,    0,    0,    0,
        0, 1210, 1211, 1211, 1211, 1211,    0,    0, 1211,    0,
        0,    0,    0,    0,    0,    0, 1211,    0,    0, 1211,
        0,    0,    0, 1211,    0, 1211, 1211, 1211,    0,    0,
        0, 1211, 1211, 1212, 1212, 1212, 1212,    0,    0,    0,
        0, 1212,    0,    0,    0,    0,    0, 1212,    0, 1212,
     1212,    0,    0,    0, 1212,    0, 1212, 1212, 1212,    0,
        0,    0,    0, 1212, 1213, 1213, 1213, 1213,    0,    0,

     1213,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0, 1213,    0, 1213, 1213, 1213,
        0,    0,    0,    0, 1213, 1214,    0,    0, 1214,    0,
        0,    0,    0, 1214,    0, 1214, 1214, 1214,    0,    0,
        0,    0, 1214, 1215, 1215,    0, 1215, 1215, 1215, 1215,
     1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
     1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
     1215, 1215, 1215, 1215, 1215, 1216, 1216,    0, 1216, 1216,
     1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
     1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,

     1216, 1216, 1216, 1216, 1216, 1216, 1216, 1217, 1217,    0,
     1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
     1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
     1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1218,
        0,    0,    0,    0,    0, 1218,    0, 1218, 1218, 1218,
     1218, 1218,    0,    0, 1218, 1218, 1218, 1218, 1218, 1218,
        0,    0,    0,    0, 1218, 1219,    0, 1219, 1219, 1219,
        0,    0,    0,    0, 1219, 1220, 1220, 1220, 1220,    0,
        0, 1220,    0,    0,    0,    0,    0,    0,    0,    0,
        0, 1220, 1220,    0,    0,    0, 1220,    0, 1220, 1220,

     1220,    0,    0,    0,    0, 1220, 1221, 1221, 1221, 1221,
        0,    0, 1221,    0,    0,    0,    0,    0,    0,    0,
     1221,    0,    0, 1221,    0,    0,    0, 1221,    0, 1221,
     1221, 1221,    0,    0,    0, 1221, 1221, 1222, 1222, 1222,
     1222,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0, 1222,    0, 1222, 1222,    0,    0,    0, 1222,    0,
     1222, 1222, 1222,    0,    0,    0,    0, 1222, 1223, 1223,
     1223, 1223,    0,    0, 1223,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1223,
        0, 1223, 1223, 1223,    0,    0,    0,    0, 1223, 1224,

        0, 1224, 1224, 1224,    0,    0,    0,    0, 1224, 1225,
        0, 1225,    0,    0,    0,    0, 1225,    0, 1225, 1225,
     1225,    0,    0,    0,    0, 1225, 1226, 1226,    0, 1226,
        0,    0,    0,    0, 1226,    0, 1226, 1226, 1226,    0,
        0,    0,    0, 1226, 1227, 1227,    0, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227,    0, 1227, 1227, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1227,    0, 1227, 1227,
     1227, 1227, 1227, 1227, 1227, 1227, 1228,    0,    0, 1228,
        0,    0,    0,    0, 1228,    0, 1228, 1228, 1228,    0,
        0,    0,    0, 1228, 1229, 1229, 1229, 1229, 1229, 1229,

     1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229,
     1229, 1229, 1229, 1229, 1229,    0, 1229, 1229, 1229, 1229,
     1229, 1229, 1229, 1229, 1229, 1229, 1230, 1230,    0, 1230,
     1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230,
     1230, 1230, 1230, 1230, 1230, 1230, 1230,    0, 1230, 1230,
     1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1231, 1231,
        0, 1231,    0, 1231, 1231, 1231,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0, 1231, 1231, 1231,    0,
     1231, 1231,    0,    0,    0,    0,    0, 1231, 1232,    0,
        0, 1232,    0,    0,    0,    0, 1232,    0, 1232, 1232,

     1232,    0,    0,    0,    0, 1232, 1233, 1233,    0, 1233,
     1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
     1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
     1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1234, 1234,
        0, 1234,    0, 1234, 1234, 1234, 1234, 1234, 1234,    0,
     1234, 1234, 1234, 1234,    0, 1234, 1234, 1234, 1234,    0,
     1234,    0, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
     1235, 1235,    0, 1235,    0,    0,    0,    0, 1235,    0,
     1235, 1235, 1235, 1236, 1236,    0, 1236,    0, 1236, 1236,
     1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236,

     1236, 1236, 1236, 1236,    0, 1236,    0, 1236, 1236, 1236,
     1236, 1236, 1236, 1236, 1236, 1237, 1237,    0, 1237,    0,
     1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
     1237, 1237, 1237, 1237, 1237, 1237,    0, 1237,    0, 1237,
     1237, 1237, 1237, 1237, 1237, 1237, 1237, 1238,    0,    0,
     1238,    0,    0,    0,    0, 1238,    0, 1238, 1238, 1238,
        0,    0,    0,    0, 1238, 1239, 1239,    0, 1239, 1239,
     1239, 1239, 1239, 1239,    0,    0, 1239, 1239, 1239, 1239,
     1239, 1239, 1239, 1239, 1239, 1239,    0, 1239,    0, 1239,
     1239, 1239, 1239, 1239, 1239, 1239, 1239, 1240,    0, 1240,

     1240, 1240,    0,    0,    0,    0, 1240, 1241,    0, 1241,
     1241,    0,    0,    0, 1241,    0, 1241, 1241, 1241,    0,
        0,    0,    0, 1241, 1242,    0, 1242, 1242, 1242,    0,
        0,    0,    0, 1242, 1243,    0, 1243, 1243,    0,    0,
        0, 1243,    0, 1243, 1243, 1243,    0,    0,    0,    0,
     1243, 1244, 1244,    0, 1244, 1244, 1244, 1244, 1244, 1244,
     1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244,
     1244, 1244,    0, 1244,    0, 1244, 1244, 1244, 1244, 1244,
     1244, 1244, 1244, 1245,    0,    0, 1245,    0,    0,    0,
        0, 1245,    0, 1245, 1245, 1245,    0,    0,    0,    0,

     1245, 1246, 1246,    0, 1246, 1246, 1246, 1246, 1246, 1246,
     1246, 1246, 1246, 1246, 1246,    0, 1246, 1246, 1246, 1246,
     1246, 1246, 1246, 1246,    0, 1246, 1246, 1246, 1246, 1246,
     1246, 1246, 1246, 1247, 1247,    0, 1247, 1247, 1247, 1247,
     1247, 1247, 1247, 1247,    0, 1247, 1247, 1247, 1247, 1247,
     1247, 1247, 1247, 1247,    0, 1247,    0, 1247, 1247, 1247,
     1247, 1247, 1247, 1247, 1247, 1248,    0, 1248, 1248, 1248,
        0,    0,    0, 1248,    0, 1248, 1248, 1248,    0,    0,
        0,    0, 1248, 1249, 1249,    0, 1249, 1249, 1249, 1249,
     1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249,

     1249, 1249, 1249, 1249, 1249, 1249,    0, 1249, 1249, 1249,
     1249, 1249, 1249, 1249, 1249, 1250, 1250, 1250, 1250, 1250,
     1250, 1250, 1250, 1250,    0,    0, 1250, 1250, 1250, 1250,
     1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250,
     1250, 1250, 1250, 1250, 1250, 1250, 1250, 1251, 1251, 1251,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251,    0,
     1251, 1251, 1252, 1252,    0, 1252, 1252, 1252, 1252, 1252,
     1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252,
     1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252,

     1252, 1252, 1252, 1252, 1253,    0, 1253, 1253, 1253,    0,
        0,    0,    0, 1253, 1254, 1254,    0,    0,    0, 1254,
        0, 1254, 1254, 1254,    0,    0,    0,    0, 1254, 1255,
        0, 1255, 1255,    0, 1255,    0,    0,    0, 1255, 1255,
        0, 1255, 1255, 1255, 1256,    0,    0, 1256,    0,    0,
        0,    0, 1256,    0, 1256, 1256, 1256, 1257,    0,    0,
     1257,    0, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
     1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
     1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1258,
        0, 1258, 1258, 1258,    0,    0,    0, 1258, 1260,    0,

     1260, 1260,    0, 1260,    0,    0,    0, 1260, 1260,    0,
     1260, 1260, 1260, 1261,    0,    0, 1261,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0, 1261, 1261, 1261, 1261, 1261, 1262,
     1262,    0, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262,
     1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262,
     1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1262,
     1262, 1263,    0,    0,    0,    0,    0, 1263,    0, 1263,
     1263, 1263, 1263, 1263,    0,    0, 1263, 1263, 1263, 1263,
     1263, 1263,    0,    0,    0,    0, 1263, 1264,    0,    0,

        0,    0,    0, 1264,    0, 1264,    0, 1264, 1264, 1264,
        0,    0, 1264, 1264, 1264, 1264, 1264, 1264,    0,    0,
        0,    0, 1264, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
     1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
     1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
     1265, 1265, 1265, 1265, 1265, 1266,    0, 1266, 1266,    0,
        0,    0, 1266,    0, 1266, 1266, 1266,    0,    0,    0,
        0, 1266, 1267,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1267,    0, 1267,
     1267, 1267,    0,    0,    0,    0, 1267, 1268, 1268, 1268,

     1268,    0,    0, 1268,    0,    0,    0,    0,    0,    0,
        0, 1268,    0,    0, 1268,    0,    0,    0, 1268,    0,
     1268, 1268, 1268,    0,    0,    0, 1268, 1268, 1269, 1269,
     1269, 1269,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0, 1269,    0, 1269, 1269, 1269,    0,    0, 1269,
        0, 1269, 1269, 1269,    0,    0,    0,    0, 1269, 1270,
     1270, 1270, 1270,    0,    0, 1270,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     1270,    0, 1270, 1270, 1270,    0,    0,    0,    0, 1270,
     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,

     1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
        0, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271,
     1271, 1271, 1272,    0, 1272,    0,    0, 1272,    0, 1272,
     1272, 1272,    0,    0,    0,    0, 1272, 1273, 1273,    0,
     1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273,
     1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273,
     1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1274,
        0,    0,    0,    0,    0, 1274,    0, 1274, 1274, 1274,
     1274, 1274,    0,    0, 1274, 1274, 1274, 1274, 1274, 1274,
        0,    0,    0,    0, 1274, 1275,    0,    0,    0,    0,

        0, 1275,    0, 1275,    0, 1275, 1275, 1275,    0,    0,
     1275, 1275, 1275, 1275, 1275, 1275,    0,    0,    0,    0,
     1275, 1276, 1276,    0, 1276, 1276, 1276, 1276, 1276, 1276,
     1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276,
     1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276,
     1276, 1276, 1276, 1277, 1277,    0, 1277, 1277, 1277, 1277,
     1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277,
     1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277,
     1277, 1277, 1277, 1277, 1277, 1278, 1278,    0,    0,    0,
        0,    0, 1278,    0, 1278, 1278, 1278, 1278, 1278,    0,

     1278, 1278, 1278, 1278, 1278, 1278, 1278,    0,    0,    0,
        0, 1278, 1279,    0,    0,    0,    0,    0, 1279,    0,
     1279,    0, 1279, 1279, 1279,    0,    0, 1279, 1279, 1279,
     1279, 1279, 1279,    0,    0,    0,    0, 1279, 1280, 1280,
     1280, 1280,    0,    0, 1280,    0,    0,    0,    0,    0,
        0,    0, 1280,    0,    0, 1280,    0,    0,    0, 1280,
        0, 1280, 1280, 1280,    0,    0,    0, 1280, 1280, 1281,
     1281, 1281, 1281,    0,    0,    0,    0, 1281,    0,    0,
        0,    0,    0, 1281,    0, 1281, 1281,    0,    0,    0,
     1281,    0, 1281, 1281, 1281,    0,    0,    0,    0, 1281,

     1282, 1282, 1282, 1282,    0,    0, 1282,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0, 1282,    0, 1282, 1282, 1282,    0,    0,    0,    0,
     1282, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283,
     1283,    0, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283,
     1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283,
     1283, 1283, 1283, 1284,    0,    0, 1284,    0,    0,    0,
        0, 1284,    0,    0,    0,    0,    0,    0,    0, 1284,
        0,    0,    0,    0, 1284,    0, 1284, 1284, 1284,    0,
        0,    0,    0, 1284, 1285,    0,    0, 1285,    0,    0,

        0,    0, 1285,    0, 1285, 1285, 1285,    0,    0,    0,
        0, 1285, 1286, 1286,    0, 1286, 1286, 1286, 1286, 1286,
     1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
     1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
     1286, 1286, 1286, 1286, 1287, 1287,    0, 1287, 1287, 1287,
     1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287,
     1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287,
     1287, 1287, 1287, 1287, 1287, 1287, 1288, 1288,    0, 1288,
     1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288,
     1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288,

     1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1289,    0,
        0,    0,    0,    0, 1289,    0, 1289, 1289, 1289, 1289,
     1289,    0,    0, 1289, 1289, 1289, 1289, 1289, 1289,    0,
        0,    0,    0, 1289, 1290,    0,    0,    0,    0,    0,
     1290,    0, 1290,    0, 1290, 1290, 1290,    0,    0, 1290,
     1290, 1290, 1290, 1290, 1290,    0,    0,    0,    0, 1290,
     1291, 1291, 1291, 1291,    0,    0, 1291,    0,    0,    0,
        0,    0,    0,    0,    0,    0, 1291, 1291,    0,    0,
        0, 1291,    0, 1291, 1291, 1291,    0,    0,    0,    0,
     1291, 1292,    0, 1292, 1292, 1292,    0,    0,    0,    0,

     1292, 1293, 1293, 1293, 1293,    0,    0, 1293,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1293, 1293,    0,
        0,    0, 1293,    0, 1293, 1293, 1293,    0,    0,    0,
        0, 1293, 1294, 1294, 1294, 1294,    0,    0, 1294,    0,
        0,    0,    0,    0,    0,    0, 1294,    0,    0, 1294,
        0,    0,    0, 1294,    0, 1294, 1294, 1294,    0,    0,
        0, 1294, 1294, 1295, 1295, 1295, 1295,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1295,    0, 1295,
     1295,    0,    0,    0, 1295,    0, 1295, 1295, 1295,    0,
        0,    0,    0, 1295, 1296, 1296, 1296, 1296,    0,    0,

     1296,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0, 1296,    0, 1296, 1296, 1296,
        0,    0,    0,    0, 1296, 1297,    0,    0,    0,    0,
     1297,    0, 1297, 1297, 1297,    0,    0,    0,    0, 1297,
     1298,    0, 1298,    0,    0,    0,    0, 1298,    0, 1298,
     1298, 1298,    0,    0,    0,    0, 1298, 1299,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0, 1299,    0, 1299, 1299, 1299,    0,    0,    0,
        0, 1299, 1300, 1300,    0, 1300,    0,    0,    0,    0,
     1300,    0, 1300, 1300, 1300,    0,    0,    0,    0, 1300,

     1301, 1301,    0, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
     1301,    0, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301,
     1301, 1301, 1301,    0, 1301, 1301, 1301, 1301, 1301, 1301,
     1301, 1301, 1302,    0,    0, 1302,    0,    0,    0,    0,
     1302,    0, 1302, 1302, 1302,    0,    0,    0,    0, 1302,
     1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303,
     1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303,
     1303,    0, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303,
     1303, 1303, 1304, 1304,    0, 1304, 1304, 1304, 1304, 1304,
     1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304,

     1304, 1304, 1304,    0, 1304, 1304, 1304, 1304, 1304, 1304,
     1304, 1304, 1304, 1304, 1305,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1305,
        0, 1305, 1305, 1305,    0,    0,    0,    0, 1305, 1306,
        0,    0, 1306,    0,    0,    0,    0, 1306,    0, 1306,
     1306, 1306,    0,    0,    0,    0, 1306, 1307, 1307,    0,
     1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
     1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307,
     1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1308,
     1308,    0, 1308,    0, 1308, 1308, 1308, 1308, 1308, 1308,

        0, 1308, 1308, 1308, 1308,    0, 1308, 1308, 1308, 1308,
        0, 1308,    0, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
     1308, 1309, 1309,    0, 1309,    0,    0,    0,    0, 1309,
        0, 1309, 1309, 1309, 1310, 1310,    0, 1310,    0, 1310,
     1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310,
     1310, 1310, 1310, 1310, 1310,    0, 1310,    0, 1310, 1310,
     1310, 1310, 1310, 1310, 1310, 1310, 1311, 1311,    0, 1311,
        0, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311,
     1311, 1311, 1311, 1311, 1311, 1311, 1311,    0, 1311,    0,
     1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1312,    0,

        0, 1312,    0,    0,    0,    0, 1312,    0, 1312, 1312,
     1312,    0,    0,    0,    0, 1312, 1313, 1313,    0, 1313,
     1313, 1313, 1313, 1313, 1313,    0,    0, 1313, 1313, 1313,
     1313, 1313, 1313, 1313, 1313, 1313, 1313,    0, 1313,    0,
     1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1314,    0,
     1314, 1314,    0,    0,    0, 1314,    0, 1314, 1314, 1314,
        0,    0,    0,    0, 1314, 1315,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     1315,    0, 1315, 1315, 1315,    0,    0,    0,    0, 1315,
     1316,    0, 1316, 1316,    0,    0,    0, 1316,    0, 1316,

     1316, 1316,    0,    0,    0,    0, 1316, 1317,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0, 1317,    0, 1317, 1317, 1317,    0,    0,    0,
        0, 1317, 1318, 1318,    0, 1318, 1318, 1318, 1318, 1318,
     1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318,
     1318, 1318, 1318,    0, 1318,    0, 1318, 1318, 1318, 1318,
     1318, 1318, 1318, 1318, 1319,    0,    0, 1319,    0,    0,
        0,    0, 1319,    0, 1319, 1319, 1319,    0,    0,    0,
        0, 1319, 1320, 1320,    0, 1320, 1320, 1320, 1320, 1320,
     1320, 1320, 1320, 1320, 1320, 1320,    0, 1320, 1320, 1320,

     1320, 1320, 1320, 1320, 1320,    0, 1320, 1320, 1320, 1320,
     1320, 1320, 1320, 1320, 1321, 1321,    0, 1321, 1321, 1321,
     1321, 1321, 1321, 1321, 1321,    0, 1321, 1321, 1321, 1321,
     1321, 1321, 1321, 1321, 1321,    0, 1321,    0, 1321, 1321,
     1321, 1321, 1321, 1321, 1321, 1321, 1323,    0, 1323, 1323,
     1323,    0,    0,    0, 1323,    0, 1323, 1323, 1323,    0,
        0,    0,    0, 1323, 1324, 1324,    0, 1324, 1324, 1324,
     1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324,
     1324, 1324, 1324, 1324, 1324, 1324, 1324,    0, 1324, 1324,
     1324, 1324, 1324, 1324, 1324, 1324, 1325, 1325, 1325, 1325,

     1325, 1325, 1325, 1325, 1325,    0,    0, 1325, 1325, 1325,
     1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325,
     1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1326, 1326,
        0,    0,    0, 1326,    0, 1326, 1326, 1326,    0,    0,
        0,    0, 1326, 1327, 1327,    0, 1327, 1327, 1327, 1327,
        0, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
     1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327,
     1327, 1327, 1327, 1327, 1327, 1328, 1328,    0, 1328,    0,
        0,    0,    0, 1328,    0, 1328, 1328, 1328, 1329,    0,
     1329, 1329,    0, 1329,    0,    0,    0, 1329, 1329,    0,

     1329, 1329, 1329, 1330,    0,    0, 1330,    0, 1330, 1330,
     1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330,
     1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330,
     1330, 1330, 1330, 1330, 1330, 1331, 1331,    0, 1331, 1331,
     1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331,
     1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331,
     1331, 1331, 1331, 1331, 1331, 1331, 1331, 1332,    0,    0,
     1332,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0, 1332,    0,
     1332, 1332, 1332, 1334,    0,    0, 1334,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0, 1334,    0, 1334, 1334, 1334, 1335,
     1335,    0, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
     1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,
     1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335,    0, 1335,
     1335, 1338,    0,    0, 1338,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0, 1338, 1338, 1338, 1338, 1338, 1339,    0,    0,
        0,    0,    0, 1339,    0, 1339, 1339, 1339, 1339, 1339,
        0,    0, 1339, 1339, 1339, 1339, 1339, 1339,    0,    0,

        0,    0, 1339, 1340,    0,    0,    0,    0,    0, 1340,
        0, 1340, 1340, 1340, 1340, 1340,    0,    0, 1340, 1340,
     1340, 1340, 1340, 1340,    0,    0,    0,    0, 1340, 1341,
        0, 1341, 1341, 1341,    0,    0,    0,    0, 1341, 1342,
     1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
     1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
     1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342,
     1342, 1343,    0, 1343,    0,    0, 1343,    0, 1343, 1343,
     1343,    0,    0,    0,    0, 1343, 1344,    0,    0,    0,
        0,    0, 1344,    0, 1344, 1344, 1344, 1344, 1344,    0,

        0, 1344, 1344, 1344, 1344, 1344, 1344,    0,    0,    0,
        0, 1344, 1345,    0,    0,    0,    0,    0, 1345,    0,
     1345, 1345, 1345, 1345, 1345,    0,    0, 1345, 1345, 1345,
     1345, 1345, 1345,    0,    0,    0,    0, 1345, 1346, 1346,
        0, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346,
     1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346,
     1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346,
     1347, 1347,    0,    0,    0,    0,    0, 1347,    0, 1347,
     1347, 1347, 1347, 1347,    0, 1347, 1347, 1347, 1347, 1347,
     1347, 1347,    0,    0,    0,    0, 1347, 1348, 1348,    0,

        0,    0,    0,    0, 1348,    0, 1348, 1348, 1348, 1348,
     1348,    0, 1348, 1348, 1348, 1348, 1348, 1348, 1348,    0,
        0,    0,    0, 1348, 1349, 1349, 1349, 1349, 1349, 1349,
     1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349,
     1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349,
     1349, 1349, 1349, 1349, 1349, 1349, 1350,    0,    0, 1350,
        0,    0,    0,    0, 1350,    0,    0,    0,    0,    0,
        0,    0, 1350,    0,    0,    0,    0, 1350,    0, 1350,
     1350, 1350,    0,    0,    0,    0, 1350, 1351,    0,    0,
        0,    0,    0, 1351,    0, 1351, 1351, 1351, 1351, 1351,

        0,    0, 1351, 1351, 1351, 1351, 1351, 1351,    0,    0,
        0,    0, 1351, 1352,    0,    0,    0,    0,    0, 1352,
        0, 1352, 1352, 1352, 1352, 1352,    0,    0, 1352, 1352,
     1352, 1352, 1352, 1352,    0,    0,    0,    0, 1352, 1353,
     1353, 1353, 1353,    0,    0, 1353,    0,    0,    0,    0,
        0,    0,    0,    0,    0, 1353, 1353,    0,    0,    0,
     1353,    0, 1353, 1353, 1353,    0,    0,    0,    0, 1353,
     1354, 1354, 1354, 1354,    0,    0, 1354,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1354,    0,    0,
        0, 1354,    0, 1354, 1354, 1354,    0,    0,    0,    0,

     1354, 1355, 1355, 1355, 1355,    0,    0, 1355,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1355, 1355,    0,
        0,    0, 1355,    0, 1355, 1355, 1355,    0,    0,    0,
        0, 1355, 1356,    0,    0,    0,    0, 1356,    0, 1356,
     1356, 1356,    0,    0,    0,    0, 1356, 1357,    0, 1357,
     1357, 1357,    0,    0,    0,    0, 1357, 1358,    0, 1358,
        0,    0,    0,    0, 1358,    0, 1358, 1358, 1358,    0,
        0,    0,    0, 1358, 1359,    0, 1359, 1359, 1359,    0,
        0,    0,    0, 1359, 1360,    0,    0,    0,    0, 1360,
        0, 1360, 1360, 1360,    0,    0,    0,    0, 1360, 1361,

     1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,
     1361, 1361, 1361, 1361, 1361, 1361,    0, 1361, 1361, 1361,
     1361,    0, 1361,    0,    0, 1361, 1361, 1361, 1361, 1361,
     1361, 1362,    0, 1362, 1362, 1362,    0,    0,    0,    0,
     1362, 1363,    0, 1363, 1363, 1363,    0,    0,    0,    0,
     1363, 1365, 1365,    0, 1365, 1365, 1365, 1365, 1365, 1365,
     1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365,
     1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365,
     1365, 1365, 1365, 1366,    0,    0, 1366,    0,    0,    0,
        0, 1366,    0, 1366, 1366, 1366, 1367,    0, 1367,    0,

     1367, 1367,    0, 1367,    0,    0,    0, 1367, 1367,    0,
     1367, 1367, 1367, 1368, 1368,    0, 1368, 1368, 1368, 1368,
     1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
     1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368,
     1368, 1368, 1368, 1368, 1368, 1370,    0,    0, 1370,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0, 1370,    0, 1370, 1370,
     1370, 1371, 1371,    0, 1371, 1371, 1371, 1371, 1371, 1371,
     1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371,
     1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371,

     1371, 1371, 1371, 1372, 1372, 1372, 1372, 1372, 1373,    0,
        0, 1373,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1373,
     1373, 1373, 1373, 1373, 1374, 1374,    0, 1374,    0,    0,
        0,    0,    0,    0,    0, 1374,    0, 1374, 1374,    0,
     1374, 1374,    0,    0, 1374, 1374,    0, 1374, 1374, 1374,
        0, 1374, 1375,    0,    0,    0,    0,    0, 1375,    0,
     1375, 1375, 1375, 1375, 1375,    0,    0, 1375, 1375, 1375,
     1375, 1375, 1375,    0,    0,    0,    0, 1375, 1376, 1376,
     1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376,

     1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376,
     1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376,
     1377,    0,    0,    0,    0,    0, 1377,    0, 1377, 1377,
     1377, 1377, 1377,    0,    0, 1377, 1377, 1377, 1377, 1377,
     1377,    0,    0,    0,    0, 1377, 1378, 1378,    0, 1378,
     1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378,
     1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378,
     1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1379, 1379,
        0,    0,    0,    0,    0, 1379,    0, 1379, 1379, 1379,
     1379, 1379,    0, 1379, 1379, 1379, 1379, 1379, 1379, 1379,

        0,    0,    0,    0, 1379, 1380,    0,    0,    0,    0,
        0, 1380,    0, 1380, 1380, 1380, 1380, 1380,    0,    0,
     1380, 1380, 1380, 1380, 1380, 1380,    0,    0,    0,    0,
     1380, 1381,    0, 1381, 1381, 1381,    0,    0,    0,    0,
     1381, 1382, 1382, 1382, 1382,    0,    0, 1382,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1382, 1382,    0,
        0,    0, 1382,    0, 1382, 1382, 1382,    0,    0,    0,
        0, 1382, 1383, 1383, 1383, 1383,    0,    0, 1383,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1383,
        0,    0,    0, 1383,    0, 1383, 1383, 1383,    0,    0,

        0,    0, 1383, 1384,    0, 1384,    0,    0,    0,    0,
     1384,    0, 1384, 1384, 1384,    0,    0,    0,    0, 1384,
     1385,    0,    0,    0,    0, 1385,    0, 1385, 1385, 1385,
        0,    0,    0,    0, 1385, 1386, 1386,    0, 1386,    0,
        0,    0,    0, 1386,    0, 1386, 1386, 1386, 1387, 1387,
        0, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
     1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
     1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387,
     1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388,
     1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388,

     1388, 1388,    0, 1388,    0,    0,    0, 1388, 1388, 1388,
     1388, 1388, 1389, 1389, 1389, 1389,    0,    0, 1389,    0,
        0,    0,    0,    0,    0,    0,    0,    0, 1389, 1389,
        0,    0,    0, 1389,    0, 1389, 1389, 1389,    0,    0,
        0,    0, 1389, 1390, 1390, 1390, 1390, 1390, 1390, 1390,
     1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390,
        0, 1390, 1390, 1390, 1390,    0, 1390,    0, 1390,    0,
     1390, 1390, 1390, 1390, 1390, 1391, 1391,    0, 1391, 1391,
     1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391,
     1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391,

     1391, 1391, 1391, 1391, 1391, 1391, 1391, 1392, 1392, 1392,
     1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392,
     1392, 1392, 1392, 1392,    0, 1392, 1392, 1392, 1392,    0,
     1392,    0,    0,    0, 1392, 1392, 1392, 1392, 1392, 1393,
     1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393,
     1393, 1393, 1393, 1393, 1393, 1393,    0, 1393, 1393, 1393,
     1393,    0, 1393,    0,    0,    0, 1393, 1393, 1393, 1393,
     1393, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,
     1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394,    0, 1394,
     1394, 1394, 1394,    0, 1394,    0,    0,    0, 1394, 1394,

     1394, 1394, 1394, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
     1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395,
        0, 1395, 1395, 1395, 1395,    0, 1395,    0,    0,    0,
     1395, 1395, 1395, 1395, 1395, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,

     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166
    } ;

extern int commentscanYY_flex_debug;
int commentscanYY_flex_debug = 0;

static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
static char *yy_full_match;
static int yy_lp;
static int yy_looking_for_trail_begin = 0;
static int yy_full_lp;
static int *yy_full_state;
#define YY_TRAILING_MASK 0x2000
#define YY_TRAILING_HEAD_MASK 0x4000
#define REJECT \
{ \
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */ \
yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
(yy_lp) = (yy_full_lp); /* restore orig. accepting pos. */ \
(yy_state_ptr) = (yy_full_state); /* restore orig. state */ \
yy_current_state = *(yy_state_ptr); /* restore curr. state */ \
++(yy_lp); \
goto find_rule; \
}

#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *commentscanYYtext;
#line 1 "commentscan.l"
/*****************************************************************************
 *
 * Copyright (C) 1997-2013 by Dimitri van Heesch.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation under the terms of the GNU General Public License is hereby 
 * granted. No representations are made about the suitability of this software 
 * for any purpose. It is provided "as is" without express or implied warranty.
 * See the GNU General Public License for more details.
 *
 * Documents produced by Doxygen are derivative works derived from the
 * input used in their production; they are not affected by this license.
 *
 */
#line 17 "commentscan.l"

/*
 *	includes
 */
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <ctype.h>

#include <qarray.h>
#include <qstack.h>
#include <qregexp.h>
#include <unistd.h>
#include <qfile.h>
  
#include "scanner.h"
#include "entry.h"
#include "doxygen.h"
#include "message.h"
#include "config.h"
#include "util.h"
#include "index.h"
#include "defargs.h"
#include "language.h"
#include "outputlist.h"
#include "membergroup.h"
#include "reflist.h"
#include "debug.h"
#include "parserintf.h"
#include "cite.h"
#include "markdown.h"
#include "condparser.h"
#include "formula.h"

#define YY_NO_INPUT 1

// forward declarations
static bool handleBrief(const QCString &);
static bool handleFn(const QCString &);
static bool handleDef(const QCString &);
static bool handleOverload(const QCString &);
static bool handleEnum(const QCString &);
static bool handleDefGroup(const QCString &);
static bool handleAddToGroup(const QCString &);
static bool handleWeakGroup(const QCString &);
static bool handleNamespace(const QCString &);
static bool handlePackage(const QCString &);
static bool handleClass(const QCString &);
static bool handleHeaderFile(const QCString &);
static bool handleProtocol(const QCString &);
static bool handleCategory(const QCString &);
static bool handleUnion(const QCString &);
static bool handleStruct(const QCString &);
static bool handleInterface(const QCString &);
static bool handleIdlException(const QCString &);
static bool handlePage(const QCString &);
static bool handleMainpage(const QCString &);
static bool handleFile(const QCString &);
static bool handleDir(const QCString &);
static bool handleExample(const QCString &);
static bool handleDetails(const QCString &);
static bool handleName(const QCString &);
static bool handleTodo(const QCString &);
static bool handleTest(const QCString &);
static bool handleBug(const QCString &);
static bool handleSubpage(const QCString &s);
static bool handleDeprecated(const QCString &);
static bool handleXRefItem(const QCString &);
static bool handleRelated(const QCString &);
static bool handleRelatedAlso(const QCString &);
static bool handleMemberOf(const QCString &);
static bool handleRefItem(const QCString &);
static bool handleSection(const QCString &);
static bool handleAnchor(const QCString &);
static bool handleCite(const QCString &);
static bool handleFormatBlock(const QCString &);
static bool handleAddIndex(const QCString &);
static bool handleIf(const QCString &);
static bool handleIfNot(const QCString &);
static bool handleElseIf(const QCString &);
static bool handleElse(const QCString &);
static bool handleEndIf(const QCString &);
static bool handleIngroup(const QCString &);
static bool handleNoSubGrouping(const QCString &);
static bool handleShowInitializer(const QCString &);
static bool handleHideInitializer(const QCString &);
static bool handleCallgraph(const QCString &);
static bool handleCallergraph(const QCString &);
static bool handleInternal(const QCString &);
static bool handleLineBr(const QCString &);
static bool handleStatic(const QCString &);
static bool handlePure(const QCString &);
static bool handlePrivate(const QCString &);
static bool handlePrivateSection(const QCString &);
static bool handleProtected(const QCString &);
static bool handleProtectedSection(const QCString &);
static bool handlePublic(const QCString &s);
static bool handlePublicSection(const QCString &s);
static bool handleToc(const QCString &s);
static bool handleInherit(const QCString &);
static bool handleExtends(const QCString &);
static bool handleCopyDoc(const QCString &);
static bool handleCopyBrief(const QCString &);
static bool handleCopyDetails(const QCString &);
static bool handleParBlock(const QCString &);
static bool handleEndParBlock(const QCString &);

typedef bool (*DocCmdFunc)(const QCString &name);

struct DocCmdMap
{
  const char *cmdName;
  DocCmdFunc handler;
  bool endsBrief;
};

// map of command to handler function
static DocCmdMap docCmdMap[] =
{
  // command name      handler function         ends brief description
  { "brief",           &handleBrief,            FALSE },
  { "short",           &handleBrief,            FALSE },
  { "fn",              &handleFn,               FALSE },
  { "var",             &handleFn,               FALSE },
  { "typedef",         &handleFn,               FALSE },
  { "property",        &handleFn,               FALSE },
  { "def",             &handleDef,              FALSE },
  { "overload",        &handleOverload,         FALSE },
  { "enum",            &handleEnum,             FALSE },
  { "defgroup",        &handleDefGroup,         FALSE },
  { "addtogroup",      &handleAddToGroup,       FALSE },
  { "weakgroup",       &handleWeakGroup,        FALSE },
  { "namespace",       &handleNamespace,        FALSE },
  { "package",         &handlePackage,          FALSE },
  { "class",           &handleClass,            FALSE },
  { "headerfile",      &handleHeaderFile,       FALSE },
  { "protocol",        &handleProtocol,         FALSE },
  { "category",        &handleCategory,         FALSE },
  { "union",           &handleUnion,            FALSE },
  { "struct",          &handleStruct,           FALSE },
  { "interface",       &handleInterface,        FALSE },
  { "idlexcept",       &handleIdlException,     FALSE },
  { "page",            &handlePage,             FALSE },
  { "mainpage",        &handleMainpage,         FALSE },
  { "file",            &handleFile,             FALSE },
  { "dir",             &handleDir,              FALSE },
  { "example",         &handleExample,          FALSE },
  { "details",         &handleDetails,          TRUE  },
  { "name",            &handleName,             FALSE },
  { "todo",            &handleTodo,             FALSE }, // end brief will be done differently
  { "test",            &handleTest,             FALSE }, // end brief will be done differently
  { "bug",             &handleBug,              FALSE }, // end brief will be done differently
  { "deprecated",      &handleDeprecated,       FALSE }, // end brief will be done differently
  { "xrefitem",        &handleXRefItem,         FALSE }, // end brief will be done differently
  { "related",         &handleRelated,          TRUE  },
  { "relates",         &handleRelated,          TRUE  },
  { "relatedalso",     &handleRelatedAlso,      TRUE  },
  { "relatesalso",     &handleRelatedAlso,      TRUE  },
  { "parblock",        &handleParBlock,         TRUE  },
  { "endparblock",     &handleEndParBlock,      TRUE  },
  { "refitem",         &handleRefItem,          TRUE  },
  { "cite",            &handleCite,             FALSE },
  { "subpage",         &handleSubpage,          TRUE  },
  { "section",         &handleSection,          TRUE  },
  { "subsection",      &handleSection,          TRUE  },
  { "subsubsection",   &handleSection,          TRUE  },
  { "paragraph",       &handleSection,          TRUE  },
  { "anchor",          &handleAnchor,           TRUE  },
  { "verbatim",        &handleFormatBlock,      TRUE  },
  { "latexonly",       &handleFormatBlock,      FALSE },
  { "htmlonly",        &handleFormatBlock,      FALSE },
  { "xmlonly",         &handleFormatBlock,      FALSE },
  { "docbookonly",     &handleFormatBlock,      FALSE },
  { "rtfonly",         &handleFormatBlock,      FALSE },
  { "manonly",         &handleFormatBlock,      FALSE },
  { "dot",             &handleFormatBlock,      TRUE  },
  { "msc",             &handleFormatBlock,      TRUE  },
  { "code",            &handleFormatBlock,      TRUE  },
  { "addindex",        &handleAddIndex,         FALSE },
  { "if",              &handleIf,               FALSE },
  { "ifnot",           &handleIfNot,            FALSE },
  { "elseif",          &handleElseIf,           FALSE },
  { "else",            &handleElse,             FALSE },
  { "endif",           &handleEndIf,            FALSE },
  { "ingroup",         &handleIngroup,          FALSE },
  { "nosubgrouping",   &handleNoSubGrouping,    FALSE },
  { "showinitializer", &handleShowInitializer,  FALSE },
  { "hideinitializer", &handleHideInitializer,  FALSE },
  { "callgraph",       &handleCallgraph,        FALSE },
  { "callergraph",     &handleCallergraph,      FALSE },
  { "internal",        &handleInternal,         TRUE  },
  { "_linebr",         &handleLineBr,           FALSE },
  { "static",          &handleStatic,           FALSE },
  { "pure",            &handlePure,             FALSE },
  { "private",         &handlePrivate,          FALSE },
  { "privatesection",  &handlePrivateSection,   FALSE },
  { "protected",       &handleProtected,        FALSE },
  { "protectedsection",&handleProtectedSection, FALSE },
  { "public",          &handlePublic,           FALSE },
  { "publicsection",   &handlePublicSection,    FALSE },
  { "tableofcontents", &handleToc,              FALSE },
  { "inherit",         &handleInherit,          TRUE  },
  { "extends",         &handleExtends,          TRUE  },
  { "implements",      &handleExtends,          TRUE  },
  { "memberof",        &handleMemberOf,         TRUE  },
  { "arg",             0,                       TRUE  },
  { "attention",       0,                       TRUE  },
  { "author",          0,                       TRUE  },
  { "authors",         0,                       TRUE  },
  { "copydoc",         &handleCopyDoc,          TRUE  },
  { "copybrief",       &handleCopyBrief,        FALSE },
  { "copydetails",     &handleCopyDetails,      TRUE  },
  { "copyright",       0,                       TRUE  },
  { "date",            0,                       TRUE  },
  { "dotfile",         0,                       TRUE  },
  { "htmlinclude",     0,                       FALSE },
  { "image",           0,                       TRUE  },
  { "include",         0,                       TRUE  },
  { "includelineno",   0,                       TRUE  },
  { "invariant",       0,                       TRUE  },
  { "li",              0,                       TRUE  },
  { "line",            0,                       TRUE  },
  { "note",            0,                       TRUE  },
  { "par",             0,                       TRUE  },
  { "param",           0,                       TRUE  },
  { "tparam",          0,                       TRUE  },
  { "post",            0,                       TRUE  },
  { "pre",             0,                       TRUE  },
  { "remark",          0,                       TRUE  },
  { "remarks",         0,                       TRUE  },
  { "result",          0,                       TRUE  },
  { "return",          0,                       TRUE  },
  { "returns",         0,                       TRUE  },
  { "retval",          0,                       TRUE  },
  { "sa",              0,                       TRUE  },
  { "see",             0,                       TRUE  },
  { "since",           0,                       TRUE  },
  { "throw",           0,                       TRUE  },
  { "throws",          0,                       TRUE  },
  { "until",           0,                       TRUE  },
  { "verbinclude",     0,                       FALSE },
  { "version",         0,                       TRUE  },
  { "warning",         0,                       TRUE  },
  { 0, 0, FALSE }
};

/** @brief Command mapper.
 *
 *  Maps a command name (as found in a comment block) onto a
 *  specific handler function.
 */
class DocCmdMapper
{
  public:
    struct Cmd
    {
      DocCmdFunc func;
      bool endsBrief;
    };

    /** maps a command name to a handler function */
    static Cmd *map(const char *name)
    {
      return instance()->find(name);
    }

    /** release the singleton */
    static void freeInstance()
    {
      delete s_instance; s_instance=0;
    }

  private:
    static DocCmdMapper *instance()
    {
      if (s_instance==0) s_instance = new DocCmdMapper;
      return s_instance;
    }

    DocCmdMapper() : m_map(113)
    {
      m_map.setAutoDelete(TRUE);
      DocCmdMap *p = docCmdMap;
      while (p->cmdName)
      {
	if (m_map.find(p->cmdName)!=0)
	{
	  err("DocCmdMapper: command %s already added\n",p->cmdName);
	  exit(1);
	}
	Cmd *cmd = new Cmd;
	cmd->func = p->handler;
	cmd->endsBrief = p->endsBrief;
	m_map.insert(p->cmdName,cmd);
	p++;
      }
    }

    Cmd *find(const char *name)
    {
      return m_map.find(name);
    }
    QDict<Cmd> m_map;
    static DocCmdMapper *s_instance;
};

DocCmdMapper *DocCmdMapper::s_instance=0;
  
bool inInternalDocs = FALSE;
  
#define YY_NEVER_INTERACTIVE 1

enum XRefKind
{
  XRef_Item,
  XRef_Todo,
  XRef_Test,
  XRef_Bug,
  XRef_Deprecated,
  XRef_None
};

enum OutputContext
{
  OutputDoc,
  OutputBrief,
  OutputXRef,
  OutputInbody
};

enum GuardType
{
  Guard_If,
  Guard_IfNot,
  Guard_Skip
};

class GuardedSection
{
  public:
    GuardedSection(bool enabled,bool parentVisible) 
      : m_enabled(enabled),m_parentVisible(parentVisible) {}
    bool isEnabled() const { return m_enabled; }
    bool parentVisible() const { return m_parentVisible; }
  
  private:
    bool m_enabled;
    bool m_parentVisible;
};

void openGroup(Entry *e,const char *file,int line);
void closeGroup(Entry *e,const char *file,int line,bool foundInline=FALSE);
void initGroupInfo(Entry *e);
static void groupAddDocs(Entry *e,const char *fileName);

/* -----------------------------------------------------------------
 *
 *	statics
 */

static ParserInterface *langParser;          // the language parser that is calling us
static QCString         inputString;         // input string
static int		inputPosition;       // read pointer
static QCString		yyFileName;          // file name that is read from
static int		yyLineNr;            // line number in the input
static bool             inBody;              // was the comment found inside the body of a function?
static OutputContext    inContext;           // are we inside the brief, details or xref part
static bool             briefEndsAtDot;      // does the brief description stop at a dot?
static QCString         formulaText;         // Running text of a formula
static QCString         formulaEnv;          // environment name
static int              formulaNewLines;     // amount of new lines in the formula
static QCString        *pOutputString;       // pointer to string to which the output is appended.
static QCString         outputXRef;          // temp argument of todo/test/../xrefitem commands
static QCString         blockName;           // preformatted block name (e.g. verbatim, latexonly,...)
static XRefKind         xrefKind;            // kind of cross-reference command
static XRefKind         newXRefKind;         // 
static GuardType        guardType;           // kind of guard for conditional section
static bool             enabledSectionFound;
static QCString         functionProto;       // function prototype
static QStack<GuardedSection> guards;        // tracks nested conditional sections (if,ifnot,..)
static Entry*		current      = 0 ;   // working entry
//static Entry*		current_root = 0 ;   // parent of working entry


//static Entry*		previous     = 0 ;   // TODO: remove need for this
static bool             needNewEntry;

static QCString         g_sectionLabel;
static QCString		g_sectionTitle;
static int              g_sectionLevel;
static QCString         xrefItemKey;
static QCString         newXRefItemKey;
static QCString         xrefItemTitle;
static QCString         xrefListTitle;
static Protection	protection;

static bool             xrefAppendFlag;
static bool             inGroupParamFound;
static int              braceCount;
static bool             insidePre;
static bool             parseMore;
static int              g_condCount;

static int              g_commentCount;
static QCString         g_spaceBeforeCmd;
static QCString         g_spaceBeforeIf;
static QCString         g_copyDocArg;

static QCString         g_guardExpr;
static int              g_roundCount;

static bool             g_insideParBlock;

//-----------------------------------------------------------------------------

static QStack<Grouping> g_autoGroupStack;
static int              g_memberGroupId = DOX_NOGROUP;
static QCString         g_memberGroupHeader;
static QCString         g_memberGroupDocs;
static QCString         g_memberGroupRelates;
static QCString         g_compoundName;

//-----------------------------------------------------------------------------

static void initParser()
{
  g_sectionLabel.resize(0);
  g_sectionTitle.resize(0);
  g_memberGroupHeader.resize(0);
  g_insideParBlock = FALSE;
}

//-----------------------------------------------------------------------------

static bool getDocSectionName(int s)
{
  switch(s)
  {
    case Entry::CLASSDOC_SEC:
    case Entry::STRUCTDOC_SEC:
    case Entry::UNIONDOC_SEC:
    case Entry::EXCEPTIONDOC_SEC:
    case Entry::NAMESPACEDOC_SEC:
    case Entry::PROTOCOLDOC_SEC:
    case Entry::CATEGORYDOC_SEC:
    case Entry::ENUMDOC_SEC:
    case Entry::PAGEDOC_SEC:
    case Entry::VARIABLEDOC_SEC:
    case Entry::MEMBERDOC_SEC:
    case Entry::OVERLOADDOC_SEC:
    case Entry::FILEDOC_SEC:
    case Entry::DEFINEDOC_SEC:
    case Entry::GROUPDOC_SEC:
    case Entry::MAINPAGEDOC_SEC:
    case Entry::PACKAGEDOC_SEC:
    case Entry::DIRDOC_SEC:
    case Entry::EXAMPLE_SEC:
    case Entry::MEMBERGRP_SEC:
      return TRUE;
    default: 
      return FALSE;
  }
}

//-----------------------------------------------------------------------------

static bool makeStructuralIndicator(Entry::Sections s)
{
  //printf("current->section=%x\n",current->section);
  if (getDocSectionName(current->section))
  {
    return TRUE;
  }
  else
  {
    needNewEntry = TRUE;
    current->section = s;
    current->fileName = yyFileName;
    current->startLine = yyLineNr;
    return FALSE;
  }
}

static void lineCount()
{
  for( const char* c = commentscanYYtext ; *c ; ++c )
    yyLineNr += (*c == '\n') ;
}


static QCString stripQuotes(const char *s)
{
  QCString name;
  if (s==0 || *s==0) return name;
  name=s;
  if (name.at(0)=='"' && name.at(name.length()-1)=='"')
  {
    name=name.mid(1,name.length()-2);
  }
  return name;
}

//-----------------------------------------------------------------

static void addXRefItem(const char *listName,const char *itemTitle,
                        const char *listTitle,bool append)
{
  Entry *docEntry = current; // inBody && previous ? previous : current;
  if (listName==0) return;
  //printf("addXRefItem(%s,%s,%s,%d)\n",listName,itemTitle,listTitle,append);

  ListItemInfo *lii=0;
  RefList *refList = Doxygen::xrefLists->find(listName);
  if (refList==0) // new list
  {
    refList = new RefList(listName,listTitle,itemTitle);
    Doxygen::xrefLists->insert(listName,refList);
    //printf("new list!\n");
  }
  if (docEntry->sli)
  {
    QListIterator<ListItemInfo> slii(*docEntry->sli);
    for (slii.toFirst();(lii=slii.current());++slii)
    {
      if (qstrcmp(lii->type,listName)==0) 
      {
        //printf("found %s lii->type=%s\n",listName,lii->type);
        break;
      }
    }
  }
  if (lii && append) // already found item of same type just before this one
  {
    //printf("listName=%s item id = %d existing\n",listName,lii->itemId);
    RefItem *item = refList->getRefItem(lii->itemId);
    ASSERT(item!=0);
    item->text += " <p>";
    if (Doxygen::markdownSupport)
    {
      item->text += processMarkdown(yyFileName,current,outputXRef);
    }
    else
    {
      item->text += outputXRef;
    }
    //printf("%s: text +=%s\n",listName,item->text.data());
  }
  else // new item
  {
    int itemId  = refList->addRefItem();
    //printf("listName=%s item id = %d new current=%p\n",listName,itemId,current);

    // if we have already an item from the same list type (e.g. a second @todo)
    // in the same Entry (i.e. lii!=0) then we reuse its link anchor.
    char anchorLabel[1024];
    //sprintf(anchorLabel,"_%s%06d",listName,lii ? lii->itemId : itemId);
    sprintf(anchorLabel,"_%s%06d",listName,itemId);
    RefItem *item = refList->getRefItem(itemId);
    ASSERT(item!=0);
    if (Doxygen::markdownSupport)
    {
      item->text = processMarkdown(yyFileName,current,outputXRef);
    }
    else
    {
      item->text = outputXRef;
    }
    item->listAnchor = anchorLabel;
    docEntry->addSpecialListItem(listName,itemId);
    QCString cmdString;
    cmdString.sprintf("\\xrefitem %s %d.",listName,itemId);
    if (inBody)
    {
      docEntry->inbodyDocs += cmdString;
    }
    else
    {
      docEntry->doc += cmdString;
    }
    SectionInfo *si=new SectionInfo(listName,anchorLabel,
	                            g_sectionTitle,SectionInfo::Anchor,
                                    g_sectionLevel);
    Doxygen::sectionDict->append(anchorLabel,si);
    docEntry->anchors->append(si);
  }
  outputXRef.resize(0);
}

//-----------------------------------------------------------------------------

// Adds a formula text to the list/dictionary of formulas if it was
// not already added. Returns the label of the formula.
static QCString addFormula()
{
  QCString formLabel;
  QCString fText=formulaText.simplifyWhiteSpace();
  Formula *f=0;
  if ((f=Doxygen::formulaDict->find(fText))==0)
  {
    f = new Formula(fText);
    Doxygen::formulaList->append(f);
    Doxygen::formulaDict->insert(fText,f);
    formLabel.sprintf("\\form#%d",f->getId());
    Doxygen::formulaNameDict->insert(formLabel,f);
  }
  else
  {
    formLabel.sprintf("\\form#%d",f->getId());
  }
  int i;
  for (i=0;i<formulaNewLines;i++) formLabel+="@_fakenl"; // add fake newlines to
                                                         // keep the warnings 
                                                         // correctly aligned.
  return formLabel;
}

//-----------------------------------------------------------------------------

static void checkFormula();
//-----------------------------------------------------------------------------

static SectionInfo::SectionType sectionLevelToType(int level)
{
  if (level>=0 && level<5) return (SectionInfo::SectionType)level;
  return SectionInfo::Anchor;
}

static void addSection()
{
  // create a new section element
  g_sectionTitle+=commentscanYYtext;
  g_sectionTitle=g_sectionTitle.stripWhiteSpace();
  SectionInfo *si = new SectionInfo(yyFileName,g_sectionLabel,
                          g_sectionTitle,sectionLevelToType(g_sectionLevel),g_sectionLevel);

  // add section to this entry
  current->anchors->append(si);

  // add section to the global dictionary
  Doxygen::sectionDict->append(g_sectionLabel,si);

}

//-----------------------------------------------------------------------------

static void addCite()
{
  Doxygen::citeDict->insert(commentscanYYtext);
}

//-----------------------------------------------------------------------------

// strip trailing whitespace (excluding newlines) from string s
static void stripTrailingWhiteSpace(QCString &s)
{
  uint len = s.length();
  int i = (int)len-1;
  char c;
  while (i>=0 && ((c = s.at(i))==' ' || c=='\t' || c=='\r')) i--;
  if (i!=(int)len-1) 
  {
    s.resize(i+2); // string up to and including char at pos i and \0 terminator
  }
}

// selects the output to write to
static inline void setOutput(OutputContext ctx)
{
  bool xrefAppendToPrev = xrefAppendFlag;
  // determine append flag for the next item (i.e. the end of this item)
  xrefAppendFlag = !inBody &&
                   inContext==OutputXRef && ctx==OutputXRef && // two consecutive xref items
                   newXRefKind==xrefKind &&                    // of the same kind
                   (xrefKind!=XRef_Item || 
		    newXRefItemKey==xrefItemKey);              // with the same key if \xrefitem
  //printf("%d && %d && %d && (%d || %d)\n",
  //                 inContext==OutputXRef,
  //                 ctx==OutputXRef,
  //                 newXRefKind==xrefKind,
  //                 xrefKind!=XRef_Item,
  //	  	     newXRefItemKey==xrefItemKey);
      
  //printf("refKind=%d newXRefKind=%d xrefAppendToPrev=%d xrefAppendFlag=%d\n",
  //   	  xrefKind,newXRefKind,xrefAppendToPrev,xrefAppendFlag);

  //printf("setOutput(inContext=%d ctx=%d)\n",inContext,ctx);
  if (inContext==OutputXRef) // end of XRef section => add the item 
  {
    // See if we can append this new xref item to the previous one.
    // We know this at the start of the next item of the same
    // type and need to remember this until the end of that item.
    switch(xrefKind)
    {
      case XRef_Todo:
	addXRefItem("todo",
	            theTranslator->trTodo(),
	            theTranslator->trTodoList(),
		    xrefAppendToPrev
		   );
	break;
      case XRef_Test:
	addXRefItem("test",
	            theTranslator->trTest(),
		    theTranslator->trTestList(),
		    xrefAppendToPrev
		   );
	break;
      case XRef_Bug:
	addXRefItem("bug",
	            theTranslator->trBug(),
		    theTranslator->trBugList(),
		    xrefAppendToPrev
		   );
	break;
      case XRef_Deprecated:
	addXRefItem("deprecated",
	            theTranslator->trDeprecated(),
		    theTranslator->trDeprecatedList(),
		    xrefAppendToPrev
		   );
	break;
      case XRef_Item:  // user defined list
	addXRefItem(xrefItemKey,
	            xrefItemTitle,
		    xrefListTitle,
		    xrefAppendToPrev
		   );
	break;
      case XRef_None:
	ASSERT(0);
	break;
    }
  }
  xrefItemKey = newXRefItemKey;

  int oldContext = inContext;
  inContext = ctx;
  if (inContext!=OutputXRef && inBody) inContext=OutputInbody;
  switch(inContext)
  {
    case OutputDoc:
      if (oldContext!=inContext)
      {
        stripTrailingWhiteSpace(current->doc);
        if (current->docFile.isEmpty())
        {
          current->docFile = yyFileName;
          current->docLine = yyLineNr;
        }
      }
      pOutputString = &current->doc;
      break;
    case OutputBrief:
      if (oldContext!=inContext)
      {
	if (current->briefFile.isEmpty())
	{
	  current->briefFile = yyFileName;
	  current->briefLine = yyLineNr;
	}
      }
      if (current->brief.stripWhiteSpace().isEmpty()) // we only want one brief
	                                              // description even if multiple
	                                              // are given...
      {
        pOutputString = &current->brief;
      }
      else
      {
        pOutputString = &current->doc;
	inContext = OutputDoc; // need to switch to detailed docs, see bug 631380
      }
      break;
    case OutputXRef:
      pOutputString = &outputXRef;
      // first item found, so can't append to previous
      //xrefAppendFlag = FALSE;
      break;
    case OutputInbody:
      pOutputString = &current->inbodyDocs;
      break;
  }
}

// add a string to the output
static inline void addOutput(const char *s)
{
  //printf("addOutput(%s)\n",s);
  *pOutputString+=s;
}

// add a character to the output
static inline void addOutput(char c)
{
  *pOutputString+=c;
}

static void endBrief(bool addToOutput=TRUE)
{
  if (!current->brief.stripWhiteSpace().isEmpty())
  { // only go to the detailed description if we have
    // found some brief description and not just whitespace
    briefEndsAtDot=FALSE;
    setOutput(OutputDoc);
    if (addToOutput) addOutput(commentscanYYtext);
  }
}

static void handleGuard(const QCString &expr);
/* ----------------------------------------------------------------- */
#undef	YY_INPUT
#define	YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);

static int prevPosition=0;

static int yyread(char *buf,int max_size)
{
    prevPosition=inputPosition;
    int c=0;
    while( c < max_size && inputString[inputPosition] )
    {
	*buf = inputString[inputPosition++] ;
	//printf("%d (%c)\n",*buf,*buf);
	c++; buf++;
    }
    return c;
}

/* start command character */
/* comment parsing states. */









































#line 4059 "<stdout>"

#define INITIAL 0
#define Comment 1
#define PageDocArg1 2
#define PageDocArg2 3
#define RelatesParam1 4
#define ClassDocArg1 5
#define ClassDocArg2 6
#define ClassDocArg3 7
#define CategoryDocArg1 8
#define XRefItemParam1 9
#define XRefItemParam2 10
#define XRefItemParam3 11
#define FileDocArg1 12
#define EnumDocArg1 13
#define NameSpaceDocArg1 14
#define PackageDocArg1 15
#define GroupDocArg1 16
#define GroupDocArg2 17
#define SectionLabel 18
#define SectionTitle 19
#define SubpageLabel 20
#define SubpageTitle 21
#define FormatBlock 22
#define LineParam 23
#define GuardParam 24
#define GuardParamEnd 25
#define SkipGuardedSection 26
#define SkipInternal 27
#define NameParam 28
#define InGroupParam 29
#define FnParam 30
#define OverloadParam 31
#define InheritParam 32
#define ExtendsParam 33
#define ReadFormulaShort 34
#define ReadFormulaLong 35
#define AnchorLabel 36
#define HtmlComment 37
#define SkipLang 38
#define CiteLabel 39
#define CopyDoc 40
#define GuardExpr 41

#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 commentscanYYlex_destroy (void );

int commentscanYYget_debug (void );

void commentscanYYset_debug (int debug_flag  );

YY_EXTRA_TYPE commentscanYYget_extra (void );

void commentscanYYset_extra (YY_EXTRA_TYPE user_defined  );

FILE *commentscanYYget_in (void );

void commentscanYYset_in  (FILE * in_str  );

FILE *commentscanYYget_out (void );

void commentscanYYset_out  (FILE * out_str  );

yy_size_t commentscanYYget_leng (void );

char *commentscanYYget_text (void );

int commentscanYYget_lineno (void );

void commentscanYYset_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 commentscanYYwrap (void );
#else
extern int commentscanYYwrap (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 262144
#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( commentscanYYtext, commentscanYYleng, 1, commentscanYYout )) {} } 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( commentscanYYin )) != EOF && c != '\n'; ++n ) \
			buf[n] = (char) c; \
		if ( c == '\n' ) \
			buf[n++] = (char) c; \
		if ( c == EOF && ferror( commentscanYYin ) ) \
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
		result = n; \
		} \
	else \
		{ \
		errno=0; \
		while ( (result = fread(buf, 1, max_size, commentscanYYin))==0 && ferror(commentscanYYin)) \
			{ \
			if( errno != EINTR) \
				{ \
				YY_FATAL_ERROR( "input in flex scanner failed" ); \
				break; \
				} \
			errno=0; \
			clearerr(commentscanYYin); \
			} \
		}\
\

#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 commentscanYYlex (void);

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

/* Code executed at the beginning of each rule, after commentscanYYtext and commentscanYYleng
 * 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 ( commentscanYYleng > 0 ) \
		YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
				(commentscanYYtext[commentscanYYleng - 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 939 "commentscan.l"


  /* What can happen in while parsing a comment block:
   *   commands (e.g. @page, or \page)
   *   escaped commands (e.g. @@page or \\page).
   *   formulas (e.g. \f$ \f[ \f{..)
   *   directories (e.g. \doxygen\src\)
   *   autolist end. (e.g. a dot on an otherwise empty line)
   *   newlines.
   *   end of brief description due to blank line.
   *   end of brief description due to some command (@command, or <command>).
   *   words and whitespace and other characters (#,?!, etc).
   *   grouping commands (e.g. @{ and @})
   *   language switch (e.g. \~english or \~).
   *   mail address (e.g. dimitri@stack.nl).
   *   quoted text, such as "foo@bar"
   *   XML commands, <summary></summary><remarks></remarks>
   */

#line 4305 "<stdout>"

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

#ifdef YY_USER_INIT
		YY_USER_INIT;
#endif

        /* Create the reject buffer large enough to save one state per allowed character. */
        if ( ! (yy_state_buf) )
            (yy_state_buf) = (yy_state_type *)commentscanYYalloc(YY_STATE_BUF_SIZE  );
            if ( ! (yy_state_buf) )
                YY_FATAL_ERROR( "out of dynamic memory in commentscanYYlex()" );

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

		if ( ! commentscanYYin )
			commentscanYYin = stdin;

		if ( ! commentscanYYout )
			commentscanYYout = stdout;

		if ( ! YY_CURRENT_BUFFER ) {
			commentscanYYensure_buffer_stack ();
			YY_CURRENT_BUFFER_LVALUE =
				commentscanYY_create_buffer(commentscanYYin,YY_BUF_SIZE );
		}

		commentscanYY_load_buffer_state( );
		}

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

		/* Support of commentscanYYtext. */
		*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_state_ptr) = (yy_state_buf);
		*(yy_state_ptr)++ = yy_current_state;

yy_match:
		do
			{
			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*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 >= 1167 )
					yy_c = yy_meta[(unsigned int) yy_c];
				}
			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
			*(yy_state_ptr)++ = yy_current_state;
			++yy_cp;
			}
		while ( yy_base[yy_current_state] != 9736 );

yy_find_action:
		yy_current_state = *--(yy_state_ptr);
		(yy_lp) = yy_accept[yy_current_state];
find_rule: /* we branch to this label when backing up */
		for ( ; ; ) /* until we find what rule we matched */
			{
			if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
				{
				yy_act = yy_acclist[(yy_lp)];
				if ( yy_act & YY_TRAILING_HEAD_MASK ||
				     (yy_looking_for_trail_begin) )
					{
					if ( yy_act == (yy_looking_for_trail_begin) )
						{
						(yy_looking_for_trail_begin) = 0;
						yy_act &= ~YY_TRAILING_HEAD_MASK;
						break;
						}
					}
				else if ( yy_act & YY_TRAILING_MASK )
					{
					(yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK;
					(yy_looking_for_trail_begin) |= YY_TRAILING_HEAD_MASK;
					(yy_full_match) = yy_cp;
					(yy_full_state) = (yy_state_ptr);
					(yy_full_lp) = (yy_lp);
					}
				else
					{
					(yy_full_match) = yy_cp;
					(yy_full_state) = (yy_state_ptr);
					(yy_full_lp) = (yy_lp);
					break;
					}
				++(yy_lp);
				goto find_rule;
				}
			--yy_cp;
			yy_current_state = *--(yy_state_ptr);
			(yy_lp) = yy_accept[yy_current_state];
			}

		YY_DO_BEFORE_ACTION;

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

		switch ( yy_act )
	{ /* beginning of action switch */
case 1:
YY_RULE_SETUP
#line 958 "commentscan.l"
{ // escaped command
  					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 2:
YY_RULE_SETUP
#line 961 "commentscan.l"
{ // escaped command
  					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 3:
YY_RULE_SETUP
#line 964 "commentscan.l"
{ // mail address
  					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 4:
YY_RULE_SETUP
#line 967 "commentscan.l"
{ // quoted text
                                          addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 5:
YY_RULE_SETUP
#line 970 "commentscan.l"
{ // directory (or chain of commands!)
  					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 6:
/* rule 6 can match eol */
YY_RULE_SETUP
#line 973 "commentscan.l"
{ // xref command 
					  if (inContext!=OutputXRef) 
					  {
					    briefEndsAtDot=FALSE;
					    setOutput(OutputDoc);
					  }
					  // continue with the same input
                                          REJECT;
					}
	YY_BREAK
/*
<Comment>{DETAILEDCMD}/[^a-z_A-Z]*	{ // command that can end a brief description
				          briefEndsAtDot=FALSE;
				          setOutput(OutputDoc);
					  // continue with the same input
                                          REJECT;
					}
   */
case 7:
YY_RULE_SETUP
#line 990 "commentscan.l"
{ // HTML command that ends a brief description
					  setOutput(OutputDoc);
					  // continue with the same input
                                          REJECT;
					}
	YY_BREAK
case 8:
YY_RULE_SETUP
#line 995 "commentscan.l"
{ // HTML command that ends a brief description
					  if (current->lang==SrcLangExt_CSharp)
                                          {
                                            setOutput(OutputDoc);
                                          }
					  // continue with the same input
                                          REJECT;
					}
	YY_BREAK
case 9:
YY_RULE_SETUP
#line 1003 "commentscan.l"
{ // start of a .NET XML style brief description
					  setOutput(OutputBrief);
                                          addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 1007 "commentscan.l"
{ // start of a .NET XML style detailed description
					  setOutput(OutputDoc);
                                          addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 1011 "commentscan.l"
{ // start of a .NET XML style detailed description
                                          addOutput(commentscanYYtext);
					  setOutput(OutputDoc);
  					}
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 1015 "commentscan.l"
{ // end of a brief or detailed description
                                          addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 1018 "commentscan.l"
{
                                          insidePre=TRUE;
                                          addOutput(commentscanYYtext);
                                        }
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 1022 "commentscan.l"
{
                                          insidePre=FALSE;
                                          addOutput(commentscanYYtext);
                                        }
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 1026 "commentscan.l"
{ // RCS tag which end a brief description
  					  setOutput(OutputDoc);
					  REJECT;
  					}
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 1030 "commentscan.l"
{ 
  					  BEGIN(HtmlComment);
					}
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 1033 "commentscan.l"
{
                                          addOutput("\\endinternal "); 
                                          if (!inInternalDocs)
  					    warn(yyFileName,yyLineNr,
                                               "found \\endinternal without matching \\internal"
                                              );
                                          inInternalDocs = FALSE;
  					}
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 1041 "commentscan.l"
{ // potentially interesting command
                                          // the {B}* in the front was added for bug620924
  					  QCString cmdName = QCString(commentscanYYtext).stripWhiteSpace().data()+1;
					  DocCmdMapper::Cmd *cmdPtr = DocCmdMapper::map(cmdName);
					  if (cmdPtr) // special action is required
					  {
                                            int i=0;
                                            while (commentscanYYtext[i]==' ' || commentscanYYtext[i]=='\t') i++;
					    g_spaceBeforeCmd = QCString(commentscanYYtext).left(i);
					    if (cmdPtr->endsBrief && inContext!=OutputXRef) 
					    { 
					      briefEndsAtDot=FALSE;
					      // this command forces the end of brief description
					      setOutput(OutputDoc);
					    }
                                            //if (i>0) addOutput(QCString(commentscanYYtext).left(i)); // removed for bug 689341
					    if (cmdPtr->func && cmdPtr->func(cmdName))
					    {
					      // implicit split of the comment block into two
					      // entries. Restart the next block at the start
					      // of this command.
					      parseMore=TRUE;

					      // yuk, this is probably not very portable across lex implementations, 
					      // but we need to know the position in the input buffer where this 
					      // rule matched.
					      // for flex 2.5.33+ we should use YY_CURRENT_BUFFER_LVALUE
#if YY_FLEX_MINOR_VERSION>=5 && YY_FLEX_SUBMINOR_VERSION>=33
					      inputPosition=prevPosition + (int)(yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf);
#else
					      inputPosition=prevPosition + (int)(yy_bp - yy_current_buffer->yy_ch_buf);
#endif
					      yyterminate();
					    }
					    else if (cmdPtr->func==0)
					    {
					      // command without handler, to be processed
					      // later by parsedoc.cpp
					      addOutput(commentscanYYtext);
					    }
					  }
					  else // command not relevant
					  {
					    addOutput(commentscanYYtext);
					  }
  					}
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 1087 "commentscan.l"
{ // escaped formula command
  					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 20:
YY_RULE_SETUP
#line 1090 "commentscan.l"
{ // language switch command
                                          QCString langId = QString(commentscanYYtext).stripWhiteSpace().data()+2;
			       	          if (!langId.isEmpty() &&
					      qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
				          { // enable language specific section
				            BEGIN(SkipLang);
				          }
  					}
	YY_BREAK
case 21:
YY_RULE_SETUP
#line 1098 "commentscan.l"
{ // start of a formula with custom environment
					  formulaText="\\begin";
					  formulaEnv=QString(commentscanYYtext).stripWhiteSpace().data()+2;
					  if (formulaEnv.at(formulaEnv.length()-1)=='{')
					  {
					    // remove trailing open brace
					    formulaEnv=formulaEnv.left(formulaEnv.length()-1);
					  }
					  formulaText+=formulaEnv;
					  formulaNewLines=0;
					  BEGIN(ReadFormulaLong);
  					}
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 1110 "commentscan.l"
{ // start of a inline formula
					  formulaText="$";
					  formulaNewLines=0;
					  BEGIN(ReadFormulaShort);
  					}
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 1115 "commentscan.l"
{ // start of a block formula
					  formulaText="\\[";
					  formulaNewLines=0;
					  BEGIN(ReadFormulaLong);
  					}
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 1120 "commentscan.l"
{ // begin of a group
                                          //langParser->handleGroupStartCommand(g_memberGroupHeader);
                                          openGroup(current,yyFileName,yyLineNr);
                                        }
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 1124 "commentscan.l"
{ // end of a group
                                          //langParser->handleGroupEndCommand();
                                          closeGroup(current,yyFileName,yyLineNr,TRUE);
                                          g_memberGroupHeader.resize(0);
					  parseMore=TRUE;
                                          needNewEntry = TRUE;
#if YY_FLEX_MINOR_VERSION>=5 && YY_FLEX_SUBMINOR_VERSION>=33
				          inputPosition=prevPosition + (int)(yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf) + strlen(commentscanYYtext);
#else
				          inputPosition=prevPosition + (int)(yy_bp - yy_current_buffer->yy_ch_buf) + strlen(commentscanYYtext);
#endif
					  yyterminate();
                                        }
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 1137 "commentscan.l"
{ // escaped character
  					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 1140 "commentscan.l"
{ // normal word
					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 28:
/* rule 28 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1143 "commentscan.l"
{ // explicit end autolist: e.g "  ."
  				          addOutput(commentscanYYtext); 
					}
	YY_BREAK
case 29:
#line 1147 "commentscan.l"
case 30:
YY_RULE_SETUP
#line 1147 "commentscan.l"
{ // start of autolist
                                          if (!Doxygen::markdownSupport)
                                          {
                                            REJECT;
                                          }
                                          else
                                          {
                                            if (inContext!=OutputXRef) 
                                            {
                                              briefEndsAtDot=FALSE;
                                              setOutput(OutputDoc);
                                            }
                                            addOutput(commentscanYYtext); 
                                          }
  					}
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 1162 "commentscan.l"
{ // start of autolist
					  if (inContext!=OutputXRef) 
					  {
					    briefEndsAtDot=FALSE;
					    setOutput(OutputDoc);
					  }
  				          addOutput(commentscanYYtext); 
  					}
	YY_BREAK
case 32:
/* rule 32 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1170 "commentscan.l"
{ // horizontal line (dashed)
  				          addOutput(commentscanYYtext); 
                                        }
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 1173 "commentscan.l"
{ // mdash
                                          addOutput(insidePre || Doxygen::markdownSupport ? commentscanYYtext : "&mdash;");
                                        }
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 1176 "commentscan.l"
{ // ndash
                                          addOutput(insidePre || Doxygen::markdownSupport ? commentscanYYtext : "&ndash;");
                                        }
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 1179 "commentscan.l"
{ // numbered item
                                          addOutput(commentscanYYtext);
                                        }
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 1182 "commentscan.l"
{ // . at start or in the middle of a word, or ellipsis
  					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 1185 "commentscan.l"
{ // . with escaped space.
  					  addOutput(commentscanYYtext[0]);
  					  addOutput(commentscanYYtext[2]);
  					}
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 1189 "commentscan.l"
{ // . with comma such as "e.g.," 
  					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 1192 "commentscan.l"
{ // ellipsis with escaped space.
  					  addOutput("... ");
  					}
	YY_BREAK
case 40:
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1195 "commentscan.l"
{ // internal ellipsis 
  					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 41:
/* rule 41 can match eol */
YY_RULE_SETUP
#line 1198 "commentscan.l"
{ // at least one blank line (or blank line command)
					  if (inContext==OutputXRef)
					  {
					    // see bug 613024, we need to put the newlines after ending the XRef section.
					    if (!g_insideParBlock) setOutput(OutputDoc);
                                            int i;
                                            for (i=0;i<commentscanYYleng;)
                                            {
                                              if (commentscanYYtext[i]=='\n') addOutput('\n'),i++;
                                              else if (strcmp(commentscanYYtext+i,"\\_linebr")==0) addOutput('\n'),i+=8;
                                              else i++;
                                            }
					  }
					  else if (inContext!=OutputBrief)
					  {
                                            int i;
                                            for (i=0;i<commentscanYYleng;)
                                            {
                                              if (commentscanYYtext[i]=='\n') addOutput('\n'),i++;
                                              else if (strcmp(commentscanYYtext+i,"\\_linebr")==0) addOutput('\n'),i+=8;
                                              else i++;
                                            }
					    setOutput(OutputDoc);
					  }
					  else // inContext==OutputBrief
					  { // only go to the detailed description if we have
					    // found some brief description and not just whitespace
					    endBrief(FALSE);
					  }
  					  lineCount();
  					}
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 1229 "commentscan.l"
{ // potential end of a JavaDoc style comment
  					  addOutput(*commentscanYYtext);
  					  if (briefEndsAtDot)
					  {
					    setOutput(OutputDoc);
					    briefEndsAtDot=FALSE;
					  }
  					}
	YY_BREAK
case 43:
/* rule 43 can match eol */
YY_RULE_SETUP
#line 1237 "commentscan.l"
{ // newline
  					  addOutput(*commentscanYYtext);
  					  yyLineNr++;
  					}
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 1241 "commentscan.l"
{ // catch-all for anything else
  					  addOutput(*commentscanYYtext);
  					}
	YY_BREAK
/* --------------   Rules for handling HTML comments ----------- */
case 45:
YY_RULE_SETUP
#line 1248 "commentscan.l"
{ BEGIN( Comment ); }
	YY_BREAK
case 46:
/* rule 46 can match eol */
YY_RULE_SETUP
#line 1249 "commentscan.l"
{ 
  					  if (*commentscanYYtext=='\n') yyLineNr++;
  					}
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 1252 "commentscan.l"
{ // ignore unimportant characters
  					}
	YY_BREAK
case 48:
YY_RULE_SETUP
#line 1254 "commentscan.l"
{ // ignore every else
  					}
	YY_BREAK
/* --------------   Rules for handling formulas ---------------- */
case 49:
YY_RULE_SETUP
#line 1259 "commentscan.l"
{ // end of inline formula
  					  formulaText+="$";
					  addOutput(" "+addFormula());
					  BEGIN(Comment);
  					}
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 1264 "commentscan.l"
{ // end of block formula
					  formulaText+="\\]";
					  addOutput(" "+addFormula());
					  BEGIN(Comment);
  					}
	YY_BREAK
case 51:
YY_RULE_SETUP
#line 1269 "commentscan.l"
{ // end of custom env formula
					  formulaText+="\\end";
					  formulaText+=formulaEnv;
					  addOutput(" "+addFormula());
					  BEGIN(Comment);
  					}
	YY_BREAK
case 52:
YY_RULE_SETUP
#line 1275 "commentscan.l"
{ // any non-special character
                                          formulaText+=commentscanYYtext; 
 					} 
	YY_BREAK
case 53:
/* rule 53 can match eol */
YY_RULE_SETUP
#line 1278 "commentscan.l"
{ // new line
                                          formulaNewLines++;
                                          formulaText+=*commentscanYYtext; 
					  yyLineNr++; 
					}
	YY_BREAK
case 54:
YY_RULE_SETUP
#line 1283 "commentscan.l"
{ // any othe character
                                          formulaText+=*commentscanYYtext; 
					}
	YY_BREAK
/* ------------ handle argument of enum command --------------- */
case 55:
/* rule 55 can match eol */
YY_RULE_SETUP
#line 1289 "commentscan.l"
{ // handle argument
  					  current->name = commentscanYYtext;
					  BEGIN( Comment );
  					}
	YY_BREAK
case 56:
/* rule 56 can match eol */
YY_RULE_SETUP
#line 1293 "commentscan.l"
{ // line continuation
  					  yyLineNr++;
					  addOutput('\n');
                                        }
	YY_BREAK
case 57:
/* rule 57 can match eol */
YY_RULE_SETUP
#line 1297 "commentscan.l"
{ // missing argument
  					  warn(yyFileName,yyLineNr,
                                               "missing argument after \\enum."
                                              );
					  addOutput('\n');
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  BEGIN( Comment );
  					}
	YY_BREAK
case 58:
YY_RULE_SETUP
#line 1305 "commentscan.l"
{ // ignore other stuff
  					}
	YY_BREAK
/* ------------ handle argument of namespace command --------------- */
case 59:
/* rule 59 can match eol */
YY_RULE_SETUP
#line 1310 "commentscan.l"
{ // handle argument
  					  current->name = substitute(commentscanYYtext,".","::");
					  BEGIN( Comment );
  					}
	YY_BREAK
case 60:
/* rule 60 can match eol */
YY_RULE_SETUP
#line 1314 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  addOutput('\n');
                                        }
	YY_BREAK
case 61:
/* rule 61 can match eol */
YY_RULE_SETUP
#line 1318 "commentscan.l"
{ // missing argument
  					  warn(yyFileName,yyLineNr,
                                               "missing argument after "
					       "\\namespace."
                                              );
					  addOutput('\n');
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  BEGIN( Comment );
  					}
	YY_BREAK
case 62:
YY_RULE_SETUP
#line 1327 "commentscan.l"
{ // ignore other stuff
  					}
	YY_BREAK
/* ------------ handle argument of package command --------------- */
case 63:
YY_RULE_SETUP
#line 1332 "commentscan.l"
{ // handle argument
  					  current->name = commentscanYYtext;
					  BEGIN( Comment );
  					}
	YY_BREAK
case 64:
/* rule 64 can match eol */
YY_RULE_SETUP
#line 1336 "commentscan.l"
{ // line continuation 
                                          yyLineNr++; 
					  addOutput('\n');
                                        }
	YY_BREAK
case 65:
/* rule 65 can match eol */
YY_RULE_SETUP
#line 1340 "commentscan.l"
{ // missing argument
  					  warn(yyFileName,yyLineNr,
                                               "missing argument after "
					       "\\package."
                                              );
					  addOutput('\n');
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  BEGIN( Comment );
  					}
	YY_BREAK
case 66:
YY_RULE_SETUP
#line 1349 "commentscan.l"
{ // ignore other stuff
  					}
	YY_BREAK
/* ------ handle argument of class/struct/union command --------------- */
case 67:
/* rule 67 can match eol */
YY_RULE_SETUP
#line 1354 "commentscan.l"
{ 
  					  current->name = substitute(removeRedundantWhiteSpace(commentscanYYtext),".","::");
					  BEGIN( ClassDocArg2 );
                                        }
	YY_BREAK
case 68:
/* rule 68 can match eol */
YY_RULE_SETUP
#line 1358 "commentscan.l"
{ // first argument
  					  current->name = substitute(commentscanYYtext,".","::");
					  if (current->section==Entry::PROTOCOLDOC_SEC)
					  {
					    current->name+="-p";
					  }
					  // prepend outer scope name 
					  BEGIN( ClassDocArg2 );
					}
	YY_BREAK
case 69:
/* rule 69 can match eol */
YY_RULE_SETUP
#line 1367 "commentscan.l"
{
  					  current->name = substitute(commentscanYYtext,".","::");
					  BEGIN( ClassDocArg2 );
   					}
	YY_BREAK
case 70:
/* rule 70 can match eol */
YY_RULE_SETUP
#line 1371 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  addOutput('\n');
                                        }
	YY_BREAK
case 71:
/* rule 71 can match eol */
YY_RULE_SETUP
#line 1375 "commentscan.l"
{
  					  warn(yyFileName,yyLineNr,
                                               "missing argument after "
					       "\\%s.",YY_START==ClassDocArg1?"class":"category"
                                              );
					  addOutput('\n');
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  BEGIN( Comment );
  					}
	YY_BREAK
case 72:
YY_RULE_SETUP
#line 1384 "commentscan.l"
{ // ignore other stuff
  					}
	YY_BREAK
case 73:
YY_RULE_SETUP
#line 1387 "commentscan.l"
{ // second argument; include file
					  current->includeFile = commentscanYYtext;
					  BEGIN( ClassDocArg3 );
					}
	YY_BREAK
case 74:
/* rule 74 can match eol */
YY_RULE_SETUP
#line 1391 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  addOutput('\n');
                                        }
	YY_BREAK
case 75:
/* rule 75 can match eol */
YY_RULE_SETUP
#line 1395 "commentscan.l"
{ 
					  addOutput('\n');
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  BEGIN( Comment );
					}
	YY_BREAK
case 76:
YY_RULE_SETUP
#line 1400 "commentscan.l"
{ // ignore other stuff
  					}
	YY_BREAK
case 77:
YY_RULE_SETUP
#line 1403 "commentscan.l"
{ // third argument; include file name
 					  current->includeName = commentscanYYtext;
					  BEGIN( Comment );
					}
	YY_BREAK
case 78:
/* rule 78 can match eol */
YY_RULE_SETUP
#line 1407 "commentscan.l"
{ // line continuation
                                          yyLineNr++;
					  addOutput('\n');
                                        }
	YY_BREAK
case 79:
/* rule 79 can match eol */
YY_RULE_SETUP
#line 1411 "commentscan.l"
{ 
  					  if (*commentscanYYtext=='\n') yyLineNr++;
  					  BEGIN( Comment );
					}
	YY_BREAK
case 80:
YY_RULE_SETUP
#line 1415 "commentscan.l"
{ // ignore other stuff
  					}
	YY_BREAK
/* --------- handle arguments of {def,add,weak}group commands --------- */
case 81:
YY_RULE_SETUP
#line 1420 "commentscan.l"
{ // group name
  					  current->name = commentscanYYtext;
					  //lastDefGroup.groupname = commentscanYYtext;
					  //lastDefGroup.pri = current->groupingPri();
  					  // the .html stuff is for Qt compatibility
					  if (current->name.right(5)==".html") 
					  {
					    current->name=current->name.left(current->name.length()-5);
					  }
					  current->type.resize(0);
					  BEGIN(GroupDocArg2);
  					}
	YY_BREAK
case 82:
/* rule 82 can match eol */
YY_RULE_SETUP
#line 1432 "commentscan.l"
{ // line continuation
  					  yyLineNr++; 
					  addOutput('\n');
                                        }
	YY_BREAK
case 83:
/* rule 83 can match eol */
YY_RULE_SETUP
#line 1436 "commentscan.l"
{ // missing argument!
  					  warn(yyFileName,yyLineNr,
                                               "missing group name after %s",
					       current->groupDocCmd()
                                              );
					  addOutput('\n');
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  BEGIN( Comment );
  					}
	YY_BREAK
case 84:
/* rule 84 can match eol */
YY_RULE_SETUP
#line 1445 "commentscan.l"
{ // line continuation
  					  yyLineNr++; 
					  addOutput('\n');
                                        }
	YY_BREAK
case 85:
YY_RULE_SETUP
#line 1449 "commentscan.l"
{ // title (stored in type)
					  current->type += commentscanYYtext;
					  current->type = current->type.stripWhiteSpace();
  					}
	YY_BREAK
case 86:
/* rule 86 can match eol */
YY_RULE_SETUP
#line 1453 "commentscan.l"
{
                                          if ( current->groupDocType==Entry::GROUPDOC_NORMAL &&
                                               current->type.isEmpty() 
					     ) // defgroup requires second argument
					  {
  					    warn(yyFileName,yyLineNr,
                                                 "missing title after "
					         "\\defgroup %s", current->name.data()
                                                );
					  }
  					  if (*commentscanYYtext=='\n') yyLineNr++; 
					  addOutput('\n');
					  BEGIN( Comment );
  					}
	YY_BREAK
/* --------- handle arguments of page/mainpage command ------------------- */
case 87:
YY_RULE_SETUP
#line 1470 "commentscan.l"
{ // first argument; page name
					  current->name = stripQuotes(commentscanYYtext);
					  BEGIN( PageDocArg2 ); 
					}
	YY_BREAK
case 88:
/* rule 88 can match eol */
YY_RULE_SETUP
#line 1474 "commentscan.l"
{ yyLineNr++; 
					  addOutput('\n');
                                        }
	YY_BREAK
case 89:
/* rule 89 can match eol */
YY_RULE_SETUP
#line 1477 "commentscan.l"
{
  					  warn(yyFileName,yyLineNr,
                                               "missing argument after "
					       "\\page."
                                              );
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  BEGIN( Comment );
  					}
	YY_BREAK
case 90:
YY_RULE_SETUP
#line 1486 "commentscan.l"
{ // ignore other stuff
  					}
	YY_BREAK
case 91:
/* rule 91 can match eol */
YY_RULE_SETUP
#line 1488 "commentscan.l"
{ // second argument; page title
  				          yyLineNr++;
					  current->args = commentscanYYtext;
					  addOutput('\n');
					  BEGIN( Comment );
					}
	YY_BREAK
/* --------- handle arguments of the file/dir/example command ------------ */
case 92:
/* rule 92 can match eol */
YY_RULE_SETUP
#line 1497 "commentscan.l"
{ // no file name specfied
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  BEGIN( Comment );
					}
	YY_BREAK
case 93:
YY_RULE_SETUP
#line 1502 "commentscan.l"
{ // first argument; name
  					  current->name = stripQuotes(commentscanYYtext);
					  BEGIN( Comment );
  				        }
	YY_BREAK
case 94:
/* rule 94 can match eol */
YY_RULE_SETUP
#line 1506 "commentscan.l"
{ yyLineNr++; 
					  addOutput('\n');
                                        }
	YY_BREAK
case 95:
YY_RULE_SETUP
#line 1509 "commentscan.l"
{ // ignore other stuff
  					}
	YY_BREAK
/* --------- handle arguments of the xrefitem command ------------ */
case 96:
YY_RULE_SETUP
#line 1514 "commentscan.l"
{ // first argument
  					  newXRefItemKey=commentscanYYtext;
                                          setOutput(OutputXRef);
					  BEGIN(XRefItemParam2);
					}
	YY_BREAK
case 97:
/* rule 97 can match eol */
YY_RULE_SETUP
#line 1519 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  addOutput('\n');
                                        }
	YY_BREAK
case 98:
/* rule 98 can match eol */
YY_RULE_SETUP
#line 1523 "commentscan.l"
{ // missing arguments
  					  warn(yyFileName,yyLineNr,
					       "Missing first argument of \\xrefitem"
					      );
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  inContext = OutputDoc;
					  BEGIN( Comment );
  					}
	YY_BREAK
case 99:
YY_RULE_SETUP
#line 1532 "commentscan.l"
{ // ignore other stuff 
  					}
	YY_BREAK
case 100:
YY_RULE_SETUP
#line 1535 "commentscan.l"
{ // second argument
  					  xrefItemTitle = stripQuotes(commentscanYYtext);
					  BEGIN(XRefItemParam3);
  					}
	YY_BREAK
case 101:
/* rule 101 can match eol */
YY_RULE_SETUP
#line 1539 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  addOutput('\n');
  					}
	YY_BREAK
case 102:
/* rule 102 can match eol */
YY_RULE_SETUP
#line 1543 "commentscan.l"
{ // missing argument
  					  warn(yyFileName,yyLineNr,
					      "Missing second argument of \\xrefitem"
					      );
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  inContext = OutputDoc;
					  BEGIN( Comment );
  					}
	YY_BREAK
case 103:
YY_RULE_SETUP
#line 1552 "commentscan.l"
{ // ignore other stuff
  					}
	YY_BREAK
case 104:
YY_RULE_SETUP
#line 1555 "commentscan.l"
{ // third argument
  					  xrefListTitle = stripQuotes(commentscanYYtext);
                                          xrefKind = XRef_Item;
					  BEGIN( Comment );
  					}
	YY_BREAK
case 105:
/* rule 105 can match eol */
YY_RULE_SETUP
#line 1560 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  addOutput('\n');
  					}
	YY_BREAK
case 106:
/* rule 106 can match eol */
YY_RULE_SETUP
#line 1564 "commentscan.l"
{ // missing argument
  					  warn(yyFileName,yyLineNr,
					      "Missing third argument of \\xrefitem"
					      );
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  inContext = OutputDoc;
					  BEGIN( Comment );
  					}
	YY_BREAK
case 107:
YY_RULE_SETUP
#line 1573 "commentscan.l"
{ // ignore other stuff
  					}
	YY_BREAK
/* ----- handle arguments of the relates(also)/memberof command ------- */
case 108:
YY_RULE_SETUP
#line 1579 "commentscan.l"
{ // argument
  					  current->relates = commentscanYYtext;
                                          //if (current->mGrpId!=DOX_NOGROUP) 
                                          //{
                                          //  memberGroupRelates = commentscanYYtext;
                                          //}
					  BEGIN( Comment );
					}
	YY_BREAK
case 109:
/* rule 109 can match eol */
YY_RULE_SETUP
#line 1587 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  addOutput('\n');
  					}
	YY_BREAK
case 110:
/* rule 110 can match eol */
YY_RULE_SETUP
#line 1591 "commentscan.l"
{ // missing argument
  					  warn(yyFileName,yyLineNr,
					      "Missing argument of \\relates or \\memberof command"
					      );
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  BEGIN( Comment );
  					}
	YY_BREAK
case 111:
YY_RULE_SETUP
#line 1599 "commentscan.l"
{ // ignore other stuff
  					}
	YY_BREAK
/* ----- handle arguments of the relates(also)/addindex commands ----- */
case 112:
/* rule 112 can match eol */
YY_RULE_SETUP
#line 1605 "commentscan.l"
{ // end of argument
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  BEGIN( Comment );
  					}
	YY_BREAK
case 113:
/* rule 113 can match eol */
YY_RULE_SETUP
#line 1610 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  addOutput('\n');
  					}
	YY_BREAK
case 114:
YY_RULE_SETUP
#line 1614 "commentscan.l"
{ // ignore other stuff
  					  addOutput(*commentscanYYtext);
  					}
	YY_BREAK
/* ----- handle arguments of the section/subsection/.. commands ------- */
case 115:
YY_RULE_SETUP
#line 1620 "commentscan.l"
{ // first argyment
  					  g_sectionLabel=commentscanYYtext;
                                          addOutput(commentscanYYtext);
					  g_sectionTitle.resize(0);
					  BEGIN(SectionTitle);
  					}
	YY_BREAK
case 116:
/* rule 116 can match eol */
YY_RULE_SETUP
#line 1626 "commentscan.l"
{ // missing argument
  					  warn(yyFileName,yyLineNr,
					      "\\section command has no label"
					      );
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  BEGIN( Comment );
  					}
	YY_BREAK
case 117:
YY_RULE_SETUP
#line 1634 "commentscan.l"
{ // invalid character for section label
  					  warn(yyFileName,yyLineNr,
					      "Invalid or missing section label"
					      );
					  BEGIN(Comment);
  					}
	YY_BREAK
case 118:
/* rule 118 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1640 "commentscan.l"
{ // end of section title
  					  addSection();
                                          addOutput(commentscanYYtext);
					  BEGIN( Comment );
  					}
	YY_BREAK
case 119:
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp -= 8;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1645 "commentscan.l"
{ // end of section title
  					  addSection();
                                          addOutput(commentscanYYtext);
					  BEGIN( Comment );
  					}
	YY_BREAK
case 120:
/* rule 120 can match eol */
YY_RULE_SETUP
#line 1650 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  addOutput('\n');
  					}
	YY_BREAK
case 121:
YY_RULE_SETUP
#line 1654 "commentscan.l"
{ // any character without special meaning
  					  g_sectionTitle+=commentscanYYtext;
					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 122:
YY_RULE_SETUP
#line 1658 "commentscan.l"
{ // unescape escaped command
  					  g_sectionTitle+=&commentscanYYtext[1];
					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 123:
YY_RULE_SETUP
#line 1662 "commentscan.l"
{ // unescape escaped character
  					  g_sectionTitle+=commentscanYYtext[1];
  					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 124:
YY_RULE_SETUP
#line 1666 "commentscan.l"
{ // anything else
  					  g_sectionTitle+=commentscanYYtext;
					  addOutput(*commentscanYYtext);
  					}
	YY_BREAK
/* ----- handle arguments of the subpage command ------- */
case 125:
YY_RULE_SETUP
#line 1673 "commentscan.l"
{ // first argument
                                          addOutput(commentscanYYtext);
					  // we add subpage labels as a kind of "inheritance" relation to prevent
					  // needing to add another list to the Entry class.
					  current->extends->append(new BaseInfo(commentscanYYtext,Public,Normal));
					  BEGIN(SubpageTitle);
  					}
	YY_BREAK
case 126:
/* rule 126 can match eol */
YY_RULE_SETUP
#line 1680 "commentscan.l"
{ // missing argument
  					  warn(yyFileName,yyLineNr,
					      "\\subpage command has no label"
					      );
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  BEGIN( Comment );
  					}
	YY_BREAK
case 127:
/* rule 127 can match eol */
YY_RULE_SETUP
#line 1688 "commentscan.l"
{ // no title, end command
  					  addOutput(commentscanYYtext);
					  BEGIN( Comment );
  					}
	YY_BREAK
case 128:
YY_RULE_SETUP
#line 1692 "commentscan.l"
{ // add title, end of command
  					  addOutput(commentscanYYtext);
					  BEGIN( Comment );
  					}
	YY_BREAK
case 129:
YY_RULE_SETUP
#line 1696 "commentscan.l"
{ // no title, end of command
  					  unput(*commentscanYYtext);
					  BEGIN( Comment );
  					}
	YY_BREAK
/* ----- handle arguments of the anchor command ------- */
case 130:
YY_RULE_SETUP
#line 1703 "commentscan.l"
{ // found argument
                                          SectionInfo  *si = new SectionInfo(yyFileName,commentscanYYtext,0,SectionInfo::Anchor,0);
                                          Doxygen::sectionDict->append(commentscanYYtext,si);
  					  current->anchors->append(si);
					  addOutput(commentscanYYtext);
					  BEGIN( Comment );
  					}
	YY_BREAK
case 131:
/* rule 131 can match eol */
YY_RULE_SETUP
#line 1710 "commentscan.l"
{ // missing argument
  					  warn(yyFileName,yyLineNr,
					      "\\anchor command has no label"
					      );
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  BEGIN( Comment );
  					}
	YY_BREAK
case 132:
YY_RULE_SETUP
#line 1718 "commentscan.l"
{ // invalid character for anchor label
  					  warn(yyFileName,yyLineNr,
					      "Invalid or missing anchor label"
					      );
					  BEGIN(Comment);
  					}
	YY_BREAK
/* ----- handle arguments of the preformatted block commands ------- */
case 133:
/* rule 133 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1728 "commentscan.l"
{ // possible ends
  					  addOutput(commentscanYYtext);
					  if (&commentscanYYtext[4]==blockName) // found end of the block
					  {
  					    BEGIN(Comment);
					  }
  					}
	YY_BREAK
case 134:
YY_RULE_SETUP
#line 1735 "commentscan.l"
{ // some word
  					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 135:
/* rule 135 can match eol */
YY_RULE_SETUP
#line 1738 "commentscan.l"
{ // new line
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
  					}
	YY_BREAK
case 136:
YY_RULE_SETUP
#line 1742 "commentscan.l"
{ // start of a C-comment
  					  g_commentCount++;
  					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 137:
YY_RULE_SETUP
#line 1746 "commentscan.l"
{ // end of a C-comment
  					  addOutput(commentscanYYtext);
  					  g_commentCount--;
					  if (g_commentCount<0 && blockName!="verbatim")
					  {
					    warn(yyFileName,yyLineNr,
					         "found */ without matching /* while inside a \\%s block! Perhaps a missing \\end%s?\n",blockName.data(),blockName.data());
					  }
  					}
	YY_BREAK
case 138:
YY_RULE_SETUP
#line 1755 "commentscan.l"
{
  					  addOutput(*commentscanYYtext);
  					}
	YY_BREAK
case YY_STATE_EOF(FormatBlock):
#line 1758 "commentscan.l"
{
                                          warn(yyFileName,yyLineNr,
	                                    "reached end of comment while inside a @%s block; check for missing @end%s tag!",
	                                    blockName.data(),blockName.data()
	                                  );				
					  yyterminate();
    					}
	YY_BREAK
/* ----- handle arguments of if/ifnot commands ------- */
case 139:
YY_RULE_SETUP
#line 1768 "commentscan.l"
{
                                          g_guardExpr=commentscanYYtext;
                                          g_roundCount=1;
                                          BEGIN(GuardExpr);
                                        }
	YY_BREAK
case 140:
/* rule 140 can match eol */
YY_RULE_SETUP
#line 1773 "commentscan.l"
{
                                          g_guardExpr+=commentscanYYtext;
                                        }
	YY_BREAK
case 141:
YY_RULE_SETUP
#line 1776 "commentscan.l"
{
                                          g_guardExpr+=commentscanYYtext;
                                          g_roundCount++;
                                        }
	YY_BREAK
case 142:
YY_RULE_SETUP
#line 1780 "commentscan.l"
{
                                          g_guardExpr+=commentscanYYtext;
                                          g_roundCount--;
                                          if (g_roundCount==0)
                                          {
                                            handleGuard(g_guardExpr);
                                          }
                                        }
	YY_BREAK
case 143:
/* rule 143 can match eol */
YY_RULE_SETUP
#line 1788 "commentscan.l"
{
					  warn(yyFileName,yyLineNr,
						"invalid expression '%s' for guard",g_guardExpr.data());
                                          unput(*commentscanYYtext);
                                          BEGIN(GuardParam);
                                        }
	YY_BREAK
case 144:
YY_RULE_SETUP
#line 1794 "commentscan.l"
{ // parameter of if/ifnot guard
                                          handleGuard(commentscanYYtext);
  					}
	YY_BREAK
case 145:
/* rule 145 can match eol */
YY_RULE_SETUP
#line 1797 "commentscan.l"
{ // end of argument
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  //next line is commented out due to bug620924
					  //addOutput('\n');
					  BEGIN( Comment );
  					}
	YY_BREAK
case 146:
/* rule 146 can match eol */
YY_RULE_SETUP
#line 1803 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  addOutput('\n');
  					}
	YY_BREAK
case 147:
YY_RULE_SETUP
#line 1807 "commentscan.l"
{ // ignore other stuff
  					  addOutput(*commentscanYYtext);
  					}
	YY_BREAK
case 148:
/* rule 148 can match eol */
YY_RULE_SETUP
#line 1810 "commentscan.l"
{
  					  g_spaceBeforeIf.resize(0);
  					  BEGIN(Comment);
  					}
	YY_BREAK
case 149:
YY_RULE_SETUP
#line 1814 "commentscan.l"
{
  					  if (!g_spaceBeforeIf.isEmpty()) // needed for 665313 in combation with bug620924
					  {
					    addOutput(g_spaceBeforeIf);
					  }
  					  g_spaceBeforeIf.resize(0);
  					  BEGIN(Comment);
  					}
	YY_BREAK
case 150:
YY_RULE_SETUP
#line 1822 "commentscan.l"
{
  					  unput(*commentscanYYtext);
  					  BEGIN(Comment);
  					}
	YY_BREAK
/* ----- handle skipping of conditional sections ------- */
case 151:
/* rule 151 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1829 "commentscan.l"
{
                                          guardType = Guard_IfNot;
  					  BEGIN( GuardParam );
  					}
	YY_BREAK
case 152:
/* rule 152 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1833 "commentscan.l"
{
                                          guardType = Guard_If;
  					  BEGIN( GuardParam );
  					}
	YY_BREAK
case 153:
/* rule 153 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1837 "commentscan.l"
{
  					  if (guards.isEmpty())
					  {
					    warn(yyFileName,yyLineNr,
						"found @endif without matching start command");
					  }
					  else
					  {
					    delete guards.pop();
					    BEGIN( GuardParamEnd );
					  }
  					}
	YY_BREAK
case 154:
/* rule 154 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1849 "commentscan.l"
{
  					  if (guards.isEmpty())
					  {
					    warn(yyFileName,yyLineNr,
						"found @else without matching start command");
					  }
					  else
					  {
					    if (!enabledSectionFound && guards.top()->parentVisible())
					    {
					      delete guards.pop();
					      guards.push(new GuardedSection(TRUE,TRUE));
					      enabledSectionFound=TRUE;
					      BEGIN( GuardParamEnd );
					    }
					  }
  					}
	YY_BREAK
case 155:
/* rule 155 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1866 "commentscan.l"
{
  					  if (guards.isEmpty())
					  {
					    warn(yyFileName,yyLineNr,
						"found @elseif without matching start command");
					  }
					  else
					  {
					    if (!enabledSectionFound && guards.top()->parentVisible())
					    {
                                              guardType=Guard_If;
					      delete guards.pop();
					      BEGIN( GuardParam );
					    }
					  }
  					}
	YY_BREAK
case 156:
/* rule 156 can match eol */
YY_RULE_SETUP
#line 1882 "commentscan.l"
{ // skip line
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  //addOutput('\n');
  					}
	YY_BREAK
case 157:
YY_RULE_SETUP
#line 1886 "commentscan.l"
{ // skip non-special characters
  					}
	YY_BREAK
case 158:
YY_RULE_SETUP
#line 1888 "commentscan.l"
{ // any other character
  					}
	YY_BREAK
/* ----- handle skipping of internal section ------- */
case 159:
/* rule 159 can match eol */
YY_RULE_SETUP
#line 1894 "commentscan.l"
{ // skip line
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
  					}
	YY_BREAK
case 160:
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp = yy_bp + 3;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1898 "commentscan.l"
{
                                          g_condCount++;
  					}
	YY_BREAK
case 161:
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1901 "commentscan.l"
{
                                          g_condCount++;
  					}
	YY_BREAK
case 162:
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1904 "commentscan.l"
{
                                          g_condCount--;
					  if (g_condCount<0) // handle conditional section around of \internal, see bug607743  
					  {
					    unput('\\');
					    BEGIN(Comment);
					  }
  					}
	YY_BREAK
case 163:
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1912 "commentscan.l"
{
  					  if (g_sectionLevel>0)
					  {
					    unput('\\');
					    BEGIN(Comment);
					  }
  					}
	YY_BREAK
case 164:
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1919 "commentscan.l"
{
  					  if (g_sectionLevel>1)
					  {
					    unput('\\');
					    BEGIN(Comment);
					  }
  					}
	YY_BREAK
case 165:
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1926 "commentscan.l"
{
  					  if (g_sectionLevel>2)
					  {
					    unput('\\');
					    BEGIN(Comment);
					  }
  					}
	YY_BREAK
case 166:
*yy_cp = (yy_hold_char); /* undo effects of setting up commentscanYYtext */
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up commentscanYYtext again */
YY_RULE_SETUP
#line 1933 "commentscan.l"
{
  					  if (g_sectionLevel>3)
					  {
					    unput('\\');
					    BEGIN(Comment);
					  }
  					}
	YY_BREAK
case 167:
YY_RULE_SETUP
#line 1940 "commentscan.l"
{
                                          addOutput("\\endinternal "); 
					  BEGIN(Comment);
					}
	YY_BREAK
case 168:
YY_RULE_SETUP
#line 1944 "commentscan.l"
{ // skip non-special characters
  					}
	YY_BREAK
case 169:
YY_RULE_SETUP
#line 1946 "commentscan.l"
{ // any other character
  					}
	YY_BREAK
/* ----- handle argument of name command ------- */
case 170:
/* rule 170 can match eol */
YY_RULE_SETUP
#line 1952 "commentscan.l"
{ // end of argument
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  BEGIN( Comment );
  					}
	YY_BREAK
case 171:
/* rule 171 can match eol */
YY_RULE_SETUP
#line 1957 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  addOutput('\n');
					  g_memberGroupHeader+=' ';
  					}
	YY_BREAK
case 172:
YY_RULE_SETUP
#line 1962 "commentscan.l"
{ // ignore other stuff
					  g_memberGroupHeader+=*commentscanYYtext;
					  current->name+=*commentscanYYtext;
  					}
	YY_BREAK
/* ----- handle argument of ingroup command ------- */
case 173:
YY_RULE_SETUP
#line 1969 "commentscan.l"
{ // group id
  					  current->groups->append(
					    new Grouping(commentscanYYtext, Grouping::GROUPING_INGROUP)
					  );
					  inGroupParamFound=TRUE;
  					}
	YY_BREAK
case 174:
/* rule 174 can match eol */
YY_RULE_SETUP
#line 1975 "commentscan.l"
{ // missing argument
  					  if (!inGroupParamFound)
					  {
  					    warn(yyFileName,yyLineNr,
					        "Missing group name for \\ingroup command"
					        );
					  }
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  BEGIN( Comment );
  					}
	YY_BREAK
case 175:
/* rule 175 can match eol */
YY_RULE_SETUP
#line 1986 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  addOutput('\n');
  					}
	YY_BREAK
case 176:
YY_RULE_SETUP
#line 1990 "commentscan.l"
{ // ignore other stuff
  					  addOutput(*commentscanYYtext);
  					}
	YY_BREAK
/* ----- handle argument of fn command ------- */
case 177:
/* rule 177 can match eol */
YY_RULE_SETUP
#line 1996 "commentscan.l"
{ // end of argument
  					  if (braceCount==0)
					  {
					    if (*commentscanYYtext=='\n') yyLineNr++;
					    addOutput('\n');
					    langParser->parsePrototype(functionProto);
					    BEGIN( Comment );
					  }
  					}
	YY_BREAK
case 178:
/* rule 178 can match eol */
YY_RULE_SETUP
#line 2005 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  functionProto+=' ';
  					}
	YY_BREAK
case 179:
YY_RULE_SETUP
#line 2009 "commentscan.l"
{ // non-special characters
                                          functionProto+=commentscanYYtext;
  					}
	YY_BREAK
case 180:
YY_RULE_SETUP
#line 2012 "commentscan.l"
{
                                          functionProto+=commentscanYYtext;
					  braceCount++;
					}
	YY_BREAK
case 181:
YY_RULE_SETUP
#line 2016 "commentscan.l"
{
                                          functionProto+=commentscanYYtext;
					  braceCount--;
					}
	YY_BREAK
case 182:
YY_RULE_SETUP
#line 2020 "commentscan.l"
{ // add other stuff
                                          functionProto+=*commentscanYYtext;
  					}
	YY_BREAK
/* ----- handle argument of overload command ------- */
case 183:
/* rule 183 can match eol */
YY_RULE_SETUP
#line 2028 "commentscan.l"
{ // end of argument
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  if (functionProto.stripWhiteSpace().isEmpty())
					  { // plain overload command
					    addOutput(getOverloadDocs());
					    addOutput('\n');
					  }
					  else // overload declaration
					  {
                                            makeStructuralIndicator(Entry::OVERLOADDOC_SEC);
					    langParser->parsePrototype(functionProto);
					  }
					  BEGIN( Comment );
  					}
	YY_BREAK
case 184:
/* rule 184 can match eol */
YY_RULE_SETUP
#line 2042 "commentscan.l"
{ // line continuation
                                          yyLineNr++; 
					  functionProto+=' ';
  					}
	YY_BREAK
case 185:
YY_RULE_SETUP
#line 2046 "commentscan.l"
{ // add other stuff
                                          functionProto+=*commentscanYYtext;
  					}
	YY_BREAK
/* ----- handle argument of inherit command ------- */
case 186:
YY_RULE_SETUP
#line 2052 "commentscan.l"
{ // found argument
					  current->extends->append(
					    new BaseInfo(removeRedundantWhiteSpace(commentscanYYtext),Public,Normal)
					  );
					  BEGIN( Comment );
  					}
	YY_BREAK
case 187:
/* rule 187 can match eol */
YY_RULE_SETUP
#line 2058 "commentscan.l"
{ // missing argument
  					  warn(yyFileName,yyLineNr,
					      "\\inherit command has no argument"
					      );
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  BEGIN( Comment );
  					}
	YY_BREAK
case 188:
YY_RULE_SETUP
#line 2066 "commentscan.l"
{ // invalid character for anchor label
  					  warn(yyFileName,yyLineNr,
					      "Invalid or missing name for \\inherit command"
					      );
					  BEGIN(Comment);
  					}
	YY_BREAK
/* ----- handle argument of extends and implements commands ------- */
case 189:
YY_RULE_SETUP
#line 2075 "commentscan.l"
{ // found argument
					  current->extends->append(
					    new BaseInfo(removeRedundantWhiteSpace(commentscanYYtext),Public,Normal)
					  );
					  BEGIN( Comment );
  					}
	YY_BREAK
case 190:
/* rule 190 can match eol */
YY_RULE_SETUP
#line 2081 "commentscan.l"
{ // missing argument
  					  warn(yyFileName,yyLineNr,
					      "\\extends or \\implements command has no argument"
					      );
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  BEGIN( Comment );
  					}
	YY_BREAK
case 191:
YY_RULE_SETUP
#line 2089 "commentscan.l"
{ // ignore other stuff
  					}
	YY_BREAK
/* ----- handle language specific sections ------- */
case 192:
YY_RULE_SETUP
#line 2094 "commentscan.l"
{ /* language switch */
                                     QCString langId = &commentscanYYtext[2];
				     if (langId.isEmpty() ||
					 qstricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0)
				     { // enable language specific section
				       BEGIN(Comment);
				     }
                                   }
	YY_BREAK
case 193:
YY_RULE_SETUP
#line 2102 "commentscan.l"
{ /* any character not a *, @, backslash or new line */
                                   }
	YY_BREAK
case 194:
/* rule 194 can match eol */
YY_RULE_SETUP
#line 2104 "commentscan.l"
{ /* new line in verbatim block */
  		                     if (*commentscanYYtext=='\n') yyLineNr++;
                                   }
	YY_BREAK
case 195:
YY_RULE_SETUP
#line 2107 "commentscan.l"
{ /* any other character */
                                   }
	YY_BREAK
/* ----- handle arguments of the cite command ------- */
case 196:
YY_RULE_SETUP
#line 2112 "commentscan.l"
{ // found argyment
  					  addCite();
                                          addOutput(commentscanYYtext);
					  BEGIN(Comment);
  					}
	YY_BREAK
case 197:
/* rule 197 can match eol */
YY_RULE_SETUP
#line 2117 "commentscan.l"
{ // missing argument
  					  warn(yyFileName,yyLineNr,
					      "\\cite command has no label"
					      );
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  BEGIN( Comment );
  					}
	YY_BREAK
case 198:
YY_RULE_SETUP
#line 2125 "commentscan.l"
{ // invalid character for cite label
  					  warn(yyFileName,yyLineNr,
					      "Invalid or missing cite label"
					      );
					  BEGIN(Comment);
  					}
	YY_BREAK
/* ----- handle argument of the copydoc command ------- */
case YY_STATE_EOF(CopyDoc):
#line 2134 "commentscan.l"
case 199:
/* rule 199 can match eol */
YY_RULE_SETUP
#line 2135 "commentscan.l"
{
  					  if (*commentscanYYtext=='\n') yyLineNr++;
					  addOutput('\n');
					  setOutput(OutputDoc);
                                          addOutput("\\copydetails ");
					  addOutput(g_copyDocArg);
					  addOutput("\n");
					  BEGIN(Comment);
  					}
	YY_BREAK
case 200:
YY_RULE_SETUP
#line 2144 "commentscan.l"
{
  					  g_copyDocArg+=commentscanYYtext;
					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 201:
YY_RULE_SETUP
#line 2148 "commentscan.l"
{
  					  g_copyDocArg+=commentscanYYtext;
					  addOutput(commentscanYYtext);
  					}
	YY_BREAK
case 202:
YY_RULE_SETUP
#line 2154 "commentscan.l"
ECHO;
	YY_BREAK
#line 6487 "<stdout>"
			case YY_STATE_EOF(INITIAL):
			case YY_STATE_EOF(Comment):
			case YY_STATE_EOF(PageDocArg1):
			case YY_STATE_EOF(PageDocArg2):
			case YY_STATE_EOF(RelatesParam1):
			case YY_STATE_EOF(ClassDocArg1):
			case YY_STATE_EOF(ClassDocArg2):
			case YY_STATE_EOF(ClassDocArg3):
			case YY_STATE_EOF(CategoryDocArg1):
			case YY_STATE_EOF(XRefItemParam1):
			case YY_STATE_EOF(XRefItemParam2):
			case YY_STATE_EOF(XRefItemParam3):
			case YY_STATE_EOF(FileDocArg1):
			case YY_STATE_EOF(EnumDocArg1):
			case YY_STATE_EOF(NameSpaceDocArg1):
			case YY_STATE_EOF(PackageDocArg1):
			case YY_STATE_EOF(GroupDocArg1):
			case YY_STATE_EOF(GroupDocArg2):
			case YY_STATE_EOF(SectionLabel):
			case YY_STATE_EOF(SectionTitle):
			case YY_STATE_EOF(SubpageLabel):
			case YY_STATE_EOF(SubpageTitle):
			case YY_STATE_EOF(LineParam):
			case YY_STATE_EOF(GuardParam):
			case YY_STATE_EOF(GuardParamEnd):
			case YY_STATE_EOF(SkipGuardedSection):
			case YY_STATE_EOF(SkipInternal):
			case YY_STATE_EOF(NameParam):
			case YY_STATE_EOF(InGroupParam):
			case YY_STATE_EOF(FnParam):
			case YY_STATE_EOF(OverloadParam):
			case YY_STATE_EOF(InheritParam):
			case YY_STATE_EOF(ExtendsParam):
			case YY_STATE_EOF(ReadFormulaShort):
			case YY_STATE_EOF(ReadFormulaLong):
			case YY_STATE_EOF(AnchorLabel):
			case YY_STATE_EOF(HtmlComment):
			case YY_STATE_EOF(SkipLang):
			case YY_STATE_EOF(CiteLabel):
			case YY_STATE_EOF(GuardExpr):
				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 commentscanYYin at a new source and called
			 * commentscanYYlex().  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 = commentscanYYin;
			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_c_buf_p);
				goto yy_find_action;
				}
			}

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

				if ( commentscanYYwrap( ) )
					{
					/* Note: because we've taken care in
					 * yy_get_next_buffer() to have set up
					 * commentscanYYtext, 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 commentscanYYlex */

/* 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. */

			YY_FATAL_ERROR(
"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );

			}

		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;
			commentscanYYrestart(commentscanYYin  );
			}

		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 *) commentscanYYrealloc((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();

	(yy_state_ptr) = (yy_state_buf);
	*(yy_state_ptr)++ = yy_current_state;

	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);
		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 >= 1167 )
				yy_c = yy_meta[(unsigned int) yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
		*(yy_state_ptr)++ = yy_current_state;
		}

	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 YY_CHAR yy_c = 1;
	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 >= 1167 )
			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 == 1166);
	if ( ! yy_is_jam )
		*(yy_state_ptr)++ = yy_current_state;

		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 commentscanYYtext */
	*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;

	(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. */
					commentscanYYrestart(commentscanYYin );

					/*FALLTHROUGH*/

				case EOB_ACT_END_OF_FILE:
					{
					if ( commentscanYYwrap( ) )
						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 commentscanYYtext */
	(yy_hold_char) = *++(yy_c_buf_p);

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

	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 commentscanYYrestart  (FILE * input_file )
{
    
	if ( ! YY_CURRENT_BUFFER ){
        commentscanYYensure_buffer_stack ();
		YY_CURRENT_BUFFER_LVALUE =
            commentscanYY_create_buffer(commentscanYYin,YY_BUF_SIZE );
	}

	commentscanYY_init_buffer(YY_CURRENT_BUFFER,input_file );
	commentscanYY_load_buffer_state( );
}

/** Switch to a different input buffer.
 * @param new_buffer The new input buffer.
 * 
 */
    void commentscanYY_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
{
    
	/* TODO. We should be able to replace this entire function body
	 * with
	 *		commentscanYYpop_buffer_state();
	 *		commentscanYYpush_buffer_state(new_buffer);
     */
	commentscanYYensure_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;
	commentscanYY_load_buffer_state( );

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

static void commentscanYY_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;
	commentscanYYin = 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 commentscanYY_create_buffer  (FILE * file, int  size )
{
	YY_BUFFER_STATE b;
    
	b = (YY_BUFFER_STATE) commentscanYYalloc(sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in commentscanYY_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 *) commentscanYYalloc(b->yy_buf_size + 2  );
	if ( ! b->yy_ch_buf )
		YY_FATAL_ERROR( "out of dynamic memory in commentscanYY_create_buffer()" );

	b->yy_is_our_buffer = 1;

	commentscanYY_init_buffer(b,file );

	return b;
}

/** Destroy the buffer.
 * @param b a buffer created with commentscanYY_create_buffer()
 * 
 */
    void commentscanYY_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 )
		commentscanYYfree((void *) b->yy_ch_buf  );

	commentscanYYfree((void *) b  );
}

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

{
	int oerrno = errno;
    
	commentscanYY_flush_buffer(b );

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

    /* If b is the current buffer, then commentscanYY_init_buffer was _probably_
     * called from commentscanYYrestart() 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 = file ? (isatty( fileno(file) ) > 0) : 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 commentscanYY_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 )
		commentscanYY_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 commentscanYYpush_buffer_state (YY_BUFFER_STATE new_buffer )
{
    	if (new_buffer == NULL)
		return;

	commentscanYYensure_buffer_stack();

	/* This block is copied from commentscanYY_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 commentscanYY_switch_to_buffer. */
	commentscanYY_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 commentscanYYpop_buffer_state (void)
{
    	if (!YY_CURRENT_BUFFER)
		return;

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

	if (YY_CURRENT_BUFFER) {
		commentscanYY_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 commentscanYYensure_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**)commentscanYYalloc
								(num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in commentscanYYensure_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**)commentscanYYrealloc
								((yy_buffer_stack),
								num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in commentscanYYensure_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 commentscanYY_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) commentscanYYalloc(sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in commentscanYY_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;

	commentscanYY_switch_to_buffer(b  );

	return b;
}

/** Setup the input buffer state to scan a string. The next call to commentscanYYlex() 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
 *       commentscanYY_scan_bytes() instead.
 */
YY_BUFFER_STATE commentscanYY_scan_string (yyconst char * yystr )
{
    
	return commentscanYY_scan_bytes(yystr,strlen(yystr) );
}

/** Setup the input buffer state to scan the given bytes. The next call to commentscanYYlex() 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 commentscanYY_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n;
	int i;
    
	/* Get memory for full buffer, including space for trailing EOB's. */
	n = _yybytes_len + 2;
	buf = (char *) commentscanYYalloc(n  );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in commentscanYY_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 = commentscanYY_scan_buffer(buf,n );
	if ( ! b )
		YY_FATAL_ERROR( "bad buffer in commentscanYY_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 commentscanYYtext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		commentscanYYtext[commentscanYYleng] = (yy_hold_char); \
		(yy_c_buf_p) = commentscanYYtext + yyless_macro_arg; \
		(yy_hold_char) = *(yy_c_buf_p); \
		*(yy_c_buf_p) = '\0'; \
		commentscanYYleng = yyless_macro_arg; \
		} \
	while ( 0 )

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

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

/** Get the input stream.
 * 
 */
FILE *commentscanYYget_in  (void)
{
        return commentscanYYin;
}

/** Get the output stream.
 * 
 */
FILE *commentscanYYget_out  (void)
{
        return commentscanYYout;
}

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

/** Get the current token.
 * 
 */

char *commentscanYYget_text  (void)
{
        return commentscanYYtext;
}

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

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

void commentscanYYset_out (FILE *  out_str )
{
        commentscanYYout = out_str ;
}

int commentscanYYget_debug  (void)
{
        return commentscanYY_flex_debug;
}

void commentscanYYset_debug (int  bdebug )
{
        commentscanYY_flex_debug = bdebug ;
}

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

    (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;

    (yy_state_buf) = 0;
    (yy_state_ptr) = 0;
    (yy_full_match) = 0;
    (yy_lp) = 0;

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

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

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

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

    commentscanYYfree ( (yy_state_buf) );
    (yy_state_buf)  = NULL;

    /* Reset the globals. This is important in a non-reentrant scanner so the next time
     * commentscanYYlex() 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 *commentscanYYalloc (yy_size_t  size )
{
	return (void *) malloc( size );
}

void *commentscanYYrealloc  (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 commentscanYYfree (void * ptr )
{
	free( (char *) ptr );	/* see commentscanYYrealloc() for (char *) cast */
}

#define YYTABLES_NAME "yytables"

#line 2154 "commentscan.l"



//----------------------------------------------------------------------------

static bool handleBrief(const QCString &)
{
  //printf("handleBrief\n");
  setOutput(OutputBrief);
  return FALSE;
}

static bool handleFn(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::MEMBERDOC_SEC);
  functionProto.resize(0);
  braceCount=0;
  BEGIN(FnParam);
  return stop;
}

static bool handleDef(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::DEFINEDOC_SEC);
  functionProto.resize(0);
  BEGIN(FnParam);
  return stop;
}

static bool handleOverload(const QCString &)
{
  functionProto.resize(0);
  BEGIN(OverloadParam);
  return FALSE;
}

static bool handleEnum(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::ENUMDOC_SEC);
  BEGIN(EnumDocArg1);
  return stop;
}

static bool handleDefGroup(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::GROUPDOC_SEC);
  current->groupDocType = Entry::GROUPDOC_NORMAL;
  BEGIN( GroupDocArg1 );
  return stop;
}

static bool handleAddToGroup(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::GROUPDOC_SEC);
  current->groupDocType = Entry::GROUPDOC_ADD;
  BEGIN( GroupDocArg1 );
  return stop;
}

static bool handleWeakGroup(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::GROUPDOC_SEC);
  current->groupDocType = Entry::GROUPDOC_WEAK;
  BEGIN( GroupDocArg1 );
  return stop;
}

static bool handleNamespace(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::NAMESPACEDOC_SEC);
  BEGIN( NameSpaceDocArg1 );
  return stop;
}

static bool handlePackage(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::PACKAGEDOC_SEC);
  BEGIN( PackageDocArg1 );
  return stop;
}

static bool handleClass(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::CLASSDOC_SEC);
  BEGIN( ClassDocArg1 ); 
  return stop;
}

static bool handleHeaderFile(const QCString &)
{
  BEGIN( ClassDocArg2 );
  return FALSE;
}

static bool handleProtocol(const QCString &)
{ // Obj-C protocol
  bool stop=makeStructuralIndicator(Entry::PROTOCOLDOC_SEC);
  BEGIN( ClassDocArg1 ); 
  return stop;
}

static bool handleCategory(const QCString &)
{ // Obj-C category
  bool stop=makeStructuralIndicator(Entry::CATEGORYDOC_SEC);
  BEGIN( CategoryDocArg1 ); 
  return stop;
}

static bool handleUnion(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::UNIONDOC_SEC);
  BEGIN( ClassDocArg1 ); 
  return stop;
}

static bool handleStruct(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::STRUCTDOC_SEC);
  BEGIN( ClassDocArg1 ); 
  return stop;
}

static bool handleInterface(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::INTERFACEDOC_SEC);
  BEGIN( ClassDocArg1 ); 
  return stop;
}

static bool handleIdlException(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::EXCEPTIONDOC_SEC);
  BEGIN( ClassDocArg1 ); 
  return stop;
}

static bool handlePage(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::PAGEDOC_SEC);
  BEGIN( PageDocArg1 );
  return stop;
}

static bool handleMainpage(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::MAINPAGEDOC_SEC);
  if (!stop) 
  {
    current->name = "mainpage";
  }
  BEGIN( PageDocArg2 );
  return stop;
}

static bool handleFile(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::FILEDOC_SEC);
  if (!stop) 
  {
    current->name = yyFileName;
  }
  BEGIN( FileDocArg1 );
  return stop;
}

static bool handleDir(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::DIRDOC_SEC);
  if (!stop) current->name = yyFileName;
  BEGIN( FileDocArg1 );
  return stop;
}

static bool handleExample(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::EXAMPLE_SEC);
  if (!stop) current->name = yyFileName;
  BEGIN( FileDocArg1 );
  return stop;
}

static bool handleDetails(const QCString &)
{
  if (inContext!=OutputBrief)
  {
    addOutput("\n\n"); // treat @details outside brief description
                       // as a new paragraph
  }
  setOutput(OutputDoc);
  return FALSE;
}

static bool handleName(const QCString &)
{
  bool stop=makeStructuralIndicator(Entry::MEMBERGRP_SEC);
  if (!stop)
  {
    g_memberGroupHeader.resize(0);
    BEGIN( NameParam );
    if (g_memberGroupId!=DOX_NOGROUP) // end of previous member group
    {
      closeGroup(current,yyFileName,yyLineNr,TRUE);
    }
  }
  return stop;
}

static bool handleTodo(const QCString &)
{
  newXRefKind = XRef_Todo;
  setOutput(OutputXRef);
  xrefKind = XRef_Todo;
  return FALSE;
}

static bool handleTest(const QCString &)
{
  newXRefKind = XRef_Test;
  setOutput(OutputXRef);
  xrefKind = XRef_Test;
  return FALSE;
}

static bool handleBug(const QCString &)
{
  newXRefKind = XRef_Bug;
  setOutput(OutputXRef);
  xrefKind = XRef_Bug;
  return FALSE;
}

static bool handleDeprecated(const QCString &)
{
  newXRefKind = XRef_Deprecated;
  setOutput(OutputXRef);
  xrefKind = XRef_Deprecated;
  return FALSE;
}

static bool handleXRefItem(const QCString &)
{
  newXRefKind = XRef_Item;
  BEGIN(XRefItemParam1);
  return FALSE;
}

static bool handleParBlock(const QCString &)
{
  if (g_insideParBlock)
  {
    warn(yyFileName,yyLineNr,
	"found \\parblock command while already in a parblock!");
  }
  if (!g_spaceBeforeCmd.isEmpty()) 
  {
    addOutput(g_spaceBeforeCmd);
    g_spaceBeforeCmd.resize(0);
  }
  addOutput("@parblock ");
  g_insideParBlock = TRUE;
  return FALSE;
}

static bool handleEndParBlock(const QCString &)
{
  if (!g_insideParBlock)
  {
    warn(yyFileName,yyLineNr,
	"found \\endparblock command without matching \\parblock!");
  }
  addOutput("@endparblock");
  setOutput(OutputDoc); // to end a parblock inside a xrefitem like context
  g_insideParBlock = FALSE;
  return FALSE;
}

static bool handleRelated(const QCString &)
{
  BEGIN(RelatesParam1);
  return FALSE;
}

static bool handleRelatedAlso(const QCString &)
{
  current->relatesType = Duplicate;
  BEGIN(RelatesParam1);
  return FALSE;
}

static bool handleMemberOf(const QCString &)
{
  current->relatesType = MemberOf;
  BEGIN(RelatesParam1);
  return FALSE;
}

static bool handleRefItem(const QCString &)
{
  addOutput("@refitem ");
  BEGIN(LineParam);
  return FALSE;
}

static bool handleSection(const QCString &s)
{
  setOutput(OutputDoc);
  addOutput("@"+s+" ");
  BEGIN(SectionLabel);
  if      (s=="section")       g_sectionLevel=1;
  else if (s=="subsection")    g_sectionLevel=2;
  else if (s=="subsubsection") g_sectionLevel=3;
  else if (s=="paragraph")     g_sectionLevel=4;
  return FALSE;
}

static bool handleSubpage(const QCString &s)
{
  if (current->section!=Entry::EMPTY_SEC && 
      current->section!=Entry::PAGEDOC_SEC &&
      current->section!=Entry::MAINPAGEDOC_SEC
     )
  {
    warn(yyFileName,yyLineNr,
	"found \\subpage command in a comment block that is not marked as a page!");
  }
  if (!g_spaceBeforeCmd.isEmpty()) 
  {
    addOutput(g_spaceBeforeCmd);
    g_spaceBeforeCmd.resize(0);
  }
  addOutput("@"+s+" ");
  BEGIN(SubpageLabel);
  return FALSE;
}

static bool handleAnchor(const QCString &s)
{
  addOutput("@"+s+" ");
  BEGIN(AnchorLabel);
  return FALSE;
}

static bool handleCite(const QCString &s)
{
  if (!g_spaceBeforeCmd.isEmpty()) 
  {
    addOutput(g_spaceBeforeCmd);
    g_spaceBeforeCmd.resize(0);
  }
  addOutput("@"+s+" ");
  BEGIN(CiteLabel);
  return FALSE;
}

static bool handleFormatBlock(const QCString &s)
{
  addOutput("@"+s+" ");
  //printf("handleFormatBlock(%s)\n",s.data());
  blockName=s;
  g_commentCount=0;
  BEGIN(FormatBlock);
  return FALSE;
}

static bool handleAddIndex(const QCString &)
{
  addOutput("@addindex ");
  BEGIN(LineParam);
  return FALSE;
}

static bool handleIf(const QCString &)
{
  enabledSectionFound=FALSE;
  guardType = Guard_If;
  g_spaceBeforeIf = g_spaceBeforeCmd;
  BEGIN(GuardParam);
  return FALSE;
}

static bool handleIfNot(const QCString &)
{
  enabledSectionFound=FALSE;
  guardType = Guard_IfNot;
  g_spaceBeforeIf = g_spaceBeforeCmd;
  BEGIN(GuardParam);
  return FALSE;
}

static bool handleElseIf(const QCString &)
{
  if (guards.isEmpty())
  {
    warn(yyFileName,yyLineNr,
	"found \\else without matching start command");
  }
  else
  {
    guardType = enabledSectionFound ? Guard_Skip : Guard_If;
    BEGIN(GuardParam);
  }
  return FALSE;
}

static bool handleElse(const QCString &)
{
  if (guards.isEmpty())
  {
    warn(yyFileName,yyLineNr,
	"found \\else without matching start command");
  }
  else
  {
    BEGIN( SkipGuardedSection );
  }
  return FALSE;
}

static bool handleEndIf(const QCString &)
{
  if (guards.isEmpty())
  {
    warn(yyFileName,yyLineNr,
	"found \\endif without matching start command");
  }
  else
  {
    delete guards.pop();
  }
  enabledSectionFound=FALSE;
  if (!g_spaceBeforeCmd.isEmpty()) 
  {
    addOutput(g_spaceBeforeCmd);
    g_spaceBeforeCmd.resize(0);
  }
  BEGIN( GuardParamEnd );
  return FALSE;
}

static bool handleIngroup(const QCString &)
{
  inGroupParamFound=FALSE;
  BEGIN( InGroupParam );
  return FALSE;
}

static bool handleNoSubGrouping(const QCString &)
{
  current->subGrouping = FALSE; 
  return FALSE;
}

static bool handleShowInitializer(const QCString &)
{
  current->initLines = 100000; // ON
  return FALSE;
}

static bool handleHideInitializer(const QCString &)
{
  current->initLines = 0; // OFF
  return FALSE;
}

static bool handleCallgraph(const QCString &)
{
  current->callGraph = TRUE; // ON
  return FALSE;
}

static bool handleCallergraph(const QCString &)
{
  current->callerGraph = TRUE; // ON
  return FALSE;
}

static bool handleInternal(const QCString &)
{
  if (!Config_getBool("INTERNAL_DOCS"))
  {
    // make sure some whitespace before a \internal command
    // is not treated as "documentation"
    if (current->doc.stripWhiteSpace().isEmpty())
    { 
      current->doc.resize(0);
    }
    g_condCount=0;
    BEGIN( SkipInternal );
  }
  else
  {
    // re-enabled for bug640828
    addOutput("\\internal "); 
    inInternalDocs = TRUE;
  }
  return FALSE;
}

static bool handleLineBr(const QCString &)
{
  addOutput('\n');
  return FALSE;
}

static bool handleStatic(const QCString &)
{
  endBrief();
  current->stat = TRUE; 
  return FALSE;
}

static bool handlePure(const QCString &)
{
  endBrief();
  current->virt = Pure; 
  return FALSE;
}

static bool handlePrivate(const QCString &)
{
  current->protection = Private;
  return FALSE;
}

static bool handlePrivateSection(const QCString &)
{
  current->protection = protection = Private;
  return FALSE;
}

static bool handleProtected(const QCString &)
{
  current->protection = Protected;
  return FALSE;
}

static bool handleProtectedSection(const QCString &)
{
  current->protection = protection = Protected ;
  return FALSE;
}

static bool handlePublic(const QCString &)
{
  current->protection = Public;
  return FALSE;
}

static bool handlePublicSection(const QCString &)
{
  current->protection = protection = Public;
  return FALSE;
}

static bool handleToc(const QCString &)
{
  if (current->section==Entry::PAGEDOC_SEC || 
      current->section==Entry::MAINPAGEDOC_SEC)
  {
    current->stat=TRUE;  // we 'abuse' stat to pass whether or the TOC is enabled
  }
  return FALSE;
}

static bool handleInherit(const QCString &)
{
  BEGIN(InheritParam);
  return FALSE;
}

static bool handleExtends(const QCString &)
{
  BEGIN(ExtendsParam);
  return FALSE;
}

static bool handleCopyBrief(const QCString &)
{
  if (current->brief.isEmpty() && current->doc.isEmpty())
  { // if we don't have a brief or detailed description yet,
    // then the @copybrief should end up in the brief description.
    // otherwise it will be copied inline (see bug691315 & bug700788)
    setOutput(OutputBrief);
  }
  if (!g_spaceBeforeCmd.isEmpty()) 
  {
    addOutput(g_spaceBeforeCmd);
    g_spaceBeforeCmd.resize(0);
  }
  addOutput("\\copybrief ");
  return FALSE;
}

static bool handleCopyDetails(const QCString &)
{
  setOutput(OutputDoc);
  if (!g_spaceBeforeCmd.isEmpty()) 
  {
    addOutput(g_spaceBeforeCmd);
    g_spaceBeforeCmd.resize(0);
  }
  addOutput("\\copydetails ");
  return FALSE;
}

static bool handleCopyDoc(const QCString &)
{
  setOutput(OutputBrief);
  if (!g_spaceBeforeCmd.isEmpty()) 
  {
    addOutput(g_spaceBeforeCmd);
    g_spaceBeforeCmd.resize(0);
  }
  addOutput("\\copybrief ");
  g_copyDocArg.resize(0);
  BEGIN(CopyDoc);
  return FALSE;
}

//----------------------------------------------------------------------------

static void checkFormula()
{
  if (YY_START==ReadFormulaShort || YY_START==ReadFormulaLong)
  {
    warn(yyFileName,yyLineNr,"End of comment block while inside formula.");
  }
}

//----------------------------------------------------------------------------

bool parseCommentBlock(/* in */     ParserInterface *parser,
                       /* in */     Entry *curEntry,
                       /* in */     const QCString &comment,
		       /* in */     const QCString &fileName,
		       /* in,out */ int  &lineNr,
		       /* in */     bool isBrief,
		       /* in */     bool isAutoBriefOn,
		       /* in */     bool isInbody,
		       /* in,out */ Protection &prot,
		       /* in,out */ int &position,
		       /* out */    bool &newEntryNeeded
		      )
{
  //printf("parseCommentBlock() isBrief=%d isAutoBriefOn=%d lineNr=%d\n",
  //    isBrief,isAutoBriefOn,lineNr);

  initParser();
  guards.setAutoDelete(TRUE);
  guards.clear();
  langParser     = parser;
  current        = curEntry;
  if (comment.isEmpty()) return FALSE; // avoid empty strings
  inputString    = comment;
  inputString.append(" ");
  inputPosition  = position;
  yyLineNr       = lineNr;
  yyFileName     = fileName;
  protection     = prot;
  needNewEntry   = FALSE;
  xrefKind       = XRef_None;
  xrefAppendFlag = FALSE;
  insidePre      = FALSE;
  parseMore      = FALSE;
  inBody         = isInbody;
  outputXRef.resize(0);
  setOutput( isBrief || isAutoBriefOn ? OutputBrief : OutputDoc );
  briefEndsAtDot = isAutoBriefOn;
  g_condCount    = 0;
  g_sectionLevel = 0;
  g_spaceBeforeCmd.resize(0);
  g_spaceBeforeIf.resize(0);

  printlex(commentscanYY_flex_debug, TRUE, __FILE__, fileName ? fileName.data(): NULL);
  if (!current->inbodyDocs.isEmpty() && isInbody) // separate in body fragments
  {
    current->inbodyDocs+="\n\n";
  }

  Debug::print(Debug::CommentScan,0,"-----------\nCommentScanner: %s:%d\n"
               "input=[\n%s]\n",fileName.data(),lineNr,comment.data()
              );
  
  commentscanYYrestart( commentscanYYin );
  BEGIN( Comment );
  commentscanYYlex();
  setOutput( OutputDoc );

  if (YY_START==OverloadParam) // comment ended with \overload
  {
    addOutput(getOverloadDocs());
  }

  if (!guards.isEmpty())
  {
    warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!");
  }

  if (g_insideParBlock)
  {
    warn(yyFileName,yyLineNr,
	"Documentation block ended while inside a \\parblock. Missing \\endparblock");
  }

  current->doc=stripLeadingAndTrailingEmptyLines(current->doc,current->docLine);

  if (current->section==Entry::FILEDOC_SEC && current->doc.isEmpty())
  {
    // to allow a comment block with just a @file command.
    current->doc="\n\n";
  }

  if (current->section==Entry::MEMBERGRP_SEC &&
      g_memberGroupId==DOX_NOGROUP) // @name section but no group started yet
  {
    openGroup(current,yyFileName,yyLineNr);
  }

  if (Doxygen::markdownSupport)
  {
    current->brief      = processMarkdown(fileName,current,current->brief);
    current->doc        = processMarkdown(fileName,current,current->doc);
    current->inbodyDocs = processMarkdown(fileName,current,current->inbodyDocs);
  }

  Debug::print(Debug::CommentScan,0,
               "brief=[line=%d\n%s]\ndocs=[line=%d\n%s]\ninbody=[line=%d\n%s]\n===========\n",
	       current->briefLine,current->brief.data(),
               current->docLine,current->doc.data(),
               current->inbodyLine,current->inbodyDocs.data()
              );
  
  checkFormula();
  prot = protection;
  
  groupAddDocs(curEntry,fileName);

  newEntryNeeded = needNewEntry;

  // if we did not proceed during this call, it does not make
  // sense to continue, since we get stuck. See bug 567346 for situations
  // were this happens
  if (parseMore && position==inputPosition) parseMore=FALSE;

  if (parseMore) position=inputPosition; else position=0;

  lineNr = yyLineNr;
  //printf("position=%d parseMore=%d newEntryNeeded=%d\n",
  //  position,parseMore,newEntryNeeded);

  printlex(commentscanYY_flex_debug, FALSE, __FILE__, fileName ? fileName.data(): NULL);
  return parseMore;
}

//---------------------------------------------------------------------------

void groupEnterFile(const char *fileName,int)
{
  g_autoGroupStack.setAutoDelete(TRUE);
  g_autoGroupStack.clear();
  g_memberGroupId = DOX_NOGROUP;
  g_memberGroupDocs.resize(0);
  g_memberGroupRelates.resize(0);
  g_compoundName=fileName;
}

void groupLeaveFile(const char *fileName,int line)
{
  //if (g_memberGroupId!=DOX_NOGROUP)
  //{
  //  warn(fileName,line,"end of file while inside a member group\n");
  //}
  g_memberGroupId=DOX_NOGROUP;
  g_memberGroupRelates.resize(0);
  g_memberGroupDocs.resize(0);
  if (!g_autoGroupStack.isEmpty())
  {
    warn(fileName,line,"end of file while inside a group\n");
  }
}

void groupEnterCompound(const char *fileName,int line,const char *name)
{
  if (g_memberGroupId!=DOX_NOGROUP)
  {
    warn(fileName,line,"try to put compound %s inside a member group\n",name);
  }
  g_memberGroupId=DOX_NOGROUP;
  g_memberGroupRelates.resize(0);
  g_memberGroupDocs.resize(0);
  g_compoundName = name;
  int i = g_compoundName.find('(');
  if (i!=-1) 
  {
    g_compoundName=g_compoundName.left(i); // strip category (Obj-C)
  }
  if (g_compoundName.isEmpty())
  {
    g_compoundName=fileName;
  }
  //printf("groupEnterCompound(%s)\n",name);
}

void groupLeaveCompound(const char *,int,const char * /*name*/)
{
  //printf("groupLeaveCompound(%s)\n",name);
  //if (g_memberGroupId!=DOX_NOGROUP)
  //{
  //  warn(fileName,line,"end of compound %s while inside a member group\n",name);
  //}
  g_memberGroupId=DOX_NOGROUP;
  g_memberGroupRelates.resize(0);
  g_memberGroupDocs.resize(0);
  g_compoundName.resize(0);
}

static int findExistingGroup(int &groupId,const MemberGroupInfo *info)
{
  //printf("findExistingGroup %s:%s\n",info->header.data(),info->compoundName.data());
  QIntDictIterator<MemberGroupInfo> di(Doxygen::memGrpInfoDict);
  MemberGroupInfo *mi;
  for (di.toFirst();(mi=di.current());++di)
  {
    if (g_compoundName==mi->compoundName &&  // same file or scope
	!mi->header.isEmpty() &&             // not a nameless group
	qstricmp(mi->header,info->header)==0  // same header name
       )
    {
      //printf("Found it!\n");
      return (int)di.currentKey(); // put the item in this group
    }
  }
  groupId++; // start new group
  return groupId;
}

void openGroup(Entry *e,const char *,int)
{
  //printf("==> openGroup(name=%s,sec=%x) g_autoGroupStack=%d\n",
  //  	e->name.data(),e->section,g_autoGroupStack.count());
  if (e->section==Entry::GROUPDOC_SEC) // auto group
  {
    g_autoGroupStack.push(new Grouping(e->name,e->groupingPri()));
  }
  else // start of a member group
  {
    //printf("    membergroup id=%d %s\n",g_memberGroupId,g_memberGroupHeader.data());
    if (g_memberGroupId==DOX_NOGROUP) // no group started yet
    {
      static int curGroupId=0;

      MemberGroupInfo *info = new MemberGroupInfo;
      info->header = g_memberGroupHeader.stripWhiteSpace();
      info->compoundName = g_compoundName;
      g_memberGroupId = findExistingGroup(curGroupId,info);
      //printf("    use membergroup %d\n",g_memberGroupId);
      Doxygen::memGrpInfoDict.insert(g_memberGroupId,info);

      g_memberGroupRelates = e->relates;
      e->mGrpId = g_memberGroupId;
    }
  }
}

void closeGroup(Entry *e,const char *fileName,int,bool foundInline)
{
  //printf("==> closeGroup(name=%s,sec=%x) g_autoGroupStack=%d\n",
  //    e->name.data(),e->section,g_autoGroupStack.count());
  if (g_memberGroupId!=DOX_NOGROUP) // end of member group
  {
    MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(g_memberGroupId);
    if (info) // known group
    {
      info->doc = g_memberGroupDocs;
      info->docFile = fileName;
    }
    g_memberGroupId=DOX_NOGROUP;
    g_memberGroupRelates.resize(0);
    g_memberGroupDocs.resize(0);
    e->mGrpId=DOX_NOGROUP;
    //printf("new group id=%d\n",g_memberGroupId);
  }
  else if (!g_autoGroupStack.isEmpty()) // end of auto group
  {
    Grouping *grp = g_autoGroupStack.pop();
    // see bug577005: we should not remove the last group for e
    if (!foundInline) e->groups->removeLast();
    //printf("Removing %s e=%p\n",grp->groupname.data(),e);
    delete grp;
    if (!foundInline) initGroupInfo(e);
  }
}

void initGroupInfo(Entry *e)
{
  //printf("==> initGroup(id=%d,related=%s,e=%p)\n",g_memberGroupId,
  //       g_memberGroupRelates.data(),e);
  e->mGrpId     = g_memberGroupId;
  e->relates    = g_memberGroupRelates;
  if (!g_autoGroupStack.isEmpty())
  {
    //printf("Appending group %s to %s: count=%d entry=%p\n",
    //	g_autoGroupStack.top()->groupname.data(),
    //	e->name.data(),e->groups->count(),e);
    e->groups->append(new Grouping(*g_autoGroupStack.top()));
  }
}

static void groupAddDocs(Entry *e,const char *fileName)
{
  if (e->section==Entry::MEMBERGRP_SEC)
  {
    g_memberGroupDocs=e->brief.stripWhiteSpace();
    e->doc = stripLeadingAndTrailingEmptyLines(e->doc,e->docLine);
    if (!g_memberGroupDocs.isEmpty() && !e->doc.isEmpty())
    {
      g_memberGroupDocs+="\n\n";
    }
    g_memberGroupDocs+=e->doc;
    MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(g_memberGroupId);
    if (info) 
    {
      info->doc = g_memberGroupDocs;
      info->docFile = fileName;
      info->setRefItems(e->sli);
    }
    e->doc.resize(0);
    e->brief.resize(0);
  }
}

static void handleGuard(const QCString &expr)
{
  CondParser prs;
  bool sectionEnabled=prs.parse(yyFileName,yyLineNr,expr);
  bool parentEnabled = TRUE;
  if (!guards.isEmpty()) parentEnabled = guards.top()->isEnabled();
  if (parentEnabled)
  {
    if (
        (sectionEnabled && guardType==Guard_If) ||  
        (!sectionEnabled && guardType==Guard_IfNot)
       ) // section is visible
    {
      guards.push(new GuardedSection(TRUE,TRUE));
      enabledSectionFound=TRUE;
      BEGIN( GuardParamEnd );
    }
    else // section is invisible
    {
      if (guardType!=Guard_Skip)
      {
        guards.push(new GuardedSection(FALSE,TRUE));
      }
      BEGIN( SkipGuardedSection );
    }
  }
  else // invisible because of parent
  {
    guards.push(new GuardedSection(FALSE,FALSE));
    BEGIN( SkipGuardedSection );
  }
}



#if !defined(YY_FLEX_SUBMINOR_VERSION) 
//----------------------------------------------------------------------------
extern "C" { // some bogus code to keep the compiler happy
  void commentscanYYdummy() { yy_flex_realloc(0,0); } 
}
#endif