2 * Copyright 2009 ZXing authors
\r
4 * Licensed under the Apache License, Version 2.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.apache.org/licenses/LICENSE-2.0
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
17 package com.google.zxing.pdf417.decoder;
\r
19 import com.google.zxing.ReaderException;
\r
20 import com.google.zxing.common.BitMatrix;
\r
24 * This class parses the BitMatrix image into codewords.
\r
27 * @author SITA Lab (kevin.osullivan@sita.aero)
\r
29 final class BitMatrixParser {
\r
31 private static final int MAX_ROW_DIFFERENCE = 6;
\r
32 private static final int MAX_ROWS = 90;
\r
33 //private static final int MAX_COLUMNS = 30;
\r
34 // Maximum Codewords (Data + Error)
\r
35 private static final int MAX_CW_CAPACITY = 929;
\r
36 private static final int MODULES_IN_SYMBOL = 17;
\r
38 private final BitMatrix bitMatrix;
\r
39 private int rows = 0;
\r
40 //private int columns = 0;
\r
42 private int leftColumnECData = 0;
\r
43 private int rightColumnECData = 0;
\r
44 private int eraseCount = 0;
\r
45 private int[] erasures = null;
\r
46 private int ecLevel = -1;
\r
48 BitMatrixParser(BitMatrix bitMatrix) {
\r
49 this.bitMatrix = bitMatrix;
\r
53 * To ensure separability of rows, codewords of consecutive rows belong to
\r
54 * different subsets of all possible codewords. This routine scans the
\r
55 * symbols in the barcode. When it finds a number of consecutive rows which
\r
56 * are the same, it assumes that this is a row of codewords and processes
\r
57 * them into a codeword array.
\r
59 * @return an array of codewords.
\r
61 int[] readCodewords() {
\r
62 int width = bitMatrix.getDimension();
\r
63 // TODO should be a rectangular matrix
\r
66 erasures = new int[MAX_CW_CAPACITY];
\r
68 // Get the number of pixels in a module across the X dimension
\r
69 //float moduleWidth = bitMatrix.getModuleWidth();
\r
70 float moduleWidth = 1.0f; // Image has been sampled and reduced
\r
72 int[] rowCounters = new int[width];
\r
73 int[] codewords = new int[MAX_CW_CAPACITY];
\r
75 int matchingConsecutiveScans = 0;
\r
76 boolean rowInProgress = false;
\r
79 for (int i = 1; i < height; i++) {
\r
80 if (rowNumber >= MAX_ROWS) {
\r
81 // Something is wrong, since we have exceeded
\r
82 // the maximum rows in the specification.
\r
83 // TODO Maybe return error code
\r
86 int rowDifference = 0;
\r
87 // Scan a line of modules and check the
\r
88 // difference between this and the previous line
\r
89 for (int j = 0; j < width; j++) {
\r
90 // Accumulate differences between this line and the
\r
92 if (bitMatrix.get(j, i) != bitMatrix.get(j, i - 1)) {
\r
96 if (rowDifference <= moduleWidth * MAX_ROW_DIFFERENCE) {
\r
97 for (int j = 0; j < width; j++) {
\r
98 // Accumulate the black pixels on this line
\r
99 if (bitMatrix.get(j, i)) {
\r
103 // Increment the number of consecutive rows of pixels
\r
104 // that are more or less the same
\r
105 matchingConsecutiveScans++;
\r
106 // Height of a row is a multiple of the module size in pixels
\r
107 // Usually at least 3 times the module size
\r
108 if (matchingConsecutiveScans >= moduleWidth * 2) { // MGMG
\r
109 // We have some previous matches as well as a match here
\r
110 // Set processing a unique row.
\r
111 rowInProgress = true;
\r
114 if (rowInProgress) {
\r
116 next = processRow(rowCounters, rowNumber, rowHeight, codewords, next);
\r
118 // Something is wrong, since we have exceeded
\r
119 // the maximum columns in the specification.
\r
120 // TODO Maybe return error code
\r
123 // Reinitialize the row counters.
\r
124 for (int j = 0; j < rowCounters.length; j++) {
\r
125 rowCounters[j] = 0;
\r
130 matchingConsecutiveScans = 0;
\r
131 rowInProgress = false;
\r
135 // Check for a row that was in progress before we exited above.
\r
136 if (rowInProgress) {
\r
138 if (rowNumber >= MAX_ROWS) {
\r
139 // Something is wrong, since we have exceeded
\r
140 // the maximum rows in the specification.
\r
141 // TODO Maybe return error code
\r
144 next = processRow(rowCounters, rowNumber, rowHeight, codewords, next);
\r
148 erasures = trimArray(erasures, eraseCount);
\r
149 return trimArray(codewords, next);
\r
153 * Trim the array to the required size.
\r
155 * @param array the array
\r
156 * @param size the size to trim it to
\r
157 * @return the new trimmed array
\r
159 private static int[] trimArray(int[] array, int size) {
\r
161 int[] a = new int[size];
\r
162 for (int i = 0; i < size; i++) {
\r
172 * Convert the symbols in the row to codewords.
\r
173 * Each PDF417 symbol character consists of four bar elements and four space
\r
174 * elements, each of which can be one to six modules wide. The four bar and
\r
175 * four space elements shall measure 17 modules in total.
\r
177 * @param rowCounters an array containing the counts of black pixels for each column
\r
179 * @param rowNumber the current row number of codewords.
\r
180 * @param rowHeight the height of this row in pixels.
\r
181 * @param codewords the codeword array to save codewords into.
\r
182 * @param next the next available index into the codewords array.
\r
183 * @return the next available index into the codeword array after processing
\r
186 int processRow(int[] rowCounters, int rowNumber, int rowHeight, int[] codewords, int next) {
\r
187 int width = bitMatrix.getDimension();
\r
188 int columnNumber = 0;
\r
190 for (int i = 0; i < width; i += MODULES_IN_SYMBOL) {
\r
191 for (int mask = MODULES_IN_SYMBOL - 1; mask >= 0; mask--) {
\r
192 if (rowCounters[i + (MODULES_IN_SYMBOL - 1 - mask)] >= rowHeight >>> 1) {
\r
193 symbol |= 1 << mask;
\r
196 if (columnNumber > 0) {
\r
197 int cw = getCodeword(symbol);
\r
198 // if (debug) System.out.println(" " + Long.toBinaryString(symbol) +
\r
199 // " cw=" +cw + " ColumnNumber=" +columnNumber + "i=" +i);
\r
200 if (cw < 0 && i < width - MODULES_IN_SYMBOL) {
\r
201 // Skip errors on the Right row indicator column
\r
202 erasures[eraseCount] = next;
\r
206 codewords[next++] = cw;
\r
209 // Left row indicator column
\r
210 int cw = getCodeword(symbol);
\r
211 // if (debug) System.out.println(" " + Long.toBinaryString(symbol) +
\r
212 // " cw=" +cw + " ColumnNumber=" +columnNumber + "i=" +i);
\r
214 switch (rowNumber % 3) {
\r
218 leftColumnECData = cw;
\r
226 //columns = columnNumber;
\r
229 if (columnNumber > 1) {
\r
230 // Right row indicator column is in codeword[next]
\r
232 // Overwrite the last codeword i.e. Right Row Indicator
\r
235 switch (rowNumber % 3) {
\r
241 rightColumnECData = codewords[next];
\r
242 if (rightColumnECData == leftColumnECData
\r
243 && leftColumnECData != 0) {
\r
244 ecLevel = ((rightColumnECData % 30) - rows % 3) / 3;
\r
249 codewords[next] = 0;
\r
255 * Build a symbol from the pixels.
\r
256 * Each symbol character is defined by an 8-digit bar-space sequence which
\r
257 * represents the module widths of the eight elements of that symbol
\r
260 * @param counters array of pixel counter corresponding to each Bar/Space pattern.
\r
261 * @return the symbol
\r
264 private static long getSymbol(int[] counters, float moduleWidth) {
\r
265 int pixelsInSymbol = 0;
\r
266 for (int j = 0; j < counters.length; j++) {
\r
267 pixelsInSymbol += counters[j];
\r
269 float avgModuleWidth = (pixelsInSymbol / 17.0f);
\r
270 boolean toggle = true;
\r
273 for (int j = 0; j < counters.length; j++) {
\r
274 if (counters[j] < moduleWidth && counters[j] > 0) {
\r
275 // Give a very narrow bar/space a chance
\r
276 counters[j] = (int) moduleWidth;
\r
278 // Calculate number of modules in the symbol.
\r
279 // int modules = (int)(counters[j]/moduleWidth);
\r
280 // int modules = round(counters[j]/moduleWidth);
\r
281 int modules = round(counters[j] / avgModuleWidth);
\r
283 // Maximum size is 6 modules
\r
285 } else if (modules < 1) {
\r
289 for (int k = 0; k < modules; k++) {
\r
290 symbol |= 1 << (16 - k - shift);
\r
303 * Translate the symbol into a codeword.
\r
306 * @return the codeword corresponding to the symbol.
\r
308 private int getCodeword(long symbol) {
\r
311 int i = findCodewordIndex(sym);
\r
315 long cw = CODEWORD_TABLE[i] - 1;
\r
322 * Use a binary search to find the index of the codeword corresponding to
\r
325 * @param symbol the symbol from the barcode.
\r
326 * @return the index into the codeword table.
\r
328 private static int findCodewordIndex(long symbol) {
\r
330 int upto = SYMBOL_TABLE.length;
\r
331 while (first < upto) {
\r
332 int mid = (first + upto) >>> 1; // Compute mid point.
\r
333 if (symbol < SYMBOL_TABLE[mid]) {
\r
334 upto = mid; // repeat search in bottom half.
\r
335 } else if (symbol > SYMBOL_TABLE[mid]) {
\r
336 first = mid + 1; // Repeat search in top half.
\r
338 return mid; // Found it. return position
\r
342 // if (debug) System.out.println("Failed to find codeword for Symbol=" +
\r
347 * Ends up being a bit faster than Math.round(). This merely rounds its
\r
348 * argument to the nearest int, where x.5 rounds up.
\r
351 private static int round(float d) {
\r
352 return (int) (d + 0.5f);
\r
357 * Returns an array of locations representing the erasures.
\r
359 public int[] getErasures() {
\r
363 public int getECLevel() {
\r
368 * Convert the symbols in the row to codewords.
\r
369 * Each PDF417 symbol character consists of four bar elements and four space
\r
370 * elements, each of which can be one to six modules wide. The four bar and
\r
371 * four space elements shall measure 17 modules in total.
\r
373 * @param rowCounters an array containing the counts of black pixels for each column
\r
375 * @param rowNumber the current row number of codewords.
\r
376 * @param rowHeight the height of this row in pixels.
\r
377 * @param moduleWidth the size of a module in pixels.
\r
378 * @param codewords the codeword array to save codewords into.
\r
379 * @param next the next available index into the codewords array.
\r
380 * @return the next available index into the codeword array after processing
\r
382 * @throws ReaderException
\r
385 int processRow1(int[] rowCounters, int rowNumber, int rowHeight,
\r
386 float moduleWidth, int[] codewords, int next) {
\r
387 int width = bitMatrix.getDimension();
\r
388 int firstBlack = 0;
\r
390 for (firstBlack = 0; firstBlack < width; firstBlack++) {
\r
391 // Step forward until we find the first black pixels
\r
392 if (rowCounters[firstBlack] >= rowHeight >>> 1) {
\r
397 int[] counters = new int[8];
\r
398 int state = 0; // In black pixels, looking for white, first or second time
\r
400 int columnNumber = 0;
\r
401 for (int i = firstBlack; i < width; i++) {
\r
402 if (state == 1 || state == 3 || state == 5 || state == 7) { // In white
\r
407 // If more than half the column is black
\r
408 if (rowCounters[i] >= rowHeight >>> 1 || i == width - 1) {
\r
409 if (i == width - 1) {
\r
412 // In black pixels or the end of a row
\r
415 // Don't count the last one
\r
422 if (rowCounters[i] < rowHeight >>> 1) {
\r
423 // Found white pixels
\r
425 if (state == 7 && i == width - 1) {
\r
426 // Its found white pixels at the end of the row,
\r
427 // give it a chance to exit gracefully
\r
430 // Found white pixels
\r
435 // Still in black pixels
\r
440 if (state == 8) { // Found black, white, black, white, black, white,
\r
441 // black, white and stumbled back onto black; done
\r
442 if (columnNumber >= MAX_COLUMNS) {
\r
443 // Something is wrong, since we have exceeded
\r
444 // the maximum columns in the specification.
\r
445 // TODO Maybe return error code
\r
448 if (columnNumber > 0) {
\r
449 symbol = getSymbol(counters, moduleWidth);
\r
450 int cw = getCodeword(symbol);
\r
451 // if (debug) System.out.println(" " +
\r
452 // Long.toBinaryString(symbol) + " cw=" +cw + " ColumnNumber="
\r
453 // +columnNumber + "i=" +i);
\r
455 erasures[eraseCount] = next;
\r
459 codewords[next++] = cw;
\r
462 // Left row indicator column
\r
463 symbol = getSymbol(counters, moduleWidth);
\r
464 int cw = getCodeword(symbol);
\r
466 switch (rowNumber % 3) {
\r
470 leftColumnECData = cw;
\r
477 // Step back so that this pixel can be examined during the next
\r
480 counters = new int[8];
\r
481 columns = columnNumber;
\r
483 // Introduce some errors if (rowNumber == 0 && columnNumber == 4)
\r
484 // { codewords[next-1] = 0; erasures[eraseCount] = next-1;
\r
485 // eraseCount++; } if (rowNumber == 0 && columnNumber == 6) {
\r
486 // codewords[next-1] = 10; erasures[eraseCount] = next-1;
\r
487 // eraseCount++; } if (rowNumber == 0 && columnNumber == 8) {
\r
488 // codewords[next-1] = 10; erasures[eraseCount] = next-1;
\r
494 if (columnNumber > 1) {
\r
495 // Right row indicator column is in codeword[next]
\r
497 // Overwrite the last codeword i.e. Right Row Indicator
\r
500 switch (rowNumber % 3) {
\r
506 rightColumnECData = codewords[next];
\r
507 if (rightColumnECData == leftColumnECData
\r
508 && leftColumnECData != 0) {
\r
509 ecLevel = ((rightColumnECData % 30) - rows % 3) / 3;
\r
514 codewords[next] = 0;
\r
521 * The sorted table of all possible symbols. Extracted from the PDF417
\r
522 * specification. The index of a symbol in this table corresponds to the
\r
523 * index into the codeword table.
\r
525 private static final int[] SYMBOL_TABLE = {0x1025e, 0x1027a, 0x1029e,
\r
526 0x102bc, 0x102f2, 0x102f4, 0x1032e, 0x1034e, 0x1035c, 0x10396,
\r
527 0x103a6, 0x103ac, 0x10422, 0x10428, 0x10436, 0x10442, 0x10444,
\r
528 0x10448, 0x10450, 0x1045e, 0x10466, 0x1046c, 0x1047a, 0x10482,
\r
529 0x1049e, 0x104a0, 0x104bc, 0x104c6, 0x104d8, 0x104ee, 0x104f2,
\r
530 0x104f4, 0x10504, 0x10508, 0x10510, 0x1051e, 0x10520, 0x1053c,
\r
531 0x10540, 0x10578, 0x10586, 0x1058c, 0x10598, 0x105b0, 0x105be,
\r
532 0x105ce, 0x105dc, 0x105e2, 0x105e4, 0x105e8, 0x105f6, 0x1062e,
\r
533 0x1064e, 0x1065c, 0x1068e, 0x1069c, 0x106b8, 0x106de, 0x106fa,
\r
534 0x10716, 0x10726, 0x1072c, 0x10746, 0x1074c, 0x10758, 0x1076e,
\r
535 0x10792, 0x10794, 0x107a2, 0x107a4, 0x107a8, 0x107b6, 0x10822,
\r
536 0x10828, 0x10842, 0x10848, 0x10850, 0x1085e, 0x10866, 0x1086c,
\r
537 0x1087a, 0x10882, 0x10884, 0x10890, 0x1089e, 0x108a0, 0x108bc,
\r
538 0x108c6, 0x108cc, 0x108d8, 0x108ee, 0x108f2, 0x108f4, 0x10902,
\r
539 0x10908, 0x1091e, 0x10920, 0x1093c, 0x10940, 0x10978, 0x10986,
\r
540 0x10998, 0x109b0, 0x109be, 0x109ce, 0x109dc, 0x109e2, 0x109e4,
\r
541 0x109e8, 0x109f6, 0x10a08, 0x10a10, 0x10a1e, 0x10a20, 0x10a3c,
\r
542 0x10a40, 0x10a78, 0x10af0, 0x10b06, 0x10b0c, 0x10b18, 0x10b30,
\r
543 0x10b3e, 0x10b60, 0x10b7c, 0x10b8e, 0x10b9c, 0x10bb8, 0x10bc2,
\r
544 0x10bc4, 0x10bc8, 0x10bd0, 0x10bde, 0x10be6, 0x10bec, 0x10c2e,
\r
545 0x10c4e, 0x10c5c, 0x10c62, 0x10c64, 0x10c68, 0x10c76, 0x10c8e,
\r
546 0x10c9c, 0x10cb8, 0x10cc2, 0x10cc4, 0x10cc8, 0x10cd0, 0x10cde,
\r
547 0x10ce6, 0x10cec, 0x10cfa, 0x10d0e, 0x10d1c, 0x10d38, 0x10d70,
\r
548 0x10d7e, 0x10d82, 0x10d84, 0x10d88, 0x10d90, 0x10d9e, 0x10da0,
\r
549 0x10dbc, 0x10dc6, 0x10dcc, 0x10dd8, 0x10dee, 0x10df2, 0x10df4,
\r
550 0x10e16, 0x10e26, 0x10e2c, 0x10e46, 0x10e58, 0x10e6e, 0x10e86,
\r
551 0x10e8c, 0x10e98, 0x10eb0, 0x10ebe, 0x10ece, 0x10edc, 0x10f0a,
\r
552 0x10f12, 0x10f14, 0x10f22, 0x10f28, 0x10f36, 0x10f42, 0x10f44,
\r
553 0x10f48, 0x10f50, 0x10f5e, 0x10f66, 0x10f6c, 0x10fb2, 0x10fb4,
\r
554 0x11022, 0x11028, 0x11042, 0x11048, 0x11050, 0x1105e, 0x1107a,
\r
555 0x11082, 0x11084, 0x11090, 0x1109e, 0x110a0, 0x110bc, 0x110c6,
\r
556 0x110cc, 0x110d8, 0x110ee, 0x110f2, 0x110f4, 0x11102, 0x1111e,
\r
557 0x11120, 0x1113c, 0x11140, 0x11178, 0x11186, 0x11198, 0x111b0,
\r
558 0x111be, 0x111ce, 0x111dc, 0x111e2, 0x111e4, 0x111e8, 0x111f6,
\r
559 0x11208, 0x1121e, 0x11220, 0x11278, 0x112f0, 0x1130c, 0x11330,
\r
560 0x1133e, 0x11360, 0x1137c, 0x1138e, 0x1139c, 0x113b8, 0x113c2,
\r
561 0x113c8, 0x113d0, 0x113de, 0x113e6, 0x113ec, 0x11408, 0x11410,
\r
562 0x1141e, 0x11420, 0x1143c, 0x11440, 0x11478, 0x114f0, 0x115e0,
\r
563 0x1160c, 0x11618, 0x11630, 0x1163e, 0x11660, 0x1167c, 0x116c0,
\r
564 0x116f8, 0x1171c, 0x11738, 0x11770, 0x1177e, 0x11782, 0x11784,
\r
565 0x11788, 0x11790, 0x1179e, 0x117a0, 0x117bc, 0x117c6, 0x117cc,
\r
566 0x117d8, 0x117ee, 0x1182e, 0x11834, 0x1184e, 0x1185c, 0x11862,
\r
567 0x11864, 0x11868, 0x11876, 0x1188e, 0x1189c, 0x118b8, 0x118c2,
\r
568 0x118c8, 0x118d0, 0x118de, 0x118e6, 0x118ec, 0x118fa, 0x1190e,
\r
569 0x1191c, 0x11938, 0x11970, 0x1197e, 0x11982, 0x11984, 0x11990,
\r
570 0x1199e, 0x119a0, 0x119bc, 0x119c6, 0x119cc, 0x119d8, 0x119ee,
\r
571 0x119f2, 0x119f4, 0x11a0e, 0x11a1c, 0x11a38, 0x11a70, 0x11a7e,
\r
572 0x11ae0, 0x11afc, 0x11b08, 0x11b10, 0x11b1e, 0x11b20, 0x11b3c,
\r
573 0x11b40, 0x11b78, 0x11b8c, 0x11b98, 0x11bb0, 0x11bbe, 0x11bce,
\r
574 0x11bdc, 0x11be2, 0x11be4, 0x11be8, 0x11bf6, 0x11c16, 0x11c26,
\r
575 0x11c2c, 0x11c46, 0x11c4c, 0x11c58, 0x11c6e, 0x11c86, 0x11c98,
\r
576 0x11cb0, 0x11cbe, 0x11cce, 0x11cdc, 0x11ce2, 0x11ce4, 0x11ce8,
\r
577 0x11cf6, 0x11d06, 0x11d0c, 0x11d18, 0x11d30, 0x11d3e, 0x11d60,
\r
578 0x11d7c, 0x11d8e, 0x11d9c, 0x11db8, 0x11dc4, 0x11dc8, 0x11dd0,
\r
579 0x11dde, 0x11de6, 0x11dec, 0x11dfa, 0x11e0a, 0x11e12, 0x11e14,
\r
580 0x11e22, 0x11e24, 0x11e28, 0x11e36, 0x11e42, 0x11e44, 0x11e50,
\r
581 0x11e5e, 0x11e66, 0x11e6c, 0x11e82, 0x11e84, 0x11e88, 0x11e90,
\r
582 0x11e9e, 0x11ea0, 0x11ebc, 0x11ec6, 0x11ecc, 0x11ed8, 0x11eee,
\r
583 0x11f1a, 0x11f2e, 0x11f32, 0x11f34, 0x11f4e, 0x11f5c, 0x11f62,
\r
584 0x11f64, 0x11f68, 0x11f76, 0x12048, 0x1205e, 0x12082, 0x12084,
\r
585 0x12090, 0x1209e, 0x120a0, 0x120bc, 0x120d8, 0x120f2, 0x120f4,
\r
586 0x12108, 0x1211e, 0x12120, 0x1213c, 0x12140, 0x12178, 0x12186,
\r
587 0x12198, 0x121b0, 0x121be, 0x121e2, 0x121e4, 0x121e8, 0x121f6,
\r
588 0x12204, 0x12210, 0x1221e, 0x12220, 0x12278, 0x122f0, 0x12306,
\r
589 0x1230c, 0x12330, 0x1233e, 0x12360, 0x1237c, 0x1238e, 0x1239c,
\r
590 0x123b8, 0x123c2, 0x123c8, 0x123d0, 0x123e6, 0x123ec, 0x1241e,
\r
591 0x12420, 0x1243c, 0x124f0, 0x125e0, 0x12618, 0x1263e, 0x12660,
\r
592 0x1267c, 0x126c0, 0x126f8, 0x12738, 0x12770, 0x1277e, 0x12782,
\r
593 0x12784, 0x12790, 0x1279e, 0x127a0, 0x127bc, 0x127c6, 0x127cc,
\r
594 0x127d8, 0x127ee, 0x12820, 0x1283c, 0x12840, 0x12878, 0x128f0,
\r
595 0x129e0, 0x12bc0, 0x12c18, 0x12c30, 0x12c3e, 0x12c60, 0x12c7c,
\r
596 0x12cc0, 0x12cf8, 0x12df0, 0x12e1c, 0x12e38, 0x12e70, 0x12e7e,
\r
597 0x12ee0, 0x12efc, 0x12f04, 0x12f08, 0x12f10, 0x12f20, 0x12f3c,
\r
598 0x12f40, 0x12f78, 0x12f86, 0x12f8c, 0x12f98, 0x12fb0, 0x12fbe,
\r
599 0x12fce, 0x12fdc, 0x1302e, 0x1304e, 0x1305c, 0x13062, 0x13068,
\r
600 0x1308e, 0x1309c, 0x130b8, 0x130c2, 0x130c8, 0x130d0, 0x130de,
\r
601 0x130ec, 0x130fa, 0x1310e, 0x13138, 0x13170, 0x1317e, 0x13182,
\r
602 0x13184, 0x13190, 0x1319e, 0x131a0, 0x131bc, 0x131c6, 0x131cc,
\r
603 0x131d8, 0x131f2, 0x131f4, 0x1320e, 0x1321c, 0x13270, 0x1327e,
\r
604 0x132e0, 0x132fc, 0x13308, 0x1331e, 0x13320, 0x1333c, 0x13340,
\r
605 0x13378, 0x13386, 0x13398, 0x133b0, 0x133be, 0x133ce, 0x133dc,
\r
606 0x133e2, 0x133e4, 0x133e8, 0x133f6, 0x1340e, 0x1341c, 0x13438,
\r
607 0x13470, 0x1347e, 0x134e0, 0x134fc, 0x135c0, 0x135f8, 0x13608,
\r
608 0x13610, 0x1361e, 0x13620, 0x1363c, 0x13640, 0x13678, 0x136f0,
\r
609 0x1370c, 0x13718, 0x13730, 0x1373e, 0x13760, 0x1377c, 0x1379c,
\r
610 0x137b8, 0x137c2, 0x137c4, 0x137c8, 0x137d0, 0x137de, 0x137e6,
\r
611 0x137ec, 0x13816, 0x13826, 0x1382c, 0x13846, 0x1384c, 0x13858,
\r
612 0x1386e, 0x13874, 0x13886, 0x13898, 0x138b0, 0x138be, 0x138ce,
\r
613 0x138dc, 0x138e2, 0x138e4, 0x138e8, 0x13906, 0x1390c, 0x13930,
\r
614 0x1393e, 0x13960, 0x1397c, 0x1398e, 0x1399c, 0x139b8, 0x139c8,
\r
615 0x139d0, 0x139de, 0x139e6, 0x139ec, 0x139fa, 0x13a06, 0x13a0c,
\r
616 0x13a18, 0x13a30, 0x13a3e, 0x13a60, 0x13a7c, 0x13ac0, 0x13af8,
\r
617 0x13b0e, 0x13b1c, 0x13b38, 0x13b70, 0x13b7e, 0x13b88, 0x13b90,
\r
618 0x13b9e, 0x13ba0, 0x13bbc, 0x13bcc, 0x13bd8, 0x13bee, 0x13bf2,
\r
619 0x13bf4, 0x13c12, 0x13c14, 0x13c22, 0x13c24, 0x13c28, 0x13c36,
\r
620 0x13c42, 0x13c48, 0x13c50, 0x13c5e, 0x13c66, 0x13c6c, 0x13c82,
\r
621 0x13c84, 0x13c90, 0x13c9e, 0x13ca0, 0x13cbc, 0x13cc6, 0x13ccc,
\r
622 0x13cd8, 0x13cee, 0x13d02, 0x13d04, 0x13d08, 0x13d10, 0x13d1e,
\r
623 0x13d20, 0x13d3c, 0x13d40, 0x13d78, 0x13d86, 0x13d8c, 0x13d98,
\r
624 0x13db0, 0x13dbe, 0x13dce, 0x13ddc, 0x13de4, 0x13de8, 0x13df6,
\r
625 0x13e1a, 0x13e2e, 0x13e32, 0x13e34, 0x13e4e, 0x13e5c, 0x13e62,
\r
626 0x13e64, 0x13e68, 0x13e76, 0x13e8e, 0x13e9c, 0x13eb8, 0x13ec2,
\r
627 0x13ec4, 0x13ec8, 0x13ed0, 0x13ede, 0x13ee6, 0x13eec, 0x13f26,
\r
628 0x13f2c, 0x13f3a, 0x13f46, 0x13f4c, 0x13f58, 0x13f6e, 0x13f72,
\r
629 0x13f74, 0x14082, 0x1409e, 0x140a0, 0x140bc, 0x14104, 0x14108,
\r
630 0x14110, 0x1411e, 0x14120, 0x1413c, 0x14140, 0x14178, 0x1418c,
\r
631 0x14198, 0x141b0, 0x141be, 0x141e2, 0x141e4, 0x141e8, 0x14208,
\r
632 0x14210, 0x1421e, 0x14220, 0x1423c, 0x14240, 0x14278, 0x142f0,
\r
633 0x14306, 0x1430c, 0x14318, 0x14330, 0x1433e, 0x14360, 0x1437c,
\r
634 0x1438e, 0x143c2, 0x143c4, 0x143c8, 0x143d0, 0x143e6, 0x143ec,
\r
635 0x14408, 0x14410, 0x1441e, 0x14420, 0x1443c, 0x14440, 0x14478,
\r
636 0x144f0, 0x145e0, 0x1460c, 0x14618, 0x14630, 0x1463e, 0x14660,
\r
637 0x1467c, 0x146c0, 0x146f8, 0x1471c, 0x14738, 0x14770, 0x1477e,
\r
638 0x14782, 0x14784, 0x14788, 0x14790, 0x147a0, 0x147bc, 0x147c6,
\r
639 0x147cc, 0x147d8, 0x147ee, 0x14810, 0x14820, 0x1483c, 0x14840,
\r
640 0x14878, 0x148f0, 0x149e0, 0x14bc0, 0x14c30, 0x14c3e, 0x14c60,
\r
641 0x14c7c, 0x14cc0, 0x14cf8, 0x14df0, 0x14e38, 0x14e70, 0x14e7e,
\r
642 0x14ee0, 0x14efc, 0x14f04, 0x14f08, 0x14f10, 0x14f1e, 0x14f20,
\r
643 0x14f3c, 0x14f40, 0x14f78, 0x14f86, 0x14f8c, 0x14f98, 0x14fb0,
\r
644 0x14fce, 0x14fdc, 0x15020, 0x15040, 0x15078, 0x150f0, 0x151e0,
\r
645 0x153c0, 0x15860, 0x1587c, 0x158c0, 0x158f8, 0x159f0, 0x15be0,
\r
646 0x15c70, 0x15c7e, 0x15ce0, 0x15cfc, 0x15dc0, 0x15df8, 0x15e08,
\r
647 0x15e10, 0x15e20, 0x15e40, 0x15e78, 0x15ef0, 0x15f0c, 0x15f18,
\r
648 0x15f30, 0x15f60, 0x15f7c, 0x15f8e, 0x15f9c, 0x15fb8, 0x1604e,
\r
649 0x1605c, 0x1608e, 0x1609c, 0x160b8, 0x160c2, 0x160c4, 0x160c8,
\r
650 0x160de, 0x1610e, 0x1611c, 0x16138, 0x16170, 0x1617e, 0x16184,
\r
651 0x16188, 0x16190, 0x1619e, 0x161a0, 0x161bc, 0x161c6, 0x161cc,
\r
652 0x161d8, 0x161f2, 0x161f4, 0x1620e, 0x1621c, 0x16238, 0x16270,
\r
653 0x1627e, 0x162e0, 0x162fc, 0x16304, 0x16308, 0x16310, 0x1631e,
\r
654 0x16320, 0x1633c, 0x16340, 0x16378, 0x16386, 0x1638c, 0x16398,
\r
655 0x163b0, 0x163be, 0x163ce, 0x163dc, 0x163e2, 0x163e4, 0x163e8,
\r
656 0x163f6, 0x1640e, 0x1641c, 0x16438, 0x16470, 0x1647e, 0x164e0,
\r
657 0x164fc, 0x165c0, 0x165f8, 0x16610, 0x1661e, 0x16620, 0x1663c,
\r
658 0x16640, 0x16678, 0x166f0, 0x16718, 0x16730, 0x1673e, 0x16760,
\r
659 0x1677c, 0x1678e, 0x1679c, 0x167b8, 0x167c2, 0x167c4, 0x167c8,
\r
660 0x167d0, 0x167de, 0x167e6, 0x167ec, 0x1681c, 0x16838, 0x16870,
\r
661 0x168e0, 0x168fc, 0x169c0, 0x169f8, 0x16bf0, 0x16c10, 0x16c1e,
\r
662 0x16c20, 0x16c3c, 0x16c40, 0x16c78, 0x16cf0, 0x16de0, 0x16e18,
\r
663 0x16e30, 0x16e3e, 0x16e60, 0x16e7c, 0x16ec0, 0x16ef8, 0x16f1c,
\r
664 0x16f38, 0x16f70, 0x16f7e, 0x16f84, 0x16f88, 0x16f90, 0x16f9e,
\r
665 0x16fa0, 0x16fbc, 0x16fc6, 0x16fcc, 0x16fd8, 0x17026, 0x1702c,
\r
666 0x17046, 0x1704c, 0x17058, 0x1706e, 0x17086, 0x1708c, 0x17098,
\r
667 0x170b0, 0x170be, 0x170ce, 0x170dc, 0x170e8, 0x17106, 0x1710c,
\r
668 0x17118, 0x17130, 0x1713e, 0x17160, 0x1717c, 0x1718e, 0x1719c,
\r
669 0x171b8, 0x171c2, 0x171c4, 0x171c8, 0x171d0, 0x171de, 0x171e6,
\r
670 0x171ec, 0x171fa, 0x17206, 0x1720c, 0x17218, 0x17230, 0x1723e,
\r
671 0x17260, 0x1727c, 0x172c0, 0x172f8, 0x1730e, 0x1731c, 0x17338,
\r
672 0x17370, 0x1737e, 0x17388, 0x17390, 0x1739e, 0x173a0, 0x173bc,
\r
673 0x173cc, 0x173d8, 0x173ee, 0x173f2, 0x173f4, 0x1740c, 0x17418,
\r
674 0x17430, 0x1743e, 0x17460, 0x1747c, 0x174c0, 0x174f8, 0x175f0,
\r
675 0x1760e, 0x1761c, 0x17638, 0x17670, 0x1767e, 0x176e0, 0x176fc,
\r
676 0x17708, 0x17710, 0x1771e, 0x17720, 0x1773c, 0x17740, 0x17778,
\r
677 0x17798, 0x177b0, 0x177be, 0x177dc, 0x177e2, 0x177e4, 0x177e8,
\r
678 0x17822, 0x17824, 0x17828, 0x17836, 0x17842, 0x17844, 0x17848,
\r
679 0x17850, 0x1785e, 0x17866, 0x1786c, 0x17882, 0x17884, 0x17888,
\r
680 0x17890, 0x1789e, 0x178a0, 0x178bc, 0x178c6, 0x178cc, 0x178d8,
\r
681 0x178ee, 0x178f2, 0x178f4, 0x17902, 0x17904, 0x17908, 0x17910,
\r
682 0x1791e, 0x17920, 0x1793c, 0x17940, 0x17978, 0x17986, 0x1798c,
\r
683 0x17998, 0x179b0, 0x179be, 0x179ce, 0x179dc, 0x179e2, 0x179e4,
\r
684 0x179e8, 0x179f6, 0x17a04, 0x17a08, 0x17a10, 0x17a1e, 0x17a20,
\r
685 0x17a3c, 0x17a40, 0x17a78, 0x17af0, 0x17b06, 0x17b0c, 0x17b18,
\r
686 0x17b30, 0x17b3e, 0x17b60, 0x17b7c, 0x17b8e, 0x17b9c, 0x17bb8,
\r
687 0x17bc4, 0x17bc8, 0x17bd0, 0x17bde, 0x17be6, 0x17bec, 0x17c2e,
\r
688 0x17c32, 0x17c34, 0x17c4e, 0x17c5c, 0x17c62, 0x17c64, 0x17c68,
\r
689 0x17c76, 0x17c8e, 0x17c9c, 0x17cb8, 0x17cc2, 0x17cc4, 0x17cc8,
\r
690 0x17cd0, 0x17cde, 0x17ce6, 0x17cec, 0x17d0e, 0x17d1c, 0x17d38,
\r
691 0x17d70, 0x17d82, 0x17d84, 0x17d88, 0x17d90, 0x17d9e, 0x17da0,
\r
692 0x17dbc, 0x17dc6, 0x17dcc, 0x17dd8, 0x17dee, 0x17e26, 0x17e2c,
\r
693 0x17e3a, 0x17e46, 0x17e4c, 0x17e58, 0x17e6e, 0x17e72, 0x17e74,
\r
694 0x17e86, 0x17e8c, 0x17e98, 0x17eb0, 0x17ece, 0x17edc, 0x17ee2,
\r
695 0x17ee4, 0x17ee8, 0x17ef6, 0x1813a, 0x18172, 0x18174, 0x18216,
\r
696 0x18226, 0x1823a, 0x1824c, 0x18258, 0x1826e, 0x18272, 0x18274,
\r
697 0x18298, 0x182be, 0x182e2, 0x182e4, 0x182e8, 0x182f6, 0x1835e,
\r
698 0x1837a, 0x183ae, 0x183d6, 0x18416, 0x18426, 0x1842c, 0x1843a,
\r
699 0x18446, 0x18458, 0x1846e, 0x18472, 0x18474, 0x18486, 0x184b0,
\r
700 0x184be, 0x184ce, 0x184dc, 0x184e2, 0x184e4, 0x184e8, 0x184f6,
\r
701 0x18506, 0x1850c, 0x18518, 0x18530, 0x1853e, 0x18560, 0x1857c,
\r
702 0x1858e, 0x1859c, 0x185b8, 0x185c2, 0x185c4, 0x185c8, 0x185d0,
\r
703 0x185de, 0x185e6, 0x185ec, 0x185fa, 0x18612, 0x18614, 0x18622,
\r
704 0x18628, 0x18636, 0x18642, 0x18650, 0x1865e, 0x1867a, 0x18682,
\r
705 0x18684, 0x18688, 0x18690, 0x1869e, 0x186a0, 0x186bc, 0x186c6,
\r
706 0x186cc, 0x186d8, 0x186ee, 0x186f2, 0x186f4, 0x1872e, 0x1874e,
\r
707 0x1875c, 0x18796, 0x187a6, 0x187ac, 0x187d2, 0x187d4, 0x18826,
\r
708 0x1882c, 0x1883a, 0x18846, 0x1884c, 0x18858, 0x1886e, 0x18872,
\r
709 0x18874, 0x18886, 0x18898, 0x188b0, 0x188be, 0x188ce, 0x188dc,
\r
710 0x188e2, 0x188e4, 0x188e8, 0x188f6, 0x1890c, 0x18930, 0x1893e,
\r
711 0x18960, 0x1897c, 0x1898e, 0x189b8, 0x189c2, 0x189c8, 0x189d0,
\r
712 0x189de, 0x189e6, 0x189ec, 0x189fa, 0x18a18, 0x18a30, 0x18a3e,
\r
713 0x18a60, 0x18a7c, 0x18ac0, 0x18af8, 0x18b1c, 0x18b38, 0x18b70,
\r
714 0x18b7e, 0x18b82, 0x18b84, 0x18b88, 0x18b90, 0x18b9e, 0x18ba0,
\r
715 0x18bbc, 0x18bc6, 0x18bcc, 0x18bd8, 0x18bee, 0x18bf2, 0x18bf4,
\r
716 0x18c22, 0x18c24, 0x18c28, 0x18c36, 0x18c42, 0x18c48, 0x18c50,
\r
717 0x18c5e, 0x18c66, 0x18c7a, 0x18c82, 0x18c84, 0x18c90, 0x18c9e,
\r
718 0x18ca0, 0x18cbc, 0x18ccc, 0x18cf2, 0x18cf4, 0x18d04, 0x18d08,
\r
719 0x18d10, 0x18d1e, 0x18d20, 0x18d3c, 0x18d40, 0x18d78, 0x18d86,
\r
720 0x18d98, 0x18dce, 0x18de2, 0x18de4, 0x18de8, 0x18e2e, 0x18e32,
\r
721 0x18e34, 0x18e4e, 0x18e5c, 0x18e62, 0x18e64, 0x18e68, 0x18e8e,
\r
722 0x18e9c, 0x18eb8, 0x18ec2, 0x18ec4, 0x18ec8, 0x18ed0, 0x18efa,
\r
723 0x18f16, 0x18f26, 0x18f2c, 0x18f46, 0x18f4c, 0x18f58, 0x18f6e,
\r
724 0x18f8a, 0x18f92, 0x18f94, 0x18fa2, 0x18fa4, 0x18fa8, 0x18fb6,
\r
725 0x1902c, 0x1903a, 0x19046, 0x1904c, 0x19058, 0x19072, 0x19074,
\r
726 0x19086, 0x19098, 0x190b0, 0x190be, 0x190ce, 0x190dc, 0x190e2,
\r
727 0x190e8, 0x190f6, 0x19106, 0x1910c, 0x19130, 0x1913e, 0x19160,
\r
728 0x1917c, 0x1918e, 0x1919c, 0x191b8, 0x191c2, 0x191c8, 0x191d0,
\r
729 0x191de, 0x191e6, 0x191ec, 0x191fa, 0x19218, 0x1923e, 0x19260,
\r
730 0x1927c, 0x192c0, 0x192f8, 0x19338, 0x19370, 0x1937e, 0x19382,
\r
731 0x19384, 0x19390, 0x1939e, 0x193a0, 0x193bc, 0x193c6, 0x193cc,
\r
732 0x193d8, 0x193ee, 0x193f2, 0x193f4, 0x19430, 0x1943e, 0x19460,
\r
733 0x1947c, 0x194c0, 0x194f8, 0x195f0, 0x19638, 0x19670, 0x1967e,
\r
734 0x196e0, 0x196fc, 0x19702, 0x19704, 0x19708, 0x19710, 0x19720,
\r
735 0x1973c, 0x19740, 0x19778, 0x19786, 0x1978c, 0x19798, 0x197b0,
\r
736 0x197be, 0x197ce, 0x197dc, 0x197e2, 0x197e4, 0x197e8, 0x19822,
\r
737 0x19824, 0x19842, 0x19848, 0x19850, 0x1985e, 0x19866, 0x1987a,
\r
738 0x19882, 0x19884, 0x19890, 0x1989e, 0x198a0, 0x198bc, 0x198cc,
\r
739 0x198f2, 0x198f4, 0x19902, 0x19908, 0x1991e, 0x19920, 0x1993c,
\r
740 0x19940, 0x19978, 0x19986, 0x19998, 0x199ce, 0x199e2, 0x199e4,
\r
741 0x199e8, 0x19a08, 0x19a10, 0x19a1e, 0x19a20, 0x19a3c, 0x19a40,
\r
742 0x19a78, 0x19af0, 0x19b18, 0x19b3e, 0x19b60, 0x19b9c, 0x19bc2,
\r
743 0x19bc4, 0x19bc8, 0x19bd0, 0x19be6, 0x19c2e, 0x19c34, 0x19c4e,
\r
744 0x19c5c, 0x19c62, 0x19c64, 0x19c68, 0x19c8e, 0x19c9c, 0x19cb8,
\r
745 0x19cc2, 0x19cc8, 0x19cd0, 0x19ce6, 0x19cfa, 0x19d0e, 0x19d1c,
\r
746 0x19d38, 0x19d70, 0x19d7e, 0x19d82, 0x19d84, 0x19d88, 0x19d90,
\r
747 0x19da0, 0x19dcc, 0x19df2, 0x19df4, 0x19e16, 0x19e26, 0x19e2c,
\r
748 0x19e46, 0x19e4c, 0x19e58, 0x19e74, 0x19e86, 0x19e8c, 0x19e98,
\r
749 0x19eb0, 0x19ebe, 0x19ece, 0x19ee2, 0x19ee4, 0x19ee8, 0x19f0a,
\r
750 0x19f12, 0x19f14, 0x19f22, 0x19f24, 0x19f28, 0x19f42, 0x19f44,
\r
751 0x19f48, 0x19f50, 0x19f5e, 0x19f6c, 0x19f9a, 0x19fae, 0x19fb2,
\r
752 0x19fb4, 0x1a046, 0x1a04c, 0x1a072, 0x1a074, 0x1a086, 0x1a08c,
\r
753 0x1a098, 0x1a0b0, 0x1a0be, 0x1a0e2, 0x1a0e4, 0x1a0e8, 0x1a0f6,
\r
754 0x1a106, 0x1a10c, 0x1a118, 0x1a130, 0x1a13e, 0x1a160, 0x1a17c,
\r
755 0x1a18e, 0x1a19c, 0x1a1b8, 0x1a1c2, 0x1a1c4, 0x1a1c8, 0x1a1d0,
\r
756 0x1a1de, 0x1a1e6, 0x1a1ec, 0x1a218, 0x1a230, 0x1a23e, 0x1a260,
\r
757 0x1a27c, 0x1a2c0, 0x1a2f8, 0x1a31c, 0x1a338, 0x1a370, 0x1a37e,
\r
758 0x1a382, 0x1a384, 0x1a388, 0x1a390, 0x1a39e, 0x1a3a0, 0x1a3bc,
\r
759 0x1a3c6, 0x1a3cc, 0x1a3d8, 0x1a3ee, 0x1a3f2, 0x1a3f4, 0x1a418,
\r
760 0x1a430, 0x1a43e, 0x1a460, 0x1a47c, 0x1a4c0, 0x1a4f8, 0x1a5f0,
\r
761 0x1a61c, 0x1a638, 0x1a670, 0x1a67e, 0x1a6e0, 0x1a6fc, 0x1a702,
\r
762 0x1a704, 0x1a708, 0x1a710, 0x1a71e, 0x1a720, 0x1a73c, 0x1a740,
\r
763 0x1a778, 0x1a786, 0x1a78c, 0x1a798, 0x1a7b0, 0x1a7be, 0x1a7ce,
\r
764 0x1a7dc, 0x1a7e2, 0x1a7e4, 0x1a7e8, 0x1a830, 0x1a860, 0x1a87c,
\r
765 0x1a8c0, 0x1a8f8, 0x1a9f0, 0x1abe0, 0x1ac70, 0x1ac7e, 0x1ace0,
\r
766 0x1acfc, 0x1adc0, 0x1adf8, 0x1ae04, 0x1ae08, 0x1ae10, 0x1ae20,
\r
767 0x1ae3c, 0x1ae40, 0x1ae78, 0x1aef0, 0x1af06, 0x1af0c, 0x1af18,
\r
768 0x1af30, 0x1af3e, 0x1af60, 0x1af7c, 0x1af8e, 0x1af9c, 0x1afb8,
\r
769 0x1afc4, 0x1afc8, 0x1afd0, 0x1afde, 0x1b042, 0x1b05e, 0x1b07a,
\r
770 0x1b082, 0x1b084, 0x1b088, 0x1b090, 0x1b09e, 0x1b0a0, 0x1b0bc,
\r
771 0x1b0cc, 0x1b0f2, 0x1b0f4, 0x1b102, 0x1b104, 0x1b108, 0x1b110,
\r
772 0x1b11e, 0x1b120, 0x1b13c, 0x1b140, 0x1b178, 0x1b186, 0x1b198,
\r
773 0x1b1ce, 0x1b1e2, 0x1b1e4, 0x1b1e8, 0x1b204, 0x1b208, 0x1b210,
\r
774 0x1b21e, 0x1b220, 0x1b23c, 0x1b240, 0x1b278, 0x1b2f0, 0x1b30c,
\r
775 0x1b33e, 0x1b360, 0x1b39c, 0x1b3c2, 0x1b3c4, 0x1b3c8, 0x1b3d0,
\r
776 0x1b3e6, 0x1b410, 0x1b41e, 0x1b420, 0x1b43c, 0x1b440, 0x1b478,
\r
777 0x1b4f0, 0x1b5e0, 0x1b618, 0x1b660, 0x1b67c, 0x1b6c0, 0x1b738,
\r
778 0x1b782, 0x1b784, 0x1b788, 0x1b790, 0x1b79e, 0x1b7a0, 0x1b7cc,
\r
779 0x1b82e, 0x1b84e, 0x1b85c, 0x1b88e, 0x1b89c, 0x1b8b8, 0x1b8c2,
\r
780 0x1b8c4, 0x1b8c8, 0x1b8d0, 0x1b8e6, 0x1b8fa, 0x1b90e, 0x1b91c,
\r
781 0x1b938, 0x1b970, 0x1b97e, 0x1b982, 0x1b984, 0x1b988, 0x1b990,
\r
782 0x1b99e, 0x1b9a0, 0x1b9cc, 0x1b9f2, 0x1b9f4, 0x1ba0e, 0x1ba1c,
\r
783 0x1ba38, 0x1ba70, 0x1ba7e, 0x1bae0, 0x1bafc, 0x1bb08, 0x1bb10,
\r
784 0x1bb20, 0x1bb3c, 0x1bb40, 0x1bb98, 0x1bbce, 0x1bbe2, 0x1bbe4,
\r
785 0x1bbe8, 0x1bc16, 0x1bc26, 0x1bc2c, 0x1bc46, 0x1bc4c, 0x1bc58,
\r
786 0x1bc72, 0x1bc74, 0x1bc86, 0x1bc8c, 0x1bc98, 0x1bcb0, 0x1bcbe,
\r
787 0x1bcce, 0x1bce2, 0x1bce4, 0x1bce8, 0x1bd06, 0x1bd0c, 0x1bd18,
\r
788 0x1bd30, 0x1bd3e, 0x1bd60, 0x1bd7c, 0x1bd9c, 0x1bdc2, 0x1bdc4,
\r
789 0x1bdc8, 0x1bdd0, 0x1bde6, 0x1bdfa, 0x1be12, 0x1be14, 0x1be22,
\r
790 0x1be24, 0x1be28, 0x1be42, 0x1be44, 0x1be48, 0x1be50, 0x1be5e,
\r
791 0x1be66, 0x1be82, 0x1be84, 0x1be88, 0x1be90, 0x1be9e, 0x1bea0,
\r
792 0x1bebc, 0x1becc, 0x1bef4, 0x1bf1a, 0x1bf2e, 0x1bf32, 0x1bf34,
\r
793 0x1bf4e, 0x1bf5c, 0x1bf62, 0x1bf64, 0x1bf68, 0x1c09a, 0x1c0b2,
\r
794 0x1c0b4, 0x1c11a, 0x1c132, 0x1c134, 0x1c162, 0x1c164, 0x1c168,
\r
795 0x1c176, 0x1c1ba, 0x1c21a, 0x1c232, 0x1c234, 0x1c24e, 0x1c25c,
\r
796 0x1c262, 0x1c264, 0x1c268, 0x1c276, 0x1c28e, 0x1c2c2, 0x1c2c4,
\r
797 0x1c2c8, 0x1c2d0, 0x1c2de, 0x1c2e6, 0x1c2ec, 0x1c2fa, 0x1c316,
\r
798 0x1c326, 0x1c33a, 0x1c346, 0x1c34c, 0x1c372, 0x1c374, 0x1c41a,
\r
799 0x1c42e, 0x1c432, 0x1c434, 0x1c44e, 0x1c45c, 0x1c462, 0x1c464,
\r
800 0x1c468, 0x1c476, 0x1c48e, 0x1c49c, 0x1c4b8, 0x1c4c2, 0x1c4c8,
\r
801 0x1c4d0, 0x1c4de, 0x1c4e6, 0x1c4ec, 0x1c4fa, 0x1c51c, 0x1c538,
\r
802 0x1c570, 0x1c57e, 0x1c582, 0x1c584, 0x1c588, 0x1c590, 0x1c59e,
\r
803 0x1c5a0, 0x1c5bc, 0x1c5c6, 0x1c5cc, 0x1c5d8, 0x1c5ee, 0x1c5f2,
\r
804 0x1c5f4, 0x1c616, 0x1c626, 0x1c62c, 0x1c63a, 0x1c646, 0x1c64c,
\r
805 0x1c658, 0x1c66e, 0x1c672, 0x1c674, 0x1c686, 0x1c68c, 0x1c698,
\r
806 0x1c6b0, 0x1c6be, 0x1c6ce, 0x1c6dc, 0x1c6e2, 0x1c6e4, 0x1c6e8,
\r
807 0x1c712, 0x1c714, 0x1c722, 0x1c728, 0x1c736, 0x1c742, 0x1c744,
\r
808 0x1c748, 0x1c750, 0x1c75e, 0x1c766, 0x1c76c, 0x1c77a, 0x1c7ae,
\r
809 0x1c7d6, 0x1c7ea, 0x1c81a, 0x1c82e, 0x1c832, 0x1c834, 0x1c84e,
\r
810 0x1c85c, 0x1c862, 0x1c864, 0x1c868, 0x1c876, 0x1c88e, 0x1c89c,
\r
811 0x1c8b8, 0x1c8c2, 0x1c8c8, 0x1c8d0, 0x1c8de, 0x1c8e6, 0x1c8ec,
\r
812 0x1c8fa, 0x1c90e, 0x1c938, 0x1c970, 0x1c97e, 0x1c982, 0x1c984,
\r
813 0x1c990, 0x1c99e, 0x1c9a0, 0x1c9bc, 0x1c9c6, 0x1c9cc, 0x1c9d8,
\r
814 0x1c9ee, 0x1c9f2, 0x1c9f4, 0x1ca38, 0x1ca70, 0x1ca7e, 0x1cae0,
\r
815 0x1cafc, 0x1cb02, 0x1cb04, 0x1cb08, 0x1cb10, 0x1cb20, 0x1cb3c,
\r
816 0x1cb40, 0x1cb78, 0x1cb86, 0x1cb8c, 0x1cb98, 0x1cbb0, 0x1cbbe,
\r
817 0x1cbce, 0x1cbdc, 0x1cbe2, 0x1cbe4, 0x1cbe8, 0x1cbf6, 0x1cc16,
\r
818 0x1cc26, 0x1cc2c, 0x1cc3a, 0x1cc46, 0x1cc58, 0x1cc72, 0x1cc74,
\r
819 0x1cc86, 0x1ccb0, 0x1ccbe, 0x1ccce, 0x1cce2, 0x1cce4, 0x1cce8,
\r
820 0x1cd06, 0x1cd0c, 0x1cd18, 0x1cd30, 0x1cd3e, 0x1cd60, 0x1cd7c,
\r
821 0x1cd9c, 0x1cdc2, 0x1cdc4, 0x1cdc8, 0x1cdd0, 0x1cdde, 0x1cde6,
\r
822 0x1cdfa, 0x1ce22, 0x1ce28, 0x1ce42, 0x1ce50, 0x1ce5e, 0x1ce66,
\r
823 0x1ce7a, 0x1ce82, 0x1ce84, 0x1ce88, 0x1ce90, 0x1ce9e, 0x1cea0,
\r
824 0x1cebc, 0x1cecc, 0x1cef2, 0x1cef4, 0x1cf2e, 0x1cf32, 0x1cf34,
\r
825 0x1cf4e, 0x1cf5c, 0x1cf62, 0x1cf64, 0x1cf68, 0x1cf96, 0x1cfa6,
\r
826 0x1cfac, 0x1cfca, 0x1cfd2, 0x1cfd4, 0x1d02e, 0x1d032, 0x1d034,
\r
827 0x1d04e, 0x1d05c, 0x1d062, 0x1d064, 0x1d068, 0x1d076, 0x1d08e,
\r
828 0x1d09c, 0x1d0b8, 0x1d0c2, 0x1d0c4, 0x1d0c8, 0x1d0d0, 0x1d0de,
\r
829 0x1d0e6, 0x1d0ec, 0x1d0fa, 0x1d11c, 0x1d138, 0x1d170, 0x1d17e,
\r
830 0x1d182, 0x1d184, 0x1d188, 0x1d190, 0x1d19e, 0x1d1a0, 0x1d1bc,
\r
831 0x1d1c6, 0x1d1cc, 0x1d1d8, 0x1d1ee, 0x1d1f2, 0x1d1f4, 0x1d21c,
\r
832 0x1d238, 0x1d270, 0x1d27e, 0x1d2e0, 0x1d2fc, 0x1d302, 0x1d304,
\r
833 0x1d308, 0x1d310, 0x1d31e, 0x1d320, 0x1d33c, 0x1d340, 0x1d378,
\r
834 0x1d386, 0x1d38c, 0x1d398, 0x1d3b0, 0x1d3be, 0x1d3ce, 0x1d3dc,
\r
835 0x1d3e2, 0x1d3e4, 0x1d3e8, 0x1d3f6, 0x1d470, 0x1d47e, 0x1d4e0,
\r
836 0x1d4fc, 0x1d5c0, 0x1d5f8, 0x1d604, 0x1d608, 0x1d610, 0x1d620,
\r
837 0x1d640, 0x1d678, 0x1d6f0, 0x1d706, 0x1d70c, 0x1d718, 0x1d730,
\r
838 0x1d73e, 0x1d760, 0x1d77c, 0x1d78e, 0x1d79c, 0x1d7b8, 0x1d7c2,
\r
839 0x1d7c4, 0x1d7c8, 0x1d7d0, 0x1d7de, 0x1d7e6, 0x1d7ec, 0x1d826,
\r
840 0x1d82c, 0x1d83a, 0x1d846, 0x1d84c, 0x1d858, 0x1d872, 0x1d874,
\r
841 0x1d886, 0x1d88c, 0x1d898, 0x1d8b0, 0x1d8be, 0x1d8ce, 0x1d8e2,
\r
842 0x1d8e4, 0x1d8e8, 0x1d8f6, 0x1d90c, 0x1d918, 0x1d930, 0x1d93e,
\r
843 0x1d960, 0x1d97c, 0x1d99c, 0x1d9c2, 0x1d9c4, 0x1d9c8, 0x1d9d0,
\r
844 0x1d9e6, 0x1d9fa, 0x1da0c, 0x1da18, 0x1da30, 0x1da3e, 0x1da60,
\r
845 0x1da7c, 0x1dac0, 0x1daf8, 0x1db38, 0x1db82, 0x1db84, 0x1db88,
\r
846 0x1db90, 0x1db9e, 0x1dba0, 0x1dbcc, 0x1dbf2, 0x1dbf4, 0x1dc22,
\r
847 0x1dc42, 0x1dc44, 0x1dc48, 0x1dc50, 0x1dc5e, 0x1dc66, 0x1dc7a,
\r
848 0x1dc82, 0x1dc84, 0x1dc88, 0x1dc90, 0x1dc9e, 0x1dca0, 0x1dcbc,
\r
849 0x1dccc, 0x1dcf2, 0x1dcf4, 0x1dd04, 0x1dd08, 0x1dd10, 0x1dd1e,
\r
850 0x1dd20, 0x1dd3c, 0x1dd40, 0x1dd78, 0x1dd86, 0x1dd98, 0x1ddce,
\r
851 0x1dde2, 0x1dde4, 0x1dde8, 0x1de2e, 0x1de32, 0x1de34, 0x1de4e,
\r
852 0x1de5c, 0x1de62, 0x1de64, 0x1de68, 0x1de8e, 0x1de9c, 0x1deb8,
\r
853 0x1dec2, 0x1dec4, 0x1dec8, 0x1ded0, 0x1dee6, 0x1defa, 0x1df16,
\r
854 0x1df26, 0x1df2c, 0x1df46, 0x1df4c, 0x1df58, 0x1df72, 0x1df74,
\r
855 0x1df8a, 0x1df92, 0x1df94, 0x1dfa2, 0x1dfa4, 0x1dfa8, 0x1e08a,
\r
856 0x1e092, 0x1e094, 0x1e0a2, 0x1e0a4, 0x1e0a8, 0x1e0b6, 0x1e0da,
\r
857 0x1e10a, 0x1e112, 0x1e114, 0x1e122, 0x1e124, 0x1e128, 0x1e136,
\r
858 0x1e142, 0x1e144, 0x1e148, 0x1e150, 0x1e166, 0x1e16c, 0x1e17a,
\r
859 0x1e19a, 0x1e1b2, 0x1e1b4, 0x1e20a, 0x1e212, 0x1e214, 0x1e222,
\r
860 0x1e224, 0x1e228, 0x1e236, 0x1e242, 0x1e248, 0x1e250, 0x1e25e,
\r
861 0x1e266, 0x1e26c, 0x1e27a, 0x1e282, 0x1e284, 0x1e288, 0x1e290,
\r
862 0x1e2a0, 0x1e2bc, 0x1e2c6, 0x1e2cc, 0x1e2d8, 0x1e2ee, 0x1e2f2,
\r
863 0x1e2f4, 0x1e31a, 0x1e332, 0x1e334, 0x1e35c, 0x1e362, 0x1e364,
\r
864 0x1e368, 0x1e3ba, 0x1e40a, 0x1e412, 0x1e414, 0x1e422, 0x1e428,
\r
865 0x1e436, 0x1e442, 0x1e448, 0x1e450, 0x1e45e, 0x1e466, 0x1e46c,
\r
866 0x1e47a, 0x1e482, 0x1e484, 0x1e490, 0x1e49e, 0x1e4a0, 0x1e4bc,
\r
867 0x1e4c6, 0x1e4cc, 0x1e4d8, 0x1e4ee, 0x1e4f2, 0x1e4f4, 0x1e502,
\r
868 0x1e504, 0x1e508, 0x1e510, 0x1e51e, 0x1e520, 0x1e53c, 0x1e540,
\r
869 0x1e578, 0x1e586, 0x1e58c, 0x1e598, 0x1e5b0, 0x1e5be, 0x1e5ce,
\r
870 0x1e5dc, 0x1e5e2, 0x1e5e4, 0x1e5e8, 0x1e5f6, 0x1e61a, 0x1e62e,
\r
871 0x1e632, 0x1e634, 0x1e64e, 0x1e65c, 0x1e662, 0x1e668, 0x1e68e,
\r
872 0x1e69c, 0x1e6b8, 0x1e6c2, 0x1e6c4, 0x1e6c8, 0x1e6d0, 0x1e6e6,
\r
873 0x1e6fa, 0x1e716, 0x1e726, 0x1e72c, 0x1e73a, 0x1e746, 0x1e74c,
\r
874 0x1e758, 0x1e772, 0x1e774, 0x1e792, 0x1e794, 0x1e7a2, 0x1e7a4,
\r
875 0x1e7a8, 0x1e7b6, 0x1e812, 0x1e814, 0x1e822, 0x1e824, 0x1e828,
\r
876 0x1e836, 0x1e842, 0x1e844, 0x1e848, 0x1e850, 0x1e85e, 0x1e866,
\r
877 0x1e86c, 0x1e87a, 0x1e882, 0x1e884, 0x1e888, 0x1e890, 0x1e89e,
\r
878 0x1e8a0, 0x1e8bc, 0x1e8c6, 0x1e8cc, 0x1e8d8, 0x1e8ee, 0x1e8f2,
\r
879 0x1e8f4, 0x1e902, 0x1e904, 0x1e908, 0x1e910, 0x1e920, 0x1e93c,
\r
880 0x1e940, 0x1e978, 0x1e986, 0x1e98c, 0x1e998, 0x1e9b0, 0x1e9be,
\r
881 0x1e9ce, 0x1e9dc, 0x1e9e2, 0x1e9e4, 0x1e9e8, 0x1e9f6, 0x1ea04,
\r
882 0x1ea08, 0x1ea10, 0x1ea20, 0x1ea40, 0x1ea78, 0x1eaf0, 0x1eb06,
\r
883 0x1eb0c, 0x1eb18, 0x1eb30, 0x1eb3e, 0x1eb60, 0x1eb7c, 0x1eb8e,
\r
884 0x1eb9c, 0x1ebb8, 0x1ebc2, 0x1ebc4, 0x1ebc8, 0x1ebd0, 0x1ebde,
\r
885 0x1ebe6, 0x1ebec, 0x1ec1a, 0x1ec2e, 0x1ec32, 0x1ec34, 0x1ec4e,
\r
886 0x1ec5c, 0x1ec62, 0x1ec64, 0x1ec68, 0x1ec8e, 0x1ec9c, 0x1ecb8,
\r
887 0x1ecc2, 0x1ecc4, 0x1ecc8, 0x1ecd0, 0x1ece6, 0x1ecfa, 0x1ed0e,
\r
888 0x1ed1c, 0x1ed38, 0x1ed70, 0x1ed7e, 0x1ed82, 0x1ed84, 0x1ed88,
\r
889 0x1ed90, 0x1ed9e, 0x1eda0, 0x1edcc, 0x1edf2, 0x1edf4, 0x1ee16,
\r
890 0x1ee26, 0x1ee2c, 0x1ee3a, 0x1ee46, 0x1ee4c, 0x1ee58, 0x1ee6e,
\r
891 0x1ee72, 0x1ee74, 0x1ee86, 0x1ee8c, 0x1ee98, 0x1eeb0, 0x1eebe,
\r
892 0x1eece, 0x1eedc, 0x1eee2, 0x1eee4, 0x1eee8, 0x1ef12, 0x1ef22,
\r
893 0x1ef24, 0x1ef28, 0x1ef36, 0x1ef42, 0x1ef44, 0x1ef48, 0x1ef50,
\r
894 0x1ef5e, 0x1ef66, 0x1ef6c, 0x1ef7a, 0x1efae, 0x1efb2, 0x1efb4,
\r
895 0x1efd6, 0x1f096, 0x1f0a6, 0x1f0ac, 0x1f0ba, 0x1f0ca, 0x1f0d2,
\r
896 0x1f0d4, 0x1f116, 0x1f126, 0x1f12c, 0x1f13a, 0x1f146, 0x1f14c,
\r
897 0x1f158, 0x1f16e, 0x1f172, 0x1f174, 0x1f18a, 0x1f192, 0x1f194,
\r
898 0x1f1a2, 0x1f1a4, 0x1f1a8, 0x1f1da, 0x1f216, 0x1f226, 0x1f22c,
\r
899 0x1f23a, 0x1f246, 0x1f258, 0x1f26e, 0x1f272, 0x1f274, 0x1f286,
\r
900 0x1f28c, 0x1f298, 0x1f2b0, 0x1f2be, 0x1f2ce, 0x1f2dc, 0x1f2e2,
\r
901 0x1f2e4, 0x1f2e8, 0x1f2f6, 0x1f30a, 0x1f312, 0x1f314, 0x1f322,
\r
902 0x1f328, 0x1f342, 0x1f344, 0x1f348, 0x1f350, 0x1f35e, 0x1f366,
\r
903 0x1f37a, 0x1f39a, 0x1f3ae, 0x1f3b2, 0x1f3b4, 0x1f416, 0x1f426,
\r
904 0x1f42c, 0x1f43a, 0x1f446, 0x1f44c, 0x1f458, 0x1f46e, 0x1f472,
\r
905 0x1f474, 0x1f486, 0x1f48c, 0x1f498, 0x1f4b0, 0x1f4be, 0x1f4ce,
\r
906 0x1f4dc, 0x1f4e2, 0x1f4e4, 0x1f4e8, 0x1f4f6, 0x1f506, 0x1f50c,
\r
907 0x1f518, 0x1f530, 0x1f53e, 0x1f560, 0x1f57c, 0x1f58e, 0x1f59c,
\r
908 0x1f5b8, 0x1f5c2, 0x1f5c4, 0x1f5c8, 0x1f5d0, 0x1f5de, 0x1f5e6,
\r
909 0x1f5ec, 0x1f5fa, 0x1f60a, 0x1f612, 0x1f614, 0x1f622, 0x1f624,
\r
910 0x1f628, 0x1f636, 0x1f642, 0x1f644, 0x1f648, 0x1f650, 0x1f65e,
\r
911 0x1f666, 0x1f67a, 0x1f682, 0x1f684, 0x1f688, 0x1f690, 0x1f69e,
\r
912 0x1f6a0, 0x1f6bc, 0x1f6cc, 0x1f6f2, 0x1f6f4, 0x1f71a, 0x1f72e,
\r
913 0x1f732, 0x1f734, 0x1f74e, 0x1f75c, 0x1f762, 0x1f764, 0x1f768,
\r
914 0x1f776, 0x1f796, 0x1f7a6, 0x1f7ac, 0x1f7ba, 0x1f7d2, 0x1f7d4,
\r
915 0x1f89a, 0x1f8ae, 0x1f8b2, 0x1f8b4, 0x1f8d6, 0x1f8ea, 0x1f91a,
\r
916 0x1f92e, 0x1f932, 0x1f934, 0x1f94e, 0x1f95c, 0x1f962, 0x1f964,
\r
917 0x1f968, 0x1f976, 0x1f996, 0x1f9a6, 0x1f9ac, 0x1f9ba, 0x1f9ca,
\r
918 0x1f9d2, 0x1f9d4, 0x1fa1a, 0x1fa2e, 0x1fa32, 0x1fa34, 0x1fa4e,
\r
919 0x1fa5c, 0x1fa62, 0x1fa64, 0x1fa68, 0x1fa76, 0x1fa8e, 0x1fa9c,
\r
920 0x1fab8, 0x1fac2, 0x1fac4, 0x1fac8, 0x1fad0, 0x1fade, 0x1fae6,
\r
921 0x1faec, 0x1fb16, 0x1fb26, 0x1fb2c, 0x1fb3a, 0x1fb46, 0x1fb4c,
\r
922 0x1fb58, 0x1fb6e, 0x1fb72, 0x1fb74, 0x1fb8a, 0x1fb92, 0x1fb94,
\r
923 0x1fba2, 0x1fba4, 0x1fba8, 0x1fbb6, 0x1fbda};
\r
926 * This table contains to codewords for all symbols.
\r
928 private static final int[] CODEWORD_TABLE = {2627, 1819, 2622, 2621, 1813,
\r
929 1812, 2729, 2724, 2723, 2779, 2774, 2773, 902, 896, 908, 868, 865,
\r
930 861, 859, 2511, 873, 871, 1780, 835, 2493, 825, 2491, 842, 837, 844,
\r
931 1764, 1762, 811, 810, 809, 2483, 807, 2482, 806, 2480, 815, 814, 813,
\r
932 812, 2484, 817, 816, 1745, 1744, 1742, 1746, 2655, 2637, 2635, 2626,
\r
933 2625, 2623, 2628, 1820, 2752, 2739, 2737, 2728, 2727, 2725, 2730,
\r
934 2785, 2783, 2778, 2777, 2775, 2780, 787, 781, 747, 739, 736, 2413,
\r
935 754, 752, 1719, 692, 689, 681, 2371, 678, 2369, 700, 697, 694, 703,
\r
936 1688, 1686, 642, 638, 2343, 631, 2341, 627, 2338, 651, 646, 643, 2345,
\r
937 654, 652, 1652, 1650, 1647, 1654, 601, 599, 2322, 596, 2321, 594,
\r
938 2319, 2317, 611, 610, 608, 606, 2324, 603, 2323, 615, 614, 612, 1617,
\r
939 1616, 1614, 1612, 616, 1619, 1618, 2575, 2538, 2536, 905, 901, 898,
\r
940 909, 2509, 2507, 2504, 870, 867, 864, 860, 2512, 875, 872, 1781, 2490,
\r
941 2489, 2487, 2485, 1748, 836, 834, 832, 830, 2494, 827, 2492, 843, 841,
\r
942 839, 845, 1765, 1763, 2701, 2676, 2674, 2653, 2648, 2656, 2634, 2633,
\r
943 2631, 2629, 1821, 2638, 2636, 2770, 2763, 2761, 2750, 2745, 2753,
\r
944 2736, 2735, 2733, 2731, 1848, 2740, 2738, 2786, 2784, 591, 588, 576,
\r
945 569, 566, 2296, 1590, 537, 534, 526, 2276, 522, 2274, 545, 542, 539,
\r
946 548, 1572, 1570, 481, 2245, 466, 2242, 462, 2239, 492, 485, 482, 2249,
\r
947 496, 494, 1534, 1531, 1528, 1538, 413, 2196, 406, 2191, 2188, 425,
\r
948 419, 2202, 415, 2199, 432, 430, 427, 1472, 1467, 1464, 433, 1476,
\r
949 1474, 368, 367, 2160, 365, 2159, 362, 2157, 2155, 2152, 378, 377, 375,
\r
950 2166, 372, 2165, 369, 2162, 383, 381, 379, 2168, 1419, 1418, 1416,
\r
951 1414, 385, 1411, 384, 1423, 1422, 1420, 1424, 2461, 802, 2441, 2439,
\r
952 790, 786, 783, 794, 2409, 2406, 2403, 750, 742, 738, 2414, 756, 753,
\r
953 1720, 2367, 2365, 2362, 2359, 1663, 693, 691, 684, 2373, 680, 2370,
\r
954 702, 699, 696, 704, 1690, 1687, 2337, 2336, 2334, 2332, 1624, 2329,
\r
955 1622, 640, 637, 2344, 634, 2342, 630, 2340, 650, 648, 645, 2346, 655,
\r
956 653, 1653, 1651, 1649, 1655, 2612, 2597, 2595, 2571, 2568, 2565, 2576,
\r
957 2534, 2529, 2526, 1787, 2540, 2537, 907, 904, 900, 910, 2503, 2502,
\r
958 2500, 2498, 1768, 2495, 1767, 2510, 2508, 2506, 869, 866, 863, 2513,
\r
959 876, 874, 1782, 2720, 2713, 2711, 2697, 2694, 2691, 2702, 2672, 2670,
\r
960 2664, 1828, 2678, 2675, 2647, 2646, 2644, 2642, 1823, 2639, 1822,
\r
961 2654, 2652, 2650, 2657, 2771, 1855, 2765, 2762, 1850, 1849, 2751,
\r
962 2749, 2747, 2754, 353, 2148, 344, 342, 336, 2142, 332, 2140, 345,
\r
963 1375, 1373, 306, 2130, 299, 2128, 295, 2125, 319, 314, 311, 2132,
\r
964 1354, 1352, 1349, 1356, 262, 257, 2101, 253, 2096, 2093, 274, 273,
\r
965 267, 2107, 263, 2104, 280, 278, 275, 1316, 1311, 1308, 1320, 1318,
\r
966 2052, 202, 2050, 2044, 2040, 219, 2063, 212, 2060, 208, 2055, 224,
\r
967 221, 2066, 1260, 1258, 1252, 231, 1248, 229, 1266, 1264, 1261, 1268,
\r
968 155, 1998, 153, 1996, 1994, 1991, 1988, 165, 164, 2007, 162, 2006,
\r
969 159, 2003, 2000, 172, 171, 169, 2012, 166, 2010, 1186, 1184, 1182,
\r
970 1179, 175, 1176, 173, 1192, 1191, 1189, 1187, 176, 1194, 1193, 2313,
\r
971 2307, 2305, 592, 589, 2294, 2292, 2289, 578, 572, 568, 2297, 580,
\r
972 1591, 2272, 2267, 2264, 1547, 538, 536, 529, 2278, 525, 2275, 547,
\r
973 544, 541, 1574, 1571, 2237, 2235, 2229, 1493, 2225, 1489, 478, 2247,
\r
974 470, 2244, 465, 2241, 493, 488, 484, 2250, 498, 495, 1536, 1533, 1530,
\r
975 1539, 2187, 2186, 2184, 2182, 1432, 2179, 1430, 2176, 1427, 414, 412,
\r
976 2197, 409, 2195, 405, 2193, 2190, 426, 424, 421, 2203, 418, 2201, 431,
\r
977 429, 1473, 1471, 1469, 1466, 434, 1477, 1475, 2478, 2472, 2470, 2459,
\r
978 2457, 2454, 2462, 803, 2437, 2432, 2429, 1726, 2443, 2440, 792, 789,
\r
979 785, 2401, 2399, 2393, 1702, 2389, 1699, 2411, 2408, 2405, 745, 741,
\r
980 2415, 758, 755, 1721, 2358, 2357, 2355, 2353, 1661, 2350, 1660, 2347,
\r
981 1657, 2368, 2366, 2364, 2361, 1666, 690, 687, 2374, 683, 2372, 701,
\r
982 698, 705, 1691, 1689, 2619, 2617, 2610, 2608, 2605, 2613, 2593, 2588,
\r
983 2585, 1803, 2599, 2596, 2563, 2561, 2555, 1797, 2551, 1795, 2573,
\r
984 2570, 2567, 2577, 2525, 2524, 2522, 2520, 1786, 2517, 1785, 2514,
\r
985 1783, 2535, 2533, 2531, 2528, 1788, 2541, 2539, 906, 903, 911, 2721,
\r
986 1844, 2715, 2712, 1838, 1836, 2699, 2696, 2693, 2703, 1827, 1826,
\r
987 1824, 2673, 2671, 2669, 2666, 1829, 2679, 2677, 1858, 1857, 2772,
\r
988 1854, 1853, 1851, 1856, 2766, 2764, 143, 1987, 139, 1986, 135, 133,
\r
989 131, 1984, 128, 1983, 125, 1981, 138, 137, 136, 1985, 1133, 1132,
\r
990 1130, 112, 110, 1974, 107, 1973, 104, 1971, 1969, 122, 121, 119, 117,
\r
991 1977, 114, 1976, 124, 1115, 1114, 1112, 1110, 1117, 1116, 84, 83,
\r
992 1953, 81, 1952, 78, 1950, 1948, 1945, 94, 93, 91, 1959, 88, 1958, 85,
\r
993 1955, 99, 97, 95, 1961, 1086, 1085, 1083, 1081, 1078, 100, 1090, 1089,
\r
994 1087, 1091, 49, 47, 1917, 44, 1915, 1913, 1910, 1907, 59, 1926, 56,
\r
995 1925, 53, 1922, 1919, 66, 64, 1931, 61, 1929, 1042, 1040, 1038, 71,
\r
996 1035, 70, 1032, 68, 1048, 1047, 1045, 1043, 1050, 1049, 12, 10, 1869,
\r
997 1867, 1864, 1861, 21, 1880, 19, 1877, 1874, 1871, 28, 1888, 25, 1886,
\r
998 22, 1883, 982, 980, 977, 974, 32, 30, 991, 989, 987, 984, 34, 995,
\r
999 994, 992, 2151, 2150, 2147, 2146, 2144, 356, 355, 354, 2149, 2139,
\r
1000 2138, 2136, 2134, 1359, 343, 341, 338, 2143, 335, 2141, 348, 347, 346,
\r
1001 1376, 1374, 2124, 2123, 2121, 2119, 1326, 2116, 1324, 310, 308, 305,
\r
1002 2131, 302, 2129, 298, 2127, 320, 318, 316, 313, 2133, 322, 321, 1355,
\r
1003 1353, 1351, 1357, 2092, 2091, 2089, 2087, 1276, 2084, 1274, 2081,
\r
1004 1271, 259, 2102, 256, 2100, 252, 2098, 2095, 272, 269, 2108, 266,
\r
1005 2106, 281, 279, 277, 1317, 1315, 1313, 1310, 282, 1321, 1319, 2039,
\r
1006 2037, 2035, 2032, 1203, 2029, 1200, 1197, 207, 2053, 205, 2051, 201,
\r
1007 2049, 2046, 2043, 220, 218, 2064, 215, 2062, 211, 2059, 228, 226, 223,
\r
1008 2069, 1259, 1257, 1254, 232, 1251, 230, 1267, 1265, 1263, 2316, 2315,
\r
1009 2312, 2311, 2309, 2314, 2304, 2303, 2301, 2299, 1593, 2308, 2306, 590,
\r
1010 2288, 2287, 2285, 2283, 1578, 2280, 1577, 2295, 2293, 2291, 579, 577,
\r
1011 574, 571, 2298, 582, 581, 1592, 2263, 2262, 2260, 2258, 1545, 2255,
\r
1012 1544, 2252, 1541, 2273, 2271, 2269, 2266, 1550, 535, 532, 2279, 528,
\r
1013 2277, 546, 543, 549, 1575, 1573, 2224, 2222, 2220, 1486, 2217, 1485,
\r
1014 2214, 1482, 1479, 2238, 2236, 2234, 2231, 1496, 2228, 1492, 480, 477,
\r
1015 2248, 473, 2246, 469, 2243, 490, 487, 2251, 497, 1537, 1535, 1532,
\r
1016 2477, 2476, 2474, 2479, 2469, 2468, 2466, 2464, 1730, 2473, 2471,
\r
1017 2453, 2452, 2450, 2448, 1729, 2445, 1728, 2460, 2458, 2456, 2463, 805,
\r
1018 804, 2428, 2427, 2425, 2423, 1725, 2420, 1724, 2417, 1722, 2438, 2436,
\r
1019 2434, 2431, 1727, 2444, 2442, 793, 791, 788, 795, 2388, 2386, 2384,
\r
1020 1697, 2381, 1696, 2378, 1694, 1692, 2402, 2400, 2398, 2395, 1703,
\r
1021 2392, 1701, 2412, 2410, 2407, 751, 748, 744, 2416, 759, 757, 1807,
\r
1022 2620, 2618, 1806, 1805, 2611, 2609, 2607, 2614, 1802, 1801, 1799,
\r
1023 2594, 2592, 2590, 2587, 1804, 2600, 2598, 1794, 1793, 1791, 1789,
\r
1024 2564, 2562, 2560, 2557, 1798, 2554, 1796, 2574, 2572, 2569, 2578,
\r
1025 1847, 1846, 2722, 1843, 1842, 1840, 1845, 2716, 2714, 1835, 1834,
\r
1026 1832, 1830, 1839, 1837, 2700, 2698, 2695, 2704, 1817, 1811, 1810, 897,
\r
1027 862, 1777, 829, 826, 838, 1760, 1758, 808, 2481, 1741, 1740, 1738,
\r
1028 1743, 2624, 1818, 2726, 2776, 782, 740, 737, 1715, 686, 679, 695,
\r
1029 1682, 1680, 639, 628, 2339, 647, 644, 1645, 1643, 1640, 1648, 602,
\r
1030 600, 597, 595, 2320, 593, 2318, 609, 607, 604, 1611, 1610, 1608, 1606,
\r
1031 613, 1615, 1613, 2328, 926, 924, 892, 886, 899, 857, 850, 2505, 1778,
\r
1032 824, 823, 821, 819, 2488, 818, 2486, 833, 831, 828, 840, 1761, 1759,
\r
1033 2649, 2632, 2630, 2746, 2734, 2732, 2782, 2781, 570, 567, 1587, 531,
\r
1034 527, 523, 540, 1566, 1564, 476, 467, 463, 2240, 486, 483, 1524, 1521,
\r
1035 1518, 1529, 411, 403, 2192, 399, 2189, 423, 416, 1462, 1457, 1454,
\r
1036 428, 1468, 1465, 2210, 366, 363, 2158, 360, 2156, 357, 2153, 376, 373,
\r
1037 370, 2163, 1410, 1409, 1407, 1405, 382, 1402, 380, 1417, 1415, 1412,
\r
1038 1421, 2175, 2174, 777, 774, 771, 784, 732, 725, 722, 2404, 743, 1716,
\r
1039 676, 674, 668, 2363, 665, 2360, 685, 1684, 1681, 626, 624, 622, 2335,
\r
1040 620, 2333, 617, 2330, 641, 635, 649, 1646, 1644, 1642, 2566, 928, 925,
\r
1041 2530, 2527, 894, 891, 888, 2501, 2499, 2496, 858, 856, 854, 851, 1779,
\r
1042 2692, 2668, 2665, 2645, 2643, 2640, 2651, 2768, 2759, 2757, 2744,
\r
1043 2743, 2741, 2748, 352, 1382, 340, 337, 333, 1371, 1369, 307, 300, 296,
\r
1044 2126, 315, 312, 1347, 1342, 1350, 261, 258, 250, 2097, 246, 2094, 271,
\r
1045 268, 264, 1306, 1301, 1298, 276, 1312, 1309, 2115, 203, 2048, 195,
\r
1046 2045, 191, 2041, 213, 209, 2056, 1246, 1244, 1238, 225, 1234, 222,
\r
1047 1256, 1253, 1249, 1262, 2080, 2079, 154, 1997, 150, 1995, 147, 1992,
\r
1048 1989, 163, 160, 2004, 156, 2001, 1175, 1174, 1172, 1170, 1167, 170,
\r
1049 1164, 167, 1185, 1183, 1180, 1177, 174, 1190, 1188, 2025, 2024, 2022,
\r
1050 587, 586, 564, 559, 556, 2290, 573, 1588, 520, 518, 512, 2268, 508,
\r
1051 2265, 530, 1568, 1565, 461, 457, 2233, 450, 2230, 446, 2226, 479, 471,
\r
1052 489, 1526, 1523, 1520, 397, 395, 2185, 392, 2183, 389, 2180, 2177,
\r
1053 410, 2194, 402, 422, 1463, 1461, 1459, 1456, 1470, 2455, 799, 2433,
\r
1054 2430, 779, 776, 773, 2397, 2394, 2390, 734, 728, 724, 746, 1717, 2356,
\r
1055 2354, 2351, 2348, 1658, 677, 675, 673, 670, 667, 688, 1685, 1683,
\r
1056 2606, 2589, 2586, 2559, 2556, 2552, 927, 2523, 2521, 2518, 2515, 1784,
\r
1057 2532, 895, 893, 890, 2718, 2709, 2707, 2689, 2687, 2684, 2663, 2662,
\r
1058 2660, 2658, 1825, 2667, 2769, 1852, 2760, 2758, 142, 141, 1139, 1138,
\r
1059 134, 132, 129, 126, 1982, 1129, 1128, 1126, 1131, 113, 111, 108, 105,
\r
1060 1972, 101, 1970, 120, 118, 115, 1109, 1108, 1106, 1104, 123, 1113,
\r
1061 1111, 82, 79, 1951, 75, 1949, 72, 1946, 92, 89, 86, 1956, 1077, 1076,
\r
1062 1074, 1072, 98, 1069, 96, 1084, 1082, 1079, 1088, 1968, 1967, 48, 45,
\r
1063 1916, 42, 1914, 39, 1911, 1908, 60, 57, 54, 1923, 50, 1920, 1031,
\r
1064 1030, 1028, 1026, 67, 1023, 65, 1020, 62, 1041, 1039, 1036, 1033, 69,
\r
1065 1046, 1044, 1944, 1943, 1941, 11, 9, 1868, 7, 1865, 1862, 1859, 20,
\r
1066 1878, 16, 1875, 13, 1872, 970, 968, 966, 963, 29, 960, 26, 23, 983,
\r
1067 981, 978, 975, 33, 971, 31, 990, 988, 985, 1906, 1904, 1902, 993, 351,
\r
1068 2145, 1383, 331, 330, 328, 326, 2137, 323, 2135, 339, 1372, 1370, 294,
\r
1069 293, 291, 289, 2122, 286, 2120, 283, 2117, 309, 303, 317, 1348, 1346,
\r
1070 1344, 245, 244, 242, 2090, 239, 2088, 236, 2085, 2082, 260, 2099, 249,
\r
1071 270, 1307, 1305, 1303, 1300, 1314, 189, 2038, 186, 2036, 183, 2033,
\r
1072 2030, 2026, 206, 198, 2047, 194, 216, 1247, 1245, 1243, 1240, 227,
\r
1073 1237, 1255, 2310, 2302, 2300, 2286, 2284, 2281, 565, 563, 561, 558,
\r
1074 575, 1589, 2261, 2259, 2256, 2253, 1542, 521, 519, 517, 514, 2270,
\r
1075 511, 533, 1569, 1567, 2223, 2221, 2218, 2215, 1483, 2211, 1480, 459,
\r
1076 456, 453, 2232, 449, 474, 491, 1527, 1525, 1522, 2475, 2467, 2465,
\r
1077 2451, 2449, 2446, 801, 800, 2426, 2424, 2421, 2418, 1723, 2435, 780,
\r
1078 778, 775, 2387, 2385, 2382, 2379, 1695, 2375, 1693, 2396, 735, 733,
\r
1079 730, 727, 749, 1718, 2616, 2615, 2604, 2603, 2601, 2584, 2583, 2581,
\r
1080 2579, 1800, 2591, 2550, 2549, 2547, 2545, 1792, 2542, 1790, 2558, 929,
\r
1081 2719, 1841, 2710, 2708, 1833, 1831, 2690, 2688, 2686, 1815, 1809,
\r
1082 1808, 1774, 1756, 1754, 1737, 1736, 1734, 1739, 1816, 1711, 1676,
\r
1083 1674, 633, 629, 1638, 1636, 1633, 1641, 598, 1605, 1604, 1602, 1600,
\r
1084 605, 1609, 1607, 2327, 887, 853, 1775, 822, 820, 1757, 1755, 1584,
\r
1085 524, 1560, 1558, 468, 464, 1514, 1511, 1508, 1519, 408, 404, 400,
\r
1086 1452, 1447, 1444, 417, 1458, 1455, 2208, 364, 361, 358, 2154, 1401,
\r
1087 1400, 1398, 1396, 374, 1393, 371, 1408, 1406, 1403, 1413, 2173, 2172,
\r
1088 772, 726, 723, 1712, 672, 669, 666, 682, 1678, 1675, 625, 623, 621,
\r
1089 618, 2331, 636, 632, 1639, 1637, 1635, 920, 918, 884, 880, 889, 849,
\r
1090 848, 847, 846, 2497, 855, 852, 1776, 2641, 2742, 2787, 1380, 334,
\r
1091 1367, 1365, 301, 297, 1340, 1338, 1335, 1343, 255, 251, 247, 1296,
\r
1092 1291, 1288, 265, 1302, 1299, 2113, 204, 196, 192, 2042, 1232, 1230,
\r
1093 1224, 214, 1220, 210, 1242, 1239, 1235, 1250, 2077, 2075, 151, 148,
\r
1094 1993, 144, 1990, 1163, 1162, 1160, 1158, 1155, 161, 1152, 157, 1173,
\r
1095 1171, 1168, 1165, 168, 1181, 1178, 2021, 2020, 2018, 2023, 585, 560,
\r
1096 557, 1585, 516, 509, 1562, 1559, 458, 447, 2227, 472, 1516, 1513,
\r
1097 1510, 398, 396, 393, 390, 2181, 386, 2178, 407, 1453, 1451, 1449,
\r
1098 1446, 420, 1460, 2209, 769, 764, 720, 712, 2391, 729, 1713, 664, 663,
\r
1099 661, 659, 2352, 656, 2349, 671, 1679, 1677, 2553, 922, 919, 2519,
\r
1100 2516, 885, 883, 881, 2685, 2661, 2659, 2767, 2756, 2755, 140, 1137,
\r
1101 1136, 130, 127, 1125, 1124, 1122, 1127, 109, 106, 102, 1103, 1102,
\r
1102 1100, 1098, 116, 1107, 1105, 1980, 80, 76, 73, 1947, 1068, 1067, 1065,
\r
1103 1063, 90, 1060, 87, 1075, 1073, 1070, 1080, 1966, 1965, 46, 43, 40,
\r
1104 1912, 36, 1909, 1019, 1018, 1016, 1014, 58, 1011, 55, 1008, 51, 1029,
\r
1105 1027, 1024, 1021, 63, 1037, 1034, 1940, 1939, 1937, 1942, 8, 1866, 4,
\r
1106 1863, 1, 1860, 956, 954, 952, 949, 946, 17, 14, 969, 967, 964, 961,
\r
1107 27, 957, 24, 979, 976, 972, 1901, 1900, 1898, 1896, 986, 1905, 1903,
\r
1108 350, 349, 1381, 329, 327, 324, 1368, 1366, 292, 290, 287, 284, 2118,
\r
1109 304, 1341, 1339, 1337, 1345, 243, 240, 237, 2086, 233, 2083, 254,
\r
1110 1297, 1295, 1293, 1290, 1304, 2114, 190, 187, 184, 2034, 180, 2031,
\r
1111 177, 2027, 199, 1233, 1231, 1229, 1226, 217, 1223, 1241, 2078, 2076,
\r
1112 584, 555, 554, 552, 550, 2282, 562, 1586, 507, 506, 504, 502, 2257,
\r
1113 499, 2254, 515, 1563, 1561, 445, 443, 441, 2219, 438, 2216, 435, 2212,
\r
1114 460, 454, 475, 1517, 1515, 1512, 2447, 798, 797, 2422, 2419, 770, 768,
\r
1115 766, 2383, 2380, 2376, 721, 719, 717, 714, 731, 1714, 2602, 2582,
\r
1116 2580, 2548, 2546, 2543, 923, 921, 2717, 2706, 2705, 2683, 2682, 2680,
\r
1117 1771, 1752, 1750, 1733, 1732, 1731, 1735, 1814, 1707, 1670, 1668,
\r
1118 1631, 1629, 1626, 1634, 1599, 1598, 1596, 1594, 1603, 1601, 2326,
\r
1119 1772, 1753, 1751, 1581, 1554, 1552, 1504, 1501, 1498, 1509, 1442,
\r
1120 1437, 1434, 401, 1448, 1445, 2206, 1392, 1391, 1389, 1387, 1384, 359,
\r
1121 1399, 1397, 1394, 1404, 2171, 2170, 1708, 1672, 1669, 619, 1632, 1630,
\r
1122 1628, 1773, 1378, 1363, 1361, 1333, 1328, 1336, 1286, 1281, 1278, 248,
\r
1123 1292, 1289, 2111, 1218, 1216, 1210, 197, 1206, 193, 1228, 1225, 1221,
\r
1124 1236, 2073, 2071, 1151, 1150, 1148, 1146, 152, 1143, 149, 1140, 145,
\r
1125 1161, 1159, 1156, 1153, 158, 1169, 1166, 2017, 2016, 2014, 2019, 1582,
\r
1126 510, 1556, 1553, 452, 448, 1506, 1500, 394, 391, 387, 1443, 1441,
\r
1127 1439, 1436, 1450, 2207, 765, 716, 713, 1709, 662, 660, 657, 1673,
\r
1128 1671, 916, 914, 879, 878, 877, 882, 1135, 1134, 1121, 1120, 1118,
\r
1129 1123, 1097, 1096, 1094, 1092, 103, 1101, 1099, 1979, 1059, 1058, 1056,
\r
1130 1054, 77, 1051, 74, 1066, 1064, 1061, 1071, 1964, 1963, 1007, 1006,
\r
1131 1004, 1002, 999, 41, 996, 37, 1017, 1015, 1012, 1009, 52, 1025, 1022,
\r
1132 1936, 1935, 1933, 1938, 942, 940, 938, 935, 932, 5, 2, 955, 953, 950,
\r
1133 947, 18, 943, 15, 965, 962, 958, 1895, 1894, 1892, 1890, 973, 1899,
\r
1134 1897, 1379, 325, 1364, 1362, 288, 285, 1334, 1332, 1330, 241, 238,
\r
1135 234, 1287, 1285, 1283, 1280, 1294, 2112, 188, 185, 181, 178, 2028,
\r
1136 1219, 1217, 1215, 1212, 200, 1209, 1227, 2074, 2072, 583, 553, 551,
\r
1137 1583, 505, 503, 500, 513, 1557, 1555, 444, 442, 439, 436, 2213, 455,
\r
1138 451, 1507, 1505, 1502, 796, 763, 762, 760, 767, 711, 710, 708, 706,
\r
1139 2377, 718, 715, 1710, 2544, 917, 915, 2681, 1627, 1597, 1595, 2325,
\r
1140 1769, 1749, 1747, 1499, 1438, 1435, 2204, 1390, 1388, 1385, 1395,
\r
1141 2169, 2167, 1704, 1665, 1662, 1625, 1623, 1620, 1770, 1329, 1282,
\r
1142 1279, 2109, 1214, 1207, 1222, 2068, 2065, 1149, 1147, 1144, 1141, 146,
\r
1143 1157, 1154, 2013, 2011, 2008, 2015, 1579, 1549, 1546, 1495, 1487,
\r
1144 1433, 1431, 1428, 1425, 388, 1440, 2205, 1705, 658, 1667, 1664, 1119,
\r
1145 1095, 1093, 1978, 1057, 1055, 1052, 1062, 1962, 1960, 1005, 1003,
\r
1146 1000, 997, 38, 1013, 1010, 1932, 1930, 1927, 1934, 941, 939, 936, 933,
\r
1147 6, 930, 3, 951, 948, 944, 1889, 1887, 1884, 1881, 959, 1893, 1891, 35,
\r
1148 1377, 1360, 1358, 1327, 1325, 1322, 1331, 1277, 1275, 1272, 1269, 235,
\r
1149 1284, 2110, 1205, 1204, 1201, 1198, 182, 1195, 179, 1213, 2070, 2067,
\r
1150 1580, 501, 1551, 1548, 440, 437, 1497, 1494, 1490, 1503, 761, 709,
\r
1151 707, 1706, 913, 912, 2198, 1386, 2164, 2161, 1621, 1766, 2103, 1208,
\r
1152 2058, 2054, 1145, 1142, 2005, 2002, 1999, 2009, 1488, 1429, 1426,
\r
1153 2200, 1698, 1659, 1656, 1975, 1053, 1957, 1954, 1001, 998, 1924, 1921,
\r
1154 1918, 1928, 937, 934, 931, 1879, 1876, 1873, 1870, 945, 1885, 1882,
\r
1155 1323, 1273, 1270, 2105, 1202, 1199, 1196, 1211, 2061, 2057, 1576,
\r
1156 1543, 1540, 1484, 1481, 1478, 1491, 1700};
\r