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