Merged revisions 49237 via svnmerge from
[asterisk/asterisk.git] / main / ast_expr2f.c
1 #line 2 "ast_expr2f.c"
2
3 #line 4 "ast_expr2f.c"
4
5 #define  YY_INT_ALIGNED short int
6
7 /* A lexical scanner generated by flex */
8
9 #define FLEX_SCANNER
10 #define YY_FLEX_MAJOR_VERSION 2
11 #define YY_FLEX_MINOR_VERSION 5
12 #define YY_FLEX_SUBMINOR_VERSION 31
13 #if YY_FLEX_SUBMINOR_VERSION > 0
14 #define FLEX_BETA
15 #endif
16
17 /* First, we deal with  platform-specific or compiler-specific issues. */
18
19 /* begin standard C headers. */
20 #include <stdio.h>
21 #include <string.h>
22 #include <errno.h>
23 #include <stdlib.h>
24
25 /* end standard C headers. */
26
27 /* flex integer type definitions */
28
29 #ifndef FLEXINT_H
30 #define FLEXINT_H
31
32 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
33
34 #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
35 #include <inttypes.h>
36 typedef int8_t flex_int8_t;
37 typedef uint8_t flex_uint8_t;
38 typedef int16_t flex_int16_t;
39 typedef uint16_t flex_uint16_t;
40 typedef int32_t flex_int32_t;
41 typedef uint32_t flex_uint32_t;
42 #else
43 typedef signed char flex_int8_t;
44 typedef short int flex_int16_t;
45 typedef int flex_int32_t;
46 typedef unsigned char flex_uint8_t; 
47 typedef unsigned short int flex_uint16_t;
48 typedef unsigned int flex_uint32_t;
49 #endif /* ! C99 */
50
51 /* Limits of integral types. */
52 #ifndef INT8_MIN
53 #define INT8_MIN               (-128)
54 #endif
55 #ifndef INT16_MIN
56 #define INT16_MIN              (-32767-1)
57 #endif
58 #ifndef INT32_MIN
59 #define INT32_MIN              (-2147483647-1)
60 #endif
61 #ifndef INT8_MAX
62 #define INT8_MAX               (127)
63 #endif
64 #ifndef INT16_MAX
65 #define INT16_MAX              (32767)
66 #endif
67 #ifndef INT32_MAX
68 #define INT32_MAX              (2147483647)
69 #endif
70 #ifndef UINT8_MAX
71 #define UINT8_MAX              (255U)
72 #endif
73 #ifndef UINT16_MAX
74 #define UINT16_MAX             (65535U)
75 #endif
76 #ifndef UINT32_MAX
77 #define UINT32_MAX             (4294967295U)
78 #endif
79
80 #endif /* ! FLEXINT_H */
81
82 #ifdef __cplusplus
83
84 /* The "const" storage-class-modifier is valid. */
85 #define YY_USE_CONST
86
87 #else   /* ! __cplusplus */
88
89 #if __STDC__
90
91 #define YY_USE_CONST
92
93 #endif  /* __STDC__ */
94 #endif  /* ! __cplusplus */
95
96 #ifdef YY_USE_CONST
97 #define yyconst const
98 #else
99 #define yyconst
100 #endif
101
102 /* Returned upon end-of-file. */
103 #define YY_NULL 0
104
105 /* Promotes a possibly negative, possibly signed char to an unsigned
106  * integer for use as an array index.  If the signed char is negative,
107  * we want to instead treat it as an 8-bit unsigned char, hence the
108  * double cast.
109  */
110 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
111
112 /* An opaque pointer. */
113 #ifndef YY_TYPEDEF_YY_SCANNER_T
114 #define YY_TYPEDEF_YY_SCANNER_T
115 typedef void* yyscan_t;
116 #endif
117
118 /* For convenience, these vars (plus the bison vars far below)
119    are macros in the reentrant scanner. */
120 #define yyin yyg->yyin_r
121 #define yyout yyg->yyout_r
122 #define yyextra yyg->yyextra_r
123 #define yyleng yyg->yyleng_r
124 #define yytext yyg->yytext_r
125 #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
126 #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
127 #define yy_flex_debug yyg->yy_flex_debug_r
128
129 int ast_yylex_init (yyscan_t* scanner);
130
131 /* Enter a start condition.  This macro really ought to take a parameter,
132  * but we do it the disgusting crufty way forced on us by the ()-less
133  * definition of BEGIN.
134  */
135 #define BEGIN yyg->yy_start = 1 + 2 *
136
137 /* Translate the current start state into a value that can be later handed
138  * to BEGIN to return to the state.  The YYSTATE alias is for lex
139  * compatibility.
140  */
141 #define YY_START ((yyg->yy_start - 1) / 2)
142 #define YYSTATE YY_START
143
144 /* Action number for EOF rule of a given start state. */
145 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
146
147 /* Special action meaning "start processing a new file". */
148 #define YY_NEW_FILE ast_yyrestart(yyin ,yyscanner )
149
150 #define YY_END_OF_BUFFER_CHAR 0
151
152 /* Size of default input buffer. */
153 #ifndef YY_BUF_SIZE
154 #define YY_BUF_SIZE 16384
155 #endif
156
157 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
158 #define YY_TYPEDEF_YY_BUFFER_STATE
159 typedef struct yy_buffer_state *YY_BUFFER_STATE;
160 #endif
161
162 #define EOB_ACT_CONTINUE_SCAN 0
163 #define EOB_ACT_END_OF_FILE 1
164 #define EOB_ACT_LAST_MATCH 2
165
166     #define YY_LESS_LINENO(n)
167     
168 /* Return all but the first "n" matched characters back to the input stream. */
169 #define yyless(n) \
170         do \
171                 { \
172                 /* Undo effects of setting up yytext. */ \
173         int yyless_macro_arg = (n); \
174         YY_LESS_LINENO(yyless_macro_arg);\
175                 *yy_cp = yyg->yy_hold_char; \
176                 YY_RESTORE_YY_MORE_OFFSET \
177                 yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
178                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
179                 } \
180         while ( 0 )
181
182 #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
183
184 /* The following is because we cannot portably get our hands on size_t
185  * (without autoconf's help, which isn't available because we want
186  * flex-generated scanners to compile on their own).
187  */
188
189 #ifndef YY_TYPEDEF_YY_SIZE_T
190 #define YY_TYPEDEF_YY_SIZE_T
191 typedef unsigned int yy_size_t;
192 #endif
193
194 #ifndef YY_STRUCT_YY_BUFFER_STATE
195 #define YY_STRUCT_YY_BUFFER_STATE
196 struct yy_buffer_state
197         {
198         FILE *yy_input_file;
199
200         char *yy_ch_buf;                /* input buffer */
201         char *yy_buf_pos;               /* current position in input buffer */
202
203         /* Size of input buffer in bytes, not including room for EOB
204          * characters.
205          */
206         yy_size_t yy_buf_size;
207
208         /* Number of characters read into yy_ch_buf, not including EOB
209          * characters.
210          */
211         int yy_n_chars;
212
213         /* Whether we "own" the buffer - i.e., we know we created it,
214          * and can realloc() it to grow it, and should free() it to
215          * delete it.
216          */
217         int yy_is_our_buffer;
218
219         /* Whether this is an "interactive" input source; if so, and
220          * if we're using stdio for input, then we want to use getc()
221          * instead of fread(), to make sure we stop fetching input after
222          * each newline.
223          */
224         int yy_is_interactive;
225
226         /* Whether we're considered to be at the beginning of a line.
227          * If so, '^' rules will be active on the next match, otherwise
228          * not.
229          */
230         int yy_at_bol;
231
232     int yy_bs_lineno; /**< The line count. */
233     int yy_bs_column; /**< The column count. */
234     
235         /* Whether to try to fill the input buffer when we reach the
236          * end of it.
237          */
238         int yy_fill_buffer;
239
240         int yy_buffer_status;
241
242 #define YY_BUFFER_NEW 0
243 #define YY_BUFFER_NORMAL 1
244         /* When an EOF's been seen but there's still some text to process
245          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
246          * shouldn't try reading from the input source any more.  We might
247          * still have a bunch of tokens to match, though, because of
248          * possible backing-up.
249          *
250          * When we actually see the EOF, we change the status to "new"
251          * (via ast_yyrestart()), so that the user can continue scanning by
252          * just pointing yyin at a new input file.
253          */
254 #define YY_BUFFER_EOF_PENDING 2
255
256         };
257 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
258
259 /* We provide macros for accessing buffer states in case in the
260  * future we want to put the buffer states in a more general
261  * "scanner state".
262  *
263  * Returns the top of the stack, or NULL.
264  */
265 #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
266                           ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
267                           : NULL)
268
269 /* Same as previous macro, but useful when we know that the buffer stack is not
270  * NULL or when we need an lvalue. For internal use only.
271  */
272 #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
273
274 void ast_yyrestart (FILE *input_file ,yyscan_t yyscanner );
275 void ast_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
276 YY_BUFFER_STATE ast_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
277 void ast_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
278 void ast_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
279 void ast_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
280 void ast_yypop_buffer_state (yyscan_t yyscanner );
281
282 static void ast_yyensure_buffer_stack (yyscan_t yyscanner );
283 static void ast_yy_load_buffer_state (yyscan_t yyscanner );
284 static void ast_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
285
286 #define YY_FLUSH_BUFFER ast_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
287
288 YY_BUFFER_STATE ast_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
289 YY_BUFFER_STATE ast_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
290 YY_BUFFER_STATE ast_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
291
292 void *ast_yyalloc (yy_size_t ,yyscan_t yyscanner );
293 void *ast_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
294 void ast_yyfree (void * ,yyscan_t yyscanner );
295
296 #define yy_new_buffer ast_yy_create_buffer
297
298 #define yy_set_interactive(is_interactive) \
299         { \
300         if ( ! YY_CURRENT_BUFFER ){ \
301         ast_yyensure_buffer_stack (yyscanner); \
302                 YY_CURRENT_BUFFER_LVALUE =    \
303             ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
304         } \
305         YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
306         }
307
308 #define yy_set_bol(at_bol) \
309         { \
310         if ( ! YY_CURRENT_BUFFER ){\
311         ast_yyensure_buffer_stack (yyscanner); \
312                 YY_CURRENT_BUFFER_LVALUE =    \
313             ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
314         } \
315         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
316         }
317
318 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
319
320 /* Begin user sect3 */
321
322 #define ast_yywrap(n) 1
323 #define YY_SKIP_YYWRAP
324
325 typedef char YY_CHAR;
326
327 typedef int yy_state_type;
328
329 #define yytext_ptr yytext_r
330 static yyconst flex_int16_t yy_nxt[][128] =
331     {
332     {
333         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
334         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
335         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
336         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
337         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
338         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
339         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
340         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
341         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
342         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
343
344         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
345         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
346         0,    0,    0,    0,    0,    0,    0,    0
347     },
348
349     {
350         7,    8,    8,    8,    8,    8,    8,    8,    8,    9,
351        10,    8,    8,    9,    8,    8,    8,    8,    8,    8,
352         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
353         8,    8,    9,   11,   12,   13,   14,   15,   16,   13,
354        17,   18,   19,   20,   13,   21,   13,   22,   23,   23,
355        23,   23,   23,   23,   23,   23,   23,   23,   24,   13,
356        25,   26,   27,   28,   13,   13,   13,   13,   13,   13,
357
358        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
359        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
360        13,    8,   13,    8,   13,   13,    8,   13,   13,   13,
361        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
362        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
363        13,   13,   13,    8,   29,    8,    8,    8
364     },
365
366     {
367         7,    8,    8,    8,    8,    8,    8,    8,    8,    9,
368        10,    8,    8,    9,    8,    8,    8,    8,    8,    8,
369         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
370         8,    8,    9,   11,   12,   13,   14,   15,   16,   13,
371
372        17,   18,   19,   20,   13,   21,   13,   22,   23,   23,
373        23,   23,   23,   23,   23,   23,   23,   23,   24,   13,
374        25,   26,   27,   28,   13,   13,   13,   13,   13,   13,
375        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
376        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
377        13,    8,   13,    8,   13,   13,    8,   13,   13,   13,
378        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
379        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
380        13,   13,   13,    8,   29,    8,    8,    8
381     },
382
383     {
384         7,   30,   30,   30,   30,   30,   30,   30,   30,   30,
385
386        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
387        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
388        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
389        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
390        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
391        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
392        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
393        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
394        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
395        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
396
397        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
398        30,   30,   30,   31,   30,   32,   30,   30
399     },
400
401     {
402         7,   30,   30,   30,   30,   30,   30,   30,   30,   30,
403        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
404        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
405        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
406        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
407        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
408        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
409        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
410
411        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
412        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
413        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
414        30,   30,   30,   30,   30,   30,   30,   30,   30,   30,
415        30,   30,   30,   31,   30,   32,   30,   30
416     },
417
418     {
419         7,   33,   33,   33,   33,   33,   33,   33,   33,   34,
420        34,   33,   33,   34,   33,   33,   33,   33,   33,   33,
421        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
422        33,   33,   34,   34,   33,   33,   35,   34,   34,   33,
423        34,   34,   34,   34,   33,   34,   33,   34,   33,   33,
424
425        33,   33,   33,   33,   33,   33,   33,   33,   34,   33,
426        34,   34,   34,   34,   33,   33,   33,   33,   33,   33,
427        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
428        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
429        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
430        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
431        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
432        33,   33,   33,   33,   34,   33,   33,   33
433     },
434
435     {
436         7,   33,   33,   33,   33,   33,   33,   33,   33,   34,
437        34,   33,   33,   34,   33,   33,   33,   33,   33,   33,
438
439        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
440        33,   33,   34,   34,   33,   33,   35,   34,   34,   33,
441        34,   34,   34,   34,   33,   34,   33,   34,   33,   33,
442        33,   33,   33,   33,   33,   33,   33,   33,   34,   33,
443        34,   34,   34,   34,   33,   33,   33,   33,   33,   33,
444        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
445        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
446        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
447        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
448        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
449
450        33,   33,   33,   33,   34,   33,   33,   33
451     },
452
453     {
454        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
455        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
456        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
457        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
458        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
459        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
460        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
461        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
462        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
463
464        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
465        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
466        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
467        -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7
468     },
469
470     {
471         7,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
472        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
473        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
474        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
475        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
476        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
477
478        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
479        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
480        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
481        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
482        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
483        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8,
484        -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8
485     },
486
487     {
488         7,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
489        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
490        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
491
492        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
493        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
494        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
495        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
496        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
497        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
498        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
499        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
500        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9,
501        -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9
502
503     },
504
505     {
506         7,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
507       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
508       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
509       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
510       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
511       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
512       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
513       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
514       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
515       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
516
517       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
518       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10,
519       -10,  -10,  -10,  -10,  -10,  -10,  -10,  -10
520     },
521
522     {
523         7,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
524       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
525       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
526       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
527       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
528       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
529       -11,   36,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
530
531       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
532       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
533       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
534       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
535       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
536       -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11
537     },
538
539     {
540         7,   37,   37,   37,   37,   37,   37,   37,   37,   37,
541        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
542        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
543        37,   37,   37,   37,   38,   37,   37,   37,   37,   37,
544
545        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
546        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
547        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
548        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
549        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
550        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
551        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
552        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
553        37,   37,   37,   37,   37,   37,   37,   37
554     },
555
556     {
557         7,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
558
559       -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
560       -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
561       -13,  -13,  -13,  -13,  -13,   39,   39,  -13,  -13,   39,
562       -13,  -13,  -13,  -13,   39,  -13,   39,  -13,   39,   39,
563        39,   39,   39,   39,   39,   39,   39,   39,  -13,   39,
564       -13,  -13,  -13,  -13,   39,   39,   39,   39,   39,   39,
565        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
566        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
567        39,  -13,   39,  -13,   39,   39,  -13,   39,   39,   39,
568        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
569
570        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
571        39,   39,   39,  -13,  -13,  -13,  -13,  -13
572     },
573
574     {
575         7,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
576       -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
577       -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
578       -14,  -14,  -14,  -14,  -14,   39,   39,  -14,  -14,   39,
579       -14,  -14,  -14,  -14,   39,  -14,   39,  -14,   39,   39,
580        39,   39,   39,   39,   39,   39,   39,   39,  -14,   39,
581       -14,  -14,  -14,  -14,   39,   39,   39,   39,   39,   39,
582        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
583
584        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
585        39,  -14,   39,  -14,   39,   39,  -14,   39,   39,   39,
586        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
587        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
588        39,   39,   39,   40,  -14,  -14,  -14,  -14
589     },
590
591     {
592         7,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
593       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
594       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
595       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
596       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
597
598       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
599       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
600       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
601       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
602       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
603       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
604       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15,
605       -15,  -15,  -15,  -15,  -15,  -15,  -15,  -15
606     },
607
608     {
609         7,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
610       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
611
612       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
613       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,   41,  -16,
614       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
615       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
616       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
617       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
618       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
619       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
620       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
621       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
622
623       -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16
624     },
625
626     {
627         7,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
628       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
629       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
630       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
631       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
632       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
633       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
634       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
635       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
636
637       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
638       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
639       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
640       -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17
641     },
642
643     {
644         7,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
645       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
646       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
647       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
648       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
649       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
650
651       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
652       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
653       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
654       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
655       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
656       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
657       -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18
658     },
659
660     {
661         7,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
662       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
663       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
664
665       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
666       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
667       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
668       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
669       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
670       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
671       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
672       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
673       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19,
674       -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19
675
676     },
677
678     {
679         7,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
680       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
681       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
682       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
683       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
684       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
685       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
686       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
687       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
688       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
689
690       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
691       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20,
692       -20,  -20,  -20,  -20,  -20,  -20,  -20,  -20
693     },
694
695     {
696         7,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
697       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
698       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
699       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
700       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
701       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
702       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
703
704       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
705       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
706       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
707       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
708       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21,
709       -21,  -21,  -21,  -21,  -21,  -21,  -21,  -21
710     },
711
712     {
713         7,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
714       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
715       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
716       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
717
718       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
719       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
720       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
721       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
722       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
723       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
724       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
725       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
726       -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22
727     },
728
729     {
730         7,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,
731
732       -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,
733       -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,
734       -23,  -23,  -23,  -23,  -23,   39,   39,  -23,  -23,   39,
735       -23,  -23,  -23,  -23,   39,  -23,   39,  -23,   42,   42,
736        42,   42,   42,   42,   42,   42,   42,   42,  -23,   39,
737       -23,  -23,  -23,  -23,   39,   39,   39,   39,   39,   39,
738        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
739        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
740        39,  -23,   39,  -23,   39,   39,  -23,   39,   39,   39,
741        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
742
743        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
744        39,   39,   39,  -23,  -23,  -23,  -23,  -23
745     },
746
747     {
748         7,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
749       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
750       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
751       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
752       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
753       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,   43,  -24,
754       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
755       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
756
757       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
758       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
759       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
760       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
761       -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24
762     },
763
764     {
765         7,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
766       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
767       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
768       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
769       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
770
771       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
772       -25,   44,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
773       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
774       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
775       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
776       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
777       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25,
778       -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25
779     },
780
781     {
782         7,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
783       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
784
785       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
786       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
787       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
788       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
789       -26,   45,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
790       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
791       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
792       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
793       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
794       -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
795
796       -26,  -26,  -26,  -26,  -26,  -26,   46,  -26
797     },
798
799     {
800         7,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
801       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
802       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
803       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
804       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
805       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
806       -27,   47,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
807       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
808       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
809
810       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
811       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
812       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
813       -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27
814     },
815
816     {
817         7,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
818       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
819       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
820       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
821       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
822       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
823
824       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
825       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
826       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
827       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
828       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
829       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
830       -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28
831     },
832
833     {
834         7,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
835       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
836       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
837
838       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
839       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
840       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
841       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
842       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
843       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
844       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
845       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
846       -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
847       -29,  -29,  -29,  -29,   48,  -29,  -29,  -29
848
849     },
850
851     {
852         7,   49,   49,   49,   49,   49,   49,   49,   49,   49,
853        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
854        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
855        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
856        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
857        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
858        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
859        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
860        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
861        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
862
863        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
864        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
865        49,   49,   49,   50,   49,   51,   49,   49
866     },
867
868     {
869         7,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
870       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
871       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
872       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
873       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
874       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
875       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
876
877       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
878       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
879       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
880       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
881       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31,
882       -31,  -31,  -31,  -31,  -31,  -31,  -31,  -31
883     },
884
885     {
886         7,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
887       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
888       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
889       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
890
891       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
892       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
893       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
894       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
895       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
896       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
897       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
898       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
899       -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32
900     },
901
902     {
903         7,   52,   52,   52,   52,   52,   52,   52,   52,  -33,
904
905       -33,   52,   52,  -33,   52,   52,   52,   52,   52,   52,
906        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
907        52,   52,  -33,  -33,   52,   52,  -33,  -33,  -33,   52,
908       -33,  -33,  -33,  -33,   52,  -33,   52,  -33,   52,   52,
909        52,   52,   52,   52,   52,   52,   52,   52,  -33,   52,
910       -33,  -33,  -33,  -33,   52,   52,   52,   52,   52,   52,
911        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
912        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
913        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
914        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
915
916        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
917        52,   52,   52,   52,  -33,   52,   52,   52
918     },
919
920     {
921         7,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
922       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
923       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
924       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
925       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
926       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
927       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
928       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
929
930       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
931       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
932       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
933       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
934       -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34
935     },
936
937     {
938         7,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
939       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
940       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
941       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
942       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
943
944       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
945       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
946       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
947       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
948       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
949       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
950       -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
951       -35,  -35,  -35,   53,  -35,  -35,  -35,  -35
952     },
953
954     {
955         7,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
956       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
957
958       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
959       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
960       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
961       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
962       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
963       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
964       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
965       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
966       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
967       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
968
969       -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36
970     },
971
972     {
973         7,   37,   37,   37,   37,   37,   37,   37,   37,   37,
974        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
975        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
976        37,   37,   37,   37,   38,   37,   37,   37,   37,   37,
977        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
978        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
979        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
980        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
981        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
982
983        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
984        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
985        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
986        37,   37,   37,   37,   37,   37,   37,   37
987     },
988
989     {
990         7,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
991       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
992       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
993       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
994       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
995       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
996
997       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
998       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
999       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
1000       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
1001       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
1002       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
1003       -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38
1004     },
1005
1006     {
1007         7,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
1008       -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
1009       -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,  -39,
1010
1011       -39,  -39,  -39,  -39,  -39,   39,   39,  -39,  -39,   39,
1012       -39,  -39,  -39,  -39,   39,  -39,   39,  -39,   39,   39,
1013        39,   39,   39,   39,   39,   39,   39,   39,  -39,   39,
1014       -39,  -39,  -39,  -39,   39,   39,   39,   39,   39,   39,
1015        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1016        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1017        39,  -39,   39,  -39,   39,   39,  -39,   39,   39,   39,
1018        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1019        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1020        39,   39,   39,  -39,  -39,  -39,  -39,  -39
1021
1022     },
1023
1024     {
1025         7,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1026       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1027       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1028       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1029       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1030       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1031       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1032       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1033       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1034       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1035
1036       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1037       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
1038       -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40
1039     },
1040
1041     {
1042         7,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1043       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1044       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1045       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1046       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1047       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1048       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1049
1050       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1051       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1052       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1053       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1054       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41,
1055       -41,  -41,  -41,  -41,  -41,  -41,  -41,  -41
1056     },
1057
1058     {
1059         7,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
1060       -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
1061       -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,  -42,
1062       -42,  -42,  -42,  -42,  -42,   39,   39,  -42,  -42,   39,
1063
1064       -42,  -42,  -42,  -42,   39,  -42,   39,  -42,   42,   42,
1065        42,   42,   42,   42,   42,   42,   42,   42,  -42,   39,
1066       -42,  -42,  -42,  -42,   39,   39,   39,   39,   39,   39,
1067        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1068        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1069        39,  -42,   39,  -42,   39,   39,  -42,   39,   39,   39,
1070        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1071        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
1072        39,   39,   39,  -42,  -42,  -42,  -42,  -42
1073     },
1074
1075     {
1076         7,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1077
1078       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1079       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1080       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1081       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1082       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1083       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1084       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1085       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1086       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1087       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1088
1089       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
1090       -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43
1091     },
1092
1093     {
1094         7,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1095       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1096       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1097       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1098       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1099       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1100       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1101       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1102
1103       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1104       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1105       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1106       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
1107       -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44
1108     },
1109
1110     {
1111         7,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1112       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1113       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1114       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1115       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1116
1117       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1118       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1119       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1120       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1121       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1122       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1123       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45,
1124       -45,  -45,  -45,  -45,  -45,  -45,  -45,  -45
1125     },
1126
1127     {
1128         7,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1129       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1130
1131       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1132       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1133       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1134       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1135       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1136       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1137       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1138       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1139       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1140       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46,
1141
1142       -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46
1143     },
1144
1145     {
1146         7,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1147       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1148       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1149       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1150       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1151       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1152       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1153       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1154       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1155
1156       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1157       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1158       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47,
1159       -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47
1160     },
1161
1162     {
1163         7,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1164       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1165       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1166       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1167       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1168       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1169
1170       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1171       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1172       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1173       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1174       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1175       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
1176       -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48
1177     },
1178
1179     {
1180         7,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1181        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1182        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1183
1184        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1185        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1186        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1187        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1188        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1189        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1190        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1191        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1192        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1193        49,   49,   49,   50,   49,   51,   49,   49
1194
1195     },
1196
1197     {
1198         7,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1199       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1200       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1201       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1202       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1203       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1204       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1205       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1206       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1207       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1208
1209       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1210       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
1211       -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50
1212     },
1213
1214     {
1215         7,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1216       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1217       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1218       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1219       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1220       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1221       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1222
1223       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1224       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1225       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1226       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1227       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,
1228       -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51
1229     },
1230
1231     {
1232         7,   52,   52,   52,   52,   52,   52,   52,   52,  -52,
1233       -52,   52,   52,  -52,   52,   52,   52,   52,   52,   52,
1234        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
1235        52,   52,  -52,  -52,   52,   52,  -52,  -52,  -52,   52,
1236
1237       -52,  -52,  -52,  -52,   52,  -52,   52,  -52,   52,   52,
1238        52,   52,   52,   52,   52,   52,   52,   52,  -52,   52,
1239       -52,  -52,  -52,  -52,   52,   52,   52,   52,   52,   52,
1240        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
1241        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
1242        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
1243        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
1244        52,   52,   52,   52,   52,   52,   52,   52,   52,   52,
1245        52,   52,   52,   52,  -52,   52,   52,   52
1246     },
1247
1248     {
1249         7,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1250
1251       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1252       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1253       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1254       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1255       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1256       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1257       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1258       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1259       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1260       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1261
1262       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
1263       -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53
1264     },
1265
1266     } ;
1267
1268 static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
1269 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
1270 static int yy_get_next_buffer (yyscan_t yyscanner );
1271 static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
1272
1273 /* Done after the current pattern has been matched and before the
1274  * corresponding action - sets up yytext.
1275  */
1276 #define YY_DO_BEFORE_ACTION \
1277         yyg->yytext_ptr = yy_bp; \
1278         yyg->yytext_ptr -= yyg->yy_more_len; \
1279         yyleng = (size_t) (yy_cp - yyg->yytext_ptr); \
1280         yyg->yy_hold_char = *yy_cp; \
1281         *yy_cp = '\0'; \
1282         yyg->yy_c_buf_p = yy_cp;
1283
1284 #define YY_NUM_RULES 35
1285 #define YY_END_OF_BUFFER 36
1286 /* This struct is not used in this scanner,
1287    but its presence is necessary. */
1288 struct yy_trans_info
1289         {
1290         flex_int32_t yy_verify;
1291         flex_int32_t yy_nxt;
1292         };
1293 static yyconst flex_int16_t yy_accept[54] =
1294     {   0,
1295         0,    0,    0,    0,   32,   32,   36,   35,   25,   27,
1296        19,   35,   29,   29,   17,    2,   22,   23,   15,   13,
1297        14,   16,   28,   20,    9,    3,    8,   18,    1,   35,
1298        31,   30,   32,   33,   33,   12,    0,   26,   29,   24,
1299         5,   28,   21,   11,    6,    7,   10,    4,    0,   31,
1300        30,   32,   34
1301     } ;
1302
1303 static yyconst yy_state_type yy_NUL_trans[54] =
1304     {   0,
1305         8,    8,   30,   30,   33,   33,    0,    0,    0,    0,
1306         0,   37,    0,    0,    0,    0,    0,    0,    0,    0,
1307         0,    0,    0,    0,    0,    0,    0,    0,    0,   49,
1308         0,    0,   52,    0,    0,    0,   37,    0,    0,    0,
1309         0,    0,    0,    0,    0,    0,    0,    0,   49,    0,
1310         0,   52,    0
1311     } ;
1312
1313 /* The intent behind this definition is that it'll catch
1314  * any uses of REJECT which flex missed.
1315  */
1316 #define REJECT reject_used_but_not_detected
1317 #define yymore() (yyg->yy_more_flag = 1)
1318 #define YY_MORE_ADJ yyg->yy_more_len
1319 #define YY_RESTORE_YY_MORE_OFFSET
1320 #line 1 "ast_expr2.fl"
1321 #line 2 "ast_expr2.fl"
1322 /*
1323  * Asterisk -- An open source telephony toolkit.
1324  *
1325  * Copyright (C) 1999 - 2006, Digium, Inc.
1326  *
1327  * Mark Spencer <markster@digium.com>
1328  *
1329  * See http://www.asterisk.org for more information about
1330  * the Asterisk project. Please do not directly contact
1331  * any of the maintainers of this project for assistance;
1332  * the project provides a web site, mailing lists and IRC
1333  * channels for your use.
1334  *
1335  * This program is free software, distributed under the terms of
1336  * the GNU General Public License Version 2. See the LICENSE file
1337  * at the top of the source tree.
1338  */
1339
1340 /*! \file
1341  *
1342  * \brief Dialplan Expression Lexical Scanner
1343  */
1344
1345 #include "asterisk.h"
1346
1347 #ifndef STANDALONE
1348 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
1349 #endif
1350
1351 #include <sys/types.h>
1352 #include <stdio.h>
1353 #include <stdlib.h>
1354 #include <string.h>
1355 #include <locale.h>
1356 #include <ctype.h>
1357 #if !defined(SOLARIS) && !defined(__CYGWIN__)
1358 /* #include <err.h> */
1359 #else
1360 #define quad_t int64_t
1361 #endif
1362 #include <errno.h>
1363 #include <regex.h>
1364 #include <limits.h>
1365
1366 #include "asterisk/ast_expr.h"
1367 #include "asterisk/logger.h"
1368 #include "asterisk/strings.h"
1369
1370 enum valtype {
1371         AST_EXPR_integer, AST_EXPR_numeric_string, AST_EXPR_string
1372 } ;
1373
1374 struct val {
1375         enum valtype type;
1376         union {
1377                 char *s;
1378                 quad_t i;
1379         } u;
1380 } ;
1381
1382 #include "ast_expr2.h" /* the o/p of the bison on ast_expr2.y */
1383
1384 #define SET_COLUMNS     do {            \
1385         yylloc_param->first_column = (int)(yyg->yytext_r - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf); \
1386         yylloc_param->last_column += yyleng - 1; \
1387         yylloc_param->first_line = yylloc_param->last_line = 1; \
1388         } while (0)
1389
1390 #define SET_STRING      do {            \
1391         yylval_param->val = calloc(1, sizeof(struct val));      \
1392         yylval_param->val->type = AST_EXPR_string;              \
1393         yylval_param->val->u.s = strdup(yytext);                \
1394         } while (0)
1395
1396 #define SET_NUMERIC_STRING      do {    \
1397         yylval_param->val = calloc(1, sizeof(struct val));      \
1398         yylval_param->val->type = AST_EXPR_numeric_string;      \
1399         yylval_param->val->u.s = strdup(yytext);        \
1400         } while (0)
1401
1402 struct parse_io
1403 {
1404         char *string;
1405         struct val *val;
1406         yyscan_t scanner;
1407 };
1408  
1409 void ast_yyset_column(int column_no, yyscan_t yyscanner);
1410 int ast_yyget_column(yyscan_t yyscanner);
1411 static int curlycount = 0;
1412 static char *expr2_token_subst(char *mess);
1413
1414 #line 1415 "ast_expr2f.c"
1415
1416 #define INITIAL 0
1417 #define var 1
1418 #define trail 2
1419
1420 /* Special case for "unistd.h", since it is non-ANSI. We include it way
1421  * down here because we want the user's section 1 to have been scanned first.
1422  * The user has a chance to override it with an option.
1423  */
1424 #include <unistd.h>
1425
1426 #ifndef YY_EXTRA_TYPE
1427 #define YY_EXTRA_TYPE void *
1428 #endif
1429
1430 /* Holds the entire state of the reentrant scanner. */
1431 struct yyguts_t
1432     {
1433
1434     /* User-defined. Not touched by flex. */
1435     YY_EXTRA_TYPE yyextra_r;
1436
1437     /* The rest are the same as the globals declared in the non-reentrant scanner. */
1438     FILE *yyin_r, *yyout_r;
1439     size_t yy_buffer_stack_top; /**< index of top of stack. */
1440     size_t yy_buffer_stack_max; /**< capacity of stack. */
1441     YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
1442     char yy_hold_char;
1443     int yy_n_chars;
1444     int yyleng_r;
1445     char *yy_c_buf_p;
1446     int yy_init;
1447     int yy_start;
1448     int yy_did_buffer_switch_on_eof;
1449     int yy_start_stack_ptr;
1450     int yy_start_stack_depth;
1451     int *yy_start_stack;
1452     yy_state_type yy_last_accepting_state;
1453     char* yy_last_accepting_cpos;
1454
1455     int yylineno_r;
1456     int yy_flex_debug_r;
1457
1458     char *yytext_r;
1459     int yy_more_flag;
1460     int yy_more_len;
1461
1462     YYSTYPE * yylval_r;
1463
1464     YYLTYPE * yylloc_r;
1465
1466     }; /* end struct yyguts_t */
1467
1468     /* This must go here because YYSTYPE and YYLTYPE are included
1469      * from bison output in section 1.*/
1470     #    define yylval yyg->yylval_r
1471     
1472     #    define yylloc yyg->yylloc_r
1473     
1474 /* Accessor methods to globals.
1475    These are made visible to non-reentrant scanners for convenience. */
1476
1477 int ast_yylex_destroy (yyscan_t yyscanner );
1478
1479 int ast_yyget_debug (yyscan_t yyscanner );
1480
1481 void ast_yyset_debug (int debug_flag ,yyscan_t yyscanner );
1482
1483 YY_EXTRA_TYPE ast_yyget_extra (yyscan_t yyscanner );
1484
1485 void ast_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
1486
1487 FILE *ast_yyget_in (yyscan_t yyscanner );
1488
1489 void ast_yyset_in  (FILE * in_str ,yyscan_t yyscanner );
1490
1491 FILE *ast_yyget_out (yyscan_t yyscanner );
1492
1493 void ast_yyset_out  (FILE * out_str ,yyscan_t yyscanner );
1494
1495 int ast_yyget_leng (yyscan_t yyscanner );
1496
1497 char *ast_yyget_text (yyscan_t yyscanner );
1498
1499 int ast_yyget_lineno (yyscan_t yyscanner );
1500
1501 void ast_yyset_lineno (int line_number ,yyscan_t yyscanner );
1502
1503 YYSTYPE * ast_yyget_lval (yyscan_t yyscanner );
1504
1505 void ast_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
1506
1507        YYLTYPE *ast_yyget_lloc (yyscan_t yyscanner );
1508     
1509         void ast_yyset_lloc (YYLTYPE * yylloc_param ,yyscan_t yyscanner );
1510     
1511 /* Macros after this point can all be overridden by user definitions in
1512  * section 1.
1513  */
1514
1515 #ifndef YY_SKIP_YYWRAP
1516 #ifdef __cplusplus
1517 extern "C" int ast_yywrap (yyscan_t yyscanner );
1518 #else
1519 extern int ast_yywrap (yyscan_t yyscanner );
1520 #endif
1521 #endif
1522
1523     static void yyunput (int c,char *buf_ptr  ,yyscan_t yyscanner);
1524     
1525 #ifndef yytext_ptr
1526 static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
1527 #endif
1528
1529 #ifdef YY_NEED_STRLEN
1530 static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
1531 #endif
1532
1533 #ifndef YY_NO_INPUT
1534
1535 #ifdef __cplusplus
1536 static int yyinput (yyscan_t yyscanner );
1537 #else
1538 static int input (yyscan_t yyscanner );
1539 #endif
1540
1541 #endif
1542
1543 /* Amount of stuff to slurp up with each read. */
1544 #ifndef YY_READ_BUF_SIZE
1545 #define YY_READ_BUF_SIZE 8192
1546 #endif
1547
1548 /* Copy whatever the last rule matched to the standard output. */
1549 #ifndef ECHO
1550 /* This used to be an fputs(), but since the string might contain NUL's,
1551  * we now use fwrite().
1552  */
1553 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
1554 #endif
1555
1556 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
1557  * is returned in "result".
1558  */
1559 #ifndef YY_INPUT
1560 #define YY_INPUT(buf,result,max_size) \
1561         errno=0; \
1562         while ( (result = read( fileno(yyin), (char *) buf, max_size )) < 0 ) \
1563         { \
1564                 if( errno != EINTR) \
1565                 { \
1566                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
1567                         break; \
1568                 } \
1569                 errno=0; \
1570                 clearerr(yyin); \
1571         }\
1572 \
1573
1574 #endif
1575
1576 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1577  * we don't want an extra ';' after the "return" because that will cause
1578  * some compilers to complain about unreachable statements.
1579  */
1580 #ifndef yyterminate
1581 #define yyterminate() return YY_NULL
1582 #endif
1583
1584 /* Number of entries by which start-condition stack grows. */
1585 #ifndef YY_START_STACK_INCR
1586 #define YY_START_STACK_INCR 25
1587 #endif
1588
1589 /* Report a fatal error. */
1590 #ifndef YY_FATAL_ERROR
1591 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
1592 #endif
1593
1594 /* end tables serialization structures and prototypes */
1595
1596 /* Default declaration of generated scanner - a define so the user can
1597  * easily add parameters.
1598  */
1599 #ifndef YY_DECL
1600 #define YY_DECL_IS_OURS 1
1601
1602 extern int ast_yylex (YYSTYPE * yylval_param,YYLTYPE * yylloc_param ,yyscan_t yyscanner);
1603
1604 #define YY_DECL int ast_yylex (YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner)
1605 #endif /* !YY_DECL */
1606
1607 /* Code executed at the beginning of each rule, after yytext and yyleng
1608  * have been set up.
1609  */
1610 #ifndef YY_USER_ACTION
1611 #define YY_USER_ACTION
1612 #endif
1613
1614 /* Code executed at the end of each rule. */
1615 #ifndef YY_BREAK
1616 #define YY_BREAK break;
1617 #endif
1618
1619 #define YY_RULE_SETUP \
1620         YY_USER_ACTION
1621
1622 /** The main scanner function which does all the work.
1623  */
1624 YY_DECL
1625 {
1626         register yy_state_type yy_current_state;
1627         register char *yy_cp, *yy_bp;
1628         register int yy_act;
1629     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1630
1631 #line 104 "ast_expr2.fl"
1632
1633
1634 #line 1635 "ast_expr2f.c"
1635
1636     yylval = yylval_param;
1637
1638     yylloc = yylloc_param;
1639
1640         if ( yyg->yy_init )
1641                 {
1642                 yyg->yy_init = 0;
1643
1644 #ifdef YY_USER_INIT
1645                 YY_USER_INIT;
1646 #endif
1647
1648                 if ( ! yyg->yy_start )
1649                         yyg->yy_start = 1;      /* first start state */
1650
1651                 if ( ! yyin )
1652                         yyin = stdin;
1653
1654                 if ( ! yyout )
1655                         yyout = stdout;
1656
1657                 if ( ! YY_CURRENT_BUFFER ) {
1658                         ast_yyensure_buffer_stack (yyscanner);
1659                         YY_CURRENT_BUFFER_LVALUE =
1660                                 ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
1661                 }
1662
1663                 ast_yy_load_buffer_state(yyscanner );
1664                 }
1665
1666         while ( 1 )             /* loops until end-of-file is reached */
1667                 {
1668                 yyg->yy_more_len = 0;
1669                 if ( yyg->yy_more_flag )
1670                         {
1671                         yyg->yy_more_len = yyg->yy_c_buf_p - yyg->yytext_ptr;
1672                         yyg->yy_more_flag = 0;
1673                         }
1674                 yy_cp = yyg->yy_c_buf_p;
1675
1676                 /* Support of yytext. */
1677                 *yy_cp = yyg->yy_hold_char;
1678
1679                 /* yy_bp points to the position in yy_ch_buf of the start of
1680                  * the current run.
1681                  */
1682                 yy_bp = yy_cp;
1683
1684                 yy_current_state = yyg->yy_start;
1685 yy_match:
1686                 while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 )
1687                         {
1688                         if ( yy_accept[yy_current_state] )
1689                                 {
1690                                 yyg->yy_last_accepting_state = yy_current_state;
1691                                 yyg->yy_last_accepting_cpos = yy_cp;
1692                                 }
1693
1694                         ++yy_cp;
1695                         }
1696
1697                 yy_current_state = -yy_current_state;
1698
1699 yy_find_action:
1700                 yy_act = yy_accept[yy_current_state];
1701
1702                 YY_DO_BEFORE_ACTION;
1703
1704 do_action:      /* This label is used only to access EOF actions. */
1705
1706                 switch ( yy_act )
1707         { /* beginning of action switch */
1708                         case 0: /* must back up */
1709                         /* undo the effects of YY_DO_BEFORE_ACTION */
1710                         *yy_cp = yyg->yy_hold_char;
1711                         yy_cp = yyg->yy_last_accepting_cpos + 1;
1712                         yy_current_state = yyg->yy_last_accepting_state;
1713                         goto yy_find_action;
1714
1715 case 1:
1716 YY_RULE_SETUP
1717 #line 106 "ast_expr2.fl"
1718 { SET_COLUMNS; SET_STRING; return TOK_OR;}
1719         YY_BREAK
1720 case 2:
1721 YY_RULE_SETUP
1722 #line 107 "ast_expr2.fl"
1723 { SET_COLUMNS; SET_STRING; return TOK_AND;}
1724         YY_BREAK
1725 case 3:
1726 YY_RULE_SETUP
1727 #line 108 "ast_expr2.fl"
1728 { SET_COLUMNS; SET_STRING; return TOK_EQ;}
1729         YY_BREAK
1730 case 4:
1731 YY_RULE_SETUP
1732 #line 109 "ast_expr2.fl"
1733 { SET_COLUMNS; SET_STRING; return TOK_OR;}
1734         YY_BREAK
1735 case 5:
1736 YY_RULE_SETUP
1737 #line 110 "ast_expr2.fl"
1738 { SET_COLUMNS; SET_STRING; return TOK_AND;}
1739         YY_BREAK
1740 case 6:
1741 YY_RULE_SETUP
1742 #line 111 "ast_expr2.fl"
1743 { SET_COLUMNS; SET_STRING; return TOK_EQ;}
1744         YY_BREAK
1745 case 7:
1746 YY_RULE_SETUP
1747 #line 112 "ast_expr2.fl"
1748 { SET_COLUMNS; SET_STRING; return TOK_EQTILDE;}
1749         YY_BREAK
1750 case 8:
1751 YY_RULE_SETUP
1752 #line 113 "ast_expr2.fl"
1753 { SET_COLUMNS; SET_STRING; return TOK_GT;}
1754         YY_BREAK
1755 case 9:
1756 YY_RULE_SETUP
1757 #line 114 "ast_expr2.fl"
1758 { SET_COLUMNS; SET_STRING; return TOK_LT;}
1759         YY_BREAK
1760 case 10:
1761 YY_RULE_SETUP
1762 #line 115 "ast_expr2.fl"
1763 { SET_COLUMNS; SET_STRING; return TOK_GE;}
1764         YY_BREAK
1765 case 11:
1766 YY_RULE_SETUP
1767 #line 116 "ast_expr2.fl"
1768 { SET_COLUMNS; SET_STRING; return TOK_LE;}
1769         YY_BREAK
1770 case 12:
1771 YY_RULE_SETUP
1772 #line 117 "ast_expr2.fl"
1773 { SET_COLUMNS; SET_STRING; return TOK_NE;}
1774         YY_BREAK
1775 case 13:
1776 YY_RULE_SETUP
1777 #line 118 "ast_expr2.fl"
1778 { SET_COLUMNS; SET_STRING; return TOK_PLUS;}
1779         YY_BREAK
1780 case 14:
1781 YY_RULE_SETUP
1782 #line 119 "ast_expr2.fl"
1783 { SET_COLUMNS; SET_STRING; return TOK_MINUS;}
1784         YY_BREAK
1785 case 15:
1786 YY_RULE_SETUP
1787 #line 120 "ast_expr2.fl"
1788 { SET_COLUMNS; SET_STRING; return TOK_MULT;}
1789         YY_BREAK
1790 case 16:
1791 YY_RULE_SETUP
1792 #line 121 "ast_expr2.fl"
1793 { SET_COLUMNS; SET_STRING; return TOK_DIV;}
1794         YY_BREAK
1795 case 17:
1796 YY_RULE_SETUP
1797 #line 122 "ast_expr2.fl"
1798 { SET_COLUMNS; SET_STRING; return TOK_MOD;}
1799         YY_BREAK
1800 case 18:
1801 YY_RULE_SETUP
1802 #line 123 "ast_expr2.fl"
1803 { SET_COLUMNS; SET_STRING; return TOK_COND;}
1804         YY_BREAK
1805 case 19:
1806 YY_RULE_SETUP
1807 #line 124 "ast_expr2.fl"
1808 { SET_COLUMNS; SET_STRING; return TOK_COMPL;}
1809         YY_BREAK
1810 case 20:
1811 YY_RULE_SETUP
1812 #line 125 "ast_expr2.fl"
1813 { SET_COLUMNS; SET_STRING; return TOK_COLON;}
1814         YY_BREAK
1815 case 21:
1816 YY_RULE_SETUP
1817 #line 126 "ast_expr2.fl"
1818 { SET_COLUMNS; SET_STRING; return TOK_COLONCOLON;}
1819         YY_BREAK
1820 case 22:
1821 YY_RULE_SETUP
1822 #line 127 "ast_expr2.fl"
1823 { SET_COLUMNS; SET_STRING; return TOK_LP;}
1824         YY_BREAK
1825 case 23:
1826 YY_RULE_SETUP
1827 #line 128 "ast_expr2.fl"
1828 { SET_COLUMNS; SET_STRING; return TOK_RP;}
1829         YY_BREAK
1830 case 24:
1831 YY_RULE_SETUP
1832 #line 129 "ast_expr2.fl"
1833 {
1834                 /* gather the contents of ${} expressions, with trailing stuff,
1835                  * into a single TOKEN.
1836                  * They are much more complex now than they used to be
1837                  */
1838                 curlycount = 0;
1839                 BEGIN(var);
1840                 yymore();
1841         }
1842         YY_BREAK
1843 case 25:
1844 YY_RULE_SETUP
1845 #line 139 "ast_expr2.fl"
1846 {}
1847         YY_BREAK
1848 case 26:
1849 /* rule 26 can match eol */
1850 YY_RULE_SETUP
1851 #line 140 "ast_expr2.fl"
1852 {SET_COLUMNS; SET_STRING; return TOKEN;}
1853         YY_BREAK
1854 case 27:
1855 /* rule 27 can match eol */
1856 YY_RULE_SETUP
1857 #line 142 "ast_expr2.fl"
1858 {/* what to do with eol */}
1859         YY_BREAK
1860 case 28:
1861 YY_RULE_SETUP
1862 #line 143 "ast_expr2.fl"
1863 {
1864                 SET_COLUMNS;
1865                 /* the original behavior of the expression parser was
1866                  * to bring in numbers as a numeric string
1867                  */
1868                 SET_NUMERIC_STRING;
1869                 return TOKEN;
1870         }
1871         YY_BREAK
1872 case 29:
1873 YY_RULE_SETUP
1874 #line 152 "ast_expr2.fl"
1875 {
1876                 SET_COLUMNS;
1877                 SET_STRING;
1878                 return TOKEN;
1879         }
1880         YY_BREAK
1881 case 30:
1882 /* rule 30 can match eol */
1883 YY_RULE_SETUP
1884 #line 159 "ast_expr2.fl"
1885 {
1886                 curlycount--;
1887                 if (curlycount < 0) {
1888                         BEGIN(trail);
1889                         yymore();
1890                 } else {
1891                         yymore();
1892                 }
1893         }
1894         YY_BREAK
1895 case 31:
1896 /* rule 31 can match eol */
1897 YY_RULE_SETUP
1898 #line 169 "ast_expr2.fl"
1899 {
1900                 curlycount++;
1901                 yymore();
1902         }
1903         YY_BREAK
1904 case 32:
1905 YY_RULE_SETUP
1906 #line 175 "ast_expr2.fl"
1907 {
1908                 BEGIN(0);
1909                 SET_COLUMNS;
1910                 SET_STRING;
1911                 return TOKEN;
1912         }
1913         YY_BREAK
1914 case 33:
1915 /* rule 33 can match eol */
1916 YY_RULE_SETUP
1917 #line 182 "ast_expr2.fl"
1918 {
1919                 char c = yytext[yyleng-1];
1920                 BEGIN(0);
1921                 unput(c);
1922                 SET_COLUMNS;
1923                 SET_STRING;
1924                 return TOKEN;
1925         }
1926         YY_BREAK
1927 case 34:
1928 YY_RULE_SETUP
1929 #line 191 "ast_expr2.fl"
1930 {
1931                 curlycount = 0;
1932                 BEGIN(var);
1933                 yymore();
1934         }
1935         YY_BREAK
1936 case YY_STATE_EOF(trail):
1937 #line 197 "ast_expr2.fl"
1938 {
1939                 BEGIN(0);
1940                 SET_COLUMNS;
1941                 SET_STRING;
1942                 return TOKEN;
1943                 /*actually, if an expr is only a variable ref, this could happen a LOT */
1944         }
1945         YY_BREAK
1946 case 35:
1947 YY_RULE_SETUP
1948 #line 205 "ast_expr2.fl"
1949 ECHO;
1950         YY_BREAK
1951 #line 1952 "ast_expr2f.c"
1952 case YY_STATE_EOF(INITIAL):
1953 case YY_STATE_EOF(var):
1954         yyterminate();
1955
1956         case YY_END_OF_BUFFER:
1957                 {
1958                 /* Amount of text matched not including the EOB char. */
1959                 int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
1960
1961                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
1962                 *yy_cp = yyg->yy_hold_char;
1963                 YY_RESTORE_YY_MORE_OFFSET
1964
1965                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
1966                         {
1967                         /* We're scanning a new file or input source.  It's
1968                          * possible that this happened because the user
1969                          * just pointed yyin at a new source and called
1970                          * ast_yylex().  If so, then we have to assure
1971                          * consistency between YY_CURRENT_BUFFER and our
1972                          * globals.  Here is the right place to do so, because
1973                          * this is the first action (other than possibly a
1974                          * back-up) that will match for the new input source.
1975                          */
1976                         yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1977                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
1978                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
1979                         }
1980
1981                 /* Note that here we test for yy_c_buf_p "<=" to the position
1982                  * of the first EOB in the buffer, since yy_c_buf_p will
1983                  * already have been incremented past the NUL character
1984                  * (since all states make transitions on EOB to the
1985                  * end-of-buffer state).  Contrast this with the test
1986                  * in input().
1987                  */
1988                 if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
1989                         { /* This was really a NUL. */
1990                         yy_state_type yy_next_state;
1991
1992                         yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
1993
1994                         yy_current_state = yy_get_previous_state( yyscanner );
1995
1996                         /* Okay, we're now positioned to make the NUL
1997                          * transition.  We couldn't have
1998                          * yy_get_previous_state() go ahead and do it
1999                          * for us because it doesn't know how to deal
2000                          * with the possibility of jamming (and we don't
2001                          * want to build jamming into it because then it
2002                          * will run more slowly).
2003                          */
2004
2005                         yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
2006
2007                         yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
2008
2009                         if ( yy_next_state )
2010                                 {
2011                                 /* Consume the NUL. */
2012                                 yy_cp = ++yyg->yy_c_buf_p;
2013                                 yy_current_state = yy_next_state;
2014                                 goto yy_match;
2015                                 }
2016
2017                         else
2018                                 {
2019                                 yy_cp = yyg->yy_c_buf_p;
2020                                 goto yy_find_action;
2021                                 }
2022                         }
2023
2024                 else switch ( yy_get_next_buffer( yyscanner ) )
2025                         {
2026                         case EOB_ACT_END_OF_FILE:
2027                                 {
2028                                 yyg->yy_did_buffer_switch_on_eof = 0;
2029
2030                                 if ( ast_yywrap(yyscanner ) )
2031                                         {
2032                                         /* Note: because we've taken care in
2033                                          * yy_get_next_buffer() to have set up
2034                                          * yytext, we can now set up
2035                                          * yy_c_buf_p so that if some total
2036                                          * hoser (like flex itself) wants to
2037                                          * call the scanner after we return the
2038                                          * YY_NULL, it'll still work - another
2039                                          * YY_NULL will get returned.
2040                                          */
2041                                         yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
2042
2043                                         yy_act = YY_STATE_EOF(YY_START);
2044                                         goto do_action;
2045                                         }
2046
2047                                 else
2048                                         {
2049                                         if ( ! yyg->yy_did_buffer_switch_on_eof )
2050                                                 YY_NEW_FILE;
2051                                         }
2052                                 break;
2053                                 }
2054
2055                         case EOB_ACT_CONTINUE_SCAN:
2056                                 yyg->yy_c_buf_p =
2057                                         yyg->yytext_ptr + yy_amount_of_matched_text;
2058
2059                                 yy_current_state = yy_get_previous_state( yyscanner );
2060
2061                                 yy_cp = yyg->yy_c_buf_p;
2062                                 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
2063                                 goto yy_match;
2064
2065                         case EOB_ACT_LAST_MATCH:
2066                                 yyg->yy_c_buf_p =
2067                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
2068
2069                                 yy_current_state = yy_get_previous_state( yyscanner );
2070
2071                                 yy_cp = yyg->yy_c_buf_p;
2072                                 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
2073                                 goto yy_find_action;
2074                         }
2075                 break;
2076                 }
2077
2078         default:
2079                 YY_FATAL_ERROR(
2080                         "fatal flex scanner internal error--no action found" );
2081         } /* end of action switch */
2082                 } /* end of scanning one token */
2083 } /* end of ast_yylex */
2084
2085 /* yy_get_next_buffer - try to read in a new buffer
2086  *
2087  * Returns a code representing an action:
2088  *      EOB_ACT_LAST_MATCH -
2089  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2090  *      EOB_ACT_END_OF_FILE - end of file
2091  */
2092 static int yy_get_next_buffer (yyscan_t yyscanner)
2093 {
2094     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2095         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
2096         register char *source = yyg->yytext_ptr;
2097         register int number_to_move, i;
2098         int ret_val;
2099
2100         if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
2101                 YY_FATAL_ERROR(
2102                 "fatal flex scanner internal error--end of buffer missed" );
2103
2104         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
2105                 { /* Don't try to fill the buffer, so this is an EOF. */
2106                 if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
2107                         {
2108                         /* We matched a single character, the EOB, so
2109                          * treat this as a final EOF.
2110                          */
2111                         return EOB_ACT_END_OF_FILE;
2112                         }
2113
2114                 else
2115                         {
2116                         /* We matched some text prior to the EOB, first
2117                          * process it.
2118                          */
2119                         return EOB_ACT_LAST_MATCH;
2120                         }
2121                 }
2122
2123         /* Try to read more data. */
2124
2125         /* First move last chars to start of buffer. */
2126         number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
2127
2128         for ( i = 0; i < number_to_move; ++i )
2129                 *(dest++) = *(source++);
2130
2131         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
2132                 /* don't do the read, it's not guaranteed to return an EOF,
2133                  * just force an EOF
2134                  */
2135                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
2136
2137         else
2138                 {
2139                         size_t num_to_read =
2140                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
2141
2142                 while ( num_to_read <= 0 )
2143                         { /* Not enough room in the buffer - grow it. */
2144
2145                         /* just a shorter name for the current buffer */
2146                         YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
2147
2148                         int yy_c_buf_p_offset =
2149                                 (int) (yyg->yy_c_buf_p - b->yy_ch_buf);
2150
2151                         if ( b->yy_is_our_buffer )
2152                                 {
2153                                 int new_size = b->yy_buf_size * 2;
2154
2155                                 if ( new_size <= 0 )
2156                                         b->yy_buf_size += b->yy_buf_size / 8;
2157                                 else
2158                                         b->yy_buf_size *= 2;
2159
2160                                 b->yy_ch_buf = (char *)
2161                                         /* Include room in for 2 EOB chars. */
2162                                         ast_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
2163                                 }
2164                         else
2165                                 /* Can't grow it, we don't own it. */
2166                                 b->yy_ch_buf = 0;
2167
2168                         if ( ! b->yy_ch_buf )
2169                                 YY_FATAL_ERROR(
2170                                 "fatal error - scanner input buffer overflow" );
2171
2172                         yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
2173
2174                         num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
2175                                                 number_to_move - 1;
2176
2177                         }
2178
2179                 if ( num_to_read > YY_READ_BUF_SIZE )
2180                         num_to_read = YY_READ_BUF_SIZE;
2181
2182                 /* Read in more data. */
2183                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
2184                         yyg->yy_n_chars, num_to_read );
2185
2186                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2187                 }
2188
2189         if ( yyg->yy_n_chars == 0 )
2190                 {
2191                 if ( number_to_move == YY_MORE_ADJ )
2192                         {
2193                         ret_val = EOB_ACT_END_OF_FILE;
2194                         ast_yyrestart(yyin  ,yyscanner);
2195                         }
2196
2197                 else
2198                         {
2199                         ret_val = EOB_ACT_LAST_MATCH;
2200                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
2201                                 YY_BUFFER_EOF_PENDING;
2202                         }
2203                 }
2204
2205         else
2206                 ret_val = EOB_ACT_CONTINUE_SCAN;
2207
2208         yyg->yy_n_chars += number_to_move;
2209         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
2210         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
2211
2212         yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
2213
2214         return ret_val;
2215 }
2216
2217 /* yy_get_previous_state - get the state just before the EOB char was reached */
2218
2219     static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
2220 {
2221         register yy_state_type yy_current_state;
2222         register char *yy_cp;
2223     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2224
2225         yy_current_state = yyg->yy_start;
2226
2227         for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
2228                 {
2229                 if ( *yy_cp )
2230                         {
2231                         yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)];
2232                         }
2233                 else
2234                         yy_current_state = yy_NUL_trans[yy_current_state];
2235                 if ( yy_accept[yy_current_state] )
2236                         {
2237                         yyg->yy_last_accepting_state = yy_current_state;
2238                         yyg->yy_last_accepting_cpos = yy_cp;
2239                         }
2240                 }
2241
2242         return yy_current_state;
2243 }
2244
2245 /* yy_try_NUL_trans - try to make a transition on the NUL character
2246  *
2247  * synopsis
2248  *      next_state = yy_try_NUL_trans( current_state );
2249  */
2250     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
2251 {
2252         register int yy_is_jam;
2253     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2254         register char *yy_cp = yyg->yy_c_buf_p;
2255
2256         yy_current_state = yy_NUL_trans[yy_current_state];
2257         yy_is_jam = (yy_current_state == 0);
2258
2259         if ( ! yy_is_jam )
2260                 {
2261                 if ( yy_accept[yy_current_state] )
2262                         {
2263                         yyg->yy_last_accepting_state = yy_current_state;
2264                         yyg->yy_last_accepting_cpos = yy_cp;
2265                         }
2266                 }
2267
2268         return yy_is_jam ? 0 : yy_current_state;
2269 }
2270
2271     static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner)
2272 {
2273         register char *yy_cp;
2274     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2275
2276     yy_cp = yyg->yy_c_buf_p;
2277
2278         /* undo effects of setting up yytext */
2279         *yy_cp = yyg->yy_hold_char;
2280
2281         if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
2282                 { /* need to shift things up to make room */
2283                 /* +2 for EOB chars. */
2284                 register int number_to_move = yyg->yy_n_chars + 2;
2285                 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
2286                                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
2287                 register char *source =
2288                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
2289
2290                 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
2291                         *--dest = *--source;
2292
2293                 yy_cp += (int) (dest - source);
2294                 yy_bp += (int) (dest - source);
2295                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
2296                         yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
2297
2298                 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
2299                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
2300                 }
2301
2302         *--yy_cp = (char) c;
2303
2304         yyg->yytext_ptr = yy_bp;
2305         yyg->yy_hold_char = *yy_cp;
2306         yyg->yy_c_buf_p = yy_cp;
2307 }
2308
2309 #ifndef YY_NO_INPUT
2310 #ifdef __cplusplus
2311     static int yyinput (yyscan_t yyscanner)
2312 #else
2313     static int input  (yyscan_t yyscanner)
2314 #endif
2315
2316 {
2317         int c;
2318     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2319
2320         *yyg->yy_c_buf_p = yyg->yy_hold_char;
2321
2322         if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
2323                 {
2324                 /* yy_c_buf_p now points to the character we want to return.
2325                  * If this occurs *before* the EOB characters, then it's a
2326                  * valid NUL; if not, then we've hit the end of the buffer.
2327                  */
2328                 if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
2329                         /* This was really a NUL. */
2330                         *yyg->yy_c_buf_p = '\0';
2331
2332                 else
2333                         { /* need more input */
2334                         int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
2335                         ++yyg->yy_c_buf_p;
2336
2337                         switch ( yy_get_next_buffer( yyscanner ) )
2338                                 {
2339                                 case EOB_ACT_LAST_MATCH:
2340                                         /* This happens because yy_g_n_b()
2341                                          * sees that we've accumulated a
2342                                          * token and flags that we need to
2343                                          * try matching the token before
2344                                          * proceeding.  But for input(),
2345                                          * there's no matching to consider.
2346                                          * So convert the EOB_ACT_LAST_MATCH
2347                                          * to EOB_ACT_END_OF_FILE.
2348                                          */
2349
2350                                         /* Reset buffer status. */
2351                                         ast_yyrestart(yyin ,yyscanner);
2352
2353                                         /*FALLTHROUGH*/
2354
2355                                 case EOB_ACT_END_OF_FILE:
2356                                         {
2357                                         if ( ast_yywrap(yyscanner ) )
2358                                                 return EOF;
2359
2360                                         if ( ! yyg->yy_did_buffer_switch_on_eof )
2361                                                 YY_NEW_FILE;
2362 #ifdef __cplusplus
2363                                         return yyinput(yyscanner);
2364 #else
2365                                         return input(yyscanner);
2366 #endif
2367                                         }
2368
2369                                 case EOB_ACT_CONTINUE_SCAN:
2370                                         yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
2371                                         break;
2372                                 }
2373                         }
2374                 }
2375
2376         c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */
2377         *yyg->yy_c_buf_p = '\0';        /* preserve yytext */
2378         yyg->yy_hold_char = *++yyg->yy_c_buf_p;
2379
2380         return c;
2381 }
2382 #endif  /* ifndef YY_NO_INPUT */
2383
2384 /** Immediately switch to a different input stream.
2385  * @param input_file A readable stream.
2386  * @param yyscanner The scanner object.
2387  * @note This function does not reset the start condition to @c INITIAL .
2388  */
2389     void ast_yyrestart  (FILE * input_file , yyscan_t yyscanner)
2390 {
2391     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2392
2393         if ( ! YY_CURRENT_BUFFER ){
2394         ast_yyensure_buffer_stack (yyscanner);
2395                 YY_CURRENT_BUFFER_LVALUE =
2396             ast_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
2397         }
2398
2399         ast_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
2400         ast_yy_load_buffer_state(yyscanner );
2401 }
2402
2403 /** Switch to a different input buffer.
2404  * @param new_buffer The new input buffer.
2405  * @param yyscanner The scanner object.
2406  */
2407     void ast_yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
2408 {
2409     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2410
2411         /* TODO. We should be able to replace this entire function body
2412          * with
2413          *              ast_yypop_buffer_state();
2414          *              ast_yypush_buffer_state(new_buffer);
2415      */
2416         ast_yyensure_buffer_stack (yyscanner);
2417         if ( YY_CURRENT_BUFFER == new_buffer )
2418                 return;
2419
2420         if ( YY_CURRENT_BUFFER )
2421                 {
2422                 /* Flush out information for old buffer. */
2423                 *yyg->yy_c_buf_p = yyg->yy_hold_char;
2424                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
2425                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2426                 }
2427
2428         YY_CURRENT_BUFFER_LVALUE = new_buffer;
2429         ast_yy_load_buffer_state(yyscanner );
2430
2431         /* We don't actually know whether we did this switch during
2432          * EOF (ast_yywrap()) processing, but the only time this flag
2433          * is looked at is after ast_yywrap() is called, so it's safe
2434          * to go ahead and always set it.
2435          */
2436         yyg->yy_did_buffer_switch_on_eof = 1;
2437 }
2438
2439 static void ast_yy_load_buffer_state  (yyscan_t yyscanner)
2440 {
2441     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2442         yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
2443         yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
2444         yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
2445         yyg->yy_hold_char = *yyg->yy_c_buf_p;
2446 }
2447
2448 /** Allocate and initialize an input buffer state.
2449  * @param file A readable stream.
2450  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
2451  * @param yyscanner The scanner object.
2452  * @return the allocated buffer state.
2453  */
2454     YY_BUFFER_STATE ast_yy_create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
2455 {
2456         YY_BUFFER_STATE b;
2457     
2458         b = (YY_BUFFER_STATE) ast_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
2459         if ( ! b )
2460                 YY_FATAL_ERROR( "out of dynamic memory in ast_yy_create_buffer()" );
2461
2462         b->yy_buf_size = size;
2463
2464         /* yy_ch_buf has to be 2 characters longer than the size given because
2465          * we need to put in 2 end-of-buffer characters.
2466          */
2467         b->yy_ch_buf = (char *) ast_yyalloc(b->yy_buf_size + 2 ,yyscanner );
2468         if ( ! b->yy_ch_buf )
2469                 YY_FATAL_ERROR( "out of dynamic memory in ast_yy_create_buffer()" );
2470
2471         b->yy_is_our_buffer = 1;
2472
2473         ast_yy_init_buffer(b,file ,yyscanner);
2474
2475         return b;
2476 }
2477
2478 /** Destroy the buffer.
2479  * @param b a buffer created with ast_yy_create_buffer()
2480  * @param yyscanner The scanner object.
2481  */
2482     void ast_yy_delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
2483 {
2484     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2485
2486         if ( ! b )
2487                 return;
2488
2489         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
2490                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
2491
2492         if ( b->yy_is_our_buffer )
2493                 ast_yyfree((void *) b->yy_ch_buf ,yyscanner );
2494
2495         ast_yyfree((void *) b ,yyscanner );
2496 }
2497
2498 #ifndef __cplusplus
2499 extern int isatty (int );
2500 #endif /* __cplusplus */
2501     
2502 /* Initializes or reinitializes a buffer.
2503  * This function is sometimes called more than once on the same buffer,
2504  * such as during a ast_yyrestart() or at EOF.
2505  */
2506     static void ast_yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)
2507
2508 {
2509         int oerrno = errno;
2510     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2511
2512         ast_yy_flush_buffer(b ,yyscanner);
2513
2514         b->yy_input_file = file;
2515         b->yy_fill_buffer = 1;
2516
2517     /* If b is the current buffer, then ast_yy_init_buffer was _probably_
2518      * called from ast_yyrestart() or through yy_get_next_buffer.
2519      * In that case, we don't want to reset the lineno or column.
2520      */
2521     if (b != YY_CURRENT_BUFFER){
2522         b->yy_bs_lineno = 1;
2523         b->yy_bs_column = 0;
2524     }
2525
2526         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
2527     
2528         errno = oerrno;
2529 }
2530
2531 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
2532  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
2533  * @param yyscanner The scanner object.
2534  */
2535     void ast_yy_flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
2536 {
2537     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2538         if ( ! b )
2539                 return;
2540
2541         b->yy_n_chars = 0;
2542
2543         /* We always need two end-of-buffer characters.  The first causes
2544          * a transition to the end-of-buffer state.  The second causes
2545          * a jam in that state.
2546          */
2547         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
2548         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
2549
2550         b->yy_buf_pos = &b->yy_ch_buf[0];
2551
2552         b->yy_at_bol = 1;
2553         b->yy_buffer_status = YY_BUFFER_NEW;
2554
2555         if ( b == YY_CURRENT_BUFFER )
2556                 ast_yy_load_buffer_state(yyscanner );
2557 }
2558
2559 /** Pushes the new state onto the stack. The new state becomes
2560  *  the current state. This function will allocate the stack
2561  *  if necessary.
2562  *  @param new_buffer The new state.
2563  *  @param yyscanner The scanner object.
2564  */
2565 void ast_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
2566 {
2567     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2568         if (new_buffer == NULL)
2569                 return;
2570
2571         ast_yyensure_buffer_stack(yyscanner);
2572
2573         /* This block is copied from ast_yy_switch_to_buffer. */
2574         if ( YY_CURRENT_BUFFER )
2575                 {
2576                 /* Flush out information for old buffer. */
2577                 *yyg->yy_c_buf_p = yyg->yy_hold_char;
2578                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
2579                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2580                 }
2581
2582         /* Only push if top exists. Otherwise, replace top. */
2583         if (YY_CURRENT_BUFFER)
2584                 yyg->yy_buffer_stack_top++;
2585         YY_CURRENT_BUFFER_LVALUE = new_buffer;
2586
2587         /* copied from ast_yy_switch_to_buffer. */
2588         ast_yy_load_buffer_state(yyscanner );
2589         yyg->yy_did_buffer_switch_on_eof = 1;
2590 }
2591
2592 /** Removes and deletes the top of the stack, if present.
2593  *  The next element becomes the new top.
2594  *  @param yyscanner The scanner object.
2595  */
2596 void ast_yypop_buffer_state (yyscan_t yyscanner)
2597 {
2598     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2599         if (!YY_CURRENT_BUFFER)
2600                 return;
2601
2602         ast_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
2603         YY_CURRENT_BUFFER_LVALUE = NULL;
2604         if (yyg->yy_buffer_stack_top > 0)
2605                 --yyg->yy_buffer_stack_top;
2606
2607         if (YY_CURRENT_BUFFER) {
2608                 ast_yy_load_buffer_state(yyscanner );
2609                 yyg->yy_did_buffer_switch_on_eof = 1;
2610         }
2611 }
2612
2613 /* Allocates the stack if it does not exist.
2614  *  Guarantees space for at least one push.
2615  */
2616 static void ast_yyensure_buffer_stack (yyscan_t yyscanner)
2617 {
2618         int num_to_alloc;
2619     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2620
2621         if (!yyg->yy_buffer_stack) {
2622
2623                 /* First allocation is just for 2 elements, since we don't know if this
2624                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
2625                  * immediate realloc on the next call.
2626          */
2627                 num_to_alloc = 1;
2628                 yyg->yy_buffer_stack = (struct yy_buffer_state**)ast_yyalloc
2629                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
2630                                                                 , yyscanner);
2631                 
2632                 memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
2633                                 
2634                 yyg->yy_buffer_stack_max = num_to_alloc;
2635                 yyg->yy_buffer_stack_top = 0;
2636                 return;
2637         }
2638
2639         if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
2640
2641                 /* Increase the buffer to prepare for a possible push. */
2642                 int grow_size = 8 /* arbitrary grow size */;
2643
2644                 num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
2645                 yyg->yy_buffer_stack = (struct yy_buffer_state**)ast_yyrealloc
2646                                                                 (yyg->yy_buffer_stack,
2647                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
2648                                                                 , yyscanner);
2649
2650                 /* zero only the new slots.*/
2651                 memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
2652                 yyg->yy_buffer_stack_max = num_to_alloc;
2653         }
2654 }
2655
2656 /** Setup the input buffer state to scan directly from a user-specified character buffer.
2657  * @param base the character buffer
2658  * @param size the size in bytes of the character buffer
2659  * @param yyscanner The scanner object.
2660  * @return the newly allocated buffer state object. 
2661  */
2662 YY_BUFFER_STATE ast_yy_scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
2663 {
2664         YY_BUFFER_STATE b;
2665     
2666         if ( size < 2 ||
2667              base[size-2] != YY_END_OF_BUFFER_CHAR ||
2668              base[size-1] != YY_END_OF_BUFFER_CHAR )
2669                 /* They forgot to leave room for the EOB's. */
2670                 return 0;
2671
2672         b = (YY_BUFFER_STATE) ast_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
2673         if ( ! b )
2674                 YY_FATAL_ERROR( "out of dynamic memory in ast_yy_scan_buffer()" );
2675
2676         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
2677         b->yy_buf_pos = b->yy_ch_buf = base;
2678         b->yy_is_our_buffer = 0;
2679         b->yy_input_file = 0;
2680         b->yy_n_chars = b->yy_buf_size;
2681         b->yy_is_interactive = 0;
2682         b->yy_at_bol = 1;
2683         b->yy_fill_buffer = 0;
2684         b->yy_buffer_status = YY_BUFFER_NEW;
2685
2686         ast_yy_switch_to_buffer(b ,yyscanner );
2687
2688         return b;
2689 }
2690
2691 /** Setup the input buffer state to scan a string. The next call to ast_yylex() will
2692  * scan from a @e copy of @a str.
2693  * @param str a NUL-terminated string to scan
2694  * @param yyscanner The scanner object.
2695  * @return the newly allocated buffer state object.
2696  * @note If you want to scan bytes that may contain NUL values, then use
2697  *       ast_yy_scan_bytes() instead.
2698  */
2699 YY_BUFFER_STATE ast_yy_scan_string (yyconst char * str , yyscan_t yyscanner)
2700 {
2701     
2702         return ast_yy_scan_bytes(str,strlen(str) ,yyscanner);
2703 }
2704
2705 /** Setup the input buffer state to scan the given bytes. The next call to ast_yylex() will
2706  * scan from a @e copy of @a bytes.
2707  * @param bytes the byte buffer to scan
2708  * @param len the number of bytes in the buffer pointed to by @a bytes.
2709  * @param yyscanner The scanner object.
2710  * @return the newly allocated buffer state object.
2711  */
2712 YY_BUFFER_STATE ast_yy_scan_bytes  (yyconst char * bytes, int  len , yyscan_t yyscanner)
2713 {
2714         YY_BUFFER_STATE b;
2715         char *buf;
2716         yy_size_t n;
2717         int i;
2718     
2719         /* Get memory for full buffer, including space for trailing EOB's. */
2720         n = len + 2;
2721         buf = (char *) ast_yyalloc(n ,yyscanner );
2722         if ( ! buf )
2723                 YY_FATAL_ERROR( "out of dynamic memory in ast_yy_scan_bytes()" );
2724
2725         for ( i = 0; i < len; ++i )
2726                 buf[i] = bytes[i];
2727
2728         buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
2729
2730         b = ast_yy_scan_buffer(buf,n ,yyscanner);
2731         if ( ! b )
2732                 YY_FATAL_ERROR( "bad buffer in ast_yy_scan_bytes()" );
2733
2734         /* It's okay to grow etc. this buffer, and we should throw it
2735          * away when we're done.
2736          */
2737         b->yy_is_our_buffer = 1;
2738
2739         return b;
2740 }
2741
2742 #ifndef YY_EXIT_FAILURE
2743 #define YY_EXIT_FAILURE 2
2744 #endif
2745
2746 static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
2747 {
2748         (void) fprintf( stderr, "%s\n", msg );
2749         exit( YY_EXIT_FAILURE );
2750 }
2751
2752 /* Redefine yyless() so it works in section 3 code. */
2753
2754 #undef yyless
2755 #define yyless(n) \
2756         do \
2757                 { \
2758                 /* Undo effects of setting up yytext. */ \
2759         int yyless_macro_arg = (n); \
2760         YY_LESS_LINENO(yyless_macro_arg);\
2761                 yytext[yyleng] = yyg->yy_hold_char; \
2762                 yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
2763                 yyg->yy_hold_char = *yyg->yy_c_buf_p; \
2764                 *yyg->yy_c_buf_p = '\0'; \
2765                 yyleng = yyless_macro_arg; \
2766                 } \
2767         while ( 0 )
2768
2769 /* Accessor  methods (get/set functions) to struct members. */
2770
2771 /** Get the user-defined data for this scanner.
2772  * @param yyscanner The scanner object.
2773  */
2774 YY_EXTRA_TYPE ast_yyget_extra  (yyscan_t yyscanner)
2775 {
2776     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2777     return yyextra;
2778 }
2779
2780 /** Get the current line number.
2781  * @param yyscanner The scanner object.
2782  */
2783 int ast_yyget_lineno  (yyscan_t yyscanner)
2784 {
2785     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2786     
2787         if (! YY_CURRENT_BUFFER)
2788             return 0;
2789     
2790     return yylineno;
2791 }
2792
2793 /** Get the current column number.
2794  * @param yyscanner The scanner object.
2795  */
2796 int ast_yyget_column  (yyscan_t yyscanner)
2797 {
2798     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2799     
2800         if (! YY_CURRENT_BUFFER)
2801             return 0;
2802     
2803     return yycolumn;
2804 }
2805
2806 /** Get the input stream.
2807  * @param yyscanner The scanner object.
2808  */
2809 FILE *ast_yyget_in  (yyscan_t yyscanner)
2810 {
2811     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2812     return yyin;
2813 }
2814
2815 /** Get the output stream.
2816  * @param yyscanner The scanner object.
2817  */
2818 FILE *ast_yyget_out  (yyscan_t yyscanner)
2819 {
2820     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2821     return yyout;
2822 }
2823
2824 /** Get the length of the current token.
2825  * @param yyscanner The scanner object.
2826  */
2827 int ast_yyget_leng  (yyscan_t yyscanner)
2828 {
2829     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2830     return yyleng;
2831 }
2832
2833 /** Get the current token.
2834  * @param yyscanner The scanner object.
2835  */
2836
2837 char *ast_yyget_text  (yyscan_t yyscanner)
2838 {
2839     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2840     return yytext;
2841 }
2842
2843 /** Set the user-defined data. This data is never touched by the scanner.
2844  * @param user_defined The data to be associated with this scanner.
2845  * @param yyscanner The scanner object.
2846  */
2847 void ast_yyset_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
2848 {
2849     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2850     yyextra = user_defined ;
2851 }
2852
2853 /** Set the current line number.
2854  * @param line_number
2855  * @param yyscanner The scanner object.
2856  */
2857 void ast_yyset_lineno (int  line_number , yyscan_t yyscanner)
2858 {
2859     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2860
2861         /* lineno is only valid if an input buffer exists. */
2862         if (! YY_CURRENT_BUFFER )
2863            yy_fatal_error( "ast_yyset_lineno called with no buffer" , yyscanner); 
2864     
2865     yylineno = line_number;
2866 }
2867
2868 /** Set the current column.
2869  * @param line_number
2870  * @param yyscanner The scanner object.
2871  */
2872 void ast_yyset_column (int  column_no , yyscan_t yyscanner)
2873 {
2874     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2875
2876         /* column is only valid if an input buffer exists. */
2877         if (! YY_CURRENT_BUFFER )
2878            yy_fatal_error( "ast_yyset_column called with no buffer" , yyscanner); 
2879     
2880     yycolumn = column_no;
2881 }
2882
2883 /** Set the input stream. This does not discard the current
2884  * input buffer.
2885  * @param in_str A readable stream.
2886  * @param yyscanner The scanner object.
2887  * @see ast_yy_switch_to_buffer
2888  */
2889 void ast_yyset_in (FILE *  in_str , yyscan_t yyscanner)
2890 {
2891     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2892     yyin = in_str ;
2893 }
2894
2895 void ast_yyset_out (FILE *  out_str , yyscan_t yyscanner)
2896 {
2897     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2898     yyout = out_str ;
2899 }
2900
2901 int ast_yyget_debug  (yyscan_t yyscanner)
2902 {
2903     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2904     return yy_flex_debug;
2905 }
2906
2907 void ast_yyset_debug (int  bdebug , yyscan_t yyscanner)
2908 {
2909     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2910     yy_flex_debug = bdebug ;
2911 }
2912
2913 /* Accessor methods for yylval and yylloc */
2914
2915 YYSTYPE * ast_yyget_lval  (yyscan_t yyscanner)
2916 {
2917     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2918     return yylval;
2919 }
2920
2921 void ast_yyset_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
2922 {
2923     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2924     yylval = yylval_param;
2925 }
2926
2927 YYLTYPE *ast_yyget_lloc  (yyscan_t yyscanner)
2928 {
2929     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2930     return yylloc;
2931 }
2932     
2933 void ast_yyset_lloc (YYLTYPE *  yylloc_param , yyscan_t yyscanner)
2934 {
2935     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2936     yylloc = yylloc_param;
2937 }
2938     
2939 static int yy_init_globals (yyscan_t yyscanner)
2940 {
2941     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2942     /* Initialization is the same as for the non-reentrant scanner.
2943        This function is called once per scanner lifetime. */
2944
2945     yyg->yy_buffer_stack = 0;
2946     yyg->yy_buffer_stack_top = 0;
2947     yyg->yy_buffer_stack_max = 0;
2948     yyg->yy_c_buf_p = (char *) 0;
2949     yyg->yy_init = 1;
2950     yyg->yy_start = 0;
2951     yyg->yy_start_stack_ptr = 0;
2952     yyg->yy_start_stack_depth = 0;
2953     yyg->yy_start_stack = (int *) 0;
2954
2955 /* Defined in main.c */
2956 #ifdef YY_STDINIT
2957     yyin = stdin;
2958     yyout = stdout;
2959 #else
2960     yyin = (FILE *) 0;
2961     yyout = (FILE *) 0;
2962 #endif
2963
2964     /* For future reference: Set errno on error, since we are called by
2965      * ast_yylex_init()
2966      */
2967     return 0;
2968 }
2969
2970 /* User-visible API */
2971
2972 /* ast_yylex_init is special because it creates the scanner itself, so it is
2973  * the ONLY reentrant function that doesn't take the scanner as the last argument.
2974  * That's why we explicitly handle the declaration, instead of using our macros.
2975  */
2976
2977 int ast_yylex_init(yyscan_t* ptr_yy_globals)
2978
2979 {
2980     if (ptr_yy_globals == NULL){
2981         errno = EINVAL;
2982         return 1;
2983     }
2984
2985     *ptr_yy_globals = (yyscan_t) ast_yyalloc ( sizeof( struct yyguts_t ), NULL );
2986
2987     if (*ptr_yy_globals == NULL){
2988         errno = ENOMEM;
2989         return 1;
2990     }
2991
2992     memset(*ptr_yy_globals,0,sizeof(struct yyguts_t));
2993
2994     return yy_init_globals ( *ptr_yy_globals );
2995 }
2996
2997 /* ast_yylex_destroy is for both reentrant and non-reentrant scanners. */
2998 int ast_yylex_destroy  (yyscan_t yyscanner)
2999 {
3000     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3001
3002     /* Pop the buffer stack, destroying each element. */
3003         while(YY_CURRENT_BUFFER){
3004                 ast_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
3005                 YY_CURRENT_BUFFER_LVALUE = NULL;
3006                 ast_yypop_buffer_state(yyscanner);
3007         }
3008
3009         /* Destroy the stack itself. */
3010         ast_yyfree(yyg->yy_buffer_stack ,yyscanner);
3011         yyg->yy_buffer_stack = NULL;
3012
3013     /* Destroy the start condition stack. */
3014         ast_yyfree(yyg->yy_start_stack ,yyscanner );
3015         yyg->yy_start_stack = NULL;
3016
3017     /* Destroy the main struct (reentrant only). */
3018     ast_yyfree ( yyscanner , yyscanner );
3019     return 0;
3020 }
3021
3022 /*
3023  * Internal utility routines.
3024  */
3025
3026 #ifndef yytext_ptr
3027 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
3028 {
3029         register int i;
3030     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3031         for ( i = 0; i < n; ++i )
3032                 s1[i] = s2[i];
3033 }
3034 #endif
3035
3036 #ifdef YY_NEED_STRLEN
3037 static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
3038 {
3039         register int n;
3040     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
3041         for ( n = 0; s[n]; ++n )
3042                 ;
3043
3044         return n;
3045 }
3046 #endif
3047
3048 void *ast_yyalloc (yy_size_t  size , yyscan_t yyscanner)
3049 {
3050         return (void *) malloc( size );
3051 }
3052
3053 void *ast_yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
3054 {
3055         /* The cast to (char *) in the following accommodates both
3056          * implementations that use char* generic pointers, and those
3057          * that use void* generic pointers.  It works with the latter
3058          * because both ANSI C and C++ allow castless assignment from
3059          * any pointer type to void*, and deal with argument conversions
3060          * as though doing an assignment.
3061          */
3062         return (void *) realloc( (char *) ptr, size );
3063 }
3064
3065 void ast_yyfree (void * ptr , yyscan_t yyscanner)
3066 {
3067         free( (char *) ptr );   /* see ast_yyrealloc() for (char *) cast */
3068 }
3069
3070 #define YYTABLES_NAME "yytables"
3071
3072 #undef YY_NEW_FILE
3073 #undef YY_FLUSH_BUFFER
3074 #undef yy_set_bol
3075 #undef yy_new_buffer
3076 #undef yy_set_interactive
3077 #undef yytext_ptr
3078 #undef YY_DO_BEFORE_ACTION
3079
3080 #ifdef YY_DECL_IS_OURS
3081 #undef YY_DECL_IS_OURS
3082 #undef YY_DECL
3083 #endif
3084 #line 205 "ast_expr2.fl"
3085
3086
3087
3088 /* I'm putting the interface routine to the whole parse here in the flexer input file
3089    mainly because of all the flexer initialization that has to be done. Shouldn't matter
3090    where it is, as long as it's somewhere. I didn't want to define a prototype for the
3091    ast_yy_scan_string in the .y file, because then, I'd have to define YY_BUFFER_STATE there...
3092         UGH! that would be inappropriate. */
3093
3094 int ast_yyparse(void *); /* need to/should define this prototype for the call to yyparse */
3095 int ast_yyerror(const char *, YYLTYPE *, struct parse_io *); /* likewise */
3096
3097 int ast_expr(char *expr, char *buf, int length)
3098 {
3099         struct parse_io io;
3100         int return_value = 0;
3101         
3102         memset(&io, 0, sizeof(io));
3103         io.string = expr;  /* to pass to the error routine */
3104         
3105         ast_yylex_init(&io.scanner);
3106         
3107         ast_yy_scan_string(expr, io.scanner);
3108         
3109         ast_yyparse ((void *) &io);
3110
3111         ast_yylex_destroy(io.scanner);
3112
3113         if (!io.val) {
3114                 if (length > 1) {
3115                         strcpy(buf, "0");
3116                         return_value = 1;
3117                 }
3118         } else {
3119                 if (io.val->type == AST_EXPR_integer) {
3120                         int res_length;
3121
3122                         res_length = snprintf(buf, length, "%ld", (long int) io.val->u.i);
3123                         return_value = (res_length <= length) ? res_length : length;
3124                 } else {
3125 #if defined(STANDALONE) || defined(LOW_MEMORY)
3126                         strncpy(buf, io.val->u.s, length - 1);
3127 #else /* !STANDALONE && !LOW_MEMORY */
3128                         ast_copy_string(buf, io.val->u.s, length);
3129 #endif /* STANDALONE || LOW_MEMORY */
3130                         return_value = strlen(buf);
3131                         free(io.val->u.s);
3132                 }
3133                 free(io.val);
3134         }
3135         return return_value;
3136 }
3137
3138
3139 char extra_error_message[4095];
3140 int extra_error_message_supplied = 0;
3141 void  ast_expr_register_extra_error_info(char *message);
3142 void  ast_expr_clear_extra_error_info(void);
3143
3144 void  ast_expr_register_extra_error_info(char *message)
3145 {
3146        extra_error_message_supplied=1;
3147        strcpy(extra_error_message, message);
3148 }
3149
3150 void  ast_expr_clear_extra_error_info(void)
3151 {
3152        extra_error_message_supplied=0;
3153        extra_error_message[0] = 0;
3154 }
3155
3156 static char *expr2_token_equivs1[] = 
3157 {
3158         "TOKEN",
3159         "TOK_COND",
3160         "TOK_COLONCOLON",
3161         "TOK_OR",
3162         "TOK_AND",
3163         "TOK_EQ",
3164         "TOK_GT",
3165         "TOK_LT",
3166         "TOK_GE",
3167         "TOK_LE",
3168         "TOK_NE",
3169         "TOK_PLUS",
3170         "TOK_MINUS",
3171         "TOK_MULT",
3172         "TOK_DIV",
3173         "TOK_MOD",
3174         "TOK_COMPL",
3175         "TOK_COLON",
3176         "TOK_EQTILDE",
3177         "TOK_RP",
3178         "TOK_LP"
3179 };
3180
3181 static char *expr2_token_equivs2[] = 
3182 {
3183         "<token>",
3184         "?",
3185         "::",
3186         "|",
3187         "&",
3188         "=",
3189         ">",
3190         "<",
3191         ">=",
3192         "<=",
3193         "!=",
3194         "+",
3195         "-",
3196         "*",
3197         "/",
3198         "%",
3199         "!",
3200         ":",
3201         "=~",
3202         ")",
3203         "("
3204 };
3205
3206
3207 static char *expr2_token_subst(char *mess)
3208 {
3209         /* calc a length, malloc, fill, and return; yyerror had better free it! */
3210         int len=0,i;
3211         char *p;
3212         char *res, *s,*t;
3213         int expr2_token_equivs_entries = sizeof(expr2_token_equivs1)/sizeof(char*);
3214
3215         for (p=mess; *p; p++) {
3216                 for (i=0; i<expr2_token_equivs_entries; i++) {
3217                         if ( strncmp(p,expr2_token_equivs1[i],strlen(expr2_token_equivs1[i])) == 0 )
3218                         {
3219                                 len+=strlen(expr2_token_equivs2[i])+2;
3220                                 p += strlen(expr2_token_equivs1[i])-1;
3221                                 break;
3222                         }
3223                 }
3224                 len++;
3225         }
3226         res = (char*)malloc(len+1);
3227         res[0] = 0;
3228         s = res;
3229         for (p=mess; *p;) {
3230                 int found = 0;
3231                 for (i=0; i<expr2_token_equivs_entries; i++) {
3232                         if ( strncmp(p,expr2_token_equivs1[i],strlen(expr2_token_equivs1[i])) == 0 ) {
3233                                 *s++ = '\'';
3234                                 for (t=expr2_token_equivs2[i]; *t;) {
3235                                         *s++ = *t++;
3236                                 }
3237                                 *s++ = '\'';
3238                                 p += strlen(expr2_token_equivs1[i]);
3239                                 found = 1;
3240                                 break;
3241                         }
3242                 }
3243                 if( !found )
3244                         *s++ = *p++;
3245         }
3246         *s++ = 0;
3247         return res;
3248 }
3249
3250 int ast_yyerror (const char *s,  yyltype *loc, struct parse_io *parseio )
3251 {       
3252         struct yyguts_t * yyg = (struct yyguts_t*)(parseio->scanner);
3253         char spacebuf[8000]; /* best safe than sorry */
3254         char spacebuf2[8000]; /* best safe than sorry */
3255         int i=0;
3256         char *s2 = expr2_token_subst((char *)s);
3257         spacebuf[0] = 0;
3258         
3259         for(i=0;i< (int)(yytext - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf);i++) spacebuf2[i] = ' ';  /* uh... assuming yyg is defined, then I can use the yycolumn macro,
3260                                                                                                                                                                                                 which is the same thing as... get this:
3261                                                                                                         yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]->yy_bs_column
3262                                                                                                         I was tempted to just use yy_buf_pos in the STATE, but..., well:
3263                                                                                                                 a. the yy_buf_pos is the current position in the buffer, which
3264                                                                                                                         may not relate to the entire string/buffer because of the
3265                                                                                                                         buffering.
3266                                                                                                                 b. but, analysis of the situation is that when you use the
3267                                                                                                                         ast_yy_scan_string func, it creates a single buffer the size of
3268                                                                                                                         string, so the two would be the same... 
3269                                                                                                         so, in the end, the yycolumn macro is available, shorter, therefore easier. */
3270         spacebuf2[i++]='^';
3271         spacebuf2[i]= 0;
3272
3273 #ifdef STANDALONE3
3274         /* easier to read in the standalone version */
3275         printf("ast_yyerror(): %s syntax error: %s; Input:\n%s\n%s\n",  
3276                         (extra_error_message_supplied?extra_error_message:""), s2, parseio->string,spacebuf2);
3277 #else
3278         ast_log(LOG_WARNING,"ast_yyerror(): %s syntax error: %s; Input:\n%s\n%s\n",  
3279                         (extra_error_message_supplied?extra_error_message:""), s2, parseio->string,spacebuf2);
3280 #endif
3281 #ifndef STANDALONE
3282         ast_log(LOG_WARNING,"If you have questions, please refer to doc/channelvariables.txt in the asterisk source.\n");
3283 #endif
3284         free(s2);
3285         return(0);
3286 }
3287