1 /*
2 * common functions for Indeo Video Interactive codecs (Indeo4 and Indeo5)
3 *
4 * Copyright (c) 2009 Maxim Poliakovski
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23 /**
24 * @file
25 * This file contains functions and data shared by both Indeo4 and
26 * Indeo5 decoders.
27 */
28
29 #define BITSTREAM_READER_LE
37
38 /**
39 * These are 2x8 predefined Huffman codebooks for coding macroblock/block
40 * signals. They are specified using "huffman descriptors" in order to
41 * avoid huge static tables. The decoding tables will be generated at
42 * startup from these descriptors.
43 */
44 /** static macroblock huffman tables */
46 {8, {0, 4, 5, 4, 4, 4, 6, 6}},
47 {12, {0, 2, 2, 3, 3, 3, 3, 5, 3, 2, 2, 2}},
48 {12, {0, 2, 3, 4, 3, 3, 3, 3, 4, 3, 2, 2}},
49 {12, {0, 3, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2}},
50 {13, {0, 4, 4, 3, 3, 3, 3, 2, 3, 3, 2, 1, 1}},
51 {9, {0, 4, 4, 4, 4, 3, 3, 3, 2}},
52 {10, {0, 4, 4, 4, 4, 3, 3, 2, 2, 2}},
53 {12, {0, 4, 4, 4, 3, 3, 2, 3, 2, 2, 2, 2}}
54 };
55
56 /** static block huffman tables */
58 {10, {1, 2, 3, 4, 4, 7, 5, 5, 4, 1}},
59 {11, {2, 3, 4, 4, 4, 7, 5, 4, 3, 3, 2}},
60 {12, {2, 4, 5, 5, 5, 5, 6, 4, 4, 3, 1, 1}},
61 {13, {3, 3, 4, 4, 5, 6, 6, 4, 4, 3, 2, 1, 1}},
62 {11, {3, 4, 4, 5, 5, 5, 6, 5, 4, 2, 2}},
63 {13, {3, 4, 5, 5, 5, 5, 6, 4, 3, 3, 2, 1, 1}},
64 {13, {3, 4, 5, 5, 5, 6, 5, 4, 3, 3, 2, 1, 1}},
65 {9, {3, 4, 4, 5, 5, 5, 6, 5, 5}}
66 };
67
70
72 uint32_t pitch, int mc_type);
73
75 int offs, int mv_x, int mv_y, int mc_type)
76 {
77 int ref_offs = offs + mv_y * band->
pitch + mv_x;
80 int ref_size = (mc_type > 1) * band->
pitch + (mc_type & 1);
81
84 av_assert0(buf_size - min_size - ref_size >= ref_offs);
85
87
88 return 0;
89 }
90
91 /**
92 * Reverse "nbits" bits of the value "val" and return the result
93 * in the least significant bits.
94 */
96 {
98
99 if (nbits <= 8) {
101 } else
104
106 }
107
108 /*
109 * Generate a huffman codebook from the given descriptor
110 * and convert it into the FFmpeg VLC table.
111 *
112 * @param[in] cb pointer to codebook descriptor
113 * @param[out] vlc where to place the generated VLC table
114 * @param[in] flag flag: 1 - for static or 0 for dynamic tables
115 * @return result code: 0 - OK, -1 = error (invalid codebook descriptor)
116 */
118 {
119 int pos, i, j, codes_per_row, prefix, not_last_row;
120 uint16_t codewords[256]; /* FIXME: move this temporal storage out? */
122
123 pos = 0; /* current position = 0 */
124
125 for (i = 0; i < cb->
num_rows; i++) {
126 codes_per_row = 1 << cb->
xbits[i];
127 not_last_row = (i != cb->
num_rows - 1);
128 prefix = ((1 << i) - 1) << (cb->
xbits[i] + not_last_row);
129
130 for (j = 0; j < codes_per_row; j++) {
131 if (pos >= 256) /* Some Indeo5 codebooks can have more than 256 */
132 break; /* elements, but only 256 codes are allowed! */
133
134 bits[pos] = i + cb->
xbits[i] + not_last_row;
137
138 codewords[pos] =
inv_bits((prefix | j), bits[pos]);
139 if (!bits[pos])
140 bits[pos] = 1;
141
142 pos++;
143 }//for j
144 }//for i
145
146 /* number of codewords = pos */
149 }
150
152 {
153 int i;
155 static int initialized_vlcs = 0;
156
157 if (initialized_vlcs)
158 return;
159 for (i = 0; i < 8; i++) {
160 ivi_mb_vlc_tabs[i].
table = table_data + i * 2 * 8192;
163 &ivi_mb_vlc_tabs[i], 1);
164 ivi_blk_vlc_tabs[i].
table = table_data + (i * 2 + 1) * 8192;
167 &ivi_blk_vlc_tabs[i], 1);
168 }
169 initialized_vlcs = 1;
170 }
171
172 /*
173 * Copy huffman codebook descriptors.
174 *
175 * @param[out] dst ptr to the destination descriptor
176 * @param[in] src ptr to the source descriptor
177 */
179 {
182 }
183
184 /*
185 * Compare two huffman codebook descriptors.
186 *
187 * @param[in] desc1 ptr to the 1st descriptor to compare
188 * @param[in] desc2 ptr to the 2nd descriptor to compare
189 * @return comparison result: 0 - equal, 1 - not equal
190 */
193 {
196 }
197
200 {
201 int i, result;
203
204 if (!desc_coded) {
205 /* select default table */
206 huff_tab->
tab = (which_tab) ? &ivi_blk_vlc_tabs[7]
207 : &ivi_mb_vlc_tabs [7];
208 return 0;
209 }
210
213 /* custom huffman table (explicitly encoded) */
218 }
219
220 for (i = 0; i < new_huff.
num_rows; i++)
222
223 /* Have we got the same custom table? Rebuild if not. */
226
231 if (result) {
232 // reset faulty description
235 "Error while initializing custom vlc table!\n");
236 return result;
237 }
238 }
240 } else {
241 /* select one of predefined tables */
242 huff_tab->
tab = (which_tab) ? &ivi_blk_vlc_tabs[huff_tab->
tab_sel]
243 : &ivi_mb_vlc_tabs [huff_tab->
tab_sel];
244 }
245
246 return 0;
247 }
248
249 /*
250 * Free planes, bands and macroblocks buffers.
251 *
252 * @param[in] planes pointer to the array of the plane descriptors
253 */
255 {
257
258 for (p = 0; p < 3; p++) {
259 if (planes[p].bands)
260 for (b = 0; b < planes[p].
num_bands; b++) {
261 av_freep(&planes[p].bands[b].bufs[0]);
262 av_freep(&planes[p].bands[b].bufs[1]);
263 av_freep(&planes[p].bands[b].bufs[2]);
264
265 if (planes[p].bands[b].blk_vlc.cust_tab.table)
268 av_freep(&planes[p].bands[b].tiles[t].mbs);
269 av_freep(&planes[p].bands[b].tiles);
270 }
273 }
274 }
275
277 {
279 uint32_t b_width, b_height, align_fac, width_aligned,
280 height_aligned, buf_size;
282
284
288
289 /* fill in the descriptor of the luminance plane */
293
294 /* fill in the descriptors of the chrominance planes */
298
299 for (p = 0; p < 3; p++) {
301 if (!planes[p].bands)
303
304 /* select band dimensions: if there is only one band then it
305 * has the full size, if there are several bands each of them
306 * has only half size */
308 : (planes[p].
width + 1) >> 1;
310 : (planes[p].
height + 1) >> 1;
311
312 /* luma band buffers will be aligned on 16x16 (max macroblock size) */
313 /* chroma band buffers will be aligned on 8x8 (max macroblock size) */
314 align_fac = p ? 8 : 16;
315 width_aligned =
FFALIGN(b_width , align_fac);
316 height_aligned =
FFALIGN(b_height, align_fac);
317 buf_size = width_aligned * height_aligned * sizeof(int16_t);
318
319 for (b = 0; b < planes[p].
num_bands; b++) {
320 band = &planes[p].
bands[
b];
/* select appropriate plane/band */
323 band->
width = b_width;
325 band->
pitch = width_aligned;
326 band->
aheight = height_aligned;
330 if (!band->
bufs[0] || !band->
bufs[1])
332
333 /* allocate the 3rd band buffer for scalability mode */
338 }
339 /* reset custom vlc */
341 }
342 }
343
344 return 0;
345 }
346
348 int p,
int b,
int t_height,
int t_width)
349 {
352
353 for (y = 0; y < band->
height; y += t_height) {
354 for (x = 0; x < band->
width; x += t_width) {
361 /* calculate number of macroblocks */
364
369
371 if (p || b) {
375 }
377 ref_tile++;
378 }
379 tile++;
380 }
381 }
382
383 return 0;
384 }
385
387 int tile_width, int tile_height)
388 {
389 int p,
b, x_tiles, y_tiles, t_width, t_height,
ret;
391
392 for (p = 0; p < 3; p++) {
393 t_width = !p ? tile_width : (tile_width + 3) >> 2;
394 t_height = !p ? tile_height : (tile_height + 3) >> 2;
395
396 if (!p && planes[0].num_bands == 4) {
397 t_width >>= 1;
398 t_height >>= 1;
399 }
400 if(t_width<=0 || t_height<=0)
402
403 for (b = 0; b < planes[p].
num_bands; b++) {
404 band = &planes[p].
bands[
b];
408
413
414 /* use the first luma band as reference for motion vectors
415 * and quant */
417 p, b, t_height, t_width);
418 if (ret < 0)
420 }
421 }
422
423 return 0;
424 }
425
426 /*
427 * Decode size of the tile data.
428 * The size is stored as a variable-length field having the following format:
429 * if (tile_data_size < 255) than this field is only one byte long
430 * if (tile_data_size >= 255) than this field four is byte long: 0xFF X1 X2 X3
431 * where X1-X3 is size of the tile data
432 *
433 * @param[in,out] gb the GetBit context
434 * @return size of the tile data in bytes
435 */
437 {
439
440 len = 0;
443 if (len == 255)
445 }
446
447 /* align the bitstream reader on the byte boundary */
449
451 }
452
454 int blk_size)
455 {
457 int min_size = (blk_size - 1) * band->
pitch + blk_size;
458
459 if (min_size > buf_size)
461
463 band->
pitch, blk_size);
464
465 return 0;
466 }
467
470 int *prev_dc, int is_intra, int mc_type,
471 uint32_t
quant,
int offs,
473 {
478 uint32_t sym = 0, lo, hi, q;
481 int num_coeffs = blk_size * blk_size;
482 int col_mask = blk_size - 1;
483 int scan_pos = -1;
487
488 if (min_size > buf_size)
490
494 }
495
496 /* zero transform vector */
497 memset(trvec, 0, num_coeffs * sizeof(trvec[0]));
498 /* zero column flags */
499 memset(col_flags, 0, sizeof(col_flags));
500 while (scan_pos <= num_coeffs) {
504 break; /* End of block */
505
506 /* Escape - run/val explicitly coded using 3 vlc codes */
511 /* merge them and convert into signed val */
513 } else {
517 }
520 }
521
522 /* de-zigzag and dequantize */
524 if (scan_pos >= num_coeffs || scan_pos < 0)
525 break;
526 pos = band->
scan[scan_pos];
527
528 if (!val)
529 av_dlog(avctx,
"Val = 0 encountered!\n");
530
531 q = (base_tab[pos] *
quant) >> 9;
532 if (q > 1)
533 val = val * q +
FFSIGN(val) * (((q ^ 1) - 1) >> 1);
535 /* track columns containing non-zero coeffs */
536 col_flags[pos & col_mask] |= !!
val;
537 }
538
539 if (scan_pos < 0 || scan_pos >= num_coeffs && sym != rvmap->
eob_sym)
541
542 /* undoing DC coeff prediction for intra-blocks */
544 *prev_dc += trvec[0];
545 trvec[0] = *prev_dc;
546 col_flags[0] |= !!*prev_dc;
547 }
548
552 }
553
554 /* apply inverse transform */
556 band->
pitch, col_flags);
557
558 /* apply motion compensation */
559 if (!is_intra)
560 return ivi_mc(band, mc, offs, mv_x, mv_y, mc_type);
561
562 return 0;
563 }
564 /*
565 * Decode block data:
566 * extract huffman-coded transform coefficients from the bitstream,
567 * dequantize them, apply inverse transform and motion compensation
568 * in order to reconstruct the picture.
569 *
570 * @param[in,out] gb the GetBit context
571 * @param[in] band pointer to the band descriptor
572 * @param[in] tile pointer to the tile descriptor
573 * @return result code: 0 - OK, -1 = error (corrupted blocks data)
574 */
577 {
578 int mbn,
blk, num_blocks, blk_size,
ret, is_intra, mc_type = 0;
579 int mv_x = 0, mv_y = 0;
581 uint32_t cbp,
quant, buf_offs;
585
586 /* init intra prediction for the DC coefficient */
587 prev_dc = 0;
589 /* number of blocks per mb */
590 num_blocks = (band->
mb_size != blk_size) ? 4 : 1;
591 if (blk_size == 8) {
594 } else {
597 }
598
599 for (mbn = 0, mb = tile->
mbs; mbn < tile->num_MBs; mb++, mbn++) {
600 is_intra = !mb->
type;
603
606 quant = av_clip(quant, 0, 31);
607 else
608 quant = av_clip(quant, 0, 23);
609
611 if (scale_tab)
612 quant = scale_tab[
quant];
613
614 if (!is_intra) {
618 mc_type = ((mv_y & 1) << 1) | (mv_x & 1);
619 mv_x >>= 1;
620 mv_y >>= 1; /* convert halfpel vectors into fullpel ones */
621 }
623 int dmv_x, dmv_y, cx, cy;
624
629
630 if (mb->
xpos + dmv_x < 0 ||
632 mb->
ypos + dmv_y < 0 ||
635 }
636 }
637 }
638
639 for (blk = 0; blk < num_blocks; blk++) {
640 /* adjust block position in the buffer according to its number */
641 if (blk & 1) {
642 buf_offs += blk_size;
643 } else if (blk == 2) {
644 buf_offs -= blk_size;
645 buf_offs += blk_size * band->
pitch;
646 }
647
648 if (cbp & 1) { /* block coded ? */
650 mv_x, mv_y, &prev_dc, is_intra,
651 mc_type, quant, buf_offs, avctx);
652 if (ret < 0)
654 } else {
655 /* block not coded */
656 /* for intra blocks apply the dc slant transform */
657 /* for inter - perform the motion compensation without delta */
658 if (is_intra) {
660 if (ret < 0)
662 } else {
663 ret =
ivi_mc(band, mc_no_delta_func, buf_offs,
664 mv_x, mv_y, mc_type);
665 if (ret < 0)
667 }
668 }
669
670 cbp >>= 1;
671 }// for blk
672 }// for mbn
673
675
676 return 0;
677 }
678
679 /**
680 * Handle empty tiles by performing data copying and motion
681 * compensation respectively.
682 *
683 * @param[in] avctx ptr to the AVCodecContext
684 * @param[in] band pointer to the band descriptor
685 * @param[in] tile pointer to the tile descriptor
686 * @param[in] mv_scale scaling factor for motion vectors
687 */
690 {
691 int x,
y, need_mc, mbn,
blk, num_blocks, mv_x, mv_y, mc_type;
692 int offs, mb_offset, row_offset,
ret;
695 int16_t *dst;
697
700 "parameters %d in ivi_process_empty_tile()\n",
703 }
704
709 need_mc = 0; /* reset the mc tracking flag */
710
712 mb_offset = offs;
713
718
719 mb->
type = 1;
/* set the macroblocks type = INTER */
720 mb->
cbp = 0;
/* all blocks are empty */
721
726 }
727
730
732 /* motion vector inheritance */
733 if (mv_scale) {
736 } else {
739 }
740 need_mc |= mb->
mv_x || mb->
mv_y;
/* tracking non-zero motion vectors */
741 {
742 int dmv_x, dmv_y, cx, cy;
743
748
749 if ( mb->
xpos + dmv_x < 0
751 || mb->
ypos + dmv_y < 0
755 }
756 }
757 }
758
759 mb++;
760 if (ref_mb)
761 ref_mb++;
763 } // for x
764 offs += row_offset;
765 } // for y
766
767 if (band->
inherit_mv && need_mc) {
/* apply motion compensation if there is at least one non-zero motion vector */
768 num_blocks = (band->
mb_size != band->
blk_size) ? 4 : 1;
/* number of blocks per mb */
771
772 for (mbn = 0, mb = tile->
mbs; mbn < tile->num_MBs; mb++, mbn++) {
776 mc_type = 0; /* we have only fullpel vectors */
777 } else {
778 mc_type = ((mv_y & 1) << 1) | (mv_x & 1);
779 mv_x >>= 1;
780 mv_y >>= 1; /* convert halfpel vectors into fullpel ones */
781 }
782
783 for (blk = 0; blk < num_blocks; blk++) {
784 /* adjust block position in the buffer according with its number */
786 ret =
ivi_mc(band, mc_no_delta_func, offs,
787 mv_x, mv_y, mc_type);
788 if (ret < 0)
790 }
791 }
792 } else {
793 /* copy data from the reference tile into the current one */
796 for (y = 0; y < tile->
height; y++) {
797 memcpy(dst, src, tile->
width*
sizeof(band->
buf[0]));
800 }
801 }
802
803 return 0;
804 }
805
806
807 #ifdef DEBUG
809 {
811 int16_t *
src, checksum;
812
814 checksum = 0;
815
816 for (y = 0; y < band->
height; src += band->
pitch, y++)
817 for (x = 0; x < band->
width; x++)
818 checksum += src[x];
819
820 return checksum;
821 }
822 #endif
823
824 /*
825 * Convert and output the current plane.
826 * This conversion is done by adding back the bias value of 128
827 * (subtracted in the encoder) and clipping the result.
828 *
829 * @param[in] plane pointer to the descriptor of the plane being processed
830 * @param[out] dst pointer to the buffer receiving converted pixels
831 * @param[in] dst_pitch pitch for moving to the next y line
832 */
834 {
836 const int16_t *src = plane->
bands[0].
buf;
838
839 if (!src)
840 return;
841
842 for (y = 0; y < plane->
height; y++) {
843 for (x = 0; x < plane->
width; x++)
844 dst[x] = av_clip_uint8(src[x] + 128);
845 src += pitch;
847 }
848 }
849
850 /**
851 * Decode an Indeo 4 or 5 band.
852 *
853 * @param[in,out] ctx ptr to the decoder context
854 * @param[in,out] band ptr to the band descriptor
855 * @param[in] avctx ptr to the AVCodecContext
856 * @return result code: 0 = OK, -1 = error
857 */
860 {
861 int result, i,
t, idx1, idx2, pos;
863
868 }
871
873 if (result) {
875 result);
876 return result;
877 }
878
882 }
883
885
886 /* apply corrections to the selected rvmap table if present */
887 for (i = 0; i < band->
num_corr; i++) {
888 idx1 = band->
corr[i * 2];
889 idx2 = band->
corr[i * 2 + 1];
896 }
897
899
902
907 }
912 if (result < 0)
913 break;
914 av_dlog(avctx,
"Empty tile encountered!\n");
915 } else {
920 break;
921 }
922
924 if (result < 0)
925 break;
926
928 if (result < 0) {
930 "Corrupted tile data encountered!\n");
931 break;
932 }
933
936 "Tile data_size mismatch!\n");
938 break;
939 }
940
941 pos += tile->
data_size << 3;
// skip to next tile
942 }
943 }
944
945 /* restore the selected rvmap table by applying its corrections in
946 * reverse order */
947 for (i = band->
num_corr-1; i >= 0; i--) {
948 idx1 = band->
corr[i*2];
949 idx2 = band->
corr[i*2+1];
956 }
957
958 #ifdef DEBUG
960 uint16_t chksum = ivi_calc_band_checksum(band);
963 "Band checksum mismatch! Plane %d, band %d, "
964 "received: %x, calculated: %x\n",
966 }
967 }
968 #endif
969
971
972 return result;
973 }
974
977 {
981 int buf_size = avpkt->
size;
983
987
989 if (result) {
991 "Error while decoding picture header: %d\n", result);
992 return result;
993 }
996
1000 }
1001
1005 }
1006
1008
1009 //{ START_TIMER;
1010
1013 for (p = 0; p < 3; p++) {
1016 if (result < 0) {
1018 "Error while decoding band: %d, plane: %d\n", b, p);
1019 return result;
1020 }
1021 }
1022 }
1024 } else {
1027
1028 for (p = 0; p < 3; p++) {
1031 }
1032 }
1034 return -1;
1035
1036 //STOP_TIMER("decode_planes"); }
1037
1038 /* If the bidirectional mode is enabled, next I and the following P
1039 * frame will be sent together. Unfortunately the approach below seems
1040 * to be the only way to handle the B-frames mode.
1041 * That's exactly the same Intel decoders do.
1042 */
1045 while (
get_bits(&ctx->
gb, 8));
// skip version string
1046 skip_bits_long(&ctx->
gb, 64);
// skip padding, TODO: implement correct 8-bytes alignment
1049 }
1050
1052 return buf_size;
1053
1056 return result;
1057
1061 else
1063 } else {
1065 }
1066
1069
1070 *got_frame = 1;
1071
1072 return buf_size;
1073 }
1074
1075 /**
1076 * Close Indeo5 decoder and clean up its context.
1077 */
1079 {
1081
1083
1086
1087 #if IVI4_STREAM_ANALYSER
1091 if (ctx->uses_tiling)
1093 if (ctx->has_b_frames)
1095 if (ctx->has_transp)
1097 if (ctx->uses_haar)
1099 if (ctx->uses_fullpel)
1101 }
1102 #endif
1103
1104 return 0;
1105 }
1106
1107
1108 /**
1109 * Scan patterns shared between indeo4 and indeo5
1110 */
1112 0, 8, 16, 24, 32, 40, 48, 56,
1113 1, 9, 17, 25, 33, 41, 49, 57,
1114 2, 10, 18, 26, 34, 42, 50, 58,
1115 3, 11, 19, 27, 35, 43, 51, 59,
1116 4, 12, 20, 28, 36, 44, 52, 60,
1117 5, 13, 21, 29, 37, 45, 53, 61,
1118 6, 14, 22, 30, 38, 46, 54, 62,
1119 7, 15, 23, 31, 39, 47, 55, 63
1120 };
1121
1123 0, 1, 2, 3, 4, 5, 6, 7,
1124 8, 9, 10, 11, 12, 13, 14, 15,
1125 16, 17, 18, 19, 20, 21, 22, 23,
1126 24, 25, 26, 27, 28, 29, 30, 31,
1127 32, 33, 34, 35, 36, 37, 38, 39,
1128 40, 41, 42, 43, 44, 45, 46, 47,
1129 48, 49, 50, 51, 52, 53, 54, 55,
1130 56, 57, 58, 59, 60, 61, 62, 63
1131 };
1132
1134 0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15
1135 };
1136
1137
1138 /**
1139 * Run-value (RLE) tables.
1140 */
1142 { /* MapTab0 */
1143 5, /* eob_sym */
1144 2, /* esc_sym */
1145 /* run table */
1146 {1, 1, 0, 1, 1, 0, 1, 1, 2, 2, 1, 1, 1, 1, 3, 3,
1147 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 2, 2, 5, 5,
1148 1, 1, 3, 3, 1, 1, 6, 6, 1, 2, 1, 2, 7, 7, 1, 1,
1149 8, 8, 1, 1, 4, 2, 1, 4, 2, 1, 3, 3, 1, 1, 1, 9,
1150 9, 1, 2, 1, 2, 1, 5, 5, 1, 1, 10, 10, 1, 1, 3, 3,
1151 2, 2, 1, 1, 11, 11, 6, 4, 4, 1, 6, 1, 2, 1, 2, 12,
1152 8, 1, 12, 7, 8, 7, 1, 16, 1, 16, 1, 3, 3, 13, 1, 13,
1153 2, 2, 1, 15, 1, 5, 14, 15, 1, 5, 14, 1, 17, 8, 17, 8,
1154 1, 4, 4, 2, 2, 1, 25, 25, 24, 24, 1, 3, 1, 3, 1, 8,
1155 6, 7, 6, 1, 18, 8, 18, 1, 7, 23, 2, 2, 23, 1, 1, 21,
1156 22, 9, 9, 22, 19, 1, 21, 5, 19, 5, 1, 33, 20, 33, 20, 8,
1157 4, 4, 1, 32, 2, 2, 8, 3, 32, 26, 3, 1, 7, 7, 26, 6,
1158 1, 6, 1, 1, 16, 1, 10, 1, 10, 2, 16, 29, 28, 2, 29, 28,
1159 1, 27, 5, 8, 5, 27, 1, 8, 3, 7, 3, 31, 41, 31, 1, 41,
1160 6, 1, 6, 7, 4, 4, 1, 1, 2, 1, 2, 11, 34, 30, 11, 1,
1161 30, 15, 15, 34, 36, 40, 36, 40, 35, 35, 37, 37, 39, 39, 38, 38},
1162
1163 /* value table */
1164 { 1, -1, 0, 2, -2, 0, 3, -3, 1, -1, 4, -4, 5, -5, 1, -1,
1165 6, -6, 2, -2, 7, -7, 1, -1, 8, -8, 9, -9, 3, -3, 1, -1,
1166 10, -10, 2, -2, 11, -11, 1, -1, 12, 4, -12, -4, 1, -1, 13, -13,
1167 1, -1, 14, -14, 2, 5, 15, -2, -5, -15, -3, 3, 16, -16, 17, 1,
1168 -1, -17, 6, 18, -6, -18, 2, -2, 19, -19, 1, -1, 20, -20, 4, -4,
1169 7, -7, 21, -21, 1, -1, 2, 3, -3, 22, -2, -22, 8, 23, -8, 1,
1170 2, -23, -1, 2, -2, -2, 24, 1, -24, -1, 25, 5, -5, 1, -25, -1,
1171 9, -9, 26, 1, -26, 3, 1, -1, 27, -3, -1, -27, 1, 3, -1, -3,
1172 28, -4, 4, 10, -10, -28, 1, -1, 1, -1, 29, 6, -29, -6, 30, -4,
1173 3, 3, -3, -30, 1, 4, -1, 31, -3, 1, 11, -11, -1, -31, 32, -1,
1174 -1, 2, -2, 1, 1, -32, 1, 4, -1, -4, 33, -1, 1, 1, -1, 5,
1175 5, -5, -33, -1, -12, 12, -5, -7, 1, 1, 7, 34, 4, -4, -1, 4,
1176 -34, -4, 35, 36, -2, -35, -2, -36, 2, 13, 2, -1, 1, -13, 1, -1,
1177 37, 1, -5, 6, 5, -1, 38, -6, -8, 5, 8, -1, 1, 1, -37, -1,
1178 5, 39, -5, -5, 6, -6, -38, -39, -14, 40, 14, 2, 1, 1, -2, -40,
1179 -1, -2, 2, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1}
1180 },{
1181 /* MapTab1 */
1182 0, /* eob_sym */
1183 38, /* esc_sym */
1184 /* run table */
1185 {0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 8, 6, 8, 7,
1186 7, 9, 9, 10, 10, 11, 11, 1, 12, 1, 12, 13, 13, 16, 14, 16,
1187 14, 15, 15, 17, 17, 18, 0, 18, 19, 20, 21, 19, 22, 21, 20, 22,
1188 25, 24, 2, 25, 24, 23, 23, 2, 26, 28, 26, 28, 29, 27, 29, 27,
1189 33, 33, 1, 32, 1, 3, 32, 30, 36, 3, 36, 30, 31, 31, 35, 34,
1190 37, 41, 34, 35, 37, 4, 41, 4, 49, 8, 8, 49, 40, 38, 5, 38,
1191 40, 39, 5, 39, 42, 43, 42, 7, 57, 6, 43, 44, 6, 50, 7, 44,
1192 57, 48, 50, 48, 45, 45, 46, 47, 51, 46, 47, 58, 1, 51, 58, 1,
1193 52, 59, 53, 9, 52, 55, 55, 59, 53, 56, 54, 56, 54, 9, 64, 64,
1194 60, 63, 60, 63, 61, 62, 61, 62, 2, 10, 2, 10, 11, 1, 11, 13,
1195 12, 1, 12, 13, 16, 16, 8, 8, 14, 3, 3, 15, 14, 15, 4, 4,
1196 1, 17, 17, 5, 1, 7, 7, 5, 6, 1, 2, 2, 6, 22, 1, 25,
1197 21, 22, 8, 24, 1, 21, 25, 24, 8, 18, 18, 23, 9, 20, 23, 33,
1198 29, 33, 20, 1, 19, 1, 29, 36, 9, 36, 19, 41, 28, 57, 32, 3,
1199 28, 3, 1, 27, 49, 49, 1, 32, 26, 26, 2, 4, 4, 7, 57, 41,
1200 2, 7, 10, 5, 37, 16, 10, 27, 8, 8, 13, 16, 37, 13, 1, 5},
1201
1202 /* value table */
1203 {0, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1,
1204 -1, 1, -1, 1, -1, 1, -1, 2, 1, -2, -1, 1, -1, 1, 1, -1,
1205 -1, 1, -1, 1, -1, 1, 0, -1, 1, 1, 1, -1, 1, -1, -1, -1,
1206 1, 1, 2, -1, -1, 1, -1, -2, 1, 1, -1, -1, 1, 1, -1, -1,
1207 1, -1, 3, 1, -3, 2, -1, 1, 1, -2, -1, -1, -1, 1, 1, 1,
1208 1, 1, -1, -1, -1, 2, -1, -2, 1, 2, -2, -1, 1, 1, 2, -1,
1209 -1, 1, -2, -1, 1, 1, -1, 2, 1, 2, -1, 1, -2, -1, -2, -1,
1210 -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 4, -1, -1, -4,
1211 1, 1, 1, 2, -1, -1, 1, -1, -1, 1, -1, -1, 1, -2, 1, -1,
1212 1, 1, -1, -1, 1, 1, -1, -1, 3, 2, -3, -2, 2, 5, -2, 2,
1213 2, -5, -2, -2, -2, 2, -3, 3, 2, 3, -3, 2, -2, -2, 3, -3,
1214 6, 2, -2, 3, -6, 3, -3, -3, 3, 7, -4, 4, -3, 2, -7, 2,
1215 2, -2, -4, 2, 8, -2, -2, -2, 4, 2, -2, 2, 3, 2, -2, -2,
1216 2, 2, -2, -8, -2, 9, -2, 2, -3, -2, 2, -2, 2, 2, 2, 4,
1217 -2, -4, 10, 2, 2, -2, -9, -2, 2, -2, 5, 4, -4, 4, -2, 2,
1218 -5, -4, -3, 4, 2, -3, 3, -2, -5, 5, 3, 3, -2, -3, -10, -4}
1219 },{
1220 /* MapTab2 */
1221 2, /* eob_sym */
1222 11, /* esc_sym */
1223 /* run table */
1224 {1, 1, 0, 2, 2, 1, 1, 3, 3, 4, 4, 0, 1, 1, 5, 5,
1225 2, 2, 6, 6, 7, 7, 1, 8, 1, 8, 3, 3, 9, 9, 1, 2,
1226 2, 1, 4, 10, 4, 10, 11, 11, 1, 5, 12, 12, 1, 5, 13, 13,
1227 3, 3, 6, 6, 2, 2, 14, 14, 16, 16, 15, 7, 15, 8, 8, 7,
1228 1, 1, 17, 17, 4, 4, 1, 1, 18, 18, 2, 2, 5, 5, 25, 3,
1229 9, 3, 25, 9, 19, 24, 19, 24, 1, 21, 20, 1, 21, 22, 20, 22,
1230 23, 23, 8, 6, 33, 6, 8, 33, 7, 7, 26, 26, 1, 32, 1, 32,
1231 28, 4, 28, 10, 29, 27, 27, 10, 41, 4, 29, 2, 2, 41, 36, 31,
1232 49, 31, 34, 30, 34, 36, 30, 35, 1, 49, 11, 5, 35, 11, 1, 3,
1233 3, 5, 37, 37, 8, 40, 8, 40, 12, 12, 42, 42, 1, 38, 16, 57,
1234 1, 6, 16, 39, 38, 6, 7, 7, 13, 13, 39, 43, 2, 43, 57, 2,
1235 50, 9, 44, 9, 50, 4, 15, 48, 44, 4, 1, 15, 48, 14, 14, 1,
1236 45, 45, 8, 3, 5, 8, 51, 47, 3, 46, 46, 47, 5, 51, 1, 17,
1237 17, 58, 1, 58, 2, 52, 52, 2, 53, 7, 59, 6, 6, 56, 53, 55,
1238 7, 55, 1, 54, 59, 56, 54, 10, 1, 10, 4, 60, 1, 60, 8, 4,
1239 8, 64, 64, 61, 1, 63, 3, 63, 62, 61, 5, 11, 5, 3, 11, 62},
1240
1241 /* value table */
1242 { 1, -1, 0, 1, -1, 2, -2, 1, -1, 1, -1, 0, 3, -3, 1, -1,
1243 2, -2, 1, -1, 1, -1, 4, 1, -4, -1, 2, -2, 1, -1, 5, 3,
1244 -3, -5, 2, 1, -2, -1, 1, -1, 6, 2, 1, -1, -6, -2, 1, -1,
1245 3, -3, 2, -2, 4, -4, 1, -1, 1, -1, 1, 2, -1, 2, -2, -2,
1246 7, -7, 1, -1, 3, -3, 8, -8, 1, -1, 5, -5, 3, -3, 1, 4,
1247 2, -4, -1, -2, 1, 1, -1, -1, 9, 1, 1, -9, -1, 1, -1, -1,
1248 1, -1, 3, -3, 1, 3, -3, -1, 3, -3, 1, -1, 10, 1, -10, -1,
1249 1, 4, -1, 2, 1, -1, 1, -2, 1, -4, -1, 6, -6, -1, 1, 1,
1250 1, -1, 1, 1, -1, -1, -1, 1, 11, -1, -2, 4, -1, 2, -11, 5,
1251 -5, -4, -1, 1, 4, 1, -4, -1, -2, 2, 1, -1, 12, 1, -2, 1,
1252 -12, 4, 2, 1, -1, -4, 4, -4, 2, -2, -1, 1, 7, -1, -1, -7,
1253 -1, -3, 1, 3, 1, 5, 2, 1, -1, -5, 13, -2, -1, 2, -2, -13,
1254 1, -1, 5, 6, 5, -5, 1, 1, -6, 1, -1, -1, -5, -1, 14, 2,
1255 -2, 1, -14, -1, 8, 1, -1, -8, 1, 5, 1, 5, -5, 1, -1, 1,
1256 -5, -1, 15, 1, -1, -1, -1, 3, -15, -3, 6, 1, 16, -1, 6, -6,
1257 -6, 1, -1, 1, -16, 1, 7, -1, 1, -1, -6, -3, 6, -7, 3, -1}
1258 },{
1259 /* MapTab3 */
1260 0, /* eob_sym */
1261 35, /* esc_sym */
1262 /* run table */
1263 {0, 1, 1, 2, 2, 3, 3, 4, 4, 1, 1, 5, 5, 6, 6, 7,
1264 7, 8, 8, 9, 9, 2, 2, 10, 10, 1, 1, 11, 11, 12, 12, 3,
1265 3, 13, 13, 0, 14, 14, 16, 15, 16, 15, 4, 4, 17, 1, 17, 1,
1266 5, 5, 18, 18, 2, 2, 6, 6, 8, 19, 7, 8, 7, 19, 20, 20,
1267 21, 21, 22, 24, 22, 24, 23, 23, 1, 1, 25, 25, 3, 3, 26, 26,
1268 9, 9, 27, 27, 28, 28, 33, 29, 4, 33, 29, 1, 4, 1, 32, 32,
1269 2, 2, 31, 10, 30, 10, 30, 31, 34, 34, 5, 5, 36, 36, 35, 41,
1270 35, 11, 41, 11, 37, 1, 8, 8, 37, 6, 1, 6, 40, 7, 7, 40,
1271 12, 38, 12, 39, 39, 38, 49, 13, 49, 13, 3, 42, 3, 42, 16, 16,
1272 43, 43, 14, 14, 1, 1, 44, 15, 44, 15, 2, 2, 57, 48, 50, 48,
1273 57, 50, 4, 45, 45, 4, 46, 47, 47, 46, 1, 51, 1, 17, 17, 51,
1274 8, 9, 9, 5, 58, 8, 58, 5, 52, 52, 55, 56, 53, 56, 55, 59,
1275 59, 53, 54, 1, 6, 54, 7, 7, 6, 1, 2, 3, 2, 3, 64, 60,
1276 60, 10, 10, 64, 61, 62, 61, 63, 1, 63, 62, 1, 18, 24, 18, 4,
1277 25, 4, 8, 21, 21, 1, 24, 22, 25, 22, 8, 11, 19, 11, 23, 1,
1278 20, 23, 19, 20, 5, 12, 5, 1, 16, 2, 12, 13, 2, 13, 1, 16},
1279
1280 /* value table */
1281 { 0, 1, -1, 1, -1, 1, -1, 1, -1, 2, -2, 1, -1, 1, -1, 1,
1282 -1, 1, -1, 1, -1, 2, -2, 1, -1, 3, -3, 1, -1, 1, -1, 2,
1283 -2, 1, -1, 0, 1, -1, 1, 1, -1, -1, 2, -2, 1, 4, -1, -4,
1284 2, -2, 1, -1, -3, 3, 2, -2, 2, 1, 2, -2, -2, -1, 1, -1,
1285 1, -1, 1, 1, -1, -1, 1, -1, 5, -5, 1, -1, 3, -3, 1, -1,
1286 2, -2, 1, -1, 1, -1, 1, 1, 3, -1, -1, 6, -3, -6, -1, 1,
1287 4, -4, 1, 2, 1, -2, -1, -1, 1, -1, 3, -3, 1, -1, 1, 1,
1288 -1, 2, -1, -2, 1, 7, -3, 3, -1, 3, -7, -3, 1, -3, 3, -1,
1289 2, 1, -2, 1, -1, -1, 1, 2, -1, -2, -4, -1, 4, 1, 2, -2,
1290 1, -1, -2, 2, 8, -8, -1, 2, 1, -2, -5, 5, 1, -1, -1, 1,
1291 -1, 1, 4, -1, 1, -4, -1, -1, 1, 1, 9, 1, -9, 2, -2, -1,
1292 -4, 3, -3, -4, -1, 4, 1, 4, 1, -1, 1, -1, 1, 1, -1, 1,
1293 -1, -1, -1, 10, 4, 1, 4, -4, -4, -10, 6, 5, -6, -5, 1, -1,
1294 1, 3, -3, -1, 1, -1, -1, -1, 11, 1, 1, -11, -2, -2, 2, 5,
1295 -2, -5, -5, 2, -2, 12, 2, -2, 2, 2, 5, -3, -2, 3, -2, -12,
1296 -2, 2, 2, 2, -5, 3, 5, 13, -3, 7, -3, -3, -7, 3, -13, 3}
1297 },{
1298 /* MapTab4 */
1299 0, /* eob_sym */
1300 34, /* esc_sym */
1301 /* run table */
1302 {0, 1, 1, 1, 2, 2, 1, 3, 3, 1, 1, 1, 4, 4, 1, 5,
1303 2, 1, 5, 2, 1, 1, 6, 6, 1, 1, 1, 1, 1, 7, 3, 1,
1304 2, 3, 0, 1, 2, 7, 1, 1, 1, 8, 1, 1, 8, 1, 1, 1,
1305 9, 1, 9, 1, 2, 1, 1, 2, 1, 1, 10, 4, 1, 10, 1, 4,
1306 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 2, 1, 5, 1, 1, 1,
1307 2, 5, 1, 11, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1308 2, 1, 6, 1, 6, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 12,
1309 3, 1, 12, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1,
1310 4, 1, 1, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 1, 2, 1,
1311 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, 5,
1312 1, 1, 1, 1, 1, 7, 1, 7, 1, 1, 2, 3, 1, 1, 1, 1,
1313 5, 1, 1, 1, 1, 1, 1, 2, 13, 1, 1, 1, 1, 1, 1, 1,
1314 1, 1, 1, 1, 1, 1, 1, 1, 13, 2, 1, 1, 4, 1, 1, 1,
1315 3, 1, 6, 1, 1, 1, 14, 1, 1, 1, 1, 1, 14, 6, 1, 1,
1316 1, 1, 15, 2, 4, 1, 2, 3, 15, 1, 1, 1, 8, 1, 1, 8,
1317 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1},
1318
1319 /* value table */
1320 { 0, 1, -1, 2, 1, -1, -2, 1, -1, 3, -3, 4, 1, -1, -4, 1,
1321 2, 5, -1, -2, -5, 6, 1, -1, -6, 7, -7, 8, -8, 1, 2, 9,
1322 3, -2, 0, -9, -3, -1, 10, -10, 11, 1, -11, 12, -1, -12, 13, -13,
1323 1, 14, -1, -14, 4, 15, -15, -4, 16, -16, 1, 2, 17, -1, -17, -2,
1324 18, -18, 19, -19, 20, 3, -20, 21, -21, -3, 5, 22, 2, -22, -23, 23,
1325 -5, -2, 24, 1, -24, -1, 25, -25, 26, -26, -27, 27, 28, 29, -28, -29,
1326 6, 30, 2, -31, -2, -30, 31, -6, -32, 32, 33, -33, 34, -35, -34, 1,
1327 4, -36, -1, 35, 37, 36, 7, -37, 38, -4, -38, 39, 41, 40, -40, -39,
1328 3, 42, -43, -41, -7, -42, 43, -3, 44, -44, 45, -45, 46, 47, 8, -47,
1329 -48, -46, 50, -50, 48, 49, 51, -49, 52, -52, 5, -51, -8, -53, 53, 3,
1330 -56, 56, 55, 54, -54, 2, 60, -2, -55, 58, 9, -5, 59, 57, -57, -63,
1331 -3, -58, -60, -61, 61, -59, -62, -9, 1, 64, 62, 69, -64, 63, 65, -67,
1332 -68, 66, -65, 68, -66, -69, 67, -70, -1, 10, 71, -71, 4, 73, 72, 70,
1333 6, -76, -3, 74, -78, -74, 1, 78, 80, -72, -75, 76, -1, 3, -73, 79,
1334 75, 77, 1, 11, -4, -79, -10, -6, -1, -77, -83, -80, 2, 81, -84, -2,
1335 83, -81, 82, -82, 84, -87, -86, 85, -11, -85, 86, -89, 87, -88, 88, 89}
1336 },{
1337 /* MapTab5 */
1338 2, /* eob_sym */
1339 33, /* esc_sym */
1340 /* run table */
1341 {1, 1, 0, 2, 1, 2, 1, 3, 3, 1, 1, 4, 4, 2, 2, 1,
1342 1, 5, 5, 6, 1, 6, 1, 7, 7, 3, 3, 2, 8, 2, 8, 1,
1343 1, 0, 9, 9, 1, 1, 10, 4, 10, 4, 11, 11, 2, 1, 2, 1,
1344 12, 12, 3, 3, 1, 1, 13, 5, 5, 13, 14, 1, 1, 14, 2, 2,
1345 6, 6, 15, 1, 1, 15, 16, 4, 7, 16, 4, 7, 1, 1, 3, 3,
1346 8, 8, 2, 2, 1, 1, 17, 17, 1, 1, 18, 18, 5, 5, 2, 2,
1347 1, 1, 9, 19, 9, 19, 20, 3, 3, 20, 1, 10, 21, 1, 10, 4,
1348 4, 21, 22, 6, 6, 22, 1, 1, 23, 24, 2, 2, 23, 24, 11, 1,
1349 1, 11, 7, 25, 7, 1, 1, 25, 8, 8, 3, 26, 3, 1, 12, 2,
1350 2, 26, 1, 12, 5, 5, 27, 4, 1, 4, 1, 27, 28, 1, 28, 13,
1351 1, 13, 2, 29, 2, 1, 32, 6, 1, 30, 14, 29, 14, 6, 3, 31,
1352 3, 1, 30, 1, 32, 31, 33, 9, 33, 1, 1, 7, 9, 7, 2, 2,
1353 1, 1, 4, 36, 34, 4, 5, 10, 10, 5, 34, 1, 1, 35, 8, 8,
1354 36, 3, 35, 1, 15, 3, 2, 1, 16, 15, 16, 2, 37, 1, 37, 1,
1355 1, 1, 6, 6, 38, 1, 38, 11, 1, 39, 39, 40, 11, 2, 41, 4,
1356 40, 1, 2, 4, 1, 1, 1, 41, 3, 1, 3, 1, 5, 7, 5, 7},
1357
1358 /* value table */
1359 { 1, -1, 0, 1, 2, -1, -2, 1, -1, 3, -3, 1, -1, 2, -2, 4,
1360 -4, 1, -1, 1, 5, -1, -5, 1, -1, 2, -2, 3, 1, -3, -1, 6,
1361 -6, 0, 1, -1, 7, -7, 1, 2, -1, -2, 1, -1, 4, 8, -4, -8,
1362 1, -1, 3, -3, 9, -9, 1, 2, -2, -1, 1, 10, -10, -1, 5, -5,
1363 2, -2, 1, 11, -11, -1, 1, 3, 2, -1, -3, -2, 12, -12, 4, -4,
1364 2, -2, -6, 6, 13, -13, 1, -1, 14, -14, 1, -1, 3, -3, 7, -7,
1365 15, -15, 2, 1, -2, -1, 1, 5, -5, -1, -16, 2, 1, 16, -2, 4,
1366 -4, -1, 1, 3, -3, -1, 17, -17, 1, 1, -8, 8, -1, -1, 2, 18,
1367 -18, -2, 3, 1, -3, 19, -19, -1, 3, -3, 6, 1, -6, 20, 2, 9,
1368 -9, -1, -20, -2, 4, -4, 1, -5, 21, 5, -21, -1, 1, -22, -1, 2,
1369 22, -2, 10, 1, -10, 23, 1, 4, -23, 1, 2, -1, -2, -4, -7, 1,
1370 7, -24, -1, 24, -1, -1, 1, 3, -1, -25, 25, 4, -3, -4, 11, -11,
1371 26, -26, 6, 1, 1, -6, -5, -3, 3, 5, -1, -27, 27, 1, 4, -4,
1372 -1, -8, -1, 28, 2, 8, -12, -28, -2, -2, 2, 12, -1, 29, 1, -29,
1373 30, -30, 5, -5, 1, -31, -1, 3, 31, -1, 1, 1, -3, -13, 1, -7,
1374 -1, -32, 13, 7, 32, 33, -33, -1, -9, -34, 9, 34, -6, 5, 6, -5}
1375 },{
1376 /* MapTab6 */
1377 2, /* eob_sym */
1378 13, /* esc_sym */
1379 /* run table */
1380 {1, 1, 0, 1, 1, 2, 2, 1, 1, 3, 3, 1, 1, 0, 2, 2,
1381 4, 1, 4, 1, 1, 1, 5, 5, 1, 1, 6, 6, 2, 2, 1, 1,
1382 3, 3, 7, 7, 1, 1, 8, 8, 1, 1, 2, 2, 1, 9, 1, 9,
1383 4, 4, 10, 1, 1, 10, 1, 1, 11, 11, 3, 3, 1, 2, 1, 2,
1384 1, 1, 12, 12, 5, 5, 1, 1, 13, 1, 1, 13, 2, 2, 1, 1,
1385 6, 6, 1, 1, 4, 14, 4, 14, 3, 1, 3, 1, 1, 1, 15, 7,
1386 15, 2, 2, 7, 1, 1, 1, 8, 1, 8, 16, 16, 1, 1, 1, 1,
1387 2, 1, 1, 2, 1, 1, 3, 5, 5, 3, 4, 1, 1, 4, 1, 1,
1388 17, 17, 9, 1, 1, 9, 2, 2, 1, 1, 10, 10, 1, 6, 1, 1,
1389 6, 18, 1, 1, 18, 1, 1, 1, 2, 2, 3, 1, 3, 1, 1, 1,
1390 4, 1, 19, 1, 19, 7, 1, 1, 20, 1, 4, 20, 1, 7, 11, 2,
1391 1, 11, 21, 2, 8, 5, 1, 8, 1, 5, 21, 1, 1, 1, 22, 1,
1392 1, 22, 1, 1, 3, 3, 1, 23, 2, 12, 24, 1, 1, 2, 1, 1,
1393 12, 23, 1, 1, 24, 1, 1, 1, 4, 1, 1, 1, 2, 1, 6, 6,
1394 4, 2, 1, 1, 1, 1, 1, 1, 1, 14, 13, 3, 1, 25, 9, 25,
1395 14, 1, 9, 3, 13, 1, 1, 1, 1, 1, 10, 1, 1, 2, 10, 2},
1396
1397 /* value table */
1398 {-20, -1, 0, 2, -2, 1, -1, 3, -3, 1, -1, 4, -4, 0, 2, -2,
1399 1, 5, -1, -5, 6, -6, 1, -1, 7, -7, 1, -1, 3, -3, 8, -8,
1400 2, -2, 1, -1, 9, -9, 1, -1, 10, -10, 4, -4, 11, 1, -11, -1,
1401 2, -2, 1, 12, -12, -1, 13, -13, 1, -1, 3, -3, 14, 5, -14, -5,
1402 -15, 15, -1, 1, 2, -2, 16, -16, 1, 17, -17, -1, 6, -6, 18, -18,
1403 2, -2, -19, 19, -3, 1, 3, -1, 4, 20, -4, 1, -21, 21, 1, 2,
1404 -1, -7, 7, -2, 22, -22, 23, 2, -23, -2, 1, -1, -24, 24, -25, 25,
1405 -8, -26, 26, 8, -27, 27, 5, 3, -3, -5, -4, 28, -28, 4, 29, -29,
1406 1, -1, -2, -30, 30, 2, 9, -9, -31, 31, 2, -2, -32, 3, 32, -33,
1407 -3, 1, 33, -34, -1, 34, -35, 35, -10, 10, -6, 36, 6, -36, 37, -37,
1408 -5, 38, 1, -38, -1, 3, 39, -39, -1, 40, 5, 1, -40, -3, 2, -11,
1409 -41, -2, 1, 11, -3, -4, 41, 3, 42, 4, -1, -43, -42, 43, 1, -44,
1410 45, -1, 44, -45, -7, 7, -46, 1, -12, 2, 1, -47, 46, 12, 47, 48,
1411 -2, -1, -48, 49, -1, -50, -49, 50, -6, -51, 51, 52, -13, 53, -4, 4,
1412 6, 13, -53, -52, -54, 55, 54, -55, -56, -2, 2, -8, 56, 1, -3, -1,
1413 2, 58, 3, 8, -2, 57, -58, -60, -59, -57, -3, 60, 59, -14, 3, 14}
1414 },{
1415 /* MapTab7 */
1416 2, /* eob_sym */
1417 38, /* esc_sym */
1418 /* run table */
1419 {1, 1, 0, 2, 2, 1, 1, 3, 3, 4, 4, 5, 5, 1, 1, 6,
1420 6, 2, 2, 7, 7, 8, 8, 1, 1, 3, 3, 9, 9, 10, 10, 1,
1421 1, 2, 2, 4, 4, 11, 0, 11, 12, 12, 13, 13, 1, 1, 5, 5,
1422 14, 14, 15, 16, 15, 16, 3, 3, 1, 6, 1, 6, 2, 2, 7, 7,
1423 8, 8, 17, 17, 1, 1, 4, 4, 18, 18, 2, 2, 1, 19, 1, 20,
1424 19, 20, 21, 21, 3, 3, 22, 22, 5, 5, 24, 1, 1, 23, 9, 23,
1425 24, 9, 2, 2, 10, 1, 1, 10, 6, 6, 25, 4, 4, 25, 7, 7,
1426 26, 8, 1, 8, 3, 1, 26, 3, 11, 11, 27, 27, 2, 28, 1, 2,
1427 28, 1, 12, 12, 5, 5, 29, 13, 13, 29, 32, 1, 1, 33, 31, 30,
1428 32, 4, 30, 33, 4, 31, 3, 14, 1, 1, 3, 34, 34, 2, 2, 14,
1429 6, 6, 35, 36, 35, 36, 1, 15, 1, 16, 16, 15, 7, 9, 7, 9,
1430 37, 8, 8, 37, 1, 1, 39, 2, 38, 39, 2, 40, 5, 38, 40, 5,
1431 3, 3, 4, 4, 10, 10, 1, 1, 1, 1, 41, 2, 41, 2, 6, 6,
1432 1, 1, 11, 42, 11, 43, 3, 42, 3, 17, 4, 43, 1, 17, 7, 1,
1433 8, 44, 4, 7, 44, 5, 8, 2, 5, 1, 2, 48, 45, 1, 12, 45,
1434 12, 48, 13, 13, 1, 9, 9, 46, 1, 46, 47, 47, 49, 18, 18, 49},
1435
1436 /* value table */
1437 { 1, -1, 0, 1, -1, 2, -2, 1, -1, 1, -1, 1, -1, 3, -3, 1,
1438 -1, -2, 2, 1, -1, 1, -1, 4, -4, -2, 2, 1, -1, 1, -1, 5,
1439 -5, -3, 3, 2, -2, 1, 0, -1, 1, -1, 1, -1, 6, -6, 2, -2,
1440 1, -1, 1, 1, -1, -1, -3, 3, 7, 2, -7, -2, -4, 4, 2, -2,
1441 2, -2, 1, -1, 8, -8, 3, -3, 1, -1, -5, 5, 9, 1, -9, 1,
1442 -1, -1, 1, -1, -4, 4, 1, -1, 3, -3, 1, -10, 10, 1, 2, -1,
1443 -1, -2, 6, -6, 2, 11, -11, -2, 3, -3, 1, -4, 4, -1, 3, -3,
1444 1, 3, 12, -3, -5, -12, -1, 5, 2, -2, 1, -1, -7, 1, 13, 7,
1445 -1, -13, 2, -2, 4, -4, 1, 2, -2, -1, 1, 14, -14, 1, 1, 1,
1446 -1, -5, -1, -1, 5, -1, -6, 2, -15, 15, 6, 1, -1, -8, 8, -2,
1447 -4, 4, 1, 1, -1, -1, 16, 2, -16, -2, 2, -2, 4, 3, -4, -3,
1448 -1, -4, 4, 1, -17, 17, -1, -9, 1, 1, 9, 1, -5, -1, -1, 5,
1449 -7, 7, 6, -6, 3, -3, 18, -18, 19, -19, 1, -10, -1, 10, -5, 5,
1450 20, -20, -3, 1, 3, 1, 8, -1, -8, 2, 7, -1, -21, -2, 5, 21,
1451 5, -1, -7, -5, 1, -6, -5, -11, 6, 22, 11, 1, 1, -22, -3, -1,
1452 3, -1, 3, -3, -23, 4, -4, 1, 23, -1, 1, -1, 1, -2, 2, -1}
1453 },{
1454 /* MapTab8 */
1455 4, /* eob_sym */
1456 11, /* esc_sym */
1457 /* run table */
1458 {1, 1, 1, 1, 0, 2, 2, 1, 1, 3, 3, 0, 1, 1, 2, 2,
1459 4, 4, 1, 1, 5, 5, 1, 1, 2, 2, 3, 3, 6, 6, 1, 1,
1460 7, 7, 8, 1, 8, 2, 2, 1, 4, 4, 1, 3, 1, 3, 9, 9,
1461 2, 2, 1, 5, 1, 5, 10, 10, 1, 1, 11, 11, 3, 6, 3, 4,
1462 4, 6, 2, 2, 1, 12, 1, 12, 7, 13, 7, 13, 1, 1, 8, 8,
1463 2, 2, 14, 14, 16, 15, 16, 5, 5, 1, 3, 15, 1, 3, 4, 4,
1464 1, 1, 17, 17, 2, 2, 6, 6, 1, 18, 1, 18, 22, 21, 22, 21,
1465 25, 24, 25, 19, 9, 20, 9, 23, 19, 24, 20, 3, 23, 7, 3, 1,
1466 1, 7, 28, 26, 29, 5, 28, 26, 5, 8, 29, 4, 8, 27, 2, 2,
1467 4, 27, 1, 1, 10, 36, 10, 33, 33, 36, 30, 1, 32, 32, 1, 30,
1468 6, 31, 31, 35, 3, 6, 11, 11, 3, 2, 35, 2, 34, 1, 34, 1,
1469 37, 37, 12, 7, 12, 5, 41, 5, 4, 7, 1, 8, 13, 4, 1, 41,
1470 13, 38, 8, 38, 9, 1, 40, 40, 9, 1, 39, 2, 2, 49, 39, 42,
1471 3, 3, 14, 16, 49, 14, 16, 42, 43, 43, 6, 6, 15, 1, 1, 15,
1472 44, 44, 1, 1, 50, 48, 4, 5, 4, 7, 5, 2, 10, 10, 48, 7,
1473 50, 45, 2, 1, 45, 8, 8, 1, 46, 46, 3, 47, 47, 3, 1, 1},
1474
1475 /* value table */
1476 { 1, -1, 2, -2, 0, 1, -1, 3, -3, 1, -1, 0, 4, -4, 2, -2,
1477 1, -1, 5, -5, 1, -1, 6, -6, 3, -3, 2, -2, 1, -1, 7, -7,
1478 1, -1, 1, 8, -1, 4, -4, -8, 2, -2, 9, 3, -9, -3, 1, -1,
1479 5, -5, 10, 2, -10, -2, 1, -1, 11, -11, 1, -1, -4, 2, 4, 3,
1480 -3, -2, 6, -6, 12, 1, -12, -1, 2, 1, -2, -1, 13, -13, 2, -2,
1481 7, -7, 1, -1, 1, 1, -1, 3, -3, 14, 5, -1, -14, -5, 4, -4,
1482 15, -15, 1, -1, 8, -8, -3, 3, 16, 1, -16, -1, 1, 1, -1, -1,
1483 1, 1, -1, 1, 2, 1, -2, 1, -1, -1, -1, 6, -1, 3, -6, 17,
1484 -17, -3, 1, 1, 1, 4, -1, -1, -4, 3, -1, 5, -3, -1, -9, 9,
1485 -5, 1, 18, -18, 2, 1, -2, 1, -1, -1, 1, 19, -1, 1, -19, -1,
1486 4, 1, -1, 1, 7, -4, -2, 2, -7, 10, -1, -10, 1, 20, -1, -20,
1487 1, -1, 2, 4, -2, 5, 1, -5, 6, -4, 21, 4, 2, -6, -21, -1,
1488 -2, 1, -4, -1, -3, 22, -1, 1, 3, -22, -1, 11, -11, 1, 1, 1,
1489 8, -8, 2, 2, -1, -2, -2, -1, 1, -1, -5, 5, 2, 23, -23, -2,
1490 1, -1, 24, -24, -1, -1, 7, 6, -7, 5, -6, 12, -3, 3, 1, -5,
1491 1, 1, -12, 25, -1, -5, 5, -25, -1, 1, 9, 1, -1, -9, 26, -26}
1492 }
1493 };