comparison tests/agcl/oldagsrc/good/xvmc.cpp @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:13d2b8934445
1 /*
2 XVMC.SYN
3
4 Extensible Scripting Language
5 Copyright (c) 1998 Parsifal Software, All Rights Reserved.
6
7 The expression syntax is borrowed from C but with the
8 addition of the FORTRAN exponentiation operator (**).
9
10 The supported operations are:
11 Assignment operators: =, +=, -=, *=, /=, %=, , &=, |=, ^=>>=, <<=
12 Conditional expressions: ? :
13 Logical operators: !, &&, ||
14 Bitwise logical operators: &, |, ^, ~
15 Comparison operators: ==, !=, <, <=, >, >=
16 Shift operators: <<, >>
17 Binary arithmetic operators: +, -, *, /, %
18 Unary arithmetic operators: +, -
19 Exponentiation: **
20 Autoincrement operators: ++, --;
21 Cast operators (<type name>)
22 Parentheses
23 Function calls
24 Object method calls
25
26 Built in data types are int, double and String.
27
28 Statements may include variable declarations, expression statements,
29 blocks, if/else statements, while , do/while, or for statements,
30 following the rules of C.
31
32 The statement syntax has been written to avoid the conventional
33 if/else ambiguity.
34
35 Input strings may contain any number of statements. White space may be
36 used freely, including both C and C++ style comments.
37
38 xvmc.syn is compiled with the AnaGram parser generator
39 yielding xvm.h and xvm.cpp.
40
41 For information about AnaGram, visit http://www.parsifalsoft.com.
42 */
43
44 #include <math.h>
45 #include "xvm.h" // defines external interface
46 #include "integer.h"
47 #include "double.h"
48 #include "xstring.h"
49
50 static VirtualMachine *vm;
51
52 typedef VirtualMachine::CodeSeg Code; // For the sake of readability
53
54
55 /*
56 * AnaGram, A System for Syntax Directed Programming
57 * File generated by: ...
58 *
59 * AnaGram Parsing Engine
60 * Copyright 1993-2002 Parsifal Software. All Rights Reserved.
61 *
62 * This software is provided 'as-is', without any express or implied
63 * warranty. In no event will the authors be held liable for any damages
64 * arising from the use of this software.
65 *
66 * Permission is granted to anyone to use this software for any purpose,
67 * including commercial applications, and to alter it and redistribute it
68 * freely, subject to the following restrictions:
69 *
70 * 1. The origin of this software must not be misrepresented; you must not
71 * claim that you wrote the original software. If you use this software
72 * in a product, an acknowledgment in the product documentation would be
73 * appreciated but is not required.
74 * 2. Altered source versions must be plainly marked as such, and must not be
75 * misrepresented as being the original software.
76 * 3. This notice may not be removed or altered from any source distribution.
77 */
78
79 #ifndef XVMC_H
80 #include "xvmc.h"
81 #endif
82
83 #ifndef XVMC_H
84 #error Mismatched header file
85 #endif
86
87 #include <ctype.h>
88 #include <stdio.h>
89
90 #define RULE_CONTEXT (&((PCB).cs[(PCB).ssx]))
91 #define ERROR_CONTEXT ((PCB).cs[(PCB).error_frame_ssx])
92 #define CONTEXT ((PCB).cs[(PCB).ssx])
93
94
95
96 vmCompile_pcb_type vmCompile_pcb;
97 #define PCB vmCompile_pcb
98 #define CHANGE_REDUCTION(x) vmCompile_change_reduction(vmCompile_##x##_token)
99 int vmCompile_change_reduction(vmCompile_token_type);
100
101
102 Code vmCompile_value(void);
103
104
105 #line - "xvmc.syn"
106 // begin embedded C
107
108 #include <string.h>
109
110
111 ErrorRecord::ErrorRecord(char *msg) : message(msg), line(PCB.line), column(PCB.column)
112 {/* Initializers do it all */}
113
114 ErrorLog errorLog;
115
116 #define SYNTAX_ERROR errorLog.add(PCB.error_message)
117
118 int VirtualMachine::compile(char *text) {
119 vm = this;
120 resetCharStack();
121 vmCompile_pcb.pointer = (unsigned char *) text;
122 vmCompile();
123 {
124 Code program = vmCompile_value() << EXIT;
125 int n = program.size();
126 codeStore = new int[n];
127 while (n--) codeStore[n] = program[n];
128 }
129
130 return vmCompile_pcb.exit_flag != AG_SUCCESS_CODE;
131 }
132
133 Code VirtualMachine::codeWhile(Code x, Code s) {
134 Code branch(VirtualMachine::BR);
135 branch << 0;
136 //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined");
137 x << VirtualMachine::BRF << (s.size() + branch.size());
138 int blockLength = s.size() + x.size() + branch.size();
139 x << s << VirtualMachine::BR << -blockLength;
140 return x;
141 }
142
143 Code VirtualMachine::codeDoWhile(Code s, Code x) {
144 Code branch(VirtualMachine::BR);
145 branch << 0;
146 int blockLength = s.size() + x.size() + branch.size();
147 //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined");
148 s << x << VirtualMachine::BRT << -blockLength;
149 return s;
150 }
151
152 Code VirtualMachine::codeFor(Code init, Code cond, Code inc, Code s) {
153 s << inc; // append increment code to end of body of for loop
154 //if (!cond.type->isTruthDefined()) errorLog.add("True/False not defined");
155 init << codeWhile(cond, s);
156 return init;
157 }
158
159 #line - "xvmc.cpp"
160
161 #ifndef CONVERT_CASE
162 #define CONVERT_CASE(c) (c)
163 #endif
164 #ifndef TAB_SPACING
165 #define TAB_SPACING 8
166 #endif
167 Code vmCompile_value(void) {
168 Code returnValue;
169 returnValue = (*(Code *) &(PCB).vs[(PCB).ssx]);
170 return returnValue;
171 }
172
173 static Code ag_rp_1(void) {
174 #line - "xvmc.syn"
175 return Code();
176 #line - "xvmc.cpp"
177 }
178
179 static Code ag_rp_2(Code x) {
180 #line - "xvmc.syn"
181 return x;
182 #line - "xvmc.cpp"
183 }
184
185 static Code ag_rp_3(Code x) {
186 #line - "xvmc.syn"
187 return x;
188 #line - "xvmc.cpp"
189 }
190
191 static Code ag_rp_4(void) {
192 #line - "xvmc.syn"
193 return errorLog.add("Continuing scan"), Code();
194 #line - "xvmc.cpp"
195 }
196
197 static Code ag_rp_5(int t, int n) {
198 #line - "xvmc.syn"
199 return vm->declareVariable(t,n), Code();
200 #line - "xvmc.cpp"
201 }
202
203 static Code ag_rp_6(int t, int n, Code x) {
204 #line - "xvmc.syn"
205 int name = vm->declareVariable(t,n);
206 return Code(VirtualMachine::PUSHV) << name << x << VirtualMachine::ASSIGN << VirtualMachine::POP;
207
208 #line - "xvmc.cpp"
209 }
210
211 static Code ag_rp_7(int t, int n, Code size) {
212 #line - "xvmc.syn"
213 return vm->declareArray(t,n, size);
214 #line - "xvmc.cpp"
215 }
216
217 static Code ag_rp_8(int t, int n, Code args) {
218 #line - "xvmc.syn"
219 return vm->declareObject(t,n,args);
220 #line - "xvmc.cpp"
221 }
222
223 static Code ag_rp_9(void) {
224 #line - "xvmc.syn"
225 return Code();
226 #line - "xvmc.cpp"
227 }
228
229 static Code ag_rp_10(Code x) {
230 #line - "xvmc.syn"
231 return x;
232 #line - "xvmc.cpp"
233 }
234
235 static Code ag_rp_11(Code x) {
236 #line - "xvmc.syn"
237 return x.initList();
238 #line - "xvmc.cpp"
239 }
240
241 static Code ag_rp_12(Code list, Code x) {
242 #line - "xvmc.syn"
243 return list.append(x);
244 #line - "xvmc.cpp"
245 }
246
247 static Code ag_rp_13(Code x) {
248 #line - "xvmc.syn"
249 return x;
250 #line - "xvmc.cpp"
251 }
252
253 static Code ag_rp_14(Code x, Code s) {
254 #line - "xvmc.syn"
255 return x << s;
256 #line - "xvmc.cpp"
257 }
258
259 static Code ag_rp_15(Code x) {
260 #line - "xvmc.syn"
261 return x << VirtualMachine::POP;
262 #line - "xvmc.cpp"
263 }
264
265 static Code ag_rp_16(void) {
266 #line - "xvmc.syn"
267 return Code();
268 #line - "xvmc.cpp"
269 }
270
271 static Code ag_rp_17(void) {
272 #line - "xvmc.syn"
273 return Code();
274 #line - "xvmc.cpp"
275 }
276
277 static Code ag_rp_18(Code s) {
278 #line - "xvmc.syn"
279 return s;
280 #line - "xvmc.cpp"
281 }
282
283 static Code ag_rp_19(Code s) {
284 #line - "xvmc.syn"
285 return errorLog.add("Continuing scan"), s;
286 #line - "xvmc.cpp"
287 }
288
289 static Code ag_rp_20(Code s, Code x) {
290 #line - "xvmc.syn"
291 return vm->codeDoWhile(s,x);
292 #line - "xvmc.cpp"
293 }
294
295 static Code ag_rp_21(Code x, Code s) {
296 #line - "xvmc.syn"
297 return vm->codeWhile(x,s);
298 #line - "xvmc.cpp"
299 }
300
301 static Code ag_rp_22(Code init, Code cond, Code inc, Code s) {
302 #line - "xvmc.syn"
303 return vm->codeFor(init, cond, inc, s);
304 #line - "xvmc.cpp"
305 }
306
307 static Code ag_rp_23(void) {
308 #line - "xvmc.syn"
309 return Code();
310 #line - "xvmc.cpp"
311 }
312
313 static Code ag_rp_24(Code x) {
314 #line - "xvmc.syn"
315 return x << VirtualMachine::POP;
316 #line - "xvmc.cpp"
317 }
318
319 static Code ag_rp_25(Code list, Code x) {
320 #line - "xvmc.syn"
321 return list << x << VirtualMachine::POP;
322 #line - "xvmc.cpp"
323 }
324
325 static Code ag_rp_26(Code x) {
326 #line - "xvmc.syn"
327 return x;
328 #line - "xvmc.cpp"
329 }
330
331 static Code ag_rp_27(Code x, Code s) {
332 #line - "xvmc.syn"
333 return vm->codeWhile(x,s);
334 #line - "xvmc.cpp"
335 }
336
337 static Code ag_rp_28(Code init, Code cond, Code inc, Code s) {
338 #line - "xvmc.syn"
339 return vm->codeFor(init, cond, inc, s);
340 #line - "xvmc.cpp"
341 }
342
343 static Code ag_rp_29(Code x, Code s) {
344 #line - "xvmc.syn"
345 return x << VirtualMachine::BRF << s.size() << s;
346 #line - "xvmc.cpp"
347 }
348
349 static Code ag_rp_30(Code x, Code s1, Code s2) {
350 #line - "xvmc.syn"
351 s1 << VirtualMachine::BR << s2.size();
352 x << VirtualMachine::BRF << s1.size() << s1 << s2;
353 return x;
354
355 #line - "xvmc.cpp"
356 }
357
358 static Code ag_rp_31(Code x) {
359 #line - "xvmc.syn"
360 return x;
361 #line - "xvmc.cpp"
362 }
363
364 static Code ag_rp_32(Code x) {
365 #line - "xvmc.syn"
366 return x.testOK();
367 #line - "xvmc.cpp"
368 }
369
370 static Code ag_rp_33(Code k, Code x) {
371 #line - "xvmc.syn"
372 return k << x << VirtualMachine::ASSIGN;
373 #line - "xvmc.cpp"
374 }
375
376 static Code ag_rp_34(Code k, Code x) {
377 #line - "xvmc.syn"
378 return k << x << VirtualMachine::ADD_EQ;
379 #line - "xvmc.cpp"
380 }
381
382 static Code ag_rp_35(Code k, Code x) {
383 #line - "xvmc.syn"
384 return k << x << VirtualMachine::SUB_EQ;
385 #line - "xvmc.cpp"
386 }
387
388 static Code ag_rp_36(Code k, Code x) {
389 #line - "xvmc.syn"
390 return k << x << VirtualMachine::MULT_EQ;
391 #line - "xvmc.cpp"
392 }
393
394 static Code ag_rp_37(Code k, Code x) {
395 #line - "xvmc.syn"
396 return k << x << VirtualMachine::DIV_EQ;
397 #line - "xvmc.cpp"
398 }
399
400 static Code ag_rp_38(Code k, Code x) {
401 #line - "xvmc.syn"
402 return k << x << VirtualMachine::MOD_EQ;
403 #line - "xvmc.cpp"
404 }
405
406 static Code ag_rp_39(Code k, Code x) {
407 #line - "xvmc.syn"
408 return k << x << VirtualMachine::OR_EQ;
409 #line - "xvmc.cpp"
410 }
411
412 static Code ag_rp_40(Code k, Code x) {
413 #line - "xvmc.syn"
414 return k << x << VirtualMachine::AND_EQ;
415 #line - "xvmc.cpp"
416 }
417
418 static Code ag_rp_41(Code k, Code x) {
419 #line - "xvmc.syn"
420 return k << x << VirtualMachine::XOR_EQ;
421 #line - "xvmc.cpp"
422 }
423
424 static Code ag_rp_42(Code k, Code x) {
425 #line - "xvmc.syn"
426 return k << x << VirtualMachine::LS_EQ;
427 #line - "xvmc.cpp"
428 }
429
430 static Code ag_rp_43(Code k, Code x) {
431 #line - "xvmc.syn"
432 return k << x << VirtualMachine::RS_EQ;
433 #line - "xvmc.cpp"
434 }
435
436 static Code ag_rp_44(int k) {
437 #line - "xvmc.syn"
438 return Code(VirtualMachine::PUSHV).setType(vm->symbolTable[k].type) << k;
439 #line - "xvmc.cpp"
440 }
441
442 static Code ag_rp_45(Code k, Code x) {
443 #line - "xvmc.syn"
444 return k.setType(k.type->element) << x << VirtualMachine::SUBSCRIPT;
445 #line - "xvmc.cpp"
446 }
447
448 static Code ag_rp_46(Code c, Code x, Code y) {
449 #line - "xvmc.syn"
450 //if (!c.type->isTruthDefined()) errorLog.add("True/False not defined");
451 x << VirtualMachine::BR << y.size();
452 c << VirtualMachine::BRF << x.size() << x << y;
453 return c;
454
455 #line - "xvmc.cpp"
456 }
457
458 static Code ag_rp_47(Code x) {
459 #line - "xvmc.syn"
460 return x.testOK();
461 #line - "xvmc.cpp"
462 }
463
464 static Code ag_rp_48(Code x, Code y) {
465 #line - "xvmc.syn"
466 //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined");
467 return x << VirtualMachine::OR << y.size() << y;
468
469 #line - "xvmc.cpp"
470 }
471
472 static Code ag_rp_49(Code x, Code y) {
473 #line - "xvmc.syn"
474 //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined");
475 return x << VirtualMachine::AND << y.size() << y;
476
477 #line - "xvmc.cpp"
478 }
479
480 static Code ag_rp_50(Code x) {
481 #line - "xvmc.syn"
482 return x.testOK();
483 #line - "xvmc.cpp"
484 }
485
486 static Code ag_rp_51(Code x, Code y) {
487 #line - "xvmc.syn"
488 return x.binop(VirtualMachine::BITOR,y);
489 #line - "xvmc.cpp"
490 }
491
492 static Code ag_rp_52(Code x, Code y) {
493 #line - "xvmc.syn"
494 return x.binop(VirtualMachine::XOR,y);
495 #line - "xvmc.cpp"
496 }
497
498 static Code ag_rp_53(Code x, Code y) {
499 #line - "xvmc.syn"
500 return x.binop(VirtualMachine::BITAND,y);
501 #line - "xvmc.cpp"
502 }
503
504 static Code ag_rp_54(Code x, Code y) {
505 #line - "xvmc.syn"
506 return x.binop(VirtualMachine::EQ,y);
507 #line - "xvmc.cpp"
508 }
509
510 static Code ag_rp_55(Code x, Code y) {
511 #line - "xvmc.syn"
512 return x.binop(VirtualMachine::NE,y);
513 #line - "xvmc.cpp"
514 }
515
516 static Code ag_rp_56(Code x, Code y) {
517 #line - "xvmc.syn"
518 return x.binop(VirtualMachine::LT,y);
519 #line - "xvmc.cpp"
520 }
521
522 static Code ag_rp_57(Code x, Code y) {
523 #line - "xvmc.syn"
524 return x.binop(VirtualMachine::LE,y);
525 #line - "xvmc.cpp"
526 }
527
528 static Code ag_rp_58(Code x, Code y) {
529 #line - "xvmc.syn"
530 return x.binop(VirtualMachine::GT,y);
531 #line - "xvmc.cpp"
532 }
533
534 static Code ag_rp_59(Code x, Code y) {
535 #line - "xvmc.syn"
536 return x.binop(VirtualMachine::GE,y);
537 #line - "xvmc.cpp"
538 }
539
540 static Code ag_rp_60(Code x, Code y) {
541 #line - "xvmc.syn"
542 return x.binop(VirtualMachine::LS,y);
543 #line - "xvmc.cpp"
544 }
545
546 static Code ag_rp_61(Code x, Code y) {
547 #line - "xvmc.syn"
548 return x.binop(VirtualMachine::RS,y);
549 #line - "xvmc.cpp"
550 }
551
552 static Code ag_rp_62(Code x, Code y) {
553 #line - "xvmc.syn"
554 return x.binop(VirtualMachine::ADD,y);
555 #line - "xvmc.cpp"
556 }
557
558 static Code ag_rp_63(Code x, Code y) {
559 #line - "xvmc.syn"
560 return x.binop(VirtualMachine::SUB,y);
561 #line - "xvmc.cpp"
562 }
563
564 static Code ag_rp_64(Code x, Code y) {
565 #line - "xvmc.syn"
566 return x.binop(VirtualMachine::MULT,y);
567 #line - "xvmc.cpp"
568 }
569
570 static Code ag_rp_65(Code x, Code y) {
571 #line - "xvmc.syn"
572 return x.binop(VirtualMachine::DIV,y);
573 #line - "xvmc.cpp"
574 }
575
576 static Code ag_rp_66(Code x, Code y) {
577 #line - "xvmc.syn"
578 return x.binop(VirtualMachine::MOD,y);
579 #line - "xvmc.cpp"
580 }
581
582 static Code ag_rp_67(int t, Code x) {
583 #line - "xvmc.syn"
584 return x.cast((VirtualMachine::Type::Id) t) << VirtualMachine::CAST << t;
585 #line - "xvmc.cpp"
586 }
587
588 static Code ag_rp_68(Code x) {
589 #line - "xvmc.syn"
590 return x << VirtualMachine::INCR;
591 #line - "xvmc.cpp"
592 }
593
594 static Code ag_rp_69(Code x) {
595 #line - "xvmc.syn"
596 return x << VirtualMachine::INCR;
597 #line - "xvmc.cpp"
598 }
599
600 static Code ag_rp_70(Code x) {
601 #line - "xvmc.syn"
602 return x << VirtualMachine::NEG;
603 #line - "xvmc.cpp"
604 }
605
606 static Code ag_rp_71(Code x) {
607 #line - "xvmc.syn"
608 return x;
609 #line - "xvmc.cpp"
610 }
611
612 static Code ag_rp_72(Code x) {
613 #line - "xvmc.syn"
614 return vm->list(stdout), x << VirtualMachine::NOT;
615 #line - "xvmc.cpp"
616 }
617
618 static Code ag_rp_73(Code x) {
619 #line - "xvmc.syn"
620 return x << VirtualMachine::COMPL;
621 #line - "xvmc.cpp"
622 }
623
624 static Code ag_rp_74(Code x, Code y) {
625 #line - "xvmc.syn"
626 return x.binop(VirtualMachine::POW,y);
627 #line - "xvmc.cpp"
628 }
629
630 static Code ag_rp_75(double x) {
631 #line - "xvmc.syn"
632 return vm->doubleList.push(x), Code(VirtualMachine::PUSHD).setType(&DoubleType::doubleType) << (int)(vm->doubleList.size() - 1);
633 #line - "xvmc.cpp"
634 }
635
636 static Code ag_rp_76(int x) {
637 #line - "xvmc.syn"
638 return Code(VirtualMachine::PUSHI).setType(&IntegerType::intType) << x;
639 #line - "xvmc.cpp"
640 }
641
642 static Code ag_rp_77(int k) {
643 #line - "xvmc.syn"
644 return Code(VirtualMachine::PUSHS).setType(&StringType::stringType) << k;
645 #line - "xvmc.cpp"
646 }
647
648 static Code ag_rp_78(Code k) {
649 #line - "xvmc.syn"
650 return k;
651 #line - "xvmc.cpp"
652 }
653
654 static Code ag_rp_79(Code k) {
655 #line - "xvmc.syn"
656 return k << VirtualMachine::PUSH << VirtualMachine::INCR << VirtualMachine::POP;
657 #line - "xvmc.cpp"
658 }
659
660 static Code ag_rp_80(Code k) {
661 #line - "xvmc.syn"
662 return k << VirtualMachine::PUSH << VirtualMachine::DECR << VirtualMachine::POP;
663 #line - "xvmc.cpp"
664 }
665
666 static Code ag_rp_81(int n, Code args) {
667 #line - "xvmc.syn"
668 return vm->invokeFunction(n, args);
669 #line - "xvmc.cpp"
670 }
671
672 static Code ag_rp_82(Code k, int n, Code args) {
673 #line - "xvmc.syn"
674 return vm->invokeMethod(k, n, args);
675 #line - "xvmc.cpp"
676 }
677
678 static Code ag_rp_83(Code x) {
679 #line - "xvmc.syn"
680 return x;
681 #line - "xvmc.cpp"
682 }
683
684 static double ag_rp_84(double x, int e) {
685 #line - "xvmc.syn"
686 return x*pow(10,e);
687 #line - "xvmc.cpp"
688 }
689
690 static double ag_rp_85(double x, int e) {
691 #line - "xvmc.syn"
692 return x*pow(10,-e);
693 #line - "xvmc.cpp"
694 }
695
696 static double ag_rp_86(int i, double f) {
697 #line - "xvmc.syn"
698 return i+f;
699 #line - "xvmc.cpp"
700 }
701
702 static double ag_rp_87(int i) {
703 #line - "xvmc.syn"
704 return i;
705 #line - "xvmc.cpp"
706 }
707
708 static double ag_rp_88(double f) {
709 #line - "xvmc.syn"
710 return f;
711 #line - "xvmc.cpp"
712 }
713
714 static int ag_rp_89(int d) {
715 #line - "xvmc.syn"
716 return d-'0';
717 #line - "xvmc.cpp"
718 }
719
720 static int ag_rp_90(int x, int d) {
721 #line - "xvmc.syn"
722 return 10*x + d-'0';
723 #line - "xvmc.cpp"
724 }
725
726 static double ag_rp_91(int d) {
727 #line - "xvmc.syn"
728 return (d-'0')/10.;
729 #line - "xvmc.cpp"
730 }
731
732 static double ag_rp_92(int d, double f) {
733 #line - "xvmc.syn"
734 return (d-'0' + f)/10.;
735 #line - "xvmc.cpp"
736 }
737
738 static int ag_rp_93(int d) {
739 #line - "xvmc.syn"
740 return d-'0';
741 #line - "xvmc.cpp"
742 }
743
744 static int ag_rp_94(int x, int d) {
745 #line - "xvmc.syn"
746 return 10*x + d-'0';
747 #line - "xvmc.cpp"
748 }
749
750 static int ag_rp_95(int k) {
751 #line - "xvmc.syn"
752 char *name = popString(k);
753 VirtualMachine::Type::Id id = VirtualMachine::Type::idType(name);
754 if (id != VirtualMachine::Type::UNDEFINED) return (int) id;
755 CHANGE_REDUCTION(variable_name);
756 return vm->locateVariable(name);
757
758 #line - "xvmc.cpp"
759 }
760
761 static int ag_rp_96(int c) {
762 #line - "xvmc.syn"
763 return pushChar(c), 1;
764 #line - "xvmc.cpp"
765 }
766
767 static int ag_rp_97(int k, int c) {
768 #line - "xvmc.syn"
769 return pushChar(c), k+1;
770 #line - "xvmc.cpp"
771 }
772
773 static int ag_rp_98(int c) {
774 #line - "xvmc.syn"
775 return c;
776 #line - "xvmc.cpp"
777 }
778
779 static int ag_rp_99(int k) {
780 #line - "xvmc.syn"
781 return vm->stringList.push(CharString(popString(k))), vm->stringList.size() - 1;
782 #line - "xvmc.cpp"
783 }
784
785 static int ag_rp_100(void) {
786 #line - "xvmc.syn"
787 return 0;
788 #line - "xvmc.cpp"
789 }
790
791 static int ag_rp_101(int k, int c) {
792 #line - "xvmc.syn"
793 return pushChar(c), k+1;
794 #line - "xvmc.cpp"
795 }
796
797 static int ag_rp_102(void) {
798 #line - "xvmc.syn"
799 return '\a';
800 #line - "xvmc.cpp"
801 }
802
803 static int ag_rp_103(void) {
804 #line - "xvmc.syn"
805 return '\b';
806 #line - "xvmc.cpp"
807 }
808
809 static int ag_rp_104(void) {
810 #line - "xvmc.syn"
811 return '\f';
812 #line - "xvmc.cpp"
813 }
814
815 static int ag_rp_105(void) {
816 #line - "xvmc.syn"
817 return '\n';
818 #line - "xvmc.cpp"
819 }
820
821 static int ag_rp_106(void) {
822 #line - "xvmc.syn"
823 return '\r';
824 #line - "xvmc.cpp"
825 }
826
827 static int ag_rp_107(void) {
828 #line - "xvmc.syn"
829 return '\t';
830 #line - "xvmc.cpp"
831 }
832
833 static int ag_rp_108(void) {
834 #line - "xvmc.syn"
835 return '\v';
836 #line - "xvmc.cpp"
837 }
838
839 static int ag_rp_109(void) {
840 #line - "xvmc.syn"
841 return '\\';
842 #line - "xvmc.cpp"
843 }
844
845 static int ag_rp_110(void) {
846 #line - "xvmc.syn"
847 return '\?';
848 #line - "xvmc.cpp"
849 }
850
851 static int ag_rp_111(void) {
852 #line - "xvmc.syn"
853 return '\'';
854 #line - "xvmc.cpp"
855 }
856
857 static int ag_rp_112(void) {
858 #line - "xvmc.syn"
859 return '"';
860 #line - "xvmc.cpp"
861 }
862
863 static int ag_rp_113(int d) {
864 #line - "xvmc.syn"
865 return d-'0';
866 #line - "xvmc.cpp"
867 }
868
869 static int ag_rp_114(int n, int d) {
870 #line - "xvmc.syn"
871 return 8*n + d-'0';
872 #line - "xvmc.cpp"
873 }
874
875 static int ag_rp_115(int n, int d) {
876 #line - "xvmc.syn"
877 return 8*n + d-'0';
878 #line - "xvmc.cpp"
879 }
880
881 static int ag_rp_116(int d) {
882 #line - "xvmc.syn"
883 return d;
884 #line - "xvmc.cpp"
885 }
886
887 static int ag_rp_117(int n, int d) {
888 #line - "xvmc.syn"
889 return 16*n + d;
890 #line - "xvmc.cpp"
891 }
892
893 static int ag_rp_118(int d) {
894 #line - "xvmc.syn"
895 return (d&7) + 9;
896 #line - "xvmc.cpp"
897 }
898
899
900 #define READ_COUNTS
901 #define WRITE_COUNTS
902 #undef V
903 #define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i]))
904 #undef VS
905 #define VS(i) (PCB).vs[(PCB).ssx + i]
906
907 #ifndef GET_CONTEXT
908 #define GET_CONTEXT CONTEXT = (PCB).input_context
909 #endif
910
911 typedef enum {
912 ag_action_1,
913 ag_action_2,
914 ag_action_3,
915 ag_action_4,
916 ag_action_5,
917 ag_action_6,
918 ag_action_7,
919 ag_action_8,
920 ag_action_9,
921 ag_action_10,
922 ag_action_11,
923 ag_action_12
924 } ag_parser_action;
925
926
927 #ifndef NULL_VALUE_INITIALIZER
928 #define NULL_VALUE_INITIALIZER = { 0 }
929 #endif
930
931 static vmCompile_vs_type const ag_null_value NULL_VALUE_INITIALIZER;
932
933 static const unsigned char ag_rpx[] = {
934 0, 1, 2, 0, 0, 0, 0, 3, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11,
935 12, 0, 0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 24, 25, 26,
936 27, 28, 29, 30, 31, 32, 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
937 44, 45, 0, 46, 47, 0, 48, 0, 49, 50, 0, 51, 0, 52, 0, 53, 0, 54,
938 55, 0, 56, 57, 58, 59, 0, 60, 61, 0, 62, 63, 0, 64, 65, 66, 0, 67,
939 0, 68, 69, 70, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
940 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 85, 86, 87,
941 88, 0, 0, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 0, 0, 99,100,101,
942 0, 0,102,103,104,105,106,107,108,109,110,111,112, 0, 0, 0, 0, 0,
943 113,114,115,116,117, 0,118
944 };
945
946 static const unsigned char ag_key_itt[] = {
947 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
948 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
949 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
950 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,
951 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
952 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
953 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
954 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
955 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
956 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
957 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
958 0
959 };
960
961 static const unsigned short ag_key_pt[] = {
962 0,164, 0,165, 0,166, 0,167, 0,168,0
963 };
964
965 static const unsigned char ag_key_ch[] = {
966 0, 42, 47,255, 43, 45, 47,100,102,105,119,255, 42,255, 38, 61,255, 42,
967 61,255, 43, 61,255, 45, 61,255, 42, 47, 61,255, 61,255, 60, 61,255, 61,
968 255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43, 45, 47, 60, 61, 62, 94,
969 100,101,102,105,119,124,255, 43, 45,100,102,105,119,255, 34, 39, 63, 92,
970 97, 98,102,110,114,116,118,120,255, 92,255, 42, 47,255, 60, 61,255, 61,
971 62,255, 33, 38, 42, 47, 60, 61, 62,124,255, 42, 47,255, 43, 45, 47,255,
972 42, 47,255, 60, 61,255, 61, 62,255, 33, 38, 42, 43, 45, 47, 60, 61, 62,
973 124,255, 60, 61,255, 61, 62,255, 33, 38, 42, 60, 61, 62,124,255, 43, 45,
974 255, 60, 61,255, 61, 62,255, 33, 38, 60, 61, 62,124,255, 33, 38, 60, 61,
975 62,124,255, 33, 38, 61,124,255, 38,124,255, 38,255, 42, 47,255, 47,255,
976 124,255, 38, 61,255, 42, 61,255, 43, 61,255, 45, 61,255, 42, 47, 61,255,
977 61,255, 60, 61,255, 61,255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43,
978 45, 47, 60, 61, 62, 94,124,255, 42, 47,255, 43, 45, 47,100,101,102,105,
979 119,255, 38, 61,255, 42, 61,255, 43, 61,255, 45, 61,255, 61,255, 60, 61,
980 255, 61,255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43, 45, 47, 60, 61,
981 62, 94,124,255, 60, 61,255, 61, 62,255, 33, 38, 42, 43, 45, 60, 61, 62,
982 124,255, 43, 45,100,101,102,105,119,255,119,255, 42, 47,255, 60, 61,255,
983 61, 62,255, 33, 38, 42, 43, 45, 47, 60, 61, 62,100,102,105,119,124,255
984 };
985
986 static const unsigned char ag_key_act[] = {
987 0,0,0,4,3,3,2,7,7,7,7,4,3,4,0,0,4,0,0,4,0,0,4,0,0,4,0,0,0,4,0,4,1,0,4,
988 0,4,0,1,4,0,0,4,3,3,2,2,2,2,2,2,3,2,3,7,7,7,7,7,2,4,3,3,7,7,7,7,4,0,0,
989 0,0,0,0,0,0,0,0,0,0,4,2,4,0,0,4,0,0,4,0,0,4,3,3,3,2,2,3,2,3,4,0,0,4,3,
990 3,2,4,0,0,4,0,0,4,0,0,4,3,3,3,3,3,2,2,3,2,3,4,0,0,4,0,0,4,3,3,3,2,3,2,
991 3,4,3,3,4,0,0,4,0,0,4,3,3,2,3,2,3,4,3,3,3,3,3,3,4,3,3,3,3,4,3,3,4,3,4,
992 0,0,4,2,4,3,4,0,0,4,0,0,4,0,0,4,0,0,4,0,0,0,4,0,4,1,0,4,0,4,0,1,4,0,0,
993 4,3,3,2,2,2,2,2,2,3,2,3,2,4,0,0,4,3,3,2,7,7,7,7,7,4,0,0,4,0,0,4,0,0,4,
994 0,0,4,0,4,1,0,4,0,4,0,1,4,0,0,4,3,3,2,2,2,2,3,2,3,2,3,2,4,0,0,4,0,0,4,
995 3,3,3,3,3,2,3,2,3,4,3,3,7,7,7,7,7,4,7,4,0,0,4,0,0,4,0,0,4,3,3,3,3,3,2,
996 2,3,2,7,7,7,7,3,4
997 };
998
999 static const unsigned char ag_key_parm[] = {
1000 0, 98,103, 0,199,200, 0, 0, 2, 8, 4, 0,102, 0,182,175, 0,203,
1001 171, 0,199,169, 0,200,170, 0, 98,103,172, 0,177, 0,192,189, 0,178,
1002 0,191,193, 0,174,181, 0,187,173, 0, 0, 0, 0, 0, 0,186, 0,176,
1003 0, 6, 2, 8, 4, 0, 0,199,200, 0, 2, 8, 4, 0,135,134,133,132,
1004 125,126,127,128,129,130,131,143, 0, 0, 0, 98,103, 0,192,189, 0,191,
1005 193, 0,187,182,203, 0, 0,186, 0,181, 0, 98,103, 0,199,200, 0, 0,
1006 98,103, 0,192,189, 0,191,193, 0,187,182,203,199,200, 0, 0,186, 0,
1007 181, 0,192,189, 0,191,193, 0,187,182,203, 0,186, 0,181, 0,199,200,
1008 0,192,189, 0,191,193, 0,187,182, 0,186, 0,181, 0,187,182,189,186,
1009 191,181, 0,187,182,186,181, 0,182,181, 0,182, 0, 98,103, 0, 0, 0,
1010 181, 0,182,175, 0,203,171, 0,199,169, 0,200,170, 0, 98,103,172, 0,
1011 177, 0,192,189, 0,178, 0,191,193, 0,174,181, 0,187,173, 0, 0, 0,
1012 0, 0, 0,186, 0,176, 0, 0, 98,103, 0,199,200, 0, 0, 6, 2, 8,
1013 4, 0,182,175, 0,203,171, 0,199,169, 0,200,170, 0,177, 0,192,189,
1014 0,178, 0,191,193, 0,174,181, 0,187,173, 0, 0, 0, 0,172, 0,186,
1015 0,176, 0, 0,192,189, 0,191,193, 0,187,182,203,199,200, 0,186, 0,
1016 181, 0,199,200, 0, 6, 2, 8, 4, 0, 4, 0, 98,103, 0,192,189, 0,
1017 191,193, 0,187,182,203,199,200, 0, 0,186, 0, 0, 2, 8, 4,181, 0
1018 };
1019
1020 static const unsigned short ag_key_jmp[] = {
1021 0, 0, 0, 0, 0, 2, 1, 4, 6, 9, 11, 0, 16, 0, 0, 0, 0, 0,
1022 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0,
1023 0, 0, 35, 0, 0, 0, 0, 18, 20, 14, 17, 20, 23, 26, 32, 22, 37, 24,
1024 26, 28, 32, 35, 37, 40, 0, 42, 44, 46, 48, 51, 53, 0, 0, 0, 0, 0,
1025 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0,
1026 0, 0, 58, 60, 62, 83, 86, 64, 89, 66, 0, 0, 0, 0, 68, 70,101, 0,
1027 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 74, 76, 78, 80,108,111, 82,114,
1028 84, 0, 0, 0, 0, 0, 0, 0, 86, 88, 90,128, 92,131, 94, 0, 96, 98,
1029 0, 0, 0, 0, 0, 0, 0,100,102,145,104,148,106, 0,108,110,112,114,
1030 116,118, 0,120,122,124,126, 0,128,130, 0,132, 0, 0, 0, 0,175, 0,
1031 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1032 0, 0,198, 0, 0, 0, 0, 0,203, 0, 0, 0, 0,136,138,182,185,188,
1033 191,194,200,140,205,142,208, 0, 0, 0, 0,144,146,224,148,150,154,157,
1034 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248, 0,
1035 0, 0, 0, 0,253, 0, 0, 0, 0,164,166,236,239,242,245,168,250,170,
1036 255,172,258, 0, 0, 0, 0, 0, 0, 0,174,176,178,180,182,274,184,277,
1037 186, 0,188,190,192,194,198,201,203, 0,208, 0, 0, 0, 0, 0, 0, 0,
1038 0, 0, 0,213,215,217,219,221,300,303,223,306,225,227,230,232,237, 0
1039 };
1040
1041 static const unsigned short ag_key_index[] = {
1042 4, 0, 12, 43, 61, 0, 0, 12, 12, 81, 0, 81, 92, 92, 92, 92, 92,104,
1043 104,104,104,117,117,134,104,142,142,142,142,142,142,142,151,151,151,158,
1044 165,170,170,173,170,170,178,178,180,180,211, 0,178, 0, 4, 4,227,261,
1045 261, 61, 0, 61, 61, 61, 0, 0, 0, 0, 61, 0, 0, 81, 81, 81, 0, 92,
1046 92, 0,104,142,142,280, 0, 0,104,142,104,142,104,142,142,142,104,142,
1047 104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,
1048 104,142,104,142,104,142,104,142,142,142,178, 0,104,142,104,142,104,142,
1049 104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,
1050 142,290,142,298, 61,227, 0,211,178,178,178,178,104,178,178,104,309,178,
1051 178,178, 0, 0, 0, 0, 0,142,151,151,151,151,151,151,151,151,158,158,
1052 165,170,170,170,170, 0, 0, 0, 0, 0, 0, 0, 4, 61, 0, 0, 0, 0,
1053 142,142,142, 0, 92, 92,142,142,142,142,142, 0, 0, 0, 0, 0,142, 0,
1054 61
1055 };
1056
1057 static const unsigned char ag_key_ends[] = {
1058 43,0, 45,0, 111,0, 111,114,0, 102,0, 104,105,108,101,0, 47,0,
1059 61,0, 61,0, 61,0, 61,0, 111,0, 108,115,101,0, 111,114,0, 102,0,
1060 104,105,108,101,0, 43,0, 45,0, 111,0, 111,114,0, 102,0,
1061 104,105,108,101,0, 61,0, 38,0, 42,0, 61,0, 124,0, 43,0, 45,0,
1062 61,0, 38,0, 42,0, 43,0, 45,0, 61,0, 124,0, 61,0, 38,0, 42,0,
1063 61,0, 124,0, 43,0, 45,0, 61,0, 38,0, 61,0, 124,0, 61,0,
1064 38,0, 61,0, 61,0, 61,0, 124,0, 61,0, 38,0, 61,0, 124,0,
1065 38,0, 124,0, 38,0, 124,0, 61,0, 61,0, 61,0, 61,0, 43,0,
1066 45,0, 111,0, 108,115,101,0, 111,114,0, 102,0, 104,105,108,101,0,
1067 61,0, 61,0, 61,0, 61,0, 61,0, 61,0, 38,0, 42,0, 43,0, 45,0,
1068 61,0, 124,0, 43,0, 45,0, 111,0, 108,115,101,0, 111,114,0,
1069 102,0, 104,105,108,101,0, 104,105,108,101,0, 61,0, 38,0, 42,0,
1070 43,0, 45,0, 61,0, 111,0, 111,114,0, 102,0, 104,105,108,101,0,
1071 124,0,
1072 };
1073
1074 #define AG_TCV(x) ag_tcv[(x)]
1075
1076 static const unsigned char ag_tcv[] = {
1077 7,208,208,208,208,208,208,208,208,151,107,151,151,151,208,208,208,208,
1078 208,208,208,208,208,208,208,208,208,208,208,208,208,208,151,201,209,208,
1079 208,198,185,210,160,159,196,194,161,195,206,197,211,211,211,211,211,211,
1080 211,211,212,212,179,154,188,156,190,180,208,213,213,213,213,214,213,215,
1081 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
1082 215,158,216,157,184,215,208,213,213,213,213,214,213,215,215,215,215,215,
1083 215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,163,183,162,
1084 202,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
1085 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
1086 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
1087 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
1088 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
1089 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
1090 208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
1091 208,208,208,208
1092 };
1093
1094 #ifndef SYNTAX_ERROR
1095 #define SYNTAX_ERROR fprintf(stderr,"%s, line %d, column %d\n", \
1096 (PCB).error_message, (PCB).line, (PCB).column)
1097 #endif
1098
1099 #ifndef FIRST_LINE
1100 #define FIRST_LINE 1
1101 #endif
1102
1103 #ifndef FIRST_COLUMN
1104 #define FIRST_COLUMN 1
1105 #endif
1106
1107 #ifndef PARSER_STACK_OVERFLOW
1108 #define PARSER_STACK_OVERFLOW {fprintf(stderr, \
1109 "\nParser stack overflow, line %d, column %d\n",\
1110 (PCB).line, (PCB).column);}
1111 #endif
1112
1113 #ifndef REDUCTION_TOKEN_ERROR
1114 #define REDUCTION_TOKEN_ERROR {fprintf(stderr, \
1115 "\nReduction token error, line %d, column %d\n", \
1116 (PCB).line, (PCB).column);}
1117 #endif
1118
1119
1120 #ifndef INPUT_CODE
1121 #define INPUT_CODE(T) (T)
1122 #endif
1123
1124 typedef enum
1125 {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key,
1126 ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words;
1127
1128 static void ag_get_key_word(int ag_k) {
1129 int ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
1130 const unsigned char *ag_p;
1131 int ag_ch;
1132 while (1) {
1133 switch (ag_key_act[ag_k]) {
1134 case ag_cf_end_key: {
1135 const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
1136 do {
1137 if ((ag_ch = *sp++) == 0) {
1138 int ag_k1 = ag_key_parm[ag_k];
1139 int ag_k2 = ag_key_pt[ag_k1];
1140 if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) goto ag_fail;
1141 (PCB).token_number = (vmCompile_token_type) ag_key_pt[ag_k1 + 1];
1142 return;
1143 }
1144 } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
1145 goto ag_fail;
1146 }
1147 case ag_end_key: {
1148 const unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
1149 do {
1150 if ((ag_ch = *sp++) == 0) {
1151 (PCB).token_number = (vmCompile_token_type) ag_key_parm[ag_k];
1152 return;
1153 }
1154 } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
1155 }
1156 case ag_no_match_key:
1157 ag_fail:
1158 (PCB).la_ptr = (PCB).pointer + ag_save;
1159 return;
1160 case ag_cf_set_key: {
1161 int ag_k1 = ag_key_parm[ag_k];
1162 int ag_k2 = ag_key_pt[ag_k1];
1163 ag_k = ag_key_jmp[ag_k];
1164 if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) break;
1165 ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
1166 (PCB).token_number = (vmCompile_token_type) ag_key_pt[ag_k1+1];
1167 break;
1168 }
1169 case ag_set_key:
1170 ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
1171 (PCB).token_number = (vmCompile_token_type) ag_key_parm[ag_k];
1172 case ag_jmp_key:
1173 ag_k = ag_key_jmp[ag_k];
1174 break;
1175 case ag_accept_key:
1176 (PCB).token_number = (vmCompile_token_type) ag_key_parm[ag_k];
1177 return;
1178 case ag_cf_accept_key: {
1179 int ag_k1 = ag_key_parm[ag_k];
1180 int ag_k2 = ag_key_pt[ag_k1];
1181 if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)])
1182 (PCB).la_ptr = (PCB).pointer + ag_save;
1183 else (PCB).token_number = (vmCompile_token_type) ag_key_pt[ag_k1+1];
1184 return;
1185 }
1186 }
1187 ag_ch = CONVERT_CASE(*(PCB).la_ptr++);
1188 ag_p = &ag_key_ch[ag_k];
1189 if (ag_ch <= 255) while (*ag_p < ag_ch) ag_p++;
1190 if (ag_ch > 255 || *ag_p != ag_ch) {
1191 (PCB).la_ptr = (PCB).pointer + ag_save;
1192 return;
1193 }
1194 ag_k = (int) (ag_p - ag_key_ch);
1195 }
1196 }
1197
1198
1199 #ifndef AG_NEWLINE
1200 #define AG_NEWLINE 10
1201 #endif
1202
1203 #ifndef AG_RETURN
1204 #define AG_RETURN 13
1205 #endif
1206
1207 #ifndef AG_FORMFEED
1208 #define AG_FORMFEED 12
1209 #endif
1210
1211 #ifndef AG_TABCHAR
1212 #define AG_TABCHAR 9
1213 #endif
1214
1215 static void ag_track(void) {
1216 int ag_k = (int) ((PCB).la_ptr - (PCB).pointer);
1217 while (ag_k--) {
1218 switch (*(PCB).pointer++) {
1219 case AG_NEWLINE:
1220 (PCB).column = 1, (PCB).line++;
1221 case AG_RETURN:
1222 case AG_FORMFEED:
1223 break;
1224 case AG_TABCHAR:
1225 (PCB).column += (TAB_SPACING) - ((PCB).column - 1) % (TAB_SPACING);
1226 break;
1227 default:
1228 (PCB).column++;
1229 }
1230 }
1231 }
1232
1233
1234 static void ag_prot(void) {
1235 int ag_k;
1236 ag_k = 128 - ++(PCB).btsx;
1237 if (ag_k <= (PCB).ssx) {
1238 (PCB).exit_flag = AG_STACK_ERROR_CODE;
1239 PARSER_STACK_OVERFLOW;
1240 return;
1241 }
1242 (PCB).bts[(PCB).btsx] = (PCB).sn;
1243 (PCB).bts[ag_k] = (PCB).ssx;
1244 (PCB).vs[ag_k] = (PCB).vs[(PCB).ssx];
1245 (PCB).ss[ag_k] = (PCB).ss[(PCB).ssx];
1246 }
1247
1248 static void ag_undo(void) {
1249 if ((PCB).drt == -1) return;
1250 while ((PCB).btsx) {
1251 int ag_k = 128 - (PCB).btsx;
1252 (PCB).sn = (PCB).bts[(PCB).btsx--];
1253 (PCB).ssx = (PCB).bts[ag_k];
1254 (PCB).vs[(PCB).ssx] = (PCB).vs[ag_k];
1255 (PCB).ss[(PCB).ssx] = (PCB).ss[ag_k];
1256 }
1257 (PCB).token_number = (vmCompile_token_type) (PCB).drt;
1258 (PCB).ssx = (PCB).dssx;
1259 (PCB).sn = (PCB).dsn;
1260 (PCB).drt = -1;
1261 }
1262
1263
1264
1265 static const int ag_rtt[] = {
1266 17, 53, 0
1267 };
1268
1269 static const unsigned char ag_tstt[] = {
1270 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
1271 160,154,151,107,103,98,7,0,1,152,153,
1272 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1273 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,0,105,
1274 106,
1275 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1276 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,102,0,
1277 100,101,
1278 151,107,103,98,0,1,
1279 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
1280 160,154,9,7,0,2,3,4,5,6,8,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38,
1281 40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,
1282 92,93,95,108,112,114,121,155,204,205,207,217,
1283 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1284 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,0,
1285 107,0,
1286 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1287 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,0,
1288 102,0,
1289 216,215,214,213,212,211,209,208,206,202,201,198,197,196,195,194,190,188,185,
1290 184,183,180,179,163,162,161,160,159,158,157,156,154,151,143,135,134,133,
1291 132,131,130,129,128,127,126,125,0,118,120,136,137,138,139,140,
1292 212,211,0,113,114,
1293 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1294 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,143,135,134,
1295 133,132,131,130,129,128,127,126,125,0,120,123,136,137,138,139,140,
1296 203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,
1297 180,179,161,159,157,154,151,107,103,98,0,1,152,153,
1298 212,211,206,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,
1299 183,182,181,180,179,161,159,157,154,151,107,103,98,0,1,114,152,153,
1300 214,0,
1301 203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,
1302 180,179,161,159,157,154,151,107,103,98,0,1,152,153,
1303 203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,
1304 180,179,161,159,157,154,151,107,103,98,0,1,152,153,
1305 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1306 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1307 103,98,7,0,1,152,153,
1308 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1309 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1310 103,98,7,0,1,152,153,
1311 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1312 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1313 103,98,7,0,1,152,153,
1314 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1315 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1316 103,98,7,0,1,152,153,
1317 215,214,213,212,211,210,209,206,203,202,201,200,199,198,197,196,195,194,193,
1318 192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,160,159,157,
1319 154,151,107,103,98,0,1,152,153,
1320 215,214,213,212,211,210,209,206,203,202,201,200,199,198,197,196,195,194,193,
1321 192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,160,159,157,
1322 154,151,107,103,98,0,1,152,153,
1323 203,0,94,
1324 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1325 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1326 103,98,7,0,1,152,153,
1327 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1328 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1329 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1330 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1331 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1332 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1333 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1334 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1335 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1336 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1337 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1338 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1339 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,17,19,
1340 22,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,
1341 92,93,95,108,112,114,121,155,204,205,207,217,
1342 198,197,196,0,84,85,86,
1343 195,194,0,81,82,
1344 193,192,0,78,79,
1345 191,190,189,188,0,73,74,75,76,
1346 187,186,0,70,71,
1347 185,0,68,
1348 184,0,66,
1349 182,0,62,
1350 183,0,64,
1351 182,181,180,179,161,159,157,154,0,
1352 160,151,107,103,98,0,1,152,153,
1353 160,151,107,103,98,0,1,152,153,
1354 181,180,0,56,59,
1355 181,180,179,161,159,157,154,0,
1356 215,214,213,212,211,206,203,200,199,198,197,196,195,194,193,192,191,190,189,
1357 188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,
1358 170,169,161,160,159,158,157,156,154,151,107,103,98,0,1,152,153,
1359 160,0,22,
1360 160,151,107,103,98,0,1,152,153,
1361 160,0,22,
1362 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
1363 160,154,151,107,103,98,0,1,152,153,
1364 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1365 190,188,185,184,183,180,179,168,166,165,164,163,162,161,160,159,158,157,
1366 156,154,151,107,103,98,7,0,1,152,153,
1367 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,167,166,165,164,
1368 163,162,160,159,154,151,107,103,98,7,0,1,152,153,
1369 206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,
1370 183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,161,159,158,
1371 157,156,154,0,18,20,43,44,45,46,47,48,49,50,51,52,89,90,96,
1372 215,214,213,206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187,
1373 186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,
1374 161,160,159,158,157,156,154,0,22,
1375 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
1376 160,154,0,2,3,4,5,14,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,
1377 58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,
1378 114,121,155,204,205,207,217,
1379 160,0,22,
1380 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
1381 160,154,0,2,3,4,5,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,58,
1382 60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,
1383 121,155,204,205,207,217,
1384 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
1385 160,154,0,2,3,4,5,14,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,
1386 58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,
1387 114,121,155,204,205,207,217,
1388 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
1389 162,160,154,9,0,2,3,4,5,8,13,14,15,16,17,19,22,27,28,29,30,31,32,33,37,
1390 38,40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,
1391 91,92,93,95,108,112,114,121,155,204,205,207,217,
1392 154,0,16,
1393 215,214,213,0,3,155,
1394 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1395 185,184,183,180,179,163,161,160,159,158,157,156,154,0,11,12,18,20,21,22,
1396 24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,141,
1397 142,147,148,149,150,
1398 154,0,16,
1399 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
1400 160,154,9,7,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38,40,
1401 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1402 93,95,108,112,114,121,155,204,205,207,217,
1403 211,0,
1404 214,213,212,211,0,144,
1405 211,0,
1406 211,0,
1407 214,213,212,211,0,144,
1408 210,0,
1409 214,212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,
1410 183,182,181,180,179,161,159,157,154,151,107,103,98,0,113,114,
1411 214,212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,
1412 183,182,181,180,179,161,159,157,154,151,107,103,98,0,113,114,
1413 212,211,195,194,0,110,
1414 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1415 0,1,152,153,
1416 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1417 53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1418 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1419 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1420 93,95,108,112,114,121,155,204,205,207,217,
1421 206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,
1422 183,182,181,180,179,161,159,158,157,154,0,20,89,90,96,
1423 159,0,24,
1424 159,0,24,
1425 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1426 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1427 103,98,7,0,1,152,153,
1428 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1429 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1430 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1431 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1432 103,98,7,0,1,152,153,
1433 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1434 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1435 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1436 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1437 103,98,7,0,1,152,153,
1438 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1439 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1440 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1441 53,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,
1442 217,
1443 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1444 53,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,
1445 217,
1446 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1447 0,1,152,153,
1448 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1449 53,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,
1450 207,217,
1451 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1452 0,1,152,153,
1453 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1454 53,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,
1455 207,217,
1456 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1457 0,1,152,153,
1458 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1459 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,
1460 205,207,217,
1461 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1462 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1463 103,98,7,0,1,152,153,
1464 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1465 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,
1466 205,207,217,
1467 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1468 0,1,152,153,
1469 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1470 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,
1471 205,207,217,
1472 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1473 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1474 103,98,7,0,1,152,153,
1475 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1476 53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,
1477 205,207,217,
1478 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1479 0,1,152,153,
1480 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1481 53,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,
1482 205,207,217,
1483 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1484 0,1,152,153,
1485 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1486 53,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,
1487 205,207,217,
1488 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1489 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1490 103,98,7,0,1,152,153,
1491 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1492 53,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,
1493 204,205,207,217,
1494 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1495 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1496 103,98,7,0,1,152,153,
1497 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1498 53,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,
1499 155,204,205,207,217,
1500 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1501 0,1,152,153,
1502 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1503 53,60,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,
1504 121,155,204,205,207,217,
1505 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1506 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1507 103,98,7,0,1,152,153,
1508 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1509 53,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,
1510 121,155,204,205,207,217,
1511 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1512 0,1,152,153,
1513 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1514 53,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,
1515 112,114,121,155,204,205,207,217,
1516 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1517 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1518 103,98,7,0,1,152,153,
1519 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1520 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1521 93,95,108,112,114,121,155,204,205,207,217,
1522 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1523 35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,
1524 92,93,95,108,112,114,121,155,204,205,207,217,
1525 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1526 35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,
1527 92,93,95,108,112,114,121,155,204,205,207,217,
1528 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1529 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
1530 7,0,1,152,153,
1531 215,214,213,0,3,155,
1532 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1533 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1534 103,98,7,0,1,152,153,
1535 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1536 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1537 93,95,108,112,114,121,155,204,205,207,217,
1538 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1539 0,1,152,153,
1540 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1541 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1542 93,95,108,112,114,121,155,204,205,207,217,
1543 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1544 0,1,152,153,
1545 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1546 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1547 93,95,108,112,114,121,155,204,205,207,217,
1548 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1549 0,1,152,153,
1550 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1551 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1552 93,95,108,112,114,121,155,204,205,207,217,
1553 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1554 0,1,152,153,
1555 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1556 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1557 93,95,108,112,114,121,155,204,205,207,217,
1558 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1559 0,1,152,153,
1560 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1561 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1562 93,95,108,112,114,121,155,204,205,207,217,
1563 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1564 0,1,152,153,
1565 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1566 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1567 93,95,108,112,114,121,155,204,205,207,217,
1568 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1569 0,1,152,153,
1570 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1571 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1572 93,95,108,112,114,121,155,204,205,207,217,
1573 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1574 0,1,152,153,
1575 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1576 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1577 93,95,108,112,114,121,155,204,205,207,217,
1578 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1579 0,1,152,153,
1580 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1581 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1582 93,95,108,112,114,121,155,204,205,207,217,
1583 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
1584 0,1,152,153,
1585 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1586 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1587 93,95,108,112,114,121,155,204,205,207,217,
1588 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1589 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1590 103,98,7,0,1,152,153,
1591 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1592 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1593 93,95,108,112,114,121,155,204,205,207,217,
1594 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5,
1595 19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,
1596 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1597 167,0,39,
1598 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,154,0,2,3,4,5,
1599 19,22,34,36,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,
1600 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1601 166,0,32,37,
1602 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
1603 162,160,154,9,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,30,31,32,33,37,38,
1604 40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,
1605 92,93,95,108,112,114,121,155,204,205,207,217,
1606 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,167,166,165,164,
1607 163,162,160,154,151,107,103,98,7,0,1,152,153,
1608 160,158,156,154,0,18,20,22,
1609 216,215,214,213,212,211,210,209,208,206,203,202,201,200,199,198,197,196,195,
1610 194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177,
1611 176,175,174,173,172,171,170,169,163,162,161,160,159,158,157,156,154,151,
1612 107,103,98,7,0,1,152,153,
1613 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1614 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
1615 7,0,1,152,153,
1616 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1617 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
1618 7,0,1,152,153,
1619 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1620 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
1621 7,0,1,152,153,
1622 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1623 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
1624 7,0,1,152,153,
1625 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1626 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1627 103,98,7,0,1,152,153,
1628 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1629 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
1630 7,0,1,152,153,
1631 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1632 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
1633 7,0,1,152,153,
1634 216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
1635 190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
1636 103,98,7,0,1,152,153,
1637 216,215,214,213,212,211,210,209,208,206,203,202,201,200,199,198,197,196,195,
1638 194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,168,166,
1639 165,164,163,162,161,160,159,158,157,156,154,151,107,103,98,7,0,1,152,
1640 153,
1641 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1642 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
1643 7,0,1,152,153,
1644 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1645 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
1646 7,0,1,152,153,
1647 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1648 185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
1649 7,0,1,152,153,
1650 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1651 185,184,183,180,179,163,161,160,159,158,157,156,0,18,20,21,22,24,26,29,
1652 56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,141,142,147,
1653 148,149,150,
1654 154,0,16,
1655 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1656 185,184,183,180,179,163,161,160,159,158,157,156,154,7,0,11,12,18,20,21,
1657 22,24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,
1658 141,142,147,148,149,150,
1659 212,211,0,111,114,
1660 212,211,0,111,114,
1661 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
1662 53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1663 198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,
1664 179,161,159,157,154,0,84,85,86,
1665 198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,
1666 179,161,159,157,154,0,84,85,86,
1667 195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,
1668 157,154,0,81,82,
1669 195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,
1670 157,154,0,81,82,
1671 193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,
1672 0,78,79,
1673 193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,
1674 0,78,79,
1675 193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,
1676 0,78,79,
1677 193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,
1678 0,78,79,
1679 191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,0,73,74,
1680 75,76,
1681 191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,0,73,74,
1682 75,76,
1683 187,186,185,184,183,182,181,180,179,161,159,157,154,0,70,71,
1684 185,184,183,182,181,180,179,161,159,157,154,0,68,
1685 183,182,181,180,179,161,159,157,154,0,64,
1686 184,183,182,181,180,179,161,159,157,154,0,66,
1687 182,181,180,179,161,159,157,154,0,
1688 179,0,57,
1689 159,0,24,
1690 159,0,24,
1691 160,0,22,
1692 157,0,21,
1693 161,159,0,26,
1694 159,0,24,
1695 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
1696 160,154,151,107,103,98,0,1,152,153,
1697 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
1698 160,154,9,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38,40,41,
1699 42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,
1700 95,108,112,114,121,155,204,205,207,217,
1701 161,0,26,
1702 154,0,16,
1703 154,0,16,
1704 216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
1705 185,184,183,180,179,163,162,161,160,159,158,157,156,154,0,11,12,18,20,
1706 21,22,24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,
1707 141,142,147,148,149,150,
1708 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5,
1709 19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,
1710 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1711 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1712 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1713 93,95,108,112,114,121,155,204,205,207,217,
1714 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1715 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1716 93,95,108,112,114,121,155,204,205,207,217,
1717 154,7,0,16,
1718 212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,
1719 182,181,180,179,161,159,157,154,151,107,103,98,0,114,
1720 212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,
1721 182,181,180,179,161,159,157,154,151,107,103,98,0,114,
1722 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,41,
1723 42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,
1724 95,108,112,114,121,155,204,205,207,217,
1725 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5,
1726 19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,
1727 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1728 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1729 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1730 93,95,108,112,114,121,155,204,205,207,217,
1731 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1732 41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
1733 93,95,108,112,114,121,155,204,205,207,217,
1734 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
1735 35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,
1736 92,93,95,108,112,114,121,155,204,205,207,217,
1737 162,154,0,16,30,
1738 159,0,24,
1739 157,0,21,
1740 159,0,24,
1741 154,0,16,
1742 215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5,
1743 19,22,34,36,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,
1744 89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
1745 159,0,24,
1746 215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
1747 160,154,0,2,3,4,5,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,58,
1748 60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,
1749 121,155,204,205,207,217,
1750
1751 };
1752
1753
1754 static unsigned const char ag_astt[7073] = {
1755 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,1,1,1,8,7,1,1,1,1,1,1,1,1,1,1,
1756 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,7,1,1,1,1,1,1,1,1,
1757 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,7,1,1,9,9,1,1,
1758 5,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,1,2,2,0,1,2,2,1,2,1,
1759 1,1,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
1760 1,2,2,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
1761 9,9,9,9,9,9,5,3,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
1762 9,9,9,9,9,9,9,5,3,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1763 1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,7,2,1,1,10,10,10,
1764 10,10,10,2,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
1765 10,10,10,10,10,1,2,2,2,2,2,2,2,2,2,2,2,7,2,2,2,1,1,1,2,5,5,5,5,5,5,5,5,5,5,
1766 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,10,10,1,5,5,5,5,5,5,5,5,5,5,
1767 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,2,1,3,1,5,5,5,5,5,5,5,5,5,5,5,5,
1768 5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1769 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1770 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,
1771 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,
1772 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,
1773 1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1774 1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1775 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1776 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,1,5,1,5,5,5,5,5,5,5,
1777 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,
1778 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,
1779 1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,
1780 2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,
1781 1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,
1782 2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,
1783 1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,
1784 1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,
1785 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1786 1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,1,1,1,1,5,1,1,1,1,1,1,5,1,
1787 1,1,1,1,1,5,1,1,1,5,1,1,5,1,1,7,1,1,5,1,4,5,5,5,5,5,5,5,7,5,1,1,1,1,7,1,1,
1788 3,5,1,1,1,1,7,1,1,3,1,1,7,1,1,4,4,5,5,5,5,5,7,10,10,10,10,10,5,5,5,5,5,5,5,
1789 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,
1790 1,7,1,1,3,1,7,1,5,1,1,1,1,7,1,1,3,1,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1791 5,5,5,5,1,1,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1792 5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1793 5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,1,4,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
1794 4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,4,4,1,4,1,4,7,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
1795 1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
1796 4,4,1,4,4,4,4,4,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2,
1797 2,1,1,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1798 2,1,2,2,1,1,1,1,1,1,1,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,
1799 2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1800 1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,
1801 2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1802 1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,
1803 1,2,2,1,2,2,1,2,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,
1804 1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,7,2,2,2,2,7,1,1,1,1,1,1,1,1,1,1,1,
1805 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,7,1,1,1,1,1,1,1,1,1,1,1,1,1,
1806 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,
1807 1,1,1,1,1,1,1,1,2,7,2,1,2,2,2,2,1,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,
1808 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,7,2,2,2,2,7,2,2,
1809 5,2,5,2,2,10,10,5,2,2,7,4,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
1810 4,4,4,4,4,4,4,7,2,1,4,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
1811 4,4,4,4,4,7,2,1,8,8,1,1,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,
1812 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,
1813 1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,2,1,1,1,1,1,1,1,
1814 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,4,1,1,4,4,4,4,4,4,4,4,
1815 4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,4,4,7,1,2,2,1,1,7,2,1,7,1,5,5,5,5,5,5,5,5,5,
1816 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,
1817 2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1,
1818 1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1819 5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,
1820 2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1821 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,
1822 1,1,7,2,1,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,
1823 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,
1824 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,
1825 2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,
1826 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,
1827 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,
1828 1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,
1829 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,
1830 2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,
1831 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,
1832 2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,
1833 1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,
1834 1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,
1835 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,
1836 1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,
1837 1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,
1838 1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,
1839 1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,
1840 2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
1841 1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1842 5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,
1843 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,
1844 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,
1845 2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
1846 1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,
1847 1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
1848 1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1849 5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,
1850 1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,
1851 5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,
1852 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,
1853 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,
1854 3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,
1855 1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,
1856 2,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,
1857 1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,
1858 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,
1859 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,7,1,1,
1860 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,
1861 1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,2,1,1,1,1,1,
1862 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,
1863 5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,
1864 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,
1865 5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,
1866 2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,
1867 1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,
1868 1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,
1869 2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,
1870 2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1871 1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,
1872 2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,
1873 1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,
1874 1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,
1875 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,
1876 5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,
1877 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,
1878 5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,
1879 2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,
1880 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,
1881 1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,
1882 2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,
1883 1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1884 1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1885 5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,
1886 1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,
1887 1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1,
1888 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,5,1,2,2,2,2,2,1,2,1,
1889 1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1890 1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,7,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,
1891 1,1,1,1,1,7,2,1,2,2,2,2,1,2,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,
1892 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,
1893 5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,1,1,1,4,7,1,1,1,5,5,5,5,5,5,5,5,5,
1894 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1895 5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1896 5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1897 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,
1898 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,
1899 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,
1900 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,
1901 1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1902 5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1903 5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1904 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,
1905 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,
1906 1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1907 5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1908 5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
1909 5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1910 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
1911 3,3,3,3,3,3,3,3,3,3,3,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1912 1,1,1,1,1,1,1,1,8,8,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1913 1,1,1,1,1,1,1,2,2,7,1,2,2,2,7,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,
1914 1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,
1915 4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
1916 4,7,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,
1917 4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,
1918 1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,
1919 4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,4,4,4,
1920 4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,
1921 1,1,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,4,4,4,4,4,4,4,4,4,4,7,1,1,4,4,4,4,4,4,4,
1922 4,7,1,1,4,4,4,4,4,4,4,4,4,7,1,4,4,4,4,4,4,4,4,7,1,7,1,1,7,2,1,7,2,1,7,1,1,
1923 7,2,1,4,7,1,1,7,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,
1924 3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2,2,1,2,1,1,1,2,2,
1925 1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,
1926 1,1,1,1,1,1,5,1,1,7,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1927 1,1,8,1,1,1,1,1,1,8,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1928 1,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,
1929 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,
1930 1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1931 1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,
1932 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,2,7,2,
1933 10,10,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,2,10,10,
1934 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,2,2,2,2,2,2,1,
1935 2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1936 1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,
1937 1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,
1938 2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,
1939 1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,
1940 2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,
1941 1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,
1942 1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,7,2,2,1,7,2,1,7,2,1,7,2,
1943 1,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1,
1944 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,7,1,2,2,2,2,2,1,2,1,
1945 1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,
1946 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1
1947 };
1948
1949
1950 static const unsigned short ag_pstt[] = {
1951 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,1,2,4,0,3,3,4,
1952 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,1,5,6,
1953 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,2,7,
1954 8,
1955 349,349,1,2,351,349,
1956 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,62,1,4,
1957 99,54,101,100,0,64,21,21,63,24,61,60,31,21,21,59,58,57,56,49,55,47,60,
1958 53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,
1959 100,14,100,129,11,46,16,15,12,13,
1960 115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
1961 115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,117,
1962 118,6,
1963 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
1964 110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,112,
1965 113,8,
1966 65,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,
1967 70,70,70,70,70,70,70,70,66,156,155,154,153,152,151,150,149,148,147,146,
1968 9,70,70,70,69,68,67,70,
1969 71,71,10,126,71,
1970 65,143,143,143,143,143,143,141,143,143,143,143,143,143,143,143,143,143,143,
1971 143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,66,156,155,
1972 154,153,152,151,150,149,148,147,146,11,143,143,143,69,68,67,143,
1973 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
1974 350,350,350,350,350,350,3,3,1,2,12,3,3,405,
1975 130,130,72,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
1976 350,350,350,350,350,350,350,350,350,3,3,1,2,13,3,130,3,415,
1977 73,119,
1978 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
1979 350,350,350,350,350,350,3,3,1,2,15,3,3,403,
1980 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
1981 350,350,350,350,350,350,3,3,1,2,16,3,3,402,
1982 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
1983 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
1984 350,17,3,3,400,
1985 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
1986 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
1987 350,18,3,3,399,
1988 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
1989 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
1990 350,19,3,3,392,
1991 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
1992 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
1993 350,20,3,3,393,
1994 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
1995 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
1996 350,3,3,1,2,21,3,3,398,
1997 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
1998 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
1999 350,3,3,1,2,22,3,3,397,
2000 74,97,75,
2001 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2002 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2003 350,24,3,3,358,
2004 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,25,99,54,101,100,76,77,54,
2005 27,28,96,96,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2006 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,26,99,54,101,100,76,77,54,
2007 27,28,95,95,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2008 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,27,99,54,101,100,76,77,54,
2009 27,28,94,94,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2010 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,28,99,54,101,100,76,77,54,
2011 27,28,93,93,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2012 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,29,99,54,101,100,76,77,54,
2013 27,28,92,92,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2014 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,30,99,54,101,100,76,77,54,
2015 27,28,91,91,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2016 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,99,54,101,100,79,78,31,
2017 78,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2018 23,100,14,100,129,11,46,16,15,12,13,
2019 80,82,84,81,85,83,81,
2020 20,19,78,87,86,
2021 88,90,73,91,89,
2022 92,94,96,98,70,99,97,95,93,
2023 100,102,68,103,101,
2024 104,66,105,
2025 106,64,107,
2026 108,39,109,
2027 110,61,111,
2028 63,59,59,59,59,59,59,59,41,
2029 350,3,3,1,2,42,3,3,366,
2030 350,3,3,1,2,43,3,3,364,
2031 112,114,44,115,113,
2032 58,58,56,56,56,56,56,45,
2033 137,137,137,137,137,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2034 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2035 350,350,350,350,350,350,350,350,350,3,3,1,2,46,3,3,353,
2036 24,47,116,
2037 350,3,3,1,2,48,3,3,363,
2038 24,49,117,
2039 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2040 350,350,3,3,1,2,50,3,3,362,
2041 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2042 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2043 350,350,3,3,1,2,350,51,3,3,361,
2044 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2045 350,350,350,350,350,3,3,1,2,350,52,3,3,352,
2046 118,102,21,22,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
2047 102,102,102,102,102,122,124,126,128,130,132,134,136,138,140,102,102,120,
2048 102,142,102,53,143,121,141,139,137,135,133,131,129,127,125,123,103,104,
2049 119,
2050 135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
2051 135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
2052 135,24,135,135,135,135,135,54,144,
2053 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,55,99,
2054 54,101,100,38,24,60,31,145,38,59,58,57,56,49,55,47,60,53,54,45,44,41,40,
2055 39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,
2056 46,16,15,12,13,
2057 24,56,146,
2058 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,57,99,
2059 54,101,100,24,60,31,29,36,59,58,57,56,49,55,47,60,53,54,45,44,41,40,39,
2060 38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,
2061 16,15,12,13,
2062 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,58,99,
2063 54,101,100,147,24,60,31,147,147,59,58,57,56,49,55,47,60,53,54,45,44,41,
2064 40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,
2065 11,46,16,15,12,13,
2066 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,149,24,52,62,
2067 59,99,54,101,100,148,21,21,63,24,61,60,31,21,21,59,25,58,57,56,49,55,47,
2068 60,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2069 23,100,14,100,129,11,46,16,15,12,13,
2070 52,60,23,
2071 136,136,136,61,150,46,
2072 152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106,
2073 110,114,156,51,159,24,160,120,151,142,165,62,164,165,164,164,164,164,
2074 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
2075 164,164,164,164,164,164,164,164,164,
2076 52,63,9,
2077 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,166,2,
2078 64,99,54,101,100,22,22,63,24,61,60,31,22,22,59,58,57,56,49,55,47,60,53,
2079 54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,
2080 100,14,100,129,11,46,16,15,12,13,
2081 162,65,
2082 168,168,165,165,66,165,
2083 164,160,
2084 163,159,
2085 168,168,166,166,158,166,
2086 138,70,
2087 131,71,71,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
2088 131,131,131,131,131,131,131,131,131,131,131,131,131,71,132,71,
2089 125,71,71,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
2090 125,125,125,125,125,125,125,125,125,125,125,125,125,72,124,71,
2091 168,168,167,168,73,168,
2092 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,74,3,3,
2093 401,
2094 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,75,99,54,101,100,76,77,54,
2095 27,28,98,98,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2096 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,76,99,54,101,100,78,31,78,
2097 53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,
2098 100,14,100,129,11,46,16,15,12,13,
2099 118,102,21,22,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
2100 102,102,102,102,102,102,102,120,102,102,77,121,103,104,119,
2101 160,78,107,
2102 160,79,169,
2103 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2104 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2105 350,80,3,3,396,
2106 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,81,99,54,101,100,31,77,54,
2107 27,28,87,87,87,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2108 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2109 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2110 350,82,3,3,395,
2111 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,83,99,54,101,100,31,77,54,
2112 27,28,86,86,86,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2113 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2114 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2115 350,84,3,3,394,
2116 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,85,99,54,101,100,31,77,54,
2117 27,28,85,85,85,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2118 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,86,99,54,101,100,31,77,54,
2119 170,27,28,170,170,170,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2120 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,87,99,54,101,100,31,77,54,
2121 171,27,28,171,171,171,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2122 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,88,3,3,
2123 391,
2124 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,89,99,54,101,100,31,77,54,
2125 172,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2126 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,90,3,3,
2127 390,
2128 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,91,99,54,101,100,31,77,54,
2129 173,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2130 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,92,3,3,
2131 389,
2132 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,93,99,54,101,100,31,77,54,
2133 174,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,
2134 13,
2135 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2136 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2137 350,94,3,3,388,
2138 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,95,99,54,101,100,31,77,54,
2139 175,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,
2140 13,
2141 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,96,3,3,
2142 387,
2143 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,97,99,54,101,100,31,77,54,
2144 176,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,
2145 13,
2146 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2147 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2148 350,98,3,3,386,
2149 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,99,99,54,101,100,31,77,54,
2150 177,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,
2151 13,
2152 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,100,3,3,
2153 385,
2154 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,101,99,54,101,100,31,77,
2155 54,178,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,
2156 15,12,13,
2157 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,102,3,3,
2158 384,
2159 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,103,99,54,101,100,31,77,
2160 54,179,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,
2161 15,12,13,
2162 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2163 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2164 350,104,3,3,383,
2165 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,105,99,54,101,100,31,77,
2166 54,180,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,
2167 16,15,12,13,
2168 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2169 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2170 350,106,3,3,382,
2171 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,107,99,54,101,100,31,77,
2172 54,181,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,
2173 46,16,15,12,13,
2174 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,108,3,3,
2175 380,
2176 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,109,99,54,101,100,31,77,
2177 54,182,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,
2178 129,11,46,16,15,12,13,
2179 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2180 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2181 350,110,3,3,381,
2182 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,111,99,54,101,100,31,77,
2183 54,183,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,
2184 11,46,16,15,12,13,
2185 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,112,3,3,
2186 379,
2187 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,113,99,54,101,100,31,77,
2188 54,184,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,
2189 100,129,11,46,16,15,12,13,
2190 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2191 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2192 350,114,3,3,378,
2193 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,115,99,54,101,100,185,31,
2194 185,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,
2195 25,23,100,14,100,129,11,46,16,15,12,13,
2196 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,116,99,54,101,100,41,31,
2197 186,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,
2198 26,25,23,100,14,100,129,11,46,16,15,12,13,
2199 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,117,99,54,101,100,41,31,
2200 187,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,
2201 26,25,23,100,14,100,129,11,46,16,15,12,13,
2202 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2203 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,118,
2204 3,3,404,
2205 136,136,136,119,188,46,
2206 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2207 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2208 350,120,3,3,356,
2209 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,121,99,54,101,100,189,31,
2210 189,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,
2211 25,23,100,14,100,129,11,46,16,15,12,13,
2212 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,122,3,3,
2213 376,
2214 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,123,99,54,101,100,53,31,
2215 53,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2216 23,100,14,100,129,11,46,16,15,12,13,
2217 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,124,3,3,
2218 375,
2219 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,125,99,54,101,100,52,31,
2220 52,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2221 23,100,14,100,129,11,46,16,15,12,13,
2222 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,126,3,3,
2223 374,
2224 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,127,99,54,101,100,51,31,
2225 51,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2226 23,100,14,100,129,11,46,16,15,12,13,
2227 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,128,3,3,
2228 373,
2229 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,129,99,54,101,100,50,31,
2230 50,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2231 23,100,14,100,129,11,46,16,15,12,13,
2232 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,130,3,3,
2233 372,
2234 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,131,99,54,101,100,49,31,
2235 49,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2236 23,100,14,100,129,11,46,16,15,12,13,
2237 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,132,3,3,
2238 371,
2239 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,133,99,54,101,100,48,31,
2240 48,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2241 23,100,14,100,129,11,46,16,15,12,13,
2242 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,134,3,3,
2243 370,
2244 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,135,99,54,101,100,47,31,
2245 47,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2246 23,100,14,100,129,11,46,16,15,12,13,
2247 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,136,3,3,
2248 369,
2249 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,137,99,54,101,100,46,31,
2250 46,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2251 23,100,14,100,129,11,46,16,15,12,13,
2252 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,138,3,3,
2253 368,
2254 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,139,99,54,101,100,45,31,
2255 45,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2256 23,100,14,100,129,11,46,16,15,12,13,
2257 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,140,3,3,
2258 367,
2259 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,141,99,54,101,100,44,31,
2260 44,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2261 23,100,14,100,129,11,46,16,15,12,13,
2262 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2263 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2264 350,142,3,3,354,
2265 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,143,99,54,101,100,43,31,
2266 43,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2267 23,100,14,100,129,11,46,16,15,12,13,
2268 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,144,99,54,101,100,17,
2269 31,191,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,
2270 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2271 192,19,193,
2272 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,146,99,54,101,100,33,
2273 31,195,194,33,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,
2274 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2275 43,147,196,49,
2276 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,149,24,52,197,
2277 148,99,54,101,100,22,22,63,24,61,60,31,22,22,59,26,58,57,56,49,55,47,60,
2278 53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,
2279 100,14,100,129,11,46,16,15,12,13,
2280 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2281 350,350,350,350,3,3,1,2,350,149,3,3,360,
2282 24,120,142,11,150,200,199,198,
2283 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2284 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2285 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,
2286 1,2,350,151,3,3,355,
2287 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2288 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,152,
2289 3,3,414,
2290 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2291 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,153,
2292 3,3,413,
2293 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2294 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,154,
2295 3,3,412,
2296 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2297 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,155,
2298 3,3,411,
2299 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2300 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2301 350,156,3,3,377,
2302 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2303 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,157,
2304 3,3,410,
2305 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2306 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,158,
2307 3,3,409,
2308 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2309 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
2310 350,159,3,3,359,
2311 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2312 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2313 350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,160,3,3,357,
2314 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2315 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,161,
2316 3,3,408,
2317 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2318 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,162,
2319 3,3,407,
2320 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2321 350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,163,
2322 3,3,406,
2323 152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106,
2324 110,114,156,51,159,24,160,120,151,142,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
2325 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
2326 52,165,10,
2327 152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106,
2328 110,114,156,51,159,24,160,120,151,142,201,201,166,164,201,164,164,164,
2329 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
2330 164,164,164,164,164,164,164,164,164,164,
2331 133,133,167,202,133,
2332 133,133,168,203,133,
2333 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,169,99,54,101,100,31,77,
2334 54,27,28,89,89,89,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2335 80,82,84,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,170,
2336 85,83,81,
2337 80,82,84,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,171,
2338 85,83,81,
2339 20,19,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,172,87,86,
2340 20,19,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,173,87,86,
2341 88,90,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,174,91,89,
2342 88,90,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,175,91,89,
2343 88,90,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,176,91,89,
2344 88,90,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,177,91,89,
2345 92,94,96,98,72,72,72,72,72,72,72,72,72,72,72,72,72,178,99,97,95,93,
2346 92,94,96,98,71,71,71,71,71,71,71,71,71,71,71,71,71,179,99,97,95,93,
2347 100,102,69,69,69,69,69,69,69,69,69,69,69,180,103,101,
2348 104,67,67,67,67,67,67,67,67,67,67,181,105,
2349 110,62,62,62,62,62,62,62,62,182,111,
2350 106,65,65,65,65,65,65,65,65,65,183,107,
2351 63,60,60,60,60,60,60,60,184,
2352 156,185,204,
2353 160,186,40,
2354 160,187,35,
2355 24,188,205,
2356 151,189,55,
2357 159,16,190,206,
2358 160,191,105,
2359 350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
2360 350,350,3,3,1,2,192,3,3,365,
2361 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,62,193,
2362 99,54,101,100,39,39,63,24,61,60,31,39,39,59,58,57,56,49,55,47,60,53,54,
2363 45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,
2364 14,100,129,11,46,16,15,12,13,
2365 159,32,207,
2366 52,195,208,
2367 52,196,28,
2368 152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106,
2369 110,114,156,51,209,159,24,160,120,151,142,209,197,164,209,164,164,164,
2370 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
2371 164,164,164,164,164,164,164,164,164,164,
2372 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,198,99,54,101,100,17,
2373 31,210,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,
2374 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2375 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,199,99,54,101,100,211,31,
2376 211,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,
2377 25,23,100,14,100,129,11,46,16,15,12,13,
2378 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,200,99,54,101,100,12,31,
2379 12,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2380 23,100,14,100,129,11,46,16,15,12,13,
2381 52,7,201,10,
2382 134,134,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
2383 123,123,123,123,123,123,123,123,123,123,123,123,202,134,
2384 134,134,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
2385 122,122,122,122,122,122,122,122,122,122,122,122,203,134,
2386 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,204,99,54,101,100,31,57,
2387 77,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,
2388 100,14,100,129,11,46,16,15,12,13,
2389 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,205,99,54,101,100,17,
2390 31,212,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,
2391 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2392 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,206,99,54,101,100,18,31,
2393 18,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2394 23,100,14,100,129,11,46,16,15,12,13,
2395 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,207,99,54,101,100,34,31,
2396 34,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
2397 23,100,14,100,129,11,46,16,15,12,13,
2398 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,208,99,54,101,100,41,31,
2399 213,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,
2400 26,25,23,100,14,100,129,11,46,16,15,12,13,
2401 149,52,209,10,27,
2402 160,210,14,
2403 151,211,13,
2404 160,212,106,
2405 52,213,214,
2406 136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,214,99,54,101,100,33,
2407 31,215,194,33,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,
2408 30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
2409 160,215,216,
2410 136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,216,99,
2411 54,101,100,24,60,31,30,37,59,58,57,56,49,55,47,60,53,54,45,44,41,40,39,
2412 38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,
2413 16,15,12,13,
2414
2415 };
2416
2417
2418 static const unsigned short ag_sbt[] = {
2419 0, 30, 68, 107, 113, 194, 229, 231, 267, 269, 322, 327, 381, 414,
2420 451, 453, 486, 519, 563, 607, 651, 695, 741, 787, 790, 834, 876, 918,
2421 960,1002,1044,1086,1144,1151,1156,1161,1170,1175,1178,1181,1184,1187,
2422 1196,1205,1214,1219,1227,1281,1284,1293,1296,1325,1373,1406,1462,1508,
2423 1582,1585,1658,1732,1813,1816,1822,1888,1891,1970,1972,1978,1980,1982,
2424 1988,1990,2025,2060,2066,2089,2131,2188,2222,2225,2228,2272,2315,2359,
2425 2402,2446,2489,2533,2577,2600,2645,2668,2713,2736,2782,2826,2872,2895,
2426 2941,2985,3031,3054,3101,3124,3171,3215,3263,3307,3356,3379,3430,3474,
2427 3524,3547,3600,3644,3701,3759,3817,3859,3865,3909,3966,3989,4046,4069,
2428 4126,4149,4206,4229,4286,4309,4366,4389,4446,4469,4526,4549,4606,4629,
2429 4686,4709,4766,4810,4867,4927,4930,4990,4994,5074,5106,5114,5177,5219,
2430 5261,5303,5345,5389,5431,5473,5517,5574,5616,5658,5700,5763,5766,5833,
2431 5838,5843,5886,5914,5942,5966,5990,6012,6034,6056,6078,6100,6122,6138,
2432 6151,6162,6174,6183,6186,6189,6192,6195,6198,6202,6205,6234,6312,6315,
2433 6318,6321,6388,6448,6505,6562,6566,6599,6632,6688,6748,6805,6862,6920,
2434 6925,6928,6931,6934,6937,6997,7000,7073
2435 };
2436
2437
2438 static const unsigned short ag_sbe[] = {
2439 26, 65, 104, 111, 136, 228, 230, 266, 268, 314, 324, 373, 410, 446,
2440 452, 482, 515, 559, 603, 647, 691, 737, 783, 788, 830, 849, 891, 933,
2441 975,1017,1059,1101,1147,1153,1158,1165,1172,1176,1179,1182,1185,1195,
2442 1201,1210,1216,1226,1277,1282,1289,1294,1321,1369,1402,1446,1506,1529,
2443 1583,1606,1679,1755,1814,1819,1854,1889,1914,1971,1976,1979,1981,1986,
2444 1989,2022,2057,2064,2085,2104,2146,2217,2223,2226,2268,2287,2355,2374,
2445 2442,2461,2504,2548,2596,2615,2664,2683,2732,2751,2822,2841,2891,2910,
2446 2981,3000,3050,3069,3120,3139,3211,3230,3303,3322,3375,3394,3470,3489,
2447 3543,3562,3640,3659,3716,3774,3855,3862,3905,3924,3985,4004,4065,4084,
2448 4145,4164,4225,4244,4305,4324,4385,4404,4465,4484,4545,4564,4625,4644,
2449 4705,4724,4806,4825,4883,4928,4946,4991,5017,5102,5110,5173,5215,5257,
2450 5299,5341,5385,5427,5469,5513,5570,5612,5654,5696,5731,5764,5799,5835,
2451 5840,5858,5910,5938,5963,5987,6009,6031,6053,6075,6095,6117,6135,6149,
2452 6160,6172,6182,6184,6187,6190,6193,6196,6200,6203,6230,6256,6313,6316,
2453 6319,6354,6404,6463,6520,6564,6597,6630,6647,6704,6763,6820,6877,6922,
2454 6926,6929,6932,6935,6953,6998,7021,7073
2455 };
2456
2457
2458 static const unsigned char ag_fl[] = {
2459 2,1,2,1,2,0,1,4,1,2,3,2,4,5,5,0,1,1,3,1,1,1,2,2,1,2,3,5,4,2,9,0,1,1,3,
2460 4,2,9,2,4,4,1,1,3,3,3,3,3,3,3,3,3,3,3,1,4,1,5,1,1,3,1,3,1,1,3,1,3,1,3,
2461 1,3,3,1,3,3,3,3,1,3,3,1,3,3,1,3,3,3,1,4,1,2,2,2,2,2,2,1,3,1,1,1,1,2,2,
2462 4,6,3,1,1,2,0,1,3,1,2,0,1,3,1,0,1,4,4,3,2,2,1,1,1,2,1,2,1,2,1,1,2,3,1,
2463 1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,
2464 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2465 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2466 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2467 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2468 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
2469 0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2470 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
2471 };
2472
2473 static const unsigned char ag_ptt[] = {
2474 0, 6, 6, 11, 11, 12, 12, 6, 13, 13, 13, 15, 15, 15, 15, 23, 23, 25,
2475 25, 14, 14, 8, 8, 27, 27, 27, 27, 27, 27, 27, 27, 34, 34, 36, 36, 32,
2476 28, 28, 28, 28, 38, 35, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
2477 42, 42, 41, 41, 55, 54, 54, 58, 58, 61, 60, 60, 63, 63, 65, 65, 67, 67,
2478 67, 69, 69, 69, 69, 69, 72, 72, 72, 77, 77, 77, 80, 80, 80, 80, 83, 83,
2479 87, 87, 87, 87, 87, 87, 87, 88, 88, 93, 93, 93, 93, 93, 93, 93, 93, 93,
2480 1,100,100,101,101, 1,105,105,106,106, 1,204,110,110,204,204,108,108,
2481 108, 95, 95,217,217,113,113,111,111, 17,155,155,207,118,118,205,121,121,
2482 123,123,120,120,120,120,120,120,120,120,120,120,120,120,120,136,136,136,
2483 138,139,140,137,137,144,144,114, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
2484 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
2485 10, 10, 10, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
2486 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
2487 99, 99, 99, 99,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
2488 104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
2489 104,104,115,115,115,116,116,116,116,116,119,119,119,119,119,119,119,119,
2490 119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
2491 119,119,119,119,119,119,124,124,124,124,124,124,124,124,124,124,124,124,
2492 124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
2493 124,124,145,145,146,146,152,152,153,153, 16, 3, 18, 21, 20, 24, 22, 26,
2494 30, 29, 31, 33, 37, 39, 40, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 57,
2495 56, 59, 62, 64, 66, 68, 70, 71, 73, 74, 75, 76, 78, 79, 81, 82, 84, 85,
2496 86, 89, 90, 91, 92, 94, 2, 4, 96, 5,147,122,117,142,148,149,109,150,
2497 141,112
2498 };
2499
2500 static const unsigned char *ag_valid(int ag_k) {
2501 const unsigned char *ag_tp = &ag_tstt[ag_sbt[(PCB).sn+1]];
2502 while (*--ag_tp != (unsigned char) ag_k) if (*ag_tp == 0) return NULL;
2503 return ag_tp;
2504 }
2505
2506 int vmCompile_change_reduction(vmCompile_token_type ag_k) {
2507 if (!ag_valid(ag_k)) return 0;
2508 (PCB).reduction_token = ag_k;
2509 return 1;
2510 }
2511
2512 static void ag_default(const int *ag_tp) {
2513 (PCB).ag_dsn = (PCB).sn;
2514 (PCB).ag_dtl = ag_tp;
2515 while (!ag_valid((vmCompile_token_type) *ag_tp)) ag_tp++;
2516 (PCB).reduction_token = (vmCompile_token_type) *ag_tp;
2517 }
2518
2519
2520
2521 static void ag_ra(void)
2522 {
2523 switch(ag_rpx[(PCB).ag_ap]) {
2524 case 1: V(0,(Code *)) = ag_rp_1(); break;
2525 case 2: V(0,(Code *)) = ag_rp_2(V(0,(Code *))); break;
2526 case 3: V(0,(Code *)) = ag_rp_3(V(0,(Code *))); break;
2527 case 4: V(0,(Code *)) = ag_rp_4(); break;
2528 case 5: V(0,(Code *)) = ag_rp_5(V(0,(int *)), V(1,(int *))); break;
2529 case 6: V(0,(Code *)) = ag_rp_6(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break;
2530 case 7: V(0,(Code *)) = ag_rp_7(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break;
2531 case 8: V(0,(Code *)) = ag_rp_8(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break;
2532 case 9: V(0,(Code *)) = ag_rp_9(); break;
2533 case 10: V(0,(Code *)) = ag_rp_10(V(0,(Code *))); break;
2534 case 11: V(0,(Code *)) = ag_rp_11(V(0,(Code *))); break;
2535 case 12: V(0,(Code *)) = ag_rp_12(V(0,(Code *)), V(2,(Code *))); break;
2536 case 13: V(0,(Code *)) = ag_rp_13(V(0,(Code *))); break;
2537 case 14: V(0,(Code *)) = ag_rp_14(V(0,(Code *)), V(1,(Code *))); break;
2538 case 15: V(0,(Code *)) = ag_rp_15(V(0,(Code *))); break;
2539 case 16: V(0,(Code *)) = ag_rp_16(); break;
2540 case 17: V(0,(Code *)) = ag_rp_17(); break;
2541 case 18: V(0,(Code *)) = ag_rp_18(V(1,(Code *))); break;
2542 case 19: V(0,(Code *)) = ag_rp_19(V(1,(Code *))); break;
2543 case 20: V(0,(Code *)) = ag_rp_20(V(1,(Code *)), V(2,(Code *))); break;
2544 case 21: V(0,(Code *)) = ag_rp_21(V(0,(Code *)), V(1,(Code *))); break;
2545 case 22: V(0,(Code *)) = ag_rp_22(V(2,(Code *)), V(4,(Code *)), V(6,(Code *)), V(8,(Code *))); break;
2546 case 23: V(0,(Code *)) = ag_rp_23(); break;
2547 case 24: V(0,(Code *)) = ag_rp_24(V(0,(Code *))); break;
2548 case 25: V(0,(Code *)) = ag_rp_25(V(0,(Code *)), V(2,(Code *))); break;
2549 case 26: V(0,(Code *)) = ag_rp_26(V(2,(Code *))); break;
2550 case 27: V(0,(Code *)) = ag_rp_27(V(0,(Code *)), V(1,(Code *))); break;
2551 case 28: V(0,(Code *)) = ag_rp_28(V(2,(Code *)), V(4,(Code *)), V(6,(Code *)), V(8,(Code *))); break;
2552 case 29: V(0,(Code *)) = ag_rp_29(V(0,(Code *)), V(1,(Code *))); break;
2553 case 30: V(0,(Code *)) = ag_rp_30(V(0,(Code *)), V(1,(Code *)), V(3,(Code *))); break;
2554 case 31: V(0,(Code *)) = ag_rp_31(V(2,(Code *))); break;
2555 case 32: V(0,(Code *)) = ag_rp_32(V(0,(Code *))); break;
2556 case 33: V(0,(Code *)) = ag_rp_33(V(0,(Code *)), V(2,(Code *))); break;
2557 case 34: V(0,(Code *)) = ag_rp_34(V(0,(Code *)), V(2,(Code *))); break;
2558 case 35: V(0,(Code *)) = ag_rp_35(V(0,(Code *)), V(2,(Code *))); break;
2559 case 36: V(0,(Code *)) = ag_rp_36(V(0,(Code *)), V(2,(Code *))); break;
2560 case 37: V(0,(Code *)) = ag_rp_37(V(0,(Code *)), V(2,(Code *))); break;
2561 case 38: V(0,(Code *)) = ag_rp_38(V(0,(Code *)), V(2,(Code *))); break;
2562 case 39: V(0,(Code *)) = ag_rp_39(V(0,(Code *)), V(2,(Code *))); break;
2563 case 40: V(0,(Code *)) = ag_rp_40(V(0,(Code *)), V(2,(Code *))); break;
2564 case 41: V(0,(Code *)) = ag_rp_41(V(0,(Code *)), V(2,(Code *))); break;
2565 case 42: V(0,(Code *)) = ag_rp_42(V(0,(Code *)), V(2,(Code *))); break;
2566 case 43: V(0,(Code *)) = ag_rp_43(V(0,(Code *)), V(2,(Code *))); break;
2567 case 44: V(0,(Code *)) = ag_rp_44(V(0,(int *))); break;
2568 case 45: V(0,(Code *)) = ag_rp_45(V(0,(Code *)), V(2,(Code *))); break;
2569 case 46: V(0,(Code *)) = ag_rp_46(V(0,(Code *)), V(2,(Code *)), V(4,(Code *))); break;
2570 case 47: V(0,(Code *)) = ag_rp_47(V(0,(Code *))); break;
2571 case 48: V(0,(Code *)) = ag_rp_48(V(0,(Code *)), V(2,(Code *))); break;
2572 case 49: V(0,(Code *)) = ag_rp_49(V(0,(Code *)), V(2,(Code *))); break;
2573 case 50: V(0,(Code *)) = ag_rp_50(V(0,(Code *))); break;
2574 case 51: V(0,(Code *)) = ag_rp_51(V(0,(Code *)), V(2,(Code *))); break;
2575 case 52: V(0,(Code *)) = ag_rp_52(V(0,(Code *)), V(2,(Code *))); break;
2576 case 53: V(0,(Code *)) = ag_rp_53(V(0,(Code *)), V(2,(Code *))); break;
2577 case 54: V(0,(Code *)) = ag_rp_54(V(0,(Code *)), V(2,(Code *))); break;
2578 case 55: V(0,(Code *)) = ag_rp_55(V(0,(Code *)), V(2,(Code *))); break;
2579 case 56: V(0,(Code *)) = ag_rp_56(V(0,(Code *)), V(2,(Code *))); break;
2580 case 57: V(0,(Code *)) = ag_rp_57(V(0,(Code *)), V(2,(Code *))); break;
2581 case 58: V(0,(Code *)) = ag_rp_58(V(0,(Code *)), V(2,(Code *))); break;
2582 case 59: V(0,(Code *)) = ag_rp_59(V(0,(Code *)), V(2,(Code *))); break;
2583 case 60: V(0,(Code *)) = ag_rp_60(V(0,(Code *)), V(2,(Code *))); break;
2584 case 61: V(0,(Code *)) = ag_rp_61(V(0,(Code *)), V(2,(Code *))); break;
2585 case 62: V(0,(Code *)) = ag_rp_62(V(0,(Code *)), V(2,(Code *))); break;
2586 case 63: V(0,(Code *)) = ag_rp_63(V(0,(Code *)), V(2,(Code *))); break;
2587 case 64: V(0,(Code *)) = ag_rp_64(V(0,(Code *)), V(2,(Code *))); break;
2588 case 65: V(0,(Code *)) = ag_rp_65(V(0,(Code *)), V(2,(Code *))); break;
2589 case 66: V(0,(Code *)) = ag_rp_66(V(0,(Code *)), V(2,(Code *))); break;
2590 case 67: V(0,(Code *)) = ag_rp_67(V(1,(int *)), V(3,(Code *))); break;
2591 case 68: V(0,(Code *)) = ag_rp_68(V(1,(Code *))); break;
2592 case 69: V(0,(Code *)) = ag_rp_69(V(1,(Code *))); break;
2593 case 70: V(0,(Code *)) = ag_rp_70(V(1,(Code *))); break;
2594 case 71: V(0,(Code *)) = ag_rp_71(V(1,(Code *))); break;
2595 case 72: V(0,(Code *)) = ag_rp_72(V(1,(Code *))); break;
2596 case 73: V(0,(Code *)) = ag_rp_73(V(1,(Code *))); break;
2597 case 74: V(0,(Code *)) = ag_rp_74(V(0,(Code *)), V(2,(Code *))); break;
2598 case 75: V(0,(Code *)) = ag_rp_75(V(0,(double *))); break;
2599 case 76: V(0,(Code *)) = ag_rp_76(V(0,(int *))); break;
2600 case 77: V(0,(Code *)) = ag_rp_77(V(0,(int *))); break;
2601 case 78: V(0,(Code *)) = ag_rp_78(V(0,(Code *))); break;
2602 case 79: V(0,(Code *)) = ag_rp_79(V(0,(Code *))); break;
2603 case 80: V(0,(Code *)) = ag_rp_80(V(0,(Code *))); break;
2604 case 81: V(0,(Code *)) = ag_rp_81(V(0,(int *)), V(2,(Code *))); break;
2605 case 82: V(0,(Code *)) = ag_rp_82(V(0,(Code *)), V(2,(int *)), V(4,(Code *))); break;
2606 case 83: V(0,(Code *)) = ag_rp_83(V(1,(Code *))); break;
2607 case 84: V(0,(double *)) = ag_rp_84(V(0,(double *)), V(3,(int *))); break;
2608 case 85: V(0,(double *)) = ag_rp_85(V(0,(double *)), V(3,(int *))); break;
2609 case 86: V(0,(double *)) = ag_rp_86(V(0,(int *)), V(2,(double *))); break;
2610 case 87: V(0,(double *)) = ag_rp_87(V(0,(int *))); break;
2611 case 88: V(0,(double *)) = ag_rp_88(V(1,(double *))); break;
2612 case 89: V(0,(int *)) = ag_rp_89(V(0,(int *))); break;
2613 case 90: V(0,(int *)) = ag_rp_90(V(0,(int *)), V(1,(int *))); break;
2614 case 91: V(0,(double *)) = ag_rp_91(V(0,(int *))); break;
2615 case 92: V(0,(double *)) = ag_rp_92(V(0,(int *)), V(1,(double *))); break;
2616 case 93: V(0,(int *)) = ag_rp_93(V(0,(int *))); break;
2617 case 94: V(0,(int *)) = ag_rp_94(V(0,(int *)), V(1,(int *))); break;
2618 case 95: ag_default(&ag_rtt[0]); V(0,(int *)) = ag_rp_95(V(0,(int *))); break;
2619 case 96: V(0,(int *)) = ag_rp_96(V(0,(int *))); break;
2620 case 97: V(0,(int *)) = ag_rp_97(V(0,(int *)), V(1,(int *))); break;
2621 case 98: V(0,(int *)) = ag_rp_98(V(1,(int *))); break;
2622 case 99: V(0,(int *)) = ag_rp_99(V(0,(int *))); break;
2623 case 100: V(0,(int *)) = ag_rp_100(); break;
2624 case 101: V(0,(int *)) = ag_rp_101(V(0,(int *)), V(1,(int *))); break;
2625 case 102: V(0,(int *)) = ag_rp_102(); break;
2626 case 103: V(0,(int *)) = ag_rp_103(); break;
2627 case 104: V(0,(int *)) = ag_rp_104(); break;
2628 case 105: V(0,(int *)) = ag_rp_105(); break;
2629 case 106: V(0,(int *)) = ag_rp_106(); break;
2630 case 107: V(0,(int *)) = ag_rp_107(); break;
2631 case 108: V(0,(int *)) = ag_rp_108(); break;
2632 case 109: V(0,(int *)) = ag_rp_109(); break;
2633 case 110: V(0,(int *)) = ag_rp_110(); break;
2634 case 111: V(0,(int *)) = ag_rp_111(); break;
2635 case 112: V(0,(int *)) = ag_rp_112(); break;
2636 case 113: V(0,(int *)) = ag_rp_113(V(1,(int *))); break;
2637 case 114: V(0,(int *)) = ag_rp_114(V(0,(int *)), V(1,(int *))); break;
2638 case 115: V(0,(int *)) = ag_rp_115(V(0,(int *)), V(1,(int *))); break;
2639 case 116: V(0,(int *)) = ag_rp_116(V(1,(int *))); break;
2640 case 117: V(0,(int *)) = ag_rp_117(V(0,(int *)), V(1,(int *))); break;
2641 case 118: V(0,(int *)) = ag_rp_118(V(0,(int *))); break;
2642 }
2643 (PCB).la_ptr = (PCB).pointer;
2644 }
2645
2646 #define TOKEN_NAMES vmCompile_token_names
2647 const char *const vmCompile_token_names[218] = {
2648 "input string",
2649 "white space",
2650 "real",
2651 "name string",
2652 "string literal",
2653 "character constant",
2654 "input string",
2655 "eof",
2656 "statements",
2657 "error",
2658 "",
2659 "",
2660 "",
2661 "statement",
2662 "executable statement",
2663 "declaration",
2664 "';'",
2665 "type name",
2666 "'='",
2667 "expression",
2668 "'['",
2669 "']'",
2670 "'('",
2671 "expression list",
2672 "')'",
2673 "expressions",
2674 "','",
2675 "unconditional statement",
2676 "conditional statement",
2677 "'{'",
2678 "'}'",
2679 "\"do\"",
2680 "while clause",
2681 "\"for\"",
2682 "for exprs",
2683 "condition",
2684 "for expr list",
2685 "\"while\"",
2686 "if clause",
2687 "\"else\"",
2688 "\"if\"",
2689 "conditional expression",
2690 "lvalue",
2691 "\"+=\"",
2692 "\"-=\"",
2693 "\"*=\"",
2694 "\"/=\"",
2695 "\"%=\"",
2696 "\"|=\"",
2697 "\"&=\"",
2698 "\"^=\"",
2699 "\"<<=\"",
2700 "\">>=\"",
2701 "variable name",
2702 "logical or expression",
2703 "logical or condition",
2704 "'\\?'",
2705 "':'",
2706 "logical and expression",
2707 "\"||\"",
2708 "bitwise or expression",
2709 "logical and condition",
2710 "\"&&\"",
2711 "bitwise xor expression",
2712 "'|'",
2713 "bitwise and expression",
2714 "'^'",
2715 "equality expression",
2716 "'&'",
2717 "relational expression",
2718 "\"==\"",
2719 "\"!=\"",
2720 "shift expression",
2721 "'<'",
2722 "\"<=\"",
2723 "'>'",
2724 "\">=\"",
2725 "additive expression",
2726 "\"<<\"",
2727 "\">>\"",
2728 "multiplicative expression",
2729 "'+'",
2730 "'-'",
2731 "cast expression",
2732 "'*'",
2733 "'/'",
2734 "'%'",
2735 "unary expression",
2736 "power expression",
2737 "\"++\"",
2738 "\"--\"",
2739 "'!'",
2740 "'~'",
2741 "primary",
2742 "\"**\"",
2743 "integer constant",
2744 "'.'",
2745 "space",
2746 "\"/*\"",
2747 "",
2748 "",
2749 "",
2750 "\"*/\"",
2751 "\"//\"",
2752 "",
2753 "",
2754 "",
2755 "'\\n'",
2756 "simple real",
2757 "",
2758 "",
2759 "exponent",
2760 "integer",
2761 "fraction part",
2762 "digit",
2763 "letter",
2764 "",
2765 "'\\''",
2766 "char constant element",
2767 "not single quote",
2768 "escape sequence",
2769 "string chars",
2770 "'\\\"'",
2771 "string char",
2772 "not double quote",
2773 "\"\\\\a\"",
2774 "\"\\\\b\"",
2775 "\"\\\\f\"",
2776 "\"\\\\n\"",
2777 "\"\\\\r\"",
2778 "\"\\\\t\"",
2779 "\"\\\\v\"",
2780 "\"\\\\\\\\\"",
2781 "\"\\\\?\"",
2782 "\"\\\\\\'\"",
2783 "\"\\\\\\\"\"",
2784 "octal escape",
2785 "hex escape",
2786 "one octal",
2787 "two octal",
2788 "three octal",
2789 "'\\\\'",
2790 "",
2791 "\"\\\\x\"",
2792 "hex digit",
2793 "",
2794 "",
2795 "",
2796 "",
2797 "",
2798 "",
2799 "",
2800 "",
2801 "",
2802 "';'",
2803 "name string",
2804 "'='",
2805 "']'",
2806 "'['",
2807 "')'",
2808 "'('",
2809 "','",
2810 "'}'",
2811 "'{'",
2812 "\"do\"",
2813 "\"for\"",
2814 "\"while\"",
2815 "\"else\"",
2816 "\"if\"",
2817 "\"+=\"",
2818 "\"-=\"",
2819 "\"*=\"",
2820 "\"/=\"",
2821 "\"%=\"",
2822 "\"|=\"",
2823 "\"&=\"",
2824 "\"^=\"",
2825 "\"<<=\"",
2826 "\">>=\"",
2827 "':'",
2828 "'\\?'",
2829 "\"||\"",
2830 "\"&&\"",
2831 "'|'",
2832 "'^'",
2833 "'&'",
2834 "\"==\"",
2835 "\"!=\"",
2836 "'<'",
2837 "\"<=\"",
2838 "'>'",
2839 "\">=\"",
2840 "\"<<\"",
2841 "\">>\"",
2842 "'+'",
2843 "'-'",
2844 "'*'",
2845 "'/'",
2846 "'%'",
2847 "\"++\"",
2848 "\"--\"",
2849 "'!'",
2850 "'~'",
2851 "\"**\"",
2852 "real",
2853 "string literal",
2854 "'.'",
2855 "character constant",
2856 "",
2857 "'\\\"'",
2858 "'\\''",
2859 "",
2860 "",
2861 "",
2862 "",
2863 "",
2864 "'\\\\'",
2865 "integer",
2866
2867 };
2868
2869 #ifndef MISSING_FORMAT
2870 #define MISSING_FORMAT "Missing %s"
2871 #endif
2872 #ifndef UNEXPECTED_FORMAT
2873 #define UNEXPECTED_FORMAT "Unexpected %s"
2874 #endif
2875 #ifndef UNNAMED_TOKEN
2876 #define UNNAMED_TOKEN "input"
2877 #endif
2878
2879
2880 static void ag_diagnose(void) {
2881 int ag_snd = (PCB).sn;
2882 int ag_k = ag_sbt[ag_snd];
2883
2884 if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) {
2885 sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
2886 }
2887 else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8
2888 && (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1
2889 && *TOKEN_NAMES[ag_tstt[ag_k]]) {
2890 sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
2891 }
2892 else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) {
2893 sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]);
2894 }
2895 else if (isprint(INPUT_CODE((*(PCB).pointer))) && INPUT_CODE((*(PCB).pointer)) != '\\') {
2896 char buf[20];
2897 sprintf(buf, "\'%c\'", (char) INPUT_CODE((*(PCB).pointer)));
2898 sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf);
2899 }
2900 else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN);
2901 (PCB).error_message = (PCB).ag_msg;
2902
2903
2904 }
2905 static int ag_action_1_r_proc(void);
2906 static int ag_action_2_r_proc(void);
2907 static int ag_action_3_r_proc(void);
2908 static int ag_action_4_r_proc(void);
2909 static int ag_action_1_s_proc(void);
2910 static int ag_action_3_s_proc(void);
2911 static int ag_action_1_proc(void);
2912 static int ag_action_2_proc(void);
2913 static int ag_action_3_proc(void);
2914 static int ag_action_4_proc(void);
2915 static int ag_action_5_proc(void);
2916 static int ag_action_6_proc(void);
2917 static int ag_action_7_proc(void);
2918 static int ag_action_8_proc(void);
2919 static int ag_action_9_proc(void);
2920 static int ag_action_10_proc(void);
2921 static int ag_action_11_proc(void);
2922 static int ag_action_8_proc(void);
2923
2924
2925 static int (*const ag_r_procs_scan[])(void) = {
2926 ag_action_1_r_proc,
2927 ag_action_2_r_proc,
2928 ag_action_3_r_proc,
2929 ag_action_4_r_proc
2930 };
2931
2932 static int (*const ag_s_procs_scan[])(void) = {
2933 ag_action_1_s_proc,
2934 ag_action_2_r_proc,
2935 ag_action_3_s_proc,
2936 ag_action_4_r_proc
2937 };
2938
2939 static int (*const ag_gt_procs_scan[])(void) = {
2940 ag_action_1_proc,
2941 ag_action_2_proc,
2942 ag_action_3_proc,
2943 ag_action_4_proc,
2944 ag_action_5_proc,
2945 ag_action_6_proc,
2946 ag_action_7_proc,
2947 ag_action_8_proc,
2948 ag_action_9_proc,
2949 ag_action_10_proc,
2950 ag_action_11_proc,
2951 ag_action_8_proc
2952 };
2953
2954
2955 static int ag_action_1_er_proc(void);
2956 static int ag_action_2_er_proc(void);
2957 static int ag_action_3_er_proc(void);
2958 static int ag_action_4_er_proc(void);
2959
2960 static int (*const ag_er_procs_scan[])(void) = {
2961 ag_action_1_er_proc,
2962 ag_action_2_er_proc,
2963 ag_action_3_er_proc,
2964 ag_action_4_er_proc
2965 };
2966
2967
2968 static void ag_error_resynch(void) {
2969 int ag_k;
2970 int ag_ssx = (PCB).ssx;
2971
2972 ag_diagnose();
2973 SYNTAX_ERROR;
2974 if ((PCB).exit_flag != AG_RUNNING_CODE) return;
2975 while (1) {
2976 ag_k = ag_sbt[(PCB).sn];
2977 while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++;
2978 if (ag_tstt[ag_k] || (PCB).ssx == 0) break;
2979 (PCB).sn = (PCB).ss[--(PCB).ssx];
2980 }
2981 if (ag_tstt[ag_k] == 0) {
2982 (PCB).sn = PCB.ss[(PCB).ssx = ag_ssx];
2983 (PCB).exit_flag = AG_SYNTAX_ERROR_CODE;
2984 return;
2985 }
2986 ag_k = ag_sbt[(PCB).sn];
2987 while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++;
2988 (PCB).ag_ap = ag_pstt[ag_k];
2989 (ag_er_procs_scan[ag_astt[ag_k]])();
2990 while (1) {
2991 ag_k = ag_sbt[(PCB).sn];
2992 while (ag_tstt[ag_k] != (unsigned char) (PCB).token_number && ag_tstt[ag_k])
2993 ag_k++;
2994 if (ag_tstt[ag_k] && ag_astt[ag_k] != ag_action_10) break;
2995 if ((PCB).token_number == 7)
2996 {(PCB).exit_flag = AG_SYNTAX_ERROR_CODE; return;}
2997 {(PCB).la_ptr = (PCB).pointer + 1; ag_track();}
2998 (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
2999 (PCB).la_ptr++;
3000 if (ag_key_index[(PCB).sn]) {
3001 unsigned ag_k = ag_key_index[(PCB).sn];
3002 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
3003 if (ag_ch <= 255) {
3004 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
3005 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
3006 }
3007 }
3008 }
3009 (PCB).la_ptr = (PCB).pointer;
3010 }
3011
3012
3013 static int ag_action_10_proc(void) {
3014 int ag_t = (PCB).token_number;
3015 (PCB).btsx = 0, (PCB).drt = -1;
3016 do {
3017 ag_track();
3018 (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
3019 (PCB).la_ptr++;
3020 if (ag_key_index[(PCB).sn]) {
3021 unsigned ag_k = ag_key_index[(PCB).sn];
3022 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
3023 if (ag_ch <= 255) {
3024 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
3025 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
3026 }
3027 }
3028 } while ((PCB).token_number == (vmCompile_token_type) ag_t);
3029 (PCB).la_ptr = (PCB).pointer;
3030 return 1;
3031 }
3032
3033 static int ag_action_11_proc(void) {
3034 int ag_t = (PCB).token_number;
3035
3036 (PCB).btsx = 0, (PCB).drt = -1;
3037 do {
3038 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
3039 (PCB).ssx--;
3040 ag_track();
3041 ag_ra();
3042 if ((PCB).exit_flag != AG_RUNNING_CODE) return 0;
3043 (PCB).ssx++;
3044 (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
3045 (PCB).la_ptr++;
3046 if (ag_key_index[(PCB).sn]) {
3047 unsigned ag_k = ag_key_index[(PCB).sn];
3048 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
3049 if (ag_ch <= 255) {
3050 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
3051 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
3052 }
3053 }
3054 }
3055 while ((PCB).token_number == (vmCompile_token_type) ag_t);
3056 (PCB).la_ptr = (PCB).pointer;
3057 return 1;
3058 }
3059
3060 static int ag_action_3_r_proc(void) {
3061 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
3062 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3063 (PCB).btsx = 0, (PCB).drt = -1;
3064 (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap];
3065 ag_ra();
3066 return (PCB).exit_flag == AG_RUNNING_CODE;
3067 }
3068
3069 static int ag_action_3_s_proc(void) {
3070 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
3071 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3072 (PCB).btsx = 0, (PCB).drt = -1;
3073 (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap];
3074 ag_ra();
3075 return (PCB).exit_flag == AG_RUNNING_CODE;
3076 }
3077
3078 static int ag_action_4_r_proc(void) {
3079 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
3080 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3081 (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap];
3082 return 1;
3083 }
3084
3085 static int ag_action_2_proc(void) {
3086 (PCB).btsx = 0, (PCB).drt = -1;
3087 if ((PCB).ssx >= 128) {
3088 (PCB).exit_flag = AG_STACK_ERROR_CODE;
3089 PARSER_STACK_OVERFLOW;
3090 }
3091 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
3092 (PCB).ss[(PCB).ssx] = (PCB).sn;
3093 (PCB).ssx++;
3094 (PCB).sn = (PCB).ag_ap;
3095 ag_track();
3096 return 0;
3097 }
3098
3099 static int ag_action_9_proc(void) {
3100 if ((PCB).drt == -1) {
3101 (PCB).drt=(PCB).token_number;
3102 (PCB).dssx=(PCB).ssx;
3103 (PCB).dsn=(PCB).sn;
3104 }
3105 ag_prot();
3106 (PCB).vs[(PCB).ssx] = ag_null_value;
3107 (PCB).ss[(PCB).ssx] = (PCB).sn;
3108 (PCB).ssx++;
3109 (PCB).sn = (PCB).ag_ap;
3110 (PCB).la_ptr = (PCB).pointer;
3111 return (PCB).exit_flag == AG_RUNNING_CODE;
3112 }
3113
3114 static int ag_action_2_r_proc(void) {
3115 (PCB).ssx++;
3116 (PCB).sn = (PCB).ag_ap;
3117 return 0;
3118 }
3119
3120 static int ag_action_7_proc(void) {
3121 --(PCB).ssx;
3122 (PCB).la_ptr = (PCB).pointer;
3123 (PCB).exit_flag = AG_SUCCESS_CODE;
3124 return 0;
3125 }
3126
3127 static int ag_action_1_proc(void) {
3128 ag_track();
3129 (PCB).exit_flag = AG_SUCCESS_CODE;
3130 return 0;
3131 }
3132
3133 static int ag_action_1_r_proc(void) {
3134 (PCB).exit_flag = AG_SUCCESS_CODE;
3135 return 0;
3136 }
3137
3138 static int ag_action_1_s_proc(void) {
3139 (PCB).exit_flag = AG_SUCCESS_CODE;
3140 return 0;
3141 }
3142
3143 static int ag_action_4_proc(void) {
3144 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
3145 (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap];
3146 (PCB).btsx = 0, (PCB).drt = -1;
3147 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
3148 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3149 else (PCB).ss[(PCB).ssx] = (PCB).sn;
3150 ag_track();
3151 while ((PCB).exit_flag == AG_RUNNING_CODE) {
3152 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
3153 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
3154 do {
3155 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3156 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
3157 else ag_t2 = ag_tx;
3158 } while (ag_t1 < ag_t2);
3159 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
3160 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
3161 REDUCTION_TOKEN_ERROR; break;}
3162 (PCB).ag_ap = ag_pstt[ag_t1];
3163 if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
3164 }
3165 return 0;
3166 }
3167
3168 static int ag_action_3_proc(void) {
3169 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
3170 (PCB).btsx = 0, (PCB).drt = -1;
3171 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
3172 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3173 else (PCB).ss[(PCB).ssx] = (PCB).sn;
3174 ag_track();
3175 (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap];
3176 ag_ra();
3177 while ((PCB).exit_flag == AG_RUNNING_CODE) {
3178 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
3179 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
3180 do {
3181 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3182 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
3183 else ag_t2 = ag_tx;
3184 } while (ag_t1 < ag_t2);
3185 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
3186 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
3187 REDUCTION_TOKEN_ERROR; break;}
3188 (PCB).ag_ap = ag_pstt[ag_t1];
3189 if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
3190 }
3191 return 0;
3192 }
3193
3194 static int ag_action_8_proc(void) {
3195 int ag_k = ag_sbt[(PCB).sn];
3196 while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++;
3197 if (ag_tstt[ag_k] == 0) ag_undo();
3198 (PCB).la_ptr = (PCB).pointer;
3199 ag_error_resynch();
3200 return (PCB).exit_flag == AG_RUNNING_CODE;
3201 }
3202
3203 static int ag_action_5_proc(void) {
3204 int ag_sd = ag_fl[(PCB).ag_ap];
3205 (PCB).btsx = 0, (PCB).drt = -1;
3206 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3207 else {
3208 (PCB).ss[(PCB).ssx] = (PCB).sn;
3209 }
3210 (PCB).la_ptr = (PCB).pointer;
3211 (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap];
3212 ag_ra();
3213 while ((PCB).exit_flag == AG_RUNNING_CODE) {
3214 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
3215 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
3216 do {
3217 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3218 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
3219 else ag_t2 = ag_tx;
3220 } while (ag_t1 < ag_t2);
3221 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
3222 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
3223 REDUCTION_TOKEN_ERROR; break;}
3224 (PCB).ag_ap = ag_pstt[ag_t1];
3225 if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
3226 }
3227 return (PCB).exit_flag == AG_RUNNING_CODE;
3228 }
3229
3230 static int ag_action_6_proc(void) {
3231 int ag_sd = ag_fl[(PCB).ag_ap];
3232 (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap];
3233 if ((PCB).drt == -1) {
3234 (PCB).drt=(PCB).token_number;
3235 (PCB).dssx=(PCB).ssx;
3236 (PCB).dsn=(PCB).sn;
3237 }
3238 if (ag_sd) {
3239 (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3240 }
3241 else {
3242 ag_prot();
3243 (PCB).vs[(PCB).ssx] = ag_null_value;
3244 (PCB).ss[(PCB).ssx] = (PCB).sn;
3245 }
3246 (PCB).la_ptr = (PCB).pointer;
3247 while ((PCB).exit_flag == AG_RUNNING_CODE) {
3248 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
3249 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
3250 do {
3251 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3252 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
3253 else ag_t2 = ag_tx;
3254 } while (ag_t1 < ag_t2);
3255 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
3256 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
3257 REDUCTION_TOKEN_ERROR; break;}
3258 (PCB).ag_ap = ag_pstt[ag_t1];
3259 if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
3260 }
3261 return (PCB).exit_flag == AG_RUNNING_CODE;
3262 }
3263
3264
3265 static int ag_action_2_er_proc(void) {
3266 (PCB).btsx = 0, (PCB).drt = -1;
3267 (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
3268 (PCB).ssx++;
3269 (PCB).sn = (PCB).ag_ap;
3270 return 0;
3271 }
3272
3273 static int ag_action_1_er_proc(void) {
3274 (PCB).btsx = 0, (PCB).drt = -1;
3275 (PCB).exit_flag = AG_SUCCESS_CODE;
3276 return 0;
3277 }
3278
3279 static int ag_action_4_er_proc(void) {
3280 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
3281 (PCB).btsx = 0, (PCB).drt = -1;
3282 (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap];
3283 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3284 else (PCB).ss[(PCB).ssx] = (PCB).sn;
3285 while ((PCB).exit_flag == AG_RUNNING_CODE) {
3286 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
3287 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
3288 do {
3289 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3290 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
3291 else ag_t2 = ag_tx;
3292 } while (ag_t1 < ag_t2);
3293 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
3294 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
3295 REDUCTION_TOKEN_ERROR; break;}
3296 (PCB).ag_ap = ag_pstt[ag_t1];
3297 if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
3298 }
3299 return 0;
3300 }
3301
3302 static int ag_action_3_er_proc(void) {
3303 int ag_sd = ag_fl[(PCB).ag_ap] - 1;
3304 (PCB).btsx = 0, (PCB).drt = -1;
3305 if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
3306 else (PCB).ss[(PCB).ssx] = (PCB).sn;
3307 (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap];
3308 ag_ra();
3309 while ((PCB).exit_flag == AG_RUNNING_CODE) {
3310 unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
3311 unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
3312 do {
3313 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3314 if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
3315 else ag_t2 = ag_tx;
3316 } while (ag_t1 < ag_t2);
3317 if (ag_tstt[ag_t1] != (PCB).reduction_token) {
3318 (PCB).exit_flag = AG_REDUCTION_ERROR_CODE;
3319 REDUCTION_TOKEN_ERROR; break;}
3320 (PCB).ag_ap = ag_pstt[ag_t1];
3321 if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
3322 }
3323 return 0;
3324 }
3325
3326
3327 void init_vmCompile(void) {
3328 (PCB).la_ptr = (PCB).pointer;
3329 (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0;
3330 (PCB).exit_flag = AG_RUNNING_CODE;
3331 (PCB).line = FIRST_LINE;
3332 (PCB).column = FIRST_COLUMN;
3333 (PCB).btsx = 0, (PCB).drt = -1;
3334 }
3335
3336 void vmCompile(void) {
3337 init_vmCompile();
3338 (PCB).exit_flag = AG_RUNNING_CODE;
3339 while ((PCB).exit_flag == AG_RUNNING_CODE) {
3340 unsigned ag_t1 = ag_sbt[(PCB).sn];
3341 if (ag_tstt[ag_t1]) {
3342 unsigned ag_t2 = ag_sbe[(PCB).sn] - 1;
3343 (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
3344 (PCB).la_ptr++;
3345 if (ag_key_index[(PCB).sn]) {
3346 unsigned ag_k = ag_key_index[(PCB).sn];
3347 int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
3348 if (ag_ch <= 255) {
3349 while (ag_key_ch[ag_k] < ag_ch) ag_k++;
3350 if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
3351 }
3352 }
3353 do {
3354 unsigned ag_tx = (ag_t1 + ag_t2)/2;
3355 if (ag_tstt[ag_tx] > (unsigned char)(PCB).token_number)
3356 ag_t1 = ag_tx + 1;
3357 else ag_t2 = ag_tx;
3358 } while (ag_t1 < ag_t2);
3359 if (ag_tstt[ag_t1] != (unsigned char)(PCB).token_number)
3360 ag_t1 = ag_sbe[(PCB).sn];
3361 }
3362 (PCB).ag_ap = ag_pstt[ag_t1];
3363 (ag_gt_procs_scan[ag_astt[ag_t1]])();
3364 }
3365 }
3366
3367