FontPage.java
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13: package xeij;
14:
15: import java.awt.*;
16: import java.awt.font.*;
17: import java.awt.geom.*;
18: import java.awt.image.*;
19: import java.io.*;
20: import java.lang.*;
21: import java.util.*;
22: import javax.imageio.*;
23: import javax.imageio.stream.*;
24: import javax.swing.*;
25:
26:
27:
28:
29: public class FontPage {
30:
31:
32:
33:
34:
35:
36:
37:
38:
39: public static final int FNP_COLOR_0 = 0x00;
40: public static final int FNP_COLOR_1 = 0x33;
41: public static final int FNP_COLOR_2 = 0xff;
42: public static final int FNP_COLOR_3 = 0xff;
43: public static final byte[] FNP_COLOR_BASE = new byte[] {
44: (byte) FNP_COLOR_0,
45: (byte) FNP_COLOR_1,
46: (byte) FNP_COLOR_2,
47: (byte) FNP_COLOR_3,
48: };
49: public static final Color[] FNP_COLOR_ARRAY = new Color[] {
50: new Color (FNP_COLOR_0, FNP_COLOR_0, FNP_COLOR_0),
51: new Color (FNP_COLOR_1, FNP_COLOR_1, FNP_COLOR_1),
52: new Color (FNP_COLOR_2, FNP_COLOR_2, FNP_COLOR_2),
53: new Color (FNP_COLOR_3, FNP_COLOR_3, FNP_COLOR_3),
54: };
55:
56:
57: public static final byte[][] FNP_PALET = {
58:
59: {
60: 0b00_00_00_00,
61: 0b00_00_00_10,
62: 0b00_00_10_00,
63: 0b00_00_10_10,
64: 0b00_10_00_00,
65: 0b00_10_00_10,
66: 0b00_10_10_00,
67: 0b00_10_10_10,
68: (byte) 0b10_00_00_00,
69: (byte) 0b10_00_00_10,
70: (byte) 0b10_00_10_00,
71: (byte) 0b10_00_10_10,
72: (byte) 0b10_10_00_00,
73: (byte) 0b10_10_00_10,
74: (byte) 0b10_10_10_00,
75: (byte) 0b10_10_10_10,
76: },
77:
78: {
79: 0b01_01_01_01,
80: 0b01_01_01_11,
81: 0b01_01_11_01,
82: 0b01_01_11_11,
83: 0b01_11_01_01,
84: 0b01_11_01_11,
85: 0b01_11_11_01,
86: 0b01_11_11_11,
87: (byte) 0b11_01_01_01,
88: (byte) 0b11_01_01_11,
89: (byte) 0b11_01_11_01,
90: (byte) 0b11_01_11_11,
91: (byte) 0b11_11_01_01,
92: (byte) 0b11_11_01_11,
93: (byte) 0b11_11_11_01,
94: (byte) 0b11_11_11_11,
95: },
96:
97: {
98: 0b00_00_01_01,
99: 0b00_00_01_11,
100: 0b00_00_11_01,
101: 0b00_00_11_11,
102: 0b00_10_01_01,
103: 0b00_10_01_11,
104: 0b00_10_11_01,
105: 0b00_10_11_11,
106: (byte) 0b10_00_01_01,
107: (byte) 0b10_00_01_11,
108: (byte) 0b10_00_11_01,
109: (byte) 0b10_00_11_11,
110: (byte) 0b10_10_01_01,
111: (byte) 0b10_10_01_11,
112: (byte) 0b10_10_11_01,
113: (byte) 0b10_10_11_11,
114: },
115:
116: {
117: 0b01_01_00_00,
118: 0b01_01_00_10,
119: 0b01_01_10_00,
120: 0b01_01_10_10,
121: 0b01_11_00_00,
122: 0b01_11_00_10,
123: 0b01_11_10_00,
124: 0b01_11_10_10,
125: (byte) 0b11_01_00_00,
126: (byte) 0b11_01_00_10,
127: (byte) 0b11_01_10_00,
128: (byte) 0b11_01_10_10,
129: (byte) 0b11_11_00_00,
130: (byte) 0b11_11_00_10,
131: (byte) 0b11_11_10_00,
132: (byte) 0b11_11_10_10,
133: },
134: };
135:
136:
137: public static final byte[] FNP_INV_PALET = new byte[256];
138: static {
139: for (int i = 0; i < 256; i++) {
140: FNP_INV_PALET[i] = (byte) (i >> 4 & 8 | i >> 3 & 4 | i >> 2 & 2 | i >> 1 & 1);
141: }
142: }
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170: public int fnpCharacterWidth;
171: public int fnpCharacterHeight;
172: public String fnpNameEn;
173: public String fnpNameJa;
174: public String fnpFontDataFileName;
175: public String fnpFontImageFileName;
176: public int fnpImageCols;
177: public int fnpImageRows;
178: public int fnpMemoryRows;
179: public byte[] fnpMemoryArray;
180: public int fnpMemoryAddress;
181: public char[][] fnpTableArray;
182:
183: public int fnpImageWidth;
184: public int fnpImageHeight;
185: public BufferedImage fnpImageObject;
186: public byte[] fnpBitmapArray;
187: public int fnpBitmapRasterBytes;
188:
189: public int fnpCharacterHorizontalBytes;
190: public int fnpCharacterBytes;
191: public int fnpBinaryBytes;
192: public byte[] fnpBinaryArray;
193: public int fnpMinimumFontDataFileLength;
194: public int fnpMaximumFontDataFileLength;
195:
196: public int fnpMemoryBytes;
197:
198: public boolean fnpReady;
199: public String fnpHostFontName;
200:
201: public JFileChooser2 fnpFontDataFileChooser;
202: public String fnpExtension;
203: public String fnpDescription;
204:
205: public JFileChooser2 fnpFontImageFileChooser;
206:
207: public boolean fnpEditted;
208:
209:
210:
211:
212: public FontPage (int characterWidth, int characterHeight, String nameEn, String nameJa, String dataName, String imageName,
213: int imageCols, int imageRows, int memoryRows,
214: byte[] memoryArray, int memoryAddress,
215: char[][] tableArray) {
216: fnpCharacterWidth = characterWidth;
217: fnpCharacterHeight = characterHeight;
218: fnpNameEn = nameEn;
219: fnpNameJa = nameJa;
220: fnpFontDataFileName = dataName;
221: fnpFontImageFileName = imageName;
222: fnpImageCols = imageCols;
223: fnpImageRows = imageRows;
224: fnpMemoryRows = memoryArray == null ? 0 : memoryRows;
225: fnpMemoryArray = memoryArray;
226: fnpMemoryAddress = memoryArray == null ? 0 : memoryAddress;
227: fnpTableArray = tableArray;
228:
229: fnpImageWidth = characterWidth * fnpImageCols;
230: fnpImageHeight = characterHeight * fnpImageRows;
231: fnpImageObject = new BufferedImage ((fnpImageWidth + 3) & -4, fnpImageHeight, BufferedImage.TYPE_BYTE_BINARY,
232: new IndexColorModel (2, 4, FNP_COLOR_BASE, FNP_COLOR_BASE, FNP_COLOR_BASE));
233: fnpBitmapArray = ((DataBufferByte) fnpImageObject.getRaster ().getDataBuffer ()).getData ();
234: fnpBitmapRasterBytes = (fnpImageWidth + 3) >> 2;
235:
236: fnpCharacterHorizontalBytes = (characterWidth + 7) >> 3;
237: fnpCharacterBytes = fnpCharacterHorizontalBytes * fnpCharacterHeight;
238: fnpBinaryBytes = fnpCharacterBytes * fnpImageCols * fnpImageRows;
239: fnpBinaryArray = new byte[fnpBinaryBytes];
240: fnpMinimumFontDataFileLength = fnpBinaryBytes;
241: fnpMaximumFontDataFileLength = fnpBinaryBytes;
242:
243: fnpMemoryBytes = memoryArray == null ? 0 : fnpCharacterBytes * fnpImageCols * fnpMemoryRows;
244:
245: fnpReady = false;
246: fnpHostFontName = null;
247:
248: fnpFontDataFileChooser = null;
249: fnpExtension = null;
250: fnpDescription = null;
251:
252: fnpFontImageFileChooser = null;
253:
254: fnpBinaryToImage ();
255: }
256:
257:
258:
259:
260:
261:
262: public boolean fnpInputMemory () {
263: if (fnpMemoryArray == null) {
264: return false;
265: }
266: if (fnpImageCols == 16) {
267: if (fnpIsBlankMemory (1, 4)) {
268: return false;
269: }
270: } else if (fnpImageCols == 94) {
271: if (fnpIsBlankMemory (1, 3)) {
272: return false;
273: }
274: }
275: fnpMemoryToBinary ();
276: fnpBinaryToImage ();
277: if (!fnpReady) {
278: System.out.println (Multilingual.mlnJapanese ? fnpNameJa + " フォントの準備ができました" :
279: fnpNameEn + " font is ready");
280: fnpReady = true;
281: }
282: return true;
283: }
284:
285:
286:
287:
288:
289:
290: public boolean fnpIsBlankMemory (int col, int memoryRow) {
291: if (fnpMemoryArray != null) {
292: int start = fnpMemoryAddress + fnpCharacterBytes * (fnpImageCols * memoryRow + col);
293: for (int i = 0; i < fnpCharacterBytes; i++) {
294: if (fnpMemoryArray[start + i] != 0) {
295: return false;
296: }
297: }
298: }
299: return true;
300: }
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313: public int fnpImageRowToMemoryRow (int imageRow) {
314: return (fnpMemoryArray == null ? -1 :
315: fnpImageCols != 94 ? imageRow :
316: imageRow <= 7 ? imageRow :
317: imageRow <= 14 ? -1 :
318: imageRow <= 83 ? imageRow - 7 :
319: -1);
320: }
321:
322:
323:
324:
325: public int fnpMemoryRowToImageRow (int memoryRow) {
326: return (fnpMemoryArray == null ? -1 :
327: fnpImageCols != 94 ? memoryRow :
328: memoryRow <= 7 ? memoryRow :
329: memoryRow + 7);
330: }
331:
332:
333:
334:
335:
336: public void fnpMemoryToBinary () {
337: if (fnpMemoryArray != null) {
338: for (int imageRow = 0; imageRow < fnpImageRows; imageRow++) {
339: int memoryRow = fnpImageRowToMemoryRow (imageRow);
340: if (0 <= memoryRow) {
341: System.arraycopy (fnpMemoryArray, fnpMemoryAddress + fnpCharacterBytes * fnpImageCols * memoryRow,
342: fnpBinaryArray, fnpCharacterBytes * fnpImageCols * imageRow,
343: fnpCharacterBytes * fnpImageCols);
344: } else {
345: Arrays.fill (fnpBinaryArray,
346: fnpCharacterBytes * fnpImageCols * imageRow,
347: fnpCharacterBytes * fnpImageCols * (imageRow + 1),
348: (byte) 0);
349: }
350: }
351: }
352: }
353:
354:
355:
356: public void fnpBinaryToMemory () {
357: if (fnpMemoryArray != null) {
358: for (int imageRow = 0; imageRow < fnpImageRows; imageRow++) {
359: int memoryRow = fnpImageRowToMemoryRow (imageRow);
360: if (0 <= memoryRow) {
361: System.arraycopy (fnpBinaryArray, fnpCharacterBytes * fnpImageCols * imageRow,
362: fnpMemoryArray, fnpMemoryAddress + fnpCharacterBytes * fnpImageCols * memoryRow,
363: fnpCharacterBytes * fnpImageCols);
364: }
365: }
366: }
367: }
368:
369:
370:
371:
372:
373: public final void fnpBinaryToImage () {
374: byte[] bitmap = fnpBitmapArray;
375: byte[] m = fnpBinaryArray;
376: int a = 0;
377: int o = fnpBitmapRasterBytes;
378: int h = fnpCharacterHeight;
379: switch (fnpCharacterWidth) {
380: case 4:
381: for (int row = 0; row < fnpImageRows; row++) {
382: for (int col = 0; col < fnpImageCols; col++) {
383:
384: byte[] palet = FNP_PALET[(col ^ row) & 1];
385: for (int y = 0; y < h; y++) {
386: int i = o * (h * row + y) + (4 >> 2) * col;
387:
388:
389:
390:
391:
392:
393: bitmap[i] = palet[(m[a] & 255) >> 4];
394: a++;
395: }
396: }
397: }
398: break;
399: case 6:
400: for (int row = 0; row < fnpImageRows; row++) {
401: for (int col = 0; col < fnpImageCols; col += 2) {
402:
403: byte[] palet0 = FNP_PALET[ row & 1];
404: byte[] palet1 = FNP_PALET[2 | row & 1];
405: byte[] palet2 = FNP_PALET[ ~row & 1];
406: for (int y = 0; y < h; y++) {
407: int i = o * (h * row + y) + (6 * col >> 2);
408:
409:
410:
411:
412:
413:
414: int t = (m[a] & 253) << 4 | (m[a + h] & 253) >> 2;
415: bitmap[i ] = palet0[t >> 8 ];
416: bitmap[i + 1] = palet1[t >> 4 & 15];
417: bitmap[i + 2] = palet2[t & 15];
418: a++;
419: }
420: a += h;
421: }
422: }
423: break;
424: case 8:
425: for (int row = 0; row < fnpImageRows; row++) {
426: for (int col = 0; col < fnpImageCols; col++) {
427:
428: byte[] palet = FNP_PALET[(col ^ row) & 1];
429: for (int y = 0; y < h; y++) {
430: int i = o * (h * row + y) + (8 >> 2) * col;
431:
432:
433:
434:
435:
436:
437: int t = m[a] & 255;
438: bitmap[i ] = palet[t >> 4 ];
439: bitmap[i + 1] = palet[t & 15];
440: a++;
441: }
442: }
443: }
444: break;
445: case 12:
446: for (int row = 0; row < fnpImageRows; row++) {
447: for (int col = 0; col < fnpImageCols; col++) {
448:
449: byte[] palet = FNP_PALET[(col ^ row) & 1];
450: for (int y = 0; y < h; y++) {
451: int i = o * (h * row + y) + (12 >> 2) * col;
452:
453:
454:
455:
456:
457:
458: int t = (char) (m[a] << 8 | m[a + 1] & 255);
459: bitmap[i ] = palet[t >> 12 ];
460: bitmap[i + 1] = palet[t >> 8 & 15];
461: bitmap[i + 2] = palet[t >> 4 & 15];
462: a += 2;
463: }
464: }
465: }
466: break;
467: case 16:
468: for (int row = 0; row < fnpImageRows; row++) {
469: for (int col = 0; col < fnpImageCols; col++) {
470:
471: byte[] palet = FNP_PALET[(col ^ row) & 1];
472: for (int y = 0; y < h; y++) {
473: int i = o * (h * row + y) + (16 >> 2) * col;
474:
475:
476:
477:
478:
479:
480: int t = (char) (m[a] << 8 | m[a + 1] & 255);
481: bitmap[i ] = palet[t >> 12 ];
482: bitmap[i + 1] = palet[t >> 8 & 15];
483: bitmap[i + 2] = palet[t >> 4 & 15];
484: bitmap[i + 3] = palet[t & 15];
485: a += 2;
486: }
487: }
488: }
489: break;
490: case 24:
491: for (int row = 0; row < fnpImageRows; row++) {
492: for (int col = 0; col < fnpImageCols; col++) {
493:
494: byte[] palet = FNP_PALET[(col ^ row) & 1];
495: for (int y = 0; y < h; y++) {
496: int i = o * (h * row + y) + (24 >> 2) * col;
497:
498:
499:
500:
501:
502:
503: int t = (char) (m[a] << 8 | m[a + 1] & 255) << 8 | m[a + 2] & 255;
504: bitmap[i ] = palet[t >> 20 ];
505: bitmap[i + 1] = palet[t >> 16 & 15];
506: bitmap[i + 2] = palet[t >> 12 & 15];
507: bitmap[i + 3] = palet[t >> 8 & 15];
508: bitmap[i + 4] = palet[t >> 4 & 15];
509: bitmap[i + 5] = palet[t & 15];
510: a += 3;
511: }
512: }
513: }
514: break;
515: case 32:
516: for (int row = 0; row < fnpImageRows; row++) {
517: for (int col = 0; col < fnpImageCols; col++) {
518:
519: byte[] palet = FNP_PALET[(col ^ row) & 1];
520: for (int y = 0; y < h; y++) {
521: int i = o * (h * row + y) + (32 >> 2) * col;
522: int t = m[a] << 24 | (m[a + 1] & 255) << 16 | (char) (m[a + 2] << 8 | m[a + 3] & 255);
523: bitmap[i ] = palet[t >>> 28 ];
524: bitmap[i + 1] = palet[t >>> 24 & 15];
525: bitmap[i + 2] = palet[t >>> 20 & 15];
526: bitmap[i + 3] = palet[t >>> 16 & 15];
527: bitmap[i + 4] = palet[t >>> 12 & 15];
528: bitmap[i + 5] = palet[t >>> 8 & 15];
529: bitmap[i + 6] = palet[t >>> 4 & 15];
530: bitmap[i + 7] = palet[t & 15];
531: a += 4;
532: }
533: }
534: }
535: break;
536: case 48:
537: for (int row = 0; row < fnpImageRows; row++) {
538: for (int col = 0; col < fnpImageCols; col++) {
539:
540: byte[] palet = FNP_PALET[(col ^ row) & 1];
541: for (int y = 0; y < h; y++) {
542: int i = o * (h * row + y) + (48 >> 2) * col;
543: int t = m[a] << 24 | (m[a + 1] & 255) << 16 | (char) (m[a + 2] << 8 | m[a + 3] & 255);
544: bitmap[i ] = palet[t >>> 28 ];
545: bitmap[i + 1] = palet[t >>> 24 & 15];
546: bitmap[i + 2] = palet[t >>> 20 & 15];
547: bitmap[i + 3] = palet[t >>> 16 & 15];
548: bitmap[i + 4] = palet[t >>> 12 & 15];
549: bitmap[i + 5] = palet[t >>> 8 & 15];
550: bitmap[i + 6] = palet[t >>> 4 & 15];
551: bitmap[i + 7] = palet[t & 15];
552: t = (char) (m[a + 4] << 8 | m[a + 5] & 255);
553: bitmap[i + 8] = palet[t >>> 12 & 15];
554: bitmap[i + 9] = palet[t >>> 8 & 15];
555: bitmap[i + 10] = palet[t >>> 4 & 15];
556: bitmap[i + 11] = palet[t & 15];
557: a += 6;
558: }
559: }
560: }
561: break;
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574: }
575: }
576:
577:
578:
579:
580:
581: public void fnpCreateImage (String hostFontName) {
582:
583: System.out.println (Multilingual.mlnJapanese ?
584: hostFontName + " を使って " + fnpNameJa + " を作ります" :
585: "Creating " + fnpNameEn + " by using " + hostFontName);
586: long startTime = System.currentTimeMillis ();
587:
588: fnpHostFontName = hostFontName;
589: Font font = new Font (hostFontName, Font.PLAIN, fnpCharacterHeight);
590: double fw = (double) fnpCharacterWidth;
591: double fh = (double) fnpCharacterHeight;
592:
593: char[][] tableArray = fnpTableArray;
594: int numberOfTable = tableArray.length;
595: int lastTableIndex = -1;
596: double px = 0.0;
597: double py = 0.0;
598: double pw = 0.0;
599: double ph = 0.0;
600:
601: Graphics2D g2 = (Graphics2D) fnpImageObject.getGraphics ();
602: FontRenderContext frc = g2.getFontRenderContext ();
603:
604: byte[] bitmap = fnpBitmapArray;
605: Arrays.fill (bitmap, 0, fnpBitmapRasterBytes * fnpImageHeight, (byte) 0);
606:
607: g2.setColor (FNP_COLOR_ARRAY[2]);
608: g2.setFont (font);
609:
610: AffineTransform savedTransform = g2.getTransform ();
611:
612: Shape savedClip = g2.getClip ();
613:
614: for (int row = 0; row < fnpImageRows; row++) {
615: int gy = fnpCharacterHeight * row;
616:
617: col:
618: for (int col = 0; col < fnpImageCols; col++) {
619: int gx = fnpCharacterWidth * col;
620:
621:
622: g2.setClip (null);
623: g2.clipRect (gx, gy, fnpCharacterWidth, fnpCharacterHeight);
624:
625:
626:
627: char[] table;
628: String s;
629: char c;
630: int tableIndex = -1;
631: do {
632: if (++tableIndex == numberOfTable) {
633: continue col;
634: }
635: table = tableArray[tableIndex];
636: int i = col + fnpImageCols * row;
637: if (table[1] != '\0') {
638: s = new String (table, i, 1);
639: } else {
640: i <<= 1;
641: if (table[i + 1] == '\0') {
642: s = new String (table, i, 1);
643: } else {
644: s = new String (table, i, 2);
645: }
646: }
647: c = s.charAt (0);
648:
649: int t;
650: switch (c) {
651: case '\u2571':
652: g2.setStroke (new BasicStroke ());
653: g2.drawLine (gx + fnpCharacterWidth - 1, gy, gx, gy + fnpCharacterHeight - 1);
654: continue col;
655: case '\u2572':
656: g2.setStroke (new BasicStroke ());
657: g2.drawLine (gx, gy, gx + fnpCharacterWidth - 1, gy + fnpCharacterHeight - 1);
658: continue col;
659: case '\u2573':
660: g2.setStroke (new BasicStroke ());
661: g2.drawLine (gx, gy, gx + fnpCharacterWidth - 1, gy + fnpCharacterHeight - 1);
662: g2.drawLine (gx + fnpCharacterWidth - 1, gy, gx, gy + fnpCharacterHeight - 1);
663: continue col;
664: case '\u2581':
665: t = fnpCharacterHeight + 4 >> 3;
666: g2.fillRect (gx, gy + fnpCharacterHeight - t, fnpCharacterWidth, t);
667: continue col;
668: case '\u2582':
669: t = fnpCharacterHeight * 2 + 4 >> 3;
670: g2.fillRect (gx, gy + fnpCharacterHeight - t, fnpCharacterWidth, t);
671: continue col;
672: case '\u2583':
673: t = fnpCharacterHeight * 3 + 4 >> 3;
674: g2.fillRect (gx, gy + fnpCharacterHeight - t, fnpCharacterWidth, t);
675: continue col;
676: case '\u2584':
677: t = fnpCharacterHeight * 4 + 4 >> 3;
678: g2.fillRect (gx, gy + fnpCharacterHeight - t, fnpCharacterWidth, t);
679: continue col;
680: case '\u2585':
681: t = fnpCharacterHeight * 5 + 4 >> 3;
682: g2.fillRect (gx, gy + fnpCharacterHeight - t, fnpCharacterWidth, t);
683: continue col;
684: case '\u2586':
685: t = fnpCharacterHeight * 6 + 4 >> 3;
686: g2.fillRect (gx, gy + fnpCharacterHeight - t, fnpCharacterWidth, t);
687: continue col;
688: case '\u2587':
689: t = fnpCharacterHeight * 7 + 4 >> 3;
690: g2.fillRect (gx, gy + fnpCharacterHeight - t, fnpCharacterWidth, t);
691: continue col;
692: case '\u2588':
693: g2.fillRect (gx, gy, fnpCharacterWidth, fnpCharacterHeight);
694: continue col;
695: case '\u2589':
696: t = fnpCharacterWidth * 7 + 4 >> 3;
697: g2.fillRect (gx, gy, t, fnpCharacterHeight);
698: continue col;
699: case '\u258a':
700: t = fnpCharacterWidth * 6 + 4 >> 3;
701: g2.fillRect (gx, gy, t, fnpCharacterHeight);
702: continue col;
703: case '\u258b':
704: t = fnpCharacterWidth * 5 + 4 >> 3;
705: g2.fillRect (gx, gy, t, fnpCharacterHeight);
706: continue col;
707: case '\u258c':
708: t = fnpCharacterWidth * 4 + 4 >> 3;
709: g2.fillRect (gx, gy, t, fnpCharacterHeight);
710: continue col;
711: case '\u258d':
712: t = fnpCharacterWidth * 3 + 4 >> 3;
713: g2.fillRect (gx, gy, t, fnpCharacterHeight);
714: continue col;
715: case '\u258e':
716: t = fnpCharacterWidth * 2 + 4 >> 3;
717: g2.fillRect (gx, gy, t, fnpCharacterHeight);
718: continue col;
719: case '\u258f':
720: t = fnpCharacterWidth + 4 >> 3;
721: g2.fillRect (gx, gy, t, fnpCharacterHeight);
722: continue col;
723: case '\u2593':
724: for (int v = 0; v < fnpCharacterHeight; v++) {
725: for (int u = 0; u < fnpCharacterWidth; u++) {
726: if (((u ^ v) & 1) == 0) {
727: g2.fillRect (gx + u, gy + v, 1, 1);
728: }
729: }
730: }
731: continue col;
732: case '\u2596':
733: g2.fillRect (gx, gy + (fnpCharacterHeight >> 1), fnpCharacterWidth >> 1, fnpCharacterHeight >> 1);
734: continue col;
735: case '\u2597':
736: g2.fillRect (gx + (fnpCharacterWidth >> 1), gy + (fnpCharacterHeight >> 1), fnpCharacterWidth >> 1, fnpCharacterHeight >> 1);
737: continue col;
738: case '\u2598':
739: g2.fillRect (gx, gy, fnpCharacterWidth >> 1, fnpCharacterHeight >> 1);
740: continue col;
741: case '\u259a':
742: g2.fillRect (gx, gy, fnpCharacterWidth >> 1, fnpCharacterHeight >> 1);
743: g2.fillRect (gx + (fnpCharacterWidth >> 1), gy + (fnpCharacterHeight >> 1), fnpCharacterWidth >> 1, fnpCharacterHeight >> 1);
744: continue col;
745: case '\u259d':
746: g2.fillRect (gx + (fnpCharacterWidth >> 1), gy, fnpCharacterWidth >> 1, fnpCharacterHeight >> 1);
747: continue col;
748: case '\u259e':
749: g2.fillRect (gx + (fnpCharacterWidth >> 1), gy, fnpCharacterWidth >> 1, fnpCharacterHeight >> 1);
750: g2.fillRect (gx, gy + (fnpCharacterHeight >> 1), fnpCharacterWidth >> 1, fnpCharacterHeight >> 1);
751: continue col;
752:
753:
754:
755: case '\u25e2':
756: g2.setStroke (new BasicStroke ());
757: if (fnpCharacterWidth <= fnpCharacterHeight) {
758: for (int v = 0; v <= fnpCharacterHeight - 1; v++) {
759: int u = v * (fnpCharacterWidth - 1) / (fnpCharacterHeight - 1);
760: g2.drawLine (gx + fnpCharacterWidth - 1 - u, gy + v, gx + fnpCharacterWidth - 1, gy + v);
761: }
762: } else {
763: for (int u = 0; u <= fnpCharacterWidth - 1; u++) {
764: int v = u * (fnpCharacterHeight - 1) / (fnpCharacterWidth - 1);
765: g2.drawLine (gx + u, gy + fnpCharacterHeight - 1 - v, gx + u, gy + fnpCharacterHeight - 1);
766: }
767: }
768: continue col;
769: case '\u25e3':
770: g2.setStroke (new BasicStroke ());
771: if (fnpCharacterWidth <= fnpCharacterHeight) {
772: for (int v = 0; v <= fnpCharacterHeight - 1; v++) {
773: int u = v * (fnpCharacterWidth - 1) / (fnpCharacterHeight - 1);
774: g2.drawLine (gx, gy + v, gx + u, gy + v);
775: }
776: } else {
777: for (int u = 0; u <= fnpCharacterWidth - 1; u++) {
778: int v = u * (fnpCharacterHeight - 1) / (fnpCharacterWidth - 1);
779: g2.drawLine (gx + u, gy + v, gx + u, gy + fnpCharacterHeight - 1);
780: }
781: }
782: continue col;
783: }
784: } while (c == ' ' || c == ' ' || font.canDisplayUpTo (s) != -1);
785:
786:
787: if (lastTableIndex != tableIndex) {
788: lastTableIndex = tableIndex;
789: Rectangle2D p = new TextLayout (table[0] < 0x80 ? "\u2588" : "┼", font, g2.getFontRenderContext ()).getBounds ();
790: px = p.getX ();
791: py = p.getY ();
792: pw = p.getWidth ();
793: ph = p.getHeight ();
794: }
795:
796: Rectangle2D q = new TextLayout (s, font, g2.getFontRenderContext ()).getBounds ();
797: double qx = q.getX ();
798: double qy = q.getY ();
799: double qw = q.getWidth ();
800: double qh = q.getHeight ();
801:
802:
803: double sx = 1.0;
804: double sy = 1.0;
805: double tx = 0.0;
806: double ty = 0.0;
807:
808:
809:
810:
811:
812: qx -= px;
813: qy -= py;
814: tx -= px;
815: ty -= py;
816:
817:
818: if (pw < qw) {
819:
820:
821: double r = pw / qw;
822: sx *= r;
823: tx = (tx - qx) * r;
824: } else if (qx < 0) {
825:
826:
827: tx -= qx;
828: } else if (pw < qx + qw) {
829:
830:
831: tx -= qx + qw - pw;
832: }
833: if (ph < qh) {
834:
835:
836: double r = ph / qh;
837: sy *= r;
838: ty = (ty - qy) * r;
839: } else if (qy < 0) {
840:
841:
842: ty -= qy;
843: } else if (ph < qy + qh) {
844:
845:
846: ty -= qy + qh - ph;
847: }
848:
849:
850:
851:
852:
853: {
854: double r = fw / pw;
855: sx *= r;
856: tx = tx * r + fw * (double) col;
857: }
858: {
859: double r = fh / ph;
860: sy *= r;
861: ty = ty * r + fh * (double) row;
862: }
863:
864: g2.translate (tx, ty);
865: g2.scale (sx, sy);
866:
867: g2.drawString (s, 0, 0);
868:
869: g2.setTransform (savedTransform);
870: }
871: }
872:
873: g2.setClip (savedClip);
874:
875:
876: int o = fnpBitmapRasterBytes;
877: int w = fnpCharacterWidth;
878: int h = fnpCharacterHeight;
879: switch (fnpCharacterWidth) {
880: case 4:
881: for (int row = 0; row < fnpImageRows; row++) {
882: for (int col = 0; col < fnpImageCols; col++) {
883:
884: byte p = FNP_PALET[(col ^ row) & 1][0];
885: for (int y = 0; y < h; y++) {
886: int i = o * (h * row + y) + (4 >> 2) * col;
887: bitmap[i] |= p;
888: }
889: }
890: }
891: break;
892: case 6:
893: for (int row = 0; row < fnpImageRows; row++) {
894: for (int col = 0; col < fnpImageCols; col += 2) {
895:
896: byte p0 = FNP_PALET[ row & 1][0];
897: byte p1 = FNP_PALET[2 | row & 1][0];
898: byte p2 = FNP_PALET[ ~row & 1][0];
899: for (int y = 0; y < h; y++) {
900: int i = o * (h * row + y) + (6 * col >> 2);
901: bitmap[i ] |= p0;
902: bitmap[i + 1] |= p1;
903: bitmap[i + 2] |= p2;
904: }
905: }
906: }
907: break;
908: case 8:
909: for (int row = 0; row < fnpImageRows; row++) {
910: for (int col = 0; col < fnpImageCols; col++) {
911:
912: byte p = FNP_PALET[(col ^ row) & 1][0];
913: for (int y = 0; y < h; y++) {
914: int i = o * (h * row + y) + (8 >> 2) * col;
915: bitmap[i ] |= p;
916: bitmap[i + 1] |= p;
917: }
918: }
919: }
920: break;
921: case 12:
922: for (int row = 0; row < fnpImageRows; row++) {
923: for (int col = 0; col < fnpImageCols; col++) {
924:
925: byte p = FNP_PALET[(col ^ row) & 1][0];
926: for (int y = 0; y < h; y++) {
927: int i = o * (h * row + y) + (12 >> 2) * col;
928: bitmap[i ] |= p;
929: bitmap[i + 1] |= p;
930: bitmap[i + 2] |= p;
931: }
932: }
933: }
934: break;
935: case 16:
936: for (int row = 0; row < fnpImageRows; row++) {
937: for (int col = 0; col < fnpImageCols; col++) {
938:
939: byte p = FNP_PALET[(col ^ row) & 1][0];
940: for (int y = 0; y < h; y++) {
941: int i = o * (h * row + y) + (16 >> 2) * col;
942: bitmap[i ] |= p;
943: bitmap[i + 1] |= p;
944: bitmap[i + 2] |= p;
945: bitmap[i + 3] |= p;
946: }
947: }
948: }
949: break;
950: case 24:
951: for (int row = 0; row < fnpImageRows; row++) {
952: for (int col = 0; col < fnpImageCols; col++) {
953:
954: byte p = FNP_PALET[(col ^ row) & 1][0];
955: for (int y = 0; y < h; y++) {
956: int i = o * (h * row + y) + (24 >> 2) * col;
957: bitmap[i ] |= p;
958: bitmap[i + 1] |= p;
959: bitmap[i + 2] |= p;
960: bitmap[i + 3] |= p;
961: bitmap[i + 4] |= p;
962: bitmap[i + 5] |= p;
963: }
964: }
965: }
966: break;
967: case 32:
968: for (int row = 0; row < fnpImageRows; row++) {
969: for (int col = 0; col < fnpImageCols; col++) {
970:
971: byte p = FNP_PALET[(col ^ row) & 1][0];
972: for (int y = 0; y < h; y++) {
973: int i = o * (h * row + y) + (32 >> 2) * col;
974: bitmap[i ] |= p;
975: bitmap[i + 1] |= p;
976: bitmap[i + 2] |= p;
977: bitmap[i + 3] |= p;
978: bitmap[i + 4] |= p;
979: bitmap[i + 5] |= p;
980: bitmap[i + 6] |= p;
981: bitmap[i + 7] |= p;
982: }
983: }
984: }
985: break;
986: case 36:
987: for (int row = 0; row < fnpImageRows; row++) {
988: for (int col = 0; col < fnpImageCols; col++) {
989:
990: byte p = FNP_PALET[(col ^ row) & 1][0];
991: for (int y = 0; y < h; y++) {
992: int i = o * (h * row + y) + (36 >> 2) * col;
993: bitmap[i ] |= p;
994: bitmap[i + 1] |= p;
995: bitmap[i + 2] |= p;
996: bitmap[i + 3] |= p;
997: bitmap[i + 4] |= p;
998: bitmap[i + 5] |= p;
999: bitmap[i + 6] |= p;
1000: bitmap[i + 7] |= p;
1001: bitmap[i + 8] |= p;
1002: }
1003: }
1004: }
1005: break;
1006: case 48:
1007: for (int row = 0; row < fnpImageRows; row++) {
1008: for (int col = 0; col < fnpImageCols; col++) {
1009:
1010: byte p = FNP_PALET[(col ^ row) & 1][0];
1011: for (int y = 0; y < h; y++) {
1012: int i = o * (h * row + y) + (48 >> 2) * col;
1013: bitmap[i ] |= p;
1014: bitmap[i + 1] |= p;
1015: bitmap[i + 2] |= p;
1016: bitmap[i + 3] |= p;
1017: bitmap[i + 4] |= p;
1018: bitmap[i + 5] |= p;
1019: bitmap[i + 6] |= p;
1020: bitmap[i + 7] |= p;
1021: bitmap[i + 8] |= p;
1022: bitmap[i + 9] |= p;
1023: bitmap[i + 10] |= p;
1024: bitmap[i + 11] |= p;
1025: }
1026: }
1027: }
1028: break;
1029:
1030:
1031:
1032:
1033:
1034:
1035:
1036:
1037:
1038:
1039:
1040:
1041: }
1042: fnpImageToBinary ();
1043: fnpBinaryToMemory ();
1044:
1045: long elapsedTime = System.currentTimeMillis () - startTime;
1046:
1047: System.out.println (elapsedTime + "ms");
1048:
1049: if (!fnpReady) {
1050: System.out.println (Multilingual.mlnJapanese ? fnpNameJa + " フォントの準備ができました" :
1051: fnpNameEn + " font is ready");
1052: fnpReady = true;
1053: }
1054: }
1055:
1056:
1057:
1058: public void fnpImageToBinary () {
1059: byte[] bitmap = fnpBitmapArray;
1060: byte[] m = fnpBinaryArray;
1061: int a = 0;
1062: int o = fnpBitmapRasterBytes;
1063: int h = fnpCharacterHeight;
1064: switch (fnpCharacterWidth) {
1065: case 4:
1066: for (int row = 0; row < fnpImageRows; row++) {
1067: for (int col = 0; col < fnpImageCols; col++) {
1068: for (int y = 0; y < h; y++) {
1069: int i = o * (h * row + y) + (4 >> 2) * col;
1070:
1071:
1072:
1073:
1074: m[a] = (byte) (FNP_INV_PALET[bitmap[i] & 255] << 4);
1075: a++;
1076: }
1077: }
1078: }
1079: break;
1080: case 6:
1081: for (int row = 0; row < fnpImageRows; row++) {
1082: for (int col = 0; col < fnpImageCols; col += 2) {
1083: for (int y = 0; y < h; y++) {
1084: int i = o * (h * row + y) + (6 * col >> 2);
1085:
1086:
1087:
1088:
1089:
1090:
1091: int t = (char) (bitmap[i] << 8 | bitmap[i + 1] & 255) << 8 | bitmap[i + 2] & 255;
1092: m[a ] = (byte) (FNP_INV_PALET[t >> 16 ] << 4 |
1093: FNP_INV_PALET[t >> 8 & 240]);
1094: m[a + h] = (byte) (FNP_INV_PALET[t >> 4 & 255] << 4 |
1095: FNP_INV_PALET[t << 4 & 240]);
1096: a++;
1097: }
1098: a += h;
1099: }
1100: }
1101: break;
1102: case 8:
1103: for (int row = 0; row < fnpImageRows; row++) {
1104: for (int col = 0; col < fnpImageCols; col++) {
1105: for (int y = 0; y < h; y++) {
1106: int i = o * (h * row + y) + (8 >> 2) * col;
1107:
1108:
1109:
1110:
1111: m[a] = (byte) (FNP_INV_PALET[bitmap[i] & 255] << 4 | FNP_INV_PALET[bitmap[i + 1] & 255]);
1112: a++;
1113: }
1114: }
1115: }
1116: break;
1117: case 12:
1118: for (int row = 0; row < fnpImageRows; row++) {
1119: for (int col = 0; col < fnpImageCols; col++) {
1120: for (int y = 0; y < h; y++) {
1121: int i = o * (h * row + y) + (12 >> 2) * col;
1122:
1123:
1124:
1125:
1126: m[a ] = (byte) (FNP_INV_PALET[bitmap[i ] & 255] << 4 | FNP_INV_PALET[bitmap[i + 1] & 255]);
1127: m[a + 1] = (byte) (FNP_INV_PALET[bitmap[i + 2] & 255] << 4);
1128: a += 2;
1129: }
1130: }
1131: }
1132: break;
1133: case 16:
1134: for (int row = 0; row < fnpImageRows; row++) {
1135: for (int col = 0; col < fnpImageCols; col++) {
1136: for (int y = 0; y < h; y++) {
1137: int i = o * (h * row + y) + (16 >> 2) * col;
1138:
1139:
1140:
1141:
1142: m[a ] = (byte) (FNP_INV_PALET[bitmap[i ] & 255] << 4 | FNP_INV_PALET[bitmap[i + 1] & 255]);
1143: m[a + 1] = (byte) (FNP_INV_PALET[bitmap[i + 2] & 255] << 4 | FNP_INV_PALET[bitmap[i + 3] & 255]);
1144: a += 2;
1145: }
1146: }
1147: }
1148: break;
1149: case 18:
1150: for (int row = 0; row < fnpImageRows; row++) {
1151: for (int col = 0; col < fnpImageCols; col += 2) {
1152: for (int y = 0; y < h; y++) {
1153: int i = o * (h * row + y) + (18 * col >> 2);
1154: long t = ((long) FNP_INV_PALET[bitmap[i ] & 255] << 32 |
1155: (long) FNP_INV_PALET[bitmap[i + 1] & 255] << 28 |
1156: (long) FNP_INV_PALET[bitmap[i + 2] & 255] << 24 |
1157: (long) FNP_INV_PALET[bitmap[i + 3] & 255] << 20 |
1158: (long) FNP_INV_PALET[bitmap[i + 4] & 255] << 16 |
1159: (long) FNP_INV_PALET[bitmap[i + 5] & 255] << 12 |
1160: (long) FNP_INV_PALET[bitmap[i + 6] & 255] << 8 |
1161: (long) FNP_INV_PALET[bitmap[i + 7] & 255] << 4 |
1162: (long) FNP_INV_PALET[bitmap[i + 8] & 255]);
1163:
1164:
1165:
1166:
1167: m[a ] = (byte) (t >> 28);
1168: m[a + 1] = (byte) (t >> 20);
1169: m[a + 2] = (byte) ((t >> 12) & 0xc0);
1170: m[a + 3 * h ] = (byte) (t >> 10);
1171: m[a + 3 * h + 1] = (byte) (t >> 2);
1172: m[a + 3 * h + 2] = (byte) (t << 6);
1173: a += 3;
1174: }
1175: a += 3 * h;
1176: }
1177: }
1178: break;
1179: case 24:
1180: for (int row = 0; row < fnpImageRows; row++) {
1181: for (int col = 0; col < fnpImageCols; col++) {
1182: for (int y = 0; y < h; y++) {
1183: int i = o * (h * row + y) + (24 >> 2) * col;
1184:
1185:
1186:
1187:
1188: m[a ] = (byte) (FNP_INV_PALET[bitmap[i ] & 255] << 4 | FNP_INV_PALET[bitmap[i + 1] & 255]);
1189: m[a + 1] = (byte) (FNP_INV_PALET[bitmap[i + 2] & 255] << 4 | FNP_INV_PALET[bitmap[i + 3] & 255]);
1190: m[a + 2] = (byte) (FNP_INV_PALET[bitmap[i + 4] & 255] << 4 | FNP_INV_PALET[bitmap[i + 5] & 255]);
1191: a += 3;
1192: }
1193: }
1194: }
1195: break;
1196: case 28:
1197: for (int row = 0; row < fnpImageRows; row++) {
1198: for (int col = 0; col < fnpImageCols; col++) {
1199: for (int y = 0; y < h; y++) {
1200: int i = o * (h * row + y) + (28 >> 2) * col;
1201: m[a ] = (byte) (FNP_INV_PALET[bitmap[i ] & 255] << 4 | FNP_INV_PALET[bitmap[i + 1] & 255]);
1202: m[a + 1] = (byte) (FNP_INV_PALET[bitmap[i + 2] & 255] << 4 | FNP_INV_PALET[bitmap[i + 3] & 255]);
1203: m[a + 2] = (byte) (FNP_INV_PALET[bitmap[i + 4] & 255] << 4 | FNP_INV_PALET[bitmap[i + 5] & 255]);
1204: m[a + 3] = (byte) (FNP_INV_PALET[bitmap[i + 6] & 255] << 4);
1205: a += 4;
1206: }
1207: }
1208: }
1209: break;
1210: case 30:
1211: for (int row = 0; row < fnpImageRows; row++) {
1212: for (int col = 0; col < fnpImageCols; col += 2) {
1213: for (int y = 0; y < h; y++) {
1214: int i = o * (h * row + y) + (30 * col >> 2);
1215: long t = ((long) FNP_INV_PALET[bitmap[i ] & 255] << 56 |
1216: (long) FNP_INV_PALET[bitmap[i + 1] & 255] << 52 |
1217: (long) FNP_INV_PALET[bitmap[i + 2] & 255] << 48 |
1218: (long) FNP_INV_PALET[bitmap[i + 3] & 255] << 44 |
1219: (long) FNP_INV_PALET[bitmap[i + 4] & 255] << 40 |
1220: (long) FNP_INV_PALET[bitmap[i + 5] & 255] << 36 |
1221: (long) FNP_INV_PALET[bitmap[i + 6] & 255] << 32 |
1222: (long) FNP_INV_PALET[bitmap[i + 7] & 255] << 28 |
1223: (long) FNP_INV_PALET[bitmap[i + 8] & 255] << 24 |
1224: (long) FNP_INV_PALET[bitmap[i + 9] & 255] << 20 |
1225: (long) FNP_INV_PALET[bitmap[i + 10] & 255] << 16 |
1226: (long) FNP_INV_PALET[bitmap[i + 11] & 255] << 12 |
1227: (long) FNP_INV_PALET[bitmap[i + 12] & 255] << 8 |
1228: (long) FNP_INV_PALET[bitmap[i + 13] & 255] << 4 |
1229: (long) FNP_INV_PALET[bitmap[i + 14] & 255]);
1230:
1231:
1232:
1233:
1234: m[a ] = (byte) (t >> 52);
1235: m[a + 1] = (byte) (t >> 44);
1236: m[a + 2] = (byte) (t >> 36);
1237: m[a + 3] = (byte) ((t >> 28) & 0xfc);
1238: m[a + 4 * h ] = (byte) (t >> 22);
1239: m[a + 4 * h + 1] = (byte) (t >> 14);
1240: m[a + 4 * h + 2] = (byte) (t >> 6);
1241: m[a + 4 * h + 3] = (byte) (t << 2);
1242: a += 4;
1243: }
1244: a += 4 * h;
1245: }
1246: }
1247: break;
1248: case 32:
1249: for (int row = 0; row < fnpImageRows; row++) {
1250: for (int col = 0; col < fnpImageCols; col++) {
1251: for (int y = 0; y < h; y++) {
1252: int i = o * (h * row + y) + (32 >> 2) * col;
1253: m[a ] = (byte) (FNP_INV_PALET[bitmap[i ] & 255] << 4 | FNP_INV_PALET[bitmap[i + 1] & 255]);
1254: m[a + 1] = (byte) (FNP_INV_PALET[bitmap[i + 2] & 255] << 4 | FNP_INV_PALET[bitmap[i + 3] & 255]);
1255: m[a + 2] = (byte) (FNP_INV_PALET[bitmap[i + 4] & 255] << 4 | FNP_INV_PALET[bitmap[i + 5] & 255]);
1256: m[a + 3] = (byte) (FNP_INV_PALET[bitmap[i + 6] & 255] << 4 | FNP_INV_PALET[bitmap[i + 7] & 255]);
1257: a += 4;
1258: }
1259: }
1260: }
1261: break;
1262: case 36:
1263: for (int row = 0; row < fnpImageRows; row++) {
1264: for (int col = 0; col < fnpImageCols; col++) {
1265: for (int y = 0; y < h; y++) {
1266: int i = o * (h * row + y) + (36 >> 2) * col;
1267: m[a ] = (byte) (FNP_INV_PALET[bitmap[i ] & 255] << 4 | FNP_INV_PALET[bitmap[i + 1] & 255]);
1268: m[a + 1] = (byte) (FNP_INV_PALET[bitmap[i + 2] & 255] << 4 | FNP_INV_PALET[bitmap[i + 3] & 255]);
1269: m[a + 2] = (byte) (FNP_INV_PALET[bitmap[i + 4] & 255] << 4 | FNP_INV_PALET[bitmap[i + 5] & 255]);
1270: m[a + 3] = (byte) (FNP_INV_PALET[bitmap[i + 6] & 255] << 4 | FNP_INV_PALET[bitmap[i + 7] & 255]);
1271: m[a + 4] = (byte) (FNP_INV_PALET[bitmap[i + 8] & 255] << 4);
1272: a += 5;
1273: }
1274: }
1275: }
1276: break;
1277: case 48:
1278: for (int row = 0; row < fnpImageRows; row++) {
1279: for (int col = 0; col < fnpImageCols; col++) {
1280: for (int y = 0; y < h; y++) {
1281: int i = o * (h * row + y) + (48 >> 2) * col;
1282: m[a ] = (byte) (FNP_INV_PALET[bitmap[i ] & 255] << 4 | FNP_INV_PALET[bitmap[i + 1] & 255]);
1283: m[a + 1] = (byte) (FNP_INV_PALET[bitmap[i + 2] & 255] << 4 | FNP_INV_PALET[bitmap[i + 3] & 255]);
1284: m[a + 2] = (byte) (FNP_INV_PALET[bitmap[i + 4] & 255] << 4 | FNP_INV_PALET[bitmap[i + 5] & 255]);
1285: m[a + 3] = (byte) (FNP_INV_PALET[bitmap[i + 6] & 255] << 4 | FNP_INV_PALET[bitmap[i + 7] & 255]);
1286: m[a + 4] = (byte) (FNP_INV_PALET[bitmap[i + 8] & 255] << 4 | FNP_INV_PALET[bitmap[i + 9] & 255]);
1287: m[a + 5] = (byte) (FNP_INV_PALET[bitmap[i + 10] & 255] << 4 | FNP_INV_PALET[bitmap[i + 11] & 255]);
1288: a += 6;
1289: }
1290: }
1291: }
1292: break;
1293:
1294:
1295:
1296:
1297:
1298:
1299:
1300:
1301:
1302:
1303:
1304:
1305: }
1306: }
1307:
1308:
1309:
1310:
1311:
1312:
1313:
1314:
1315:
1316:
1317:
1318:
1319:
1320:
1321:
1322:
1323:
1324:
1325:
1326:
1327:
1328:
1329:
1330:
1331:
1332:
1333:
1334:
1335:
1336:
1337: public String fnpGetExtension () {
1338: if (fnpExtension == null) {
1339: fnpExtension = ".dat";
1340: }
1341: return fnpExtension;
1342: }
1343:
1344:
1345:
1346: public String fnpGetDescription () {
1347: if (fnpDescription == null) {
1348: fnpDescription = (Multilingual.mlnJapanese ?
1349: fnpNameJa + " フォントデータファイル (*" + fnpGetExtension () + ")" :
1350: fnpNameEn + " font data files (*" + fnpGetExtension () + ")");
1351: }
1352: return fnpDescription;
1353: }
1354:
1355:
1356:
1357: public void fnpMakeFontDataFileChooser () {
1358: if (fnpFontDataFileChooser == null) {
1359: fnpFontDataFileChooser = new JFileChooser2 (new File (fnpFontDataFileName));
1360: fnpFontDataFileChooser.setMultiSelectionEnabled (false);
1361: fnpFontDataFileChooser.setFileFilter (new javax.swing.filechooser.FileFilter () {
1362: @Override public boolean accept (File file) {
1363: return (file.isDirectory () ||
1364: (file.isFile () &&
1365: fnpIsFontDataFileLength (file.length ()) &&
1366: file.getName ().toLowerCase ().endsWith (fnpGetExtension ())));
1367: }
1368: @Override public String getDescription () {
1369: return fnpGetDescription ();
1370: }
1371: });
1372: }
1373: }
1374:
1375:
1376:
1377:
1378:
1379: public void fnpOpenLoadFontDataFileChooser () {
1380: fnpMakeFontDataFileChooser ();
1381: if (fnpFontDataFileChooser.showOpenDialog (null) == JFileChooser.APPROVE_OPTION) {
1382: File file = fnpFontDataFileChooser.getSelectedFile ();
1383: if (fnpLoadFontDataFile (file)) {
1384: fnpFontDataFileName = file.getPath ();
1385: fnpFontDataFileChooser.addHistory (file);
1386: }
1387: }
1388: }
1389:
1390:
1391:
1392:
1393: public boolean fnpLoadFontDataFiles (String names) {
1394: boolean previousReady = fnpReady;
1395: fnpReady = false;
1396: for (String name : names.split (",")) {
1397: name = name.trim ();
1398: if (!(name.length () == 0 || name.equalsIgnoreCase ("none"))) {
1399: fnpLoadFontDataFile (new File (name));
1400: if (fnpReady) {
1401: if (!previousReady) {
1402: System.out.println (Multilingual.mlnJapanese ? fnpNameJa + " フォントの準備ができました" :
1403: fnpNameEn + " font is ready");
1404: previousReady = true;
1405: }
1406: return true;
1407: }
1408: System.out.println (Multilingual.mlnJapanese ?
1409: name + " を読み込めません" :
1410: "Cannot read " + name);
1411: }
1412: }
1413: fnpReady = previousReady;
1414: return false;
1415: }
1416:
1417:
1418:
1419: public boolean fnpLoadFontDataFile (File file) {
1420: if (file.isFile () &&
1421: (long) fnpMinimumFontDataFileLength <= file.length () &&
1422: file.length () <= (long) fnpMaximumFontDataFileLength) {
1423: try (BufferedInputStream bis = new BufferedInputStream (new FileInputStream (file))) {
1424: byte[] array = new byte[fnpMaximumFontDataFileLength];
1425: int length = 0;
1426: while (length < fnpMaximumFontDataFileLength) {
1427: int t = bis.read (array, length, fnpMaximumFontDataFileLength - length);
1428: if (t < 0) {
1429: break;
1430: }
1431: length += t;
1432: }
1433: if (fnpIsFontDataFileLength ((long) length) &&
1434: fnpLoadFontDataArray (array, 0, length)) {
1435: return true;
1436: }
1437: } catch (IOException ioe) {
1438: }
1439: }
1440: return false;
1441: }
1442:
1443:
1444:
1445:
1446: public boolean fnpIsFontDataFileLength (long longLength) {
1447: return longLength == (long) fnpBinaryBytes;
1448: }
1449:
1450:
1451: public boolean fnpLoadFontDataArray (byte[] array) {
1452: return fnpLoadFontDataArray (array, 0, array.length);
1453: }
1454:
1455:
1456:
1457: public boolean fnpLoadFontDataArray (byte[] array, int start, int length) {
1458: if (length == fnpBinaryBytes) {
1459: System.arraycopy (array, start, fnpBinaryArray, 0, length);
1460: fnpBinaryToImage ();
1461: fnpBinaryToMemory ();
1462: if (!fnpReady) {
1463: System.out.println (Multilingual.mlnJapanese ? fnpNameJa + " フォントの準備ができました" :
1464: fnpNameEn + " font is ready");
1465: fnpReady = true;
1466: }
1467: return true;
1468: }
1469: return false;
1470: }
1471:
1472:
1473:
1474:
1475:
1476: public void fnpOpenSaveFontDataFileChooser () {
1477: fnpMakeFontDataFileChooser ();
1478: if (fnpFontDataFileChooser.showSaveDialog (null) == JFileChooser.APPROVE_OPTION) {
1479: File file = fnpFontDataFileChooser.getSelectedFile ();
1480: if (fnpSaveFontDataFile (file)) {
1481: fnpFontDataFileName = file.getPath ();
1482: fnpFontDataFileChooser.addHistory (file);
1483: fnpEditted = false;
1484: }
1485: }
1486: }
1487:
1488:
1489:
1490: public boolean fnpSaveFontDataFile (File file) {
1491: String path = file.getAbsolutePath ();
1492: file = new File (path);
1493: String pathBak = path + ".bak";
1494: String pathTmp = path + ".tmp";
1495: File fileBak = new File (pathBak);
1496: File fileTmp = new File (pathTmp);
1497: if (file.exists ()) {
1498:
1499: if (JOptionPane.showConfirmDialog (
1500: null,
1501: Multilingual.mlnJapanese ? path + " に上書きしますか?" : "Do you want to overwrite " + path + " ?",
1502: Multilingual.mlnJapanese ? "上書きの確認" : "Overwrite confirmation",
1503: JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) {
1504: return false;
1505: }
1506: }
1507: if (fileTmp.isFile ()) {
1508:
1509: if (!fileTmp.delete ()) {
1510: JOptionPane.showMessageDialog (
1511: null, Multilingual.mlnJapanese ? pathTmp + " を削除できません" : "Cannot delete " + pathTmp);
1512: return false;
1513: }
1514: }
1515:
1516: byte[] array = fnpSaveFontDataArray ();
1517: try (BufferedOutputStream bos = new BufferedOutputStream (new FileOutputStream (fileTmp))) {
1518: bos.write (array, 0, array.length);
1519: } catch (IOException ioe) {
1520: JOptionPane.showMessageDialog (
1521: null, Multilingual.mlnJapanese ? pathTmp + " に書き出せません" : "Cannot write " + pathTmp);
1522: return false;
1523: }
1524: if (file.exists ()) {
1525: if (fileBak.isFile ()) {
1526:
1527:
1528: if (!fileBak.delete ()) {
1529: JOptionPane.showMessageDialog (
1530: null, Multilingual.mlnJapanese ? pathBak + " を削除できません" : "Cannot delete " + pathBak);
1531: return false;
1532: }
1533: }
1534:
1535: if (!file.renameTo (fileBak)) {
1536: JOptionPane.showMessageDialog (
1537: null, Multilingual.mlnJapanese ? path + " を " + pathBak + " にリネームできません" : "Cannot rename " + path + " to " + pathBak);
1538: return false;
1539: }
1540: }
1541:
1542: if (!fileTmp.renameTo (file)) {
1543: JOptionPane.showMessageDialog (
1544: null, Multilingual.mlnJapanese ? pathTmp + " を " + path + " にリネームできません" : "Cannot rename " + pathTmp + " to " + path);
1545: return false;
1546: }
1547: return true;
1548: }
1549:
1550:
1551:
1552:
1553: public byte[] fnpSaveFontDataArray () {
1554: return fnpBinaryArray;
1555: }
1556:
1557:
1558:
1559:
1560:
1561:
1562: public void fnpZeroClear () {
1563: if (JOptionPane.showConfirmDialog (
1564: null,
1565: Multilingual.mlnJapanese ? fnpNameJa + " をゼロクリアします" : "Zero clear " + fnpNameEn + " ?",
1566: Multilingual.mlnJapanese ? "ゼロクリアの確認" : "Zero clear confirmation",
1567: JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION) {
1568: return;
1569: }
1570: Arrays.fill (fnpBinaryArray, 0, fnpBinaryBytes, (byte) 0);
1571: fnpBinaryToImage ();
1572: fnpBinaryToMemory ();
1573: fnpReady = false;
1574: }
1575:
1576:
1577:
1578:
1579:
1580: public int fnpGetBinaryPixel (int imageCol, int imageRow, int characterX, int characterY) {
1581: int binaryIndex = (fnpCharacterBytes * (fnpImageCols * imageRow + imageCol) +
1582: fnpCharacterHorizontalBytes * characterY + (characterX >> 3));
1583: int binaryBit = ~characterX & 7;
1584: return (fnpBinaryArray[binaryIndex] >> binaryBit) & 1;
1585: }
1586:
1587:
1588:
1589: public void fnpSetBinaryPixel (int imageCol, int imageRow, int characterX, int characterY, int d) {
1590: int binaryIndex = (fnpCharacterBytes * (fnpImageCols * imageRow + imageCol) +
1591: fnpCharacterHorizontalBytes * characterY + (characterX >> 3));
1592: int binaryBit = ~characterX & 7;
1593: fnpBinaryArray[binaryIndex] = (byte) ((fnpBinaryArray[binaryIndex] & ~(1 << binaryBit)) | ((d & 1) << binaryBit));
1594: }
1595:
1596:
1597:
1598:
1599:
1600: public String fnpGetStatusText (int imageX, int imageY) {
1601: if (!(0 <= imageX && imageX < fnpImageWidth &&
1602: 0 <= imageY && imageY < fnpImageHeight)) {
1603: return "";
1604: }
1605: StringBuilder sb = new StringBuilder ();
1606: int imageCol = imageX / fnpCharacterWidth;
1607: int imageRow = imageY / fnpCharacterHeight;
1608: int characterX = imageX - fnpCharacterWidth * imageCol;
1609: int characterY = imageY - fnpCharacterHeight * imageRow;
1610: int memoryRow = fnpImageRowToMemoryRow (imageRow);
1611: if (memoryRow < 0) {
1612: sb.append ('(').append (imageCol).append (',').append (imageRow).append (')');
1613: sb.append (' ');
1614: sb.append ('(').append (characterX).append (',').append (characterY).append (')');
1615: } else {
1616: int memoryTopLeftIndex = (fnpMemoryAddress +
1617: fnpCharacterBytes * (fnpImageCols * memoryRow + imageCol));
1618: int memoryIndex = (memoryTopLeftIndex + fnpCharacterHorizontalBytes * characterY + (characterX >> 3));
1619: int binaryBit = ~characterX & 7;
1620: XEiJ.fmtHex8 (sb.append ('(').append (imageCol).append (',').append (imageRow).append (")=$"), memoryTopLeftIndex);
1621: XEiJ.fmtHex8 (sb.append ("-$"), memoryTopLeftIndex + fnpCharacterBytes - 1);
1622: XEiJ.fmtHex8 (sb.append (" (").append (characterX).append (',').append (characterY).append (")=$"), memoryIndex);
1623: sb.append (':').append (binaryBit);
1624: }
1625: return sb.toString ();
1626: }
1627:
1628:
1629:
1630:
1631:
1632: public void fnpMakeFontImageFileChooser () {
1633: if (fnpFontImageFileChooser == null) {
1634: fnpFontImageFileChooser = new JFileChooser2 (new File (fnpFontImageFileName));
1635: fnpFontImageFileChooser.setMultiSelectionEnabled (false);
1636: fnpFontImageFileChooser.setFileFilter (new javax.swing.filechooser.FileFilter () {
1637: @Override public boolean accept (File file) {
1638: if (file.isFile ()) {
1639: String name = file.getName ();
1640: int flag = 0;
1641: int index = name.lastIndexOf (".");
1642: if (0 <= index) {
1643: String fileSuffix = name.substring (index + 1);
1644: for (String readerSuffix : ImageIO.getReaderFileSuffixes ()) {
1645: if (fileSuffix.equalsIgnoreCase (readerSuffix)) {
1646: flag |= 1;
1647: break;
1648: }
1649: }
1650: for (String writerSuffix : ImageIO.getWriterFileSuffixes ()) {
1651: if (fileSuffix.equalsIgnoreCase (writerSuffix)) {
1652: flag |= 2;
1653: break;
1654: }
1655: }
1656: }
1657: return flag == 3;
1658: }
1659: if (file.isDirectory ()) {
1660: return true;
1661: }
1662: return false;
1663: }
1664: @Override public String getDescription () {
1665: return (Multilingual.mlnJapanese ?
1666: "フォント画像ファイル" :
1667: "Font image files");
1668: }
1669: });
1670: }
1671: }
1672:
1673:
1674:
1675: public void fnpOpenReadFontImageFileChooser () {
1676: fnpMakeFontImageFileChooser ();
1677: if (fnpFontImageFileChooser.showOpenDialog (null) == JFileChooser.APPROVE_OPTION) {
1678: File file = fnpFontImageFileChooser.getSelectedFile ();
1679: if (fnpReadFontImageFile (file)) {
1680: fnpFontImageFileName = file.getPath ();
1681: fnpFontImageFileChooser.addHistory (file);
1682: } else {
1683: JOptionPane.showMessageDialog (null, Multilingual.mlnJapanese ? "失敗しました" : "failed");
1684: }
1685: }
1686: }
1687:
1688:
1689:
1690: public boolean fnpReadFontImageFile (File file) {
1691: BufferedImage image;
1692: try {
1693: image = ImageIO.read (file);
1694: } catch (Exception e) {
1695: return false;
1696: }
1697: return fnpInputImage (image);
1698: }
1699:
1700:
1701:
1702:
1703:
1704: public boolean fnpInputImage (BufferedImage image) {
1705: if (!(image.getWidth () == fnpImageWidth &&
1706: image.getHeight () == fnpImageHeight)) {
1707: return false;
1708: }
1709:
1710:
1711: int o = fnpBitmapRasterBytes;
1712: byte[] m = fnpBitmapArray;
1713: for (int y = 0; y < fnpImageHeight; y++) {
1714: int x = 0;
1715: for (; x + 3 < fnpImageWidth; x += 4) {
1716: m[o * y + (x >> 2)] = (byte) (((image.getRGB (x , y) & 0x00c0c0c0) == 0x00c0c0c0 ? 0b10_00_00_00 : 0) |
1717: ((image.getRGB (x + 1, y) & 0x00c0c0c0) == 0x00c0c0c0 ? 0b00_10_00_00 : 0) |
1718: ((image.getRGB (x + 2, y) & 0x00c0c0c0) == 0x00c0c0c0 ? 0b00_00_10_00 : 0) |
1719: ((image.getRGB (x + 3, y) & 0x00c0c0c0) == 0x00c0c0c0 ? 0b00_00_00_10 : 0));
1720: }
1721: for (; x < fnpImageWidth; x++) {
1722: m[o * y + (x >> 2)] = (byte) (((image.getRGB (x , y) & 0x00c0c0c0) == 0x00c0c0c0 ? 0b10_00_00_00 : 0) |
1723: (x + 1 < fnpImageWidth && (image.getRGB (x + 1, y) & 0x00c0c0c0) == 0x00c0c0c0 ? 0b00_10_00_00 : 0) |
1724: (x + 2 < fnpImageWidth && (image.getRGB (x + 2, y) & 0x00c0c0c0) == 0x00c0c0c0 ? 0b00_00_10_00 : 0) |
1725: (x + 3 < fnpImageWidth && (image.getRGB (x + 3, y) & 0x00c0c0c0) == 0x00c0c0c0 ? 0b00_00_00_10 : 0));
1726: }
1727: }
1728: fnpImageToBinary ();
1729: fnpBinaryToImage ();
1730: fnpBinaryToMemory ();
1731: if (!fnpReady) {
1732: System.out.println (Multilingual.mlnJapanese ? fnpNameJa + " フォントの準備ができました" :
1733: fnpNameEn + " font is ready");
1734: fnpReady = true;
1735: }
1736: return true;
1737: }
1738:
1739:
1740:
1741: public void fnpOpenWriteFontImageFileChooser () {
1742: fnpMakeFontImageFileChooser ();
1743: if (fnpFontImageFileChooser.showSaveDialog (null) == JFileChooser.APPROVE_OPTION) {
1744: File file = fnpFontImageFileChooser.getSelectedFile ();
1745: if (fnpWriteFontImageFile (file)) {
1746: fnpFontImageFileName = file.getPath ();
1747: fnpFontImageFileChooser.addHistory (file);
1748: fnpEditted = false;
1749: }
1750: }
1751: }
1752:
1753:
1754:
1755: public boolean fnpWriteFontImageFile (File file) {
1756: String path = file.getAbsolutePath ();
1757: file = new File (path);
1758: String pathBak = path + ".bak";
1759: String pathTmp = path + ".tmp";
1760: File fileBak = new File (pathBak);
1761: File fileTmp = new File (pathTmp);
1762:
1763: ImageWriter imageWriter = null;
1764: {
1765: int index = path.lastIndexOf (".");
1766: if (0 <= index) {
1767: Iterator<ImageWriter> iterator = ImageIO.getImageWritersBySuffix (path.substring (index + 1));
1768: if (iterator.hasNext ()) {
1769: imageWriter = iterator.next ();
1770: }
1771: }
1772: }
1773: if (imageWriter == null) {
1774: JOptionPane.showMessageDialog (
1775: null, Multilingual.mlnJapanese ? path + " の形式が不明です" : "Unknown format of " + path);
1776: return false;
1777: }
1778: if (file.exists ()) {
1779:
1780: if (JOptionPane.showConfirmDialog (
1781: null,
1782: Multilingual.mlnJapanese ? path + " に上書きします" : "Overwrite " + path + " ?",
1783: Multilingual.mlnJapanese ? "上書きの確認" : "Overwrite confirmation",
1784: JOptionPane.OK_CANCEL_OPTION) != JOptionPane.OK_OPTION) {
1785: return false;
1786: }
1787: }
1788: if (fileTmp.isFile ()) {
1789:
1790: if (!fileTmp.delete ()) {
1791: JOptionPane.showMessageDialog (
1792: null, Multilingual.mlnJapanese ? pathTmp + " を削除できません" : "Cannot delete " + pathTmp);
1793: return false;
1794: }
1795: }
1796:
1797: ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam ();
1798: if (imageWriteParam.canWriteCompressed ()) {
1799: imageWriteParam.setCompressionMode (ImageWriteParam.MODE_EXPLICIT);
1800: imageWriteParam.setCompressionQuality (1.0F);
1801: }
1802: try (ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream (fileTmp)) {
1803: imageWriter.setOutput (imageOutputStream);
1804: imageWriter.write (null, new IIOImage (fnpImageObject, null, null), imageWriteParam);
1805: } catch (Exception e) {
1806: JOptionPane.showMessageDialog (
1807: null, Multilingual.mlnJapanese ? pathTmp + " に書き出せません" : "Cannot write " + pathTmp);
1808: return false;
1809: }
1810: if (file.exists ()) {
1811: if (fileBak.isFile ()) {
1812:
1813:
1814: if (!fileBak.delete ()) {
1815: JOptionPane.showMessageDialog (
1816: null, Multilingual.mlnJapanese ? pathBak + " を削除できません" : "Cannot delete " + pathBak);
1817: return false;
1818: }
1819: }
1820:
1821: if (!file.renameTo (fileBak)) {
1822: JOptionPane.showMessageDialog (
1823: null, Multilingual.mlnJapanese ? path + " を " + pathBak + " にリネームできません" : "Cannot rename " + path + " to " + pathBak);
1824: return false;
1825: }
1826: }
1827:
1828: if (!fileTmp.renameTo (file)) {
1829: JOptionPane.showMessageDialog (
1830: null, Multilingual.mlnJapanese ? pathTmp + " を " + path + " にリネームできません" : "Cannot rename " + pathTmp + " to " + path);
1831: return false;
1832: }
1833: return true;
1834: }
1835:
1836:
1837:
1838:
1839:
1840:
1841:
1842:
1843:
1844:
1845:
1846:
1847:
1848:
1849:
1850:
1851:
1852:
1853:
1854:
1855:
1856:
1857:
1858:
1859:
1860:
1861:
1862:
1863:
1864:
1865:
1866:
1867:
1868:
1869:
1870:
1871:
1872:
1873: public static final class Yon extends FontPage {
1874:
1875:
1876:
1877:
1878:
1879:
1880:
1881:
1882:
1883:
1884:
1885: public static final char[] FULL_BASE = (
1886:
1887: " " +
1888: " →←↑↓" +
1889: " !”#$%&’()*+,-./" +
1890: "0123456789:;<=>?" +
1891: "@ABCDEFGHIJKLMNO" +
1892: "PQRSTUVWXYZ[¥]^_" +
1893: "`abcdefghijklmno" +
1894: "pqrstuvwxyz{|} ̄ " +
1895: "\~¦ をぁぃぅぇぉゃゅょっ" +
1896: " あいうえおかきくけこさしすせそ" +
1897: " 。「」、・ヲァィゥェォャュョッ" +
1898: "ーアイウエオカキクケコサシスセソ" +
1899: "タチツテトナニヌネノハヒフヘホマ" +
1900: "ミムメモヤユヨラリルレロワン゛゜" +
1901: "たちつてとなにぬねのはひふへほま" +
1902: "みむめもやゆよらりるれろわん "
1903: ).toCharArray ();
1904:
1905: public Yon (int characterWidth, int characterHeight, String nameEn, String nameJa, String dataName, String imageName) {
1906: this (characterWidth, characterHeight, nameEn, nameJa, dataName, imageName, null, 0);
1907: }
1908: public Yon (int characterWidth, int characterHeight, String nameEn, String nameJa, String dataName, String imageName,
1909: byte[] memoryArray, int memoryAddress) {
1910: super (characterWidth, characterHeight, nameEn, nameJa, dataName, imageName,
1911: 16, 16, 16,
1912: memoryArray, memoryAddress,
1913: new char[][] { FULL_BASE });
1914: }
1915:
1916: }
1917:
1918:
1919:
1920:
1921:
1922: public static final class Han extends FontPage {
1923:
1924:
1925:
1926: public static final char[] HALF_BASE = (
1927:
1928: " " +
1929: " " +
1930: " !\"#$%&'()*+,-./" +
1931: "0123456789:;<=>?" +
1932: "@ABCDEFGHIJKLMNO" +
1933: "PQRSTUVWXYZ[\u00a5]^_" +
1934: "`abcdefghijklmno" +
1935: "pqrstuvwxyz{|} " +
1936: " \u007e\u00a6 " +
1937: " " +
1938: " 。「」、・ヲァィゥェォャュョッ" +
1939: "ーアイウエオカキクケコサシスセソ" +
1940: "タチツテトナニヌネノハヒフヘホマ" +
1941: "ミムメモヤユヨラリルレロワン゙゚" +
1942: " " +
1943: " "
1944: ).toCharArray ();
1945:
1946:
1947:
1948:
1949:
1950:
1951:
1952: public static final char[] FULL_BASE = (
1953:
1954: " " +
1955: " →←↑↓" +
1956: " " +
1957: " " +
1958: " " +
1959: " " +
1960: " " +
1961: "  ̄ " +
1962: "\ をぁぃぅぇぉゃゅょっ" +
1963: " あいうえおかきくけこさしすせそ" +
1964: " " +
1965: " " +
1966: " " +
1967: " " +
1968: "たちつてとなにぬねのはひふへほま" +
1969: "みむめもやゆよらりるれろわん "
1970: ).toCharArray ();
1971:
1972: public FontPage.Zen fnpZenPage;
1973:
1974: public Han (int characterWidth, int characterHeight, String nameEn, String nameJa, String dataName, String imageName) {
1975: this (characterWidth, characterHeight, nameEn, nameJa, dataName, imageName, null, 0);
1976: }
1977: public Han (int characterWidth, int characterHeight, String nameEn, String nameJa, String dataName, String imageName,
1978: byte[] memoryArray, int memoryAddress) {
1979: super (characterWidth, characterHeight, nameEn, nameJa, dataName, imageName,
1980: 16, 16, 16,
1981: memoryArray, memoryAddress,
1982: new char[][] { HALF_BASE, FULL_BASE });
1983: }
1984:
1985:
1986:
1987: public void setZenPage (FontPage.Zen zenPage) {
1988: fnpZenPage = zenPage;
1989: fnpMaximumFontDataFileLength = fnpBinaryBytes + zenPage.fnpBinaryBytes;
1990: }
1991:
1992:
1993:
1994:
1995: @Override public boolean fnpIsFontDataFileLength (long longLength) {
1996: return (longLength == (long) fnpBinaryBytes ||
1997: longLength == (long) (fnpBinaryBytes + fnpZenPage.fnpBinaryBytes));
1998: }
1999:
2000:
2001:
2002:
2003: @Override public boolean fnpLoadFontDataArray (byte[] array, int start, int length) {
2004: if (length == fnpBinaryBytes ||
2005: length == fnpBinaryBytes + fnpZenPage.fnpBinaryBytes) {
2006: System.arraycopy (array, start, fnpBinaryArray, 0, fnpBinaryBytes);
2007: fnpBinaryToMemory ();
2008: fnpBinaryToImage ();
2009: if (!fnpReady) {
2010: System.out.println (Multilingual.mlnJapanese ? fnpNameJa + " フォントの準備ができました" :
2011: fnpNameEn + " font is ready");
2012: fnpReady = true;
2013: }
2014: return true;
2015: }
2016: return false;
2017: }
2018:
2019:
2020:
2021:
2022: @Override public String fnpGetExtension () {
2023: if (fnpExtension == null) {
2024: fnpExtension = fnpCharacterHeight == 16 ? ".fon" : ".f" + fnpCharacterHeight;
2025: }
2026: return fnpExtension;
2027: }
2028:
2029: }
2030:
2031:
2032:
2033:
2034:
2035: public static final class Zen extends FontPage {
2036:
2037:
2038: public static final char[] FULL_BASE = (
2039: " \0、\0。\0,\0.\0・\0:\0;\0?\0!\0゛\0゜\0´\0`\0¨\0^\0 ̄\0_\0ヽ\0ヾ\0ゝ\0ゞ\0〃\0仝\0々\0〆\0〇\0ー\0―\0-\0/\0\\0~\0‖\0|\0…\0‥\0‘\0’\0“\0”\0(\0)\0〔\0〕\0[\0]\0{\0}\0〈\0〉\0《\0》\0「\0」\0『\0』\0【\0】\0+\0-\0±\0×\0÷\0=\0≠\0<\0>\0≦\0≧\0∞\0∴\0♂\0♀\0°\0′\0″\0℃\0¥\0$\0¢\0£\0%\0#\0&\0*\0@\0§\0☆\0★\0○\0●\0◎\0◇\0" +
2040: "◆\0□\0■\0△\0▲\0▽\0▼\0※\0〒\0→\0←\0↑\0↓\0〓\0\uff07\0\uff02\0\uff0d\0\uff5e\0\u3033\0\u3034\0\u3035\0\u303b\0\u303c\0\u30ff\0\u309f\0∈\0∋\0⊆\0⊇\0⊂\0⊃\0∪\0∩\0\u2284\0\u2285\0\u228a\0\u228b\0\u2209\0\u2205\0\u2305\0\u2306\0∧\0∨\0¬\0⇒\0⇔\0∀\0∃\0\u2295\0\u2296\0\u2297\0\u2225\0\u2226\0\uff5f\0\uff60\0\u3018\0\u3019\0\u3016\0\u3017\0∠\0⊥\0⌒\0∂\0∇\0≡\0≒\0≪\0≫\0√\0∽\0∝\0∵\0∫\0∬\0\u2262\0\u2243\0\u2245\0\u2248\0\u2276\0\u2277\0\u2194\0Å\0‰\0♯\0♭\0♪\0†\0‡\0¶\0\u266e\0\u266b\0\u266c\0\u2669\0◯\0" +
2041: "\u25b7\0\u25b6\0\u25c1\0\u25c0\0\u2197\0\u2198\0\u2196\0\u2199\0\u21c4\0\u21e8\0\u21e6\0\u21e7\0\u21e9\0\u2934\0\u2935\00\01\02\03\04\05\06\07\08\09\0\u29bf\0\u25c9\0\u303d\0\ufe46\0\ufe45\0\u25e6\0\u2022\0A\0B\0C\0D\0E\0F\0G\0H\0I\0J\0K\0L\0M\0N\0O\0P\0Q\0R\0S\0T\0U\0V\0W\0X\0Y\0Z\0\u2213\0\u2135\0\u210f\0\u33cb\0\u2113\0\u2127\0a\0b\0c\0d\0e\0f\0g\0h\0i\0j\0k\0l\0m\0n\0o\0p\0q\0r\0s\0t\0u\0v\0w\0x\0y\0z\0\u30a0\0\u2013\0\u29fa\0\u29fb\0" +
2042: "ぁ\0あ\0ぃ\0い\0ぅ\0う\0ぇ\0え\0ぉ\0お\0か\0が\0き\0ぎ\0く\0ぐ\0け\0げ\0こ\0ご\0さ\0ざ\0し\0じ\0す\0ず\0せ\0ぜ\0そ\0ぞ\0た\0だ\0ち\0ぢ\0っ\0つ\0づ\0て\0で\0と\0ど\0な\0に\0ぬ\0ね\0の\0は\0ば\0ぱ\0ひ\0び\0ぴ\0ふ\0ぶ\0ぷ\0へ\0べ\0ぺ\0ほ\0ぼ\0ぽ\0ま\0み\0む\0め\0も\0ゃ\0や\0ゅ\0ゆ\0ょ\0よ\0ら\0り\0る\0れ\0ろ\0ゎ\0わ\0ゐ\0ゑ\0を\0ん\0\u3094\0\u3095\0\u3096\0\u304b\u309a\u304d\u309a\u304f\u309a\u3051\u309a\u3053\u309a\u3000\0\u3000\0\u3000\0" +
2043: "ァ\0ア\0ィ\0イ\0ゥ\0ウ\0ェ\0エ\0ォ\0オ\0カ\0ガ\0キ\0ギ\0ク\0グ\0ケ\0ゲ\0コ\0ゴ\0サ\0ザ\0シ\0ジ\0ス\0ズ\0セ\0ゼ\0ソ\0ゾ\0タ\0ダ\0チ\0ヂ\0ッ\0ツ\0ヅ\0テ\0デ\0ト\0ド\0ナ\0ニ\0ヌ\0ネ\0ノ\0ハ\0バ\0パ\0ヒ\0ビ\0ピ\0フ\0ブ\0プ\0ヘ\0ベ\0ペ\0ホ\0ボ\0ポ\0マ\0ミ\0ム\0メ\0モ\0ャ\0ヤ\0ュ\0ユ\0ョ\0ヨ\0ラ\0リ\0ル\0レ\0ロ\0ヮ\0ワ\0ヰ\0ヱ\0ヲ\0ン\0ヴ\0ヵ\0ヶ\0\u30ab\u309a\u30ad\u309a\u30af\u309a\u30b1\u309a\u30b3\u309a\u30bb\u309a\u30c4\u309a\u30c8\u309a" +
2044: "Α\0Β\0Γ\0Δ\0Ε\0Ζ\0Η\0Θ\0Ι\0Κ\0Λ\0Μ\0Ν\0Ξ\0Ο\0Π\0Ρ\0Σ\0Τ\0Υ\0Φ\0Χ\0Ψ\0Ω\0\u2664\0\u2660\0\u2662\0\u2666\0\u2661\0\u2665\0\u2667\0\u2663\0α\0β\0γ\0δ\0ε\0ζ\0η\0θ\0ι\0κ\0λ\0μ\0ν\0ξ\0ο\0π\0ρ\0σ\0τ\0υ\0φ\0χ\0ψ\0ω\0\u03c2\0\u24f5\0\u24f6\0\u24f7\0\u24f8\0\u24f9\0\u24fa\0\u24fb\0\u24fc\0\u24fd\0\u24fe\0\u2616\0\u2617\0\u3020\0\u260e\0\u2600\0\u2601\0\u2602\0\u2603\0\u2668\0\u25b1\0\u31f0\0\u31f1\0\u31f2\0\u31f3\0\u31f4\0\u31f5\0\u31f6\0\u31f7\0\u31f8\0\u31f9\0\u31f7\u309a\u31fa\0\u31fb\0\u31fc\0\u31fd\0\u31fe\0\u31ff\0" +
2045: "А\0Б\0В\0Г\0Д\0Е\0Ё\0Ж\0З\0И\0Й\0К\0Л\0М\0Н\0О\0П\0Р\0С\0Т\0У\0Ф\0Х\0Ц\0Ч\0Ш\0Щ\0Ъ\0Ы\0Ь\0Э\0Ю\0Я\0\u23be\0\u23bf\0\u23c0\0\u23c1\0\u23c2\0\u23c3\0\u23c4\0\u23c5\0\u23c6\0\u23c7\0\u23c8\0\u23c9\0\u23ca\0\u23cb\0\u23cc\0а\0б\0в\0г\0д\0е\0ё\0ж\0з\0и\0й\0к\0л\0м\0н\0о\0п\0р\0с\0т\0у\0ф\0х\0ц\0ч\0ш\0щ\0ъ\0ы\0ь\0э\0ю\0я\0\u30f7\0\u30f8\0\u30f9\0\u30fa\0\u22da\0\u22db\0\u2153\0\u2154\0\u2155\0\u2713\0\u2318\0\u2423\0\u23ce\0" +
2046: "─\0│\0┌\0┐\0┘\0└\0├\0┬\0┤\0┴\0┼\0━\0┃\0┏\0┓\0┛\0┗\0┣\0┳\0┫\0┻\0╋\0┠\0┯\0┨\0┷\0┿\0┝\0┰\0┥\0┸\0╂\0\u3251\0\u3252\0\u3253\0\u3254\0\u3255\0\u3256\0\u3257\0\u3258\0\u3259\0\u325a\0\u325b\0\u325c\0\u325d\0\u325e\0\u325f\0\u32b1\0\u32b2\0\u32b3\0\u32b4\0\u32b5\0\u32b6\0\u32b7\0\u32b8\0\u32b9\0\u32ba\0\u32bb\0\u32bc\0\u32bd\0\u32be\0\u32bf\0\u3000\0\u3000\0\u3000\0\u3000\0\u3000\0\u3000\0\u3000\0\u3000\0\u25d0\0\u25d1\0\u25d2\0\u25d3\0\u203c\0\u2047\0\u2048\0\u2049\0\u01cd\0\u01ce\0\u01d0\0\u1e3e\0\u1e3f\0\u01f8\0\u01f9\0\u01d1\0\u01d2\0\u01d4\0\u01d6\0\u01d8\0\u01da\0\u01dc\0\u3000\0\u3000\0" +
2047: "\u20ac\0\u00a0\0\u00a1\0\u00a4\0\u00a6\0\u00a9\0\u00aa\0\u00ab\0\u00ad\0\u00ae\0\u00af\0\u00b2\0\u00b3\0\u00b7\0\u00b8\0\u00b9\0\u00ba\0\u00bb\0\u00bc\0\u00bd\0\u00be\0\u00bf\0\u00c0\0\u00c1\0\u00c2\0\u00c3\0\u00c4\0\u00c5\0\u00c6\0\u00c7\0\u00c8\0\u00c9\0\u00ca\0\u00cb\0\u00cc\0\u00cd\0\u00ce\0\u00cf\0\u00d0\0\u00d1\0\u00d2\0\u00d3\0\u00d4\0\u00d5\0\u00d6\0\u00d8\0\u00d9\0\u00da\0\u00db\0\u00dc\0\u00dd\0\u00de\0\u00df\0\u00e0\0\u00e1\0\u00e2\0\u00e3\0\u00e4\0\u00e5\0\u00e6\0\u00e7\0\u00e8\0\u00e9\0\u00ea\0\u00eb\0\u00ec\0\u00ed\0\u00ee\0\u00ef\0\u00f0\0\u00f1\0\u00f2\0\u00f3\0\u00f4\0\u00f5\0\u00f6\0\u00f8\0\u00f9\0\u00fa\0\u00fb\0\u00fc\0\u00fd\0\u00fe\0\u00ff\0\u0100\0\u012a\0\u016a\0\u0112\0\u014c\0\u0101\0\u012b\0\u016b\0\u0113\0\u014d\0" +
2048: "\u0104\0\u02d8\0\u0141\0\u013d\0\u015a\0\u0160\0\u015e\0\u0164\0\u0179\0\u017d\0\u017b\0\u0105\0\u02db\0\u0142\0\u013e\0\u015b\0\u02c7\0\u0161\0\u015f\0\u0165\0\u017a\0\u02dd\0\u017e\0\u017c\0\u0154\0\u0102\0\u0139\0\u0106\0\u010c\0\u0118\0\u011a\0\u010e\0\u0143\0\u0147\0\u0150\0\u0158\0\u016e\0\u0170\0\u0162\0\u0155\0\u0103\0\u013a\0\u0107\0\u010d\0\u0119\0\u011b\0\u010f\0\u0111\0\u0144\0\u0148\0\u0151\0\u0159\0\u016f\0\u0171\0\u0163\0\u02d9\0\u0108\0\u011c\0\u0124\0\u0134\0\u015c\0\u016c\0\u0109\0\u011d\0\u0125\0\u0135\0\u015d\0\u016d\0\u0271\0\u028b\0\u027e\0\u0283\0\u0292\0\u026c\0\u026e\0\u0279\0\u0288\0\u0256\0\u0273\0\u027d\0\u0282\0\u0290\0\u027b\0\u026d\0\u025f\0\u0272\0\u029d\0\u028e\0\u0261\0\u014b\0\u0270\0\u0281\0\u0127\0\u0295\0" +
2049: "\u0294\0\u0266\0\u0298\0\u01c2\0\u0253\0\u0257\0\u0284\0\u0260\0\u0193\0\u0153\0\u0152\0\u0268\0\u0289\0\u0258\0\u0275\0\u0259\0\u025c\0\u025e\0\u0250\0\u026f\0\u028a\0\u0264\0\u028c\0\u0254\0\u0251\0\u0252\0\u028d\0\u0265\0\u02a2\0\u02a1\0\u0255\0\u0291\0\u027a\0\u0267\0\u025a\0\u00e6\u0300\u01fd\0\u1f70\0\u1f71\0\u0254\u0300\u0254\u0301\u028c\u0300\u028c\u0301\u0259\u0300\u0259\u0301\u025a\u0300\u025a\u0301\u1f72\0\u1f73\0\u0361\0\u02c8\0\u02cc\0\u02d0\0\u02d1\0\u0306\0\u203f\0\u030b\0\u0301\0\u0304\0\u0300\0\u030f\0\u030c\0\u0302\0\u02e5\0\u02e6\0\u02e7\0\u02e8\0\u02e9\0\u02e9\u02e5\u02e5\u02e9\u0325\0\u032c\0\u0339\0\u031c\0\u031f\0\u0320\0\u0308\0\u033d\0\u0329\0\u032f\0\u02de\0\u0324\0\u0330\0\u033c\0\u0334\0\u031d\0\u031e\0\u0318\0\u0319\0\u032a\0\u033a\0\u033b\0\u0303\0\u031a\0" +
2050: "\u2776\0\u2777\0\u2778\0\u2779\0\u277a\0\u277b\0\u277c\0\u277d\0\u277e\0\u277f\0\u24eb\0\u24ec\0\u24ed\0\u24ee\0\u24ef\0\u24f0\0\u24f1\0\u24f2\0\u24f3\0\u24f4\0\u2170\0\u2171\0\u2172\0\u2173\0\u2174\0\u2175\0\u2176\0\u2177\0\u2178\0\u2179\0\u217a\0\u217b\0\u24d0\0\u24d1\0\u24d2\0\u24d3\0\u24d4\0\u24d5\0\u24d6\0\u24d7\0\u24d8\0\u24d9\0\u24da\0\u24db\0\u24dc\0\u24dd\0\u24de\0\u24df\0\u24e0\0\u24e1\0\u24e2\0\u24e3\0\u24e4\0\u24e5\0\u24e6\0\u24e7\0\u24e8\0\u24e9\0\u32d0\0\u32d1\0\u32d2\0\u32d3\0\u32d4\0\u32d5\0\u32d6\0\u32d7\0\u32d8\0\u32d9\0\u32da\0\u32db\0\u32dc\0\u32dd\0\u32de\0\u32df\0\u32e0\0\u32e1\0\u32e2\0\u32e3\0\u32fa\0\u32e9\0\u32e5\0\u32ed\0\u32ec\0\u3000\0\u3000\0\u3000\0\u3000\0\u3000\0\u3000\0\u3000\0\u3000\0\u3000\0\u2051\0\u2042\0" +
2051: "\u2460\0\u2461\0\u2462\0\u2463\0\u2464\0\u2465\0\u2466\0\u2467\0\u2468\0\u2469\0\u246a\0\u246b\0\u246c\0\u246d\0\u246e\0\u246f\0\u2470\0\u2471\0\u2472\0\u2473\0\u2160\0\u2161\0\u2162\0\u2163\0\u2164\0\u2165\0\u2166\0\u2167\0\u2168\0\u2169\0\u216a\0\u3349\0\u3314\0\u3322\0\u334d\0\u3318\0\u3327\0\u3303\0\u3336\0\u3351\0\u3357\0\u330d\0\u3326\0\u3323\0\u332b\0\u334a\0\u333b\0\u339c\0\u339d\0\u339e\0\u338e\0\u338f\0\u33c4\0\u33a1\0\u216b\0\u3000\0\u3000\0\u3000\0\u3000\0\u3000\0\u3000\0\u3000\0\u337b\0\u301d\0\u301f\0\u2116\0\u33cd\0\u2121\0\u32a4\0\u32a5\0\u32a6\0\u32a7\0\u32a8\0\u3231\0\u3232\0\u3239\0\u337e\0\u337d\0\u337c\0\u3000\0\u3000\0\u3000\0\u222e\0\u3000\0\u3000\0\u3000\0\u3000\0\u221f\0\u22bf\0\u3000\0\u3000\0\u3000\0\u2756\0\u261e\0" +
2052: "\u4ff1\0\u0076\u000b\u3402\0\u4e28\0\u4e2f\0\u4e30\0\u4e8d\0\u4ee1\0\u4efd\0\u4eff\0\u4f03\0\u4f0b\0\u4f60\0\u4f48\0\u4f49\0\u4f56\0\u4f5f\0\u4f6a\0\u4f6c\0\u4f7e\0\u4f8a\0\u4f94\0\u4f97\0\ufa30\0\u4fc9\0\u4fe0\0\u5001\0\u5002\0\u500e\0\u5018\0\u5027\0\u502e\0\u5040\0\u503b\0\u5041\0\u5094\0\u50cc\0\u50f2\0\u50d0\0\u50e6\0\ufa31\0\u5106\0\u5103\0\u510b\0\u511e\0\u5135\0\u514a\0\ufa32\0\u5155\0\u5157\0\u34b5\0\u519d\0\u51c3\0\u51ca\0\u51de\0\u51e2\0\u51ee\0\u5201\0\u34db\0\u5213\0\u5215\0\u5249\0\u5257\0\u5261\0\u5293\0\u52c8\0\ufa33\0\u52cc\0\u52d0\0\u52d6\0\u52db\0\ufa34\0\u52f0\0\u52fb\0\u5300\0\u5307\0\u531c\0\ufa35\0\u5361\0\u5363\0\u537d\0\u5393\0\u539d\0\u53b2\0\u5412\0\u5427\0\u544d\0\u549c\0\u546b\0\u5474\0\u547f\0\u5488\0\u5496\0\u54a1\0" +
2053: "\u54a9\0\u54c6\0\u54ff\0\u550e\0\u552b\0\u5535\0\u5550\0\u555e\0\u5581\0\u5586\0\u558e\0\ufa36\0\u55ad\0\u55ce\0\ufa37\0\u5608\0\u560e\0\u563b\0\u5649\0\u5676\0\u5666\0\ufa38\0\u566f\0\u5671\0\u5672\0\u5699\0\u569e\0\u56a9\0\u56ac\0\u56b3\0\u56c9\0\u56ca\0\u570a\0\u007a\u023d\u5721\0\u572f\0\u5733\0\u5734\0\u5770\0\u5777\0\u577c\0\u579c\0\ufa0f\0\u007a\u031b\u57b8\0\u57c7\0\u57c8\0\u57cf\0\u57e4\0\u57ed\0\u57f5\0\u57f6\0\u57ff\0\u5809\0\ufa10\0\u5861\0\u5864\0\ufa39\0\u587c\0\u5889\0\u589e\0\ufa3a\0\u58a9\0\u007b\u006e\u58d2\0\u58ce\0\u58d4\0\u58da\0\u58e0\0\u58e9\0\u590c\0\u8641\0\u595d\0\u596d\0\u598b\0\u5992\0\u59a4\0\u59c3\0\u59d2\0\u59dd\0\u5a13\0\u5a23\0\u5a67\0\u5a6d\0\u5a77\0\u5a7e\0\u5a84\0\u5a9e\0\u5aa7\0\u5ac4\0\u007c\u00bd\u5b19\0\u5b25\0\u525d\0" +
2054: "亜\0唖\0娃\0阿\0哀\0愛\0挨\0姶\0逢\0葵\0茜\0穐\0悪\0握\0渥\0旭\0葦\0芦\0鯵\0梓\0圧\0斡\0扱\0宛\0姐\0虻\0飴\0絢\0綾\0鮎\0或\0粟\0袷\0安\0庵\0按\0暗\0案\0闇\0鞍\0杏\0以\0伊\0位\0依\0偉\0囲\0夷\0委\0威\0尉\0惟\0意\0慰\0易\0椅\0為\0畏\0異\0移\0維\0緯\0胃\0萎\0衣\0謂\0違\0遺\0医\0井\0亥\0域\0育\0郁\0磯\0一\0壱\0溢\0逸\0稲\0茨\0芋\0鰯\0允\0印\0咽\0員\0因\0姻\0引\0飲\0淫\0胤\0蔭\0" +
2055: "院\0陰\0隠\0韻\0吋\0右\0宇\0烏\0羽\0迂\0雨\0卯\0鵜\0窺\0丑\0碓\0臼\0渦\0嘘\0唄\0欝\0蔚\0鰻\0姥\0厩\0浦\0瓜\0閏\0噂\0云\0運\0雲\0荏\0餌\0叡\0営\0嬰\0影\0映\0曳\0栄\0永\0泳\0洩\0瑛\0盈\0穎\0頴\0英\0衛\0詠\0鋭\0液\0疫\0益\0駅\0悦\0謁\0越\0閲\0榎\0厭\0円\0園\0堰\0奄\0宴\0延\0怨\0掩\0援\0沿\0演\0炎\0焔\0煙\0燕\0猿\0縁\0艶\0苑\0薗\0遠\0鉛\0鴛\0塩\0於\0汚\0甥\0凹\0央\0奥\0往\0応\0" +
2056: "押\0旺\0横\0欧\0殴\0王\0翁\0襖\0鴬\0鴎\0黄\0岡\0沖\0荻\0億\0屋\0憶\0臆\0桶\0牡\0乙\0俺\0卸\0恩\0温\0穏\0音\0下\0化\0仮\0何\0伽\0価\0佳\0加\0可\0嘉\0夏\0嫁\0家\0寡\0科\0暇\0果\0架\0歌\0河\0火\0珂\0禍\0禾\0稼\0箇\0花\0苛\0茄\0荷\0華\0菓\0蝦\0課\0嘩\0貨\0迦\0過\0霞\0蚊\0俄\0峨\0我\0牙\0画\0臥\0芽\0蛾\0賀\0雅\0餓\0駕\0介\0会\0解\0回\0塊\0壊\0廻\0快\0怪\0悔\0恢\0懐\0戒\0拐\0改\0" +
2057: "魁\0晦\0械\0海\0灰\0界\0皆\0絵\0芥\0蟹\0開\0階\0貝\0凱\0劾\0外\0咳\0害\0崖\0慨\0概\0涯\0碍\0蓋\0街\0該\0鎧\0骸\0浬\0馨\0蛙\0垣\0柿\0蛎\0鈎\0劃\0嚇\0各\0廓\0拡\0撹\0格\0核\0殻\0獲\0確\0穫\0覚\0角\0赫\0較\0郭\0閣\0隔\0革\0学\0岳\0楽\0額\0顎\0掛\0笠\0樫\0橿\0梶\0鰍\0潟\0割\0喝\0恰\0括\0活\0渇\0滑\0葛\0褐\0轄\0且\0鰹\0叶\0椛\0樺\0鞄\0株\0兜\0竃\0蒲\0釜\0鎌\0噛\0鴨\0栢\0茅\0萱\0" +
2058: "粥\0刈\0苅\0瓦\0乾\0侃\0冠\0寒\0刊\0勘\0勧\0巻\0喚\0堪\0姦\0完\0官\0寛\0干\0幹\0患\0感\0慣\0憾\0換\0敢\0柑\0桓\0棺\0款\0歓\0汗\0漢\0澗\0潅\0環\0甘\0監\0看\0竿\0管\0簡\0緩\0缶\0翰\0肝\0艦\0莞\0観\0諌\0貫\0還\0鑑\0間\0閑\0関\0陥\0韓\0館\0舘\0丸\0含\0岸\0巌\0玩\0癌\0眼\0岩\0翫\0贋\0雁\0頑\0顔\0願\0企\0伎\0危\0喜\0器\0基\0奇\0嬉\0寄\0岐\0希\0幾\0忌\0揮\0机\0旗\0既\0期\0棋\0棄\0" +
2059: "機\0帰\0毅\0気\0汽\0畿\0祈\0季\0稀\0紀\0徽\0規\0記\0貴\0起\0軌\0輝\0飢\0騎\0鬼\0亀\0偽\0儀\0妓\0宜\0戯\0技\0擬\0欺\0犠\0疑\0祇\0義\0蟻\0誼\0議\0掬\0菊\0鞠\0吉\0吃\0喫\0桔\0橘\0詰\0砧\0杵\0黍\0却\0客\0脚\0虐\0逆\0丘\0久\0仇\0休\0及\0吸\0宮\0弓\0急\0救\0朽\0求\0汲\0泣\0灸\0球\0究\0窮\0笈\0級\0糾\0給\0旧\0牛\0去\0居\0巨\0拒\0拠\0挙\0渠\0虚\0許\0距\0鋸\0漁\0禦\0魚\0亨\0享\0京\0" +
2060: "供\0侠\0僑\0兇\0競\0共\0凶\0協\0匡\0卿\0叫\0喬\0境\0峡\0強\0彊\0怯\0恐\0恭\0挟\0教\0橋\0況\0狂\0狭\0矯\0胸\0脅\0興\0蕎\0郷\0鏡\0響\0饗\0驚\0仰\0凝\0尭\0暁\0業\0局\0曲\0極\0玉\0桐\0粁\0僅\0勤\0均\0巾\0錦\0斤\0欣\0欽\0琴\0禁\0禽\0筋\0緊\0芹\0菌\0衿\0襟\0謹\0近\0金\0吟\0銀\0九\0倶\0句\0区\0狗\0玖\0矩\0苦\0躯\0駆\0駈\0駒\0具\0愚\0虞\0喰\0空\0偶\0寓\0遇\0隅\0串\0櫛\0釧\0屑\0屈\0" +
2061: "掘\0窟\0沓\0靴\0轡\0窪\0熊\0隈\0粂\0栗\0繰\0桑\0鍬\0勲\0君\0薫\0訓\0群\0軍\0郡\0卦\0袈\0祁\0係\0傾\0刑\0兄\0啓\0圭\0珪\0型\0契\0形\0径\0恵\0慶\0慧\0憩\0掲\0携\0敬\0景\0桂\0渓\0畦\0稽\0系\0経\0継\0繋\0罫\0茎\0荊\0蛍\0計\0詣\0警\0軽\0頚\0鶏\0芸\0迎\0鯨\0劇\0戟\0撃\0激\0隙\0桁\0傑\0欠\0決\0潔\0穴\0結\0血\0訣\0月\0件\0倹\0倦\0健\0兼\0券\0剣\0喧\0圏\0堅\0嫌\0建\0憲\0懸\0拳\0捲\0" +
2062: "検\0権\0牽\0犬\0献\0研\0硯\0絹\0県\0肩\0見\0謙\0賢\0軒\0遣\0鍵\0険\0顕\0験\0鹸\0元\0原\0厳\0幻\0弦\0減\0源\0玄\0現\0絃\0舷\0言\0諺\0限\0乎\0個\0古\0呼\0固\0姑\0孤\0己\0庫\0弧\0戸\0故\0枯\0湖\0狐\0糊\0袴\0股\0胡\0菰\0虎\0誇\0跨\0鈷\0雇\0顧\0鼓\0五\0互\0伍\0午\0呉\0吾\0娯\0後\0御\0悟\0梧\0檎\0瑚\0碁\0語\0誤\0護\0醐\0乞\0鯉\0交\0佼\0侯\0候\0倖\0光\0公\0功\0効\0勾\0厚\0口\0向\0" +
2063: "后\0喉\0坑\0垢\0好\0孔\0孝\0宏\0工\0巧\0巷\0幸\0広\0庚\0康\0弘\0恒\0慌\0抗\0拘\0控\0攻\0昂\0晃\0更\0杭\0校\0梗\0構\0江\0洪\0浩\0港\0溝\0甲\0皇\0硬\0稿\0糠\0紅\0紘\0絞\0綱\0耕\0考\0肯\0肱\0腔\0膏\0航\0荒\0行\0衡\0講\0貢\0購\0郊\0酵\0鉱\0砿\0鋼\0閤\0降\0項\0香\0高\0鴻\0剛\0劫\0号\0合\0壕\0拷\0濠\0豪\0轟\0麹\0克\0刻\0告\0国\0穀\0酷\0鵠\0黒\0獄\0漉\0腰\0甑\0忽\0惚\0骨\0狛\0込\0" +
2064: "此\0頃\0今\0困\0坤\0墾\0婚\0恨\0懇\0昏\0昆\0根\0梱\0混\0痕\0紺\0艮\0魂\0些\0佐\0叉\0唆\0嵯\0左\0差\0査\0沙\0瑳\0砂\0詐\0鎖\0裟\0坐\0座\0挫\0債\0催\0再\0最\0哉\0塞\0妻\0宰\0彩\0才\0採\0栽\0歳\0済\0災\0采\0犀\0砕\0砦\0祭\0斎\0細\0菜\0裁\0載\0際\0剤\0在\0材\0罪\0財\0冴\0坂\0阪\0堺\0榊\0肴\0咲\0崎\0埼\0碕\0鷺\0作\0削\0咋\0搾\0昨\0朔\0柵\0窄\0策\0索\0錯\0桜\0鮭\0笹\0匙\0冊\0刷\0" +
2065: "察\0拶\0撮\0擦\0札\0殺\0薩\0雑\0皐\0鯖\0捌\0錆\0鮫\0皿\0晒\0三\0傘\0参\0山\0惨\0撒\0散\0桟\0燦\0珊\0産\0算\0纂\0蚕\0讃\0賛\0酸\0餐\0斬\0暫\0残\0仕\0仔\0伺\0使\0刺\0司\0史\0嗣\0四\0士\0始\0姉\0姿\0子\0屍\0市\0師\0志\0思\0指\0支\0孜\0斯\0施\0旨\0枝\0止\0死\0氏\0獅\0祉\0私\0糸\0紙\0紫\0肢\0脂\0至\0視\0詞\0詩\0試\0誌\0諮\0資\0賜\0雌\0飼\0歯\0事\0似\0侍\0児\0字\0寺\0慈\0持\0時\0" +
2066: "次\0滋\0治\0爾\0璽\0痔\0磁\0示\0而\0耳\0自\0蒔\0辞\0汐\0鹿\0式\0識\0鴫\0竺\0軸\0宍\0雫\0七\0叱\0執\0失\0嫉\0室\0悉\0湿\0漆\0疾\0質\0実\0蔀\0篠\0偲\0柴\0芝\0屡\0蕊\0縞\0舎\0写\0射\0捨\0赦\0斜\0煮\0社\0紗\0者\0謝\0車\0遮\0蛇\0邪\0借\0勺\0尺\0杓\0灼\0爵\0酌\0釈\0錫\0若\0寂\0弱\0惹\0主\0取\0守\0手\0朱\0殊\0狩\0珠\0種\0腫\0趣\0酒\0首\0儒\0受\0呪\0寿\0授\0樹\0綬\0需\0囚\0収\0周\0" +
2067: "宗\0就\0州\0修\0愁\0拾\0洲\0秀\0秋\0終\0繍\0習\0臭\0舟\0蒐\0衆\0襲\0讐\0蹴\0輯\0週\0酋\0酬\0集\0醜\0什\0住\0充\0十\0従\0戎\0柔\0汁\0渋\0獣\0縦\0重\0銃\0叔\0夙\0宿\0淑\0祝\0縮\0粛\0塾\0熟\0出\0術\0述\0俊\0峻\0春\0瞬\0竣\0舜\0駿\0准\0循\0旬\0楯\0殉\0淳\0準\0潤\0盾\0純\0巡\0遵\0醇\0順\0処\0初\0所\0暑\0曙\0渚\0庶\0緒\0署\0書\0薯\0藷\0諸\0助\0叙\0女\0序\0徐\0恕\0鋤\0除\0傷\0償\0" +
2068: "勝\0匠\0升\0召\0哨\0商\0唱\0嘗\0奨\0妾\0娼\0宵\0将\0小\0少\0尚\0庄\0床\0廠\0彰\0承\0抄\0招\0掌\0捷\0昇\0昌\0昭\0晶\0松\0梢\0樟\0樵\0沼\0消\0渉\0湘\0焼\0焦\0照\0症\0省\0硝\0礁\0祥\0称\0章\0笑\0粧\0紹\0肖\0菖\0蒋\0蕉\0衝\0裳\0訟\0証\0詔\0詳\0象\0賞\0醤\0鉦\0鍾\0鐘\0障\0鞘\0上\0丈\0丞\0乗\0冗\0剰\0城\0場\0壌\0嬢\0常\0情\0擾\0条\0杖\0浄\0状\0畳\0穣\0蒸\0譲\0醸\0錠\0嘱\0埴\0飾\0" +
2069: "拭\0植\0殖\0燭\0織\0職\0色\0触\0食\0蝕\0辱\0尻\0伸\0信\0侵\0唇\0娠\0寝\0審\0心\0慎\0振\0新\0晋\0森\0榛\0浸\0深\0申\0疹\0真\0神\0秦\0紳\0臣\0芯\0薪\0親\0診\0身\0辛\0進\0針\0震\0人\0仁\0刃\0塵\0壬\0尋\0甚\0尽\0腎\0訊\0迅\0陣\0靭\0笥\0諏\0須\0酢\0図\0厨\0逗\0吹\0垂\0帥\0推\0水\0炊\0睡\0粋\0翠\0衰\0遂\0酔\0錐\0錘\0随\0瑞\0髄\0崇\0嵩\0数\0枢\0趨\0雛\0据\0杉\0椙\0菅\0頗\0雀\0裾\0" +
2070: "澄\0摺\0寸\0世\0瀬\0畝\0是\0凄\0制\0勢\0姓\0征\0性\0成\0政\0整\0星\0晴\0棲\0栖\0正\0清\0牲\0生\0盛\0精\0聖\0声\0製\0西\0誠\0誓\0請\0逝\0醒\0青\0静\0斉\0税\0脆\0隻\0席\0惜\0戚\0斥\0昔\0析\0石\0積\0籍\0績\0脊\0責\0赤\0跡\0蹟\0碩\0切\0拙\0接\0摂\0折\0設\0窃\0節\0説\0雪\0絶\0舌\0蝉\0仙\0先\0千\0占\0宣\0専\0尖\0川\0戦\0扇\0撰\0栓\0栴\0泉\0浅\0洗\0染\0潜\0煎\0煽\0旋\0穿\0箭\0線\0" +
2071: "繊\0羨\0腺\0舛\0船\0薦\0詮\0賎\0践\0選\0遷\0銭\0銑\0閃\0鮮\0前\0善\0漸\0然\0全\0禅\0繕\0膳\0糎\0噌\0塑\0岨\0措\0曾\0曽\0楚\0狙\0疏\0疎\0礎\0祖\0租\0粗\0素\0組\0蘇\0訴\0阻\0遡\0鼠\0僧\0創\0双\0叢\0倉\0喪\0壮\0奏\0爽\0宋\0層\0匝\0惣\0想\0捜\0掃\0挿\0掻\0操\0早\0曹\0巣\0槍\0槽\0漕\0燥\0争\0痩\0相\0窓\0糟\0総\0綜\0聡\0草\0荘\0葬\0蒼\0藻\0装\0走\0送\0遭\0鎗\0霜\0騒\0像\0増\0憎\0" +
2072: "臓\0蔵\0贈\0造\0促\0側\0則\0即\0息\0捉\0束\0測\0足\0速\0俗\0属\0賊\0族\0続\0卒\0袖\0其\0揃\0存\0孫\0尊\0損\0村\0遜\0他\0多\0太\0汰\0詑\0唾\0堕\0妥\0惰\0打\0柁\0舵\0楕\0陀\0駄\0騨\0体\0堆\0対\0耐\0岱\0帯\0待\0怠\0態\0戴\0替\0泰\0滞\0胎\0腿\0苔\0袋\0貸\0退\0逮\0隊\0黛\0鯛\0代\0台\0大\0第\0醍\0題\0鷹\0滝\0瀧\0卓\0啄\0宅\0托\0択\0拓\0沢\0濯\0琢\0託\0鐸\0濁\0諾\0茸\0凧\0蛸\0只\0" +
2073: "叩\0但\0達\0辰\0奪\0脱\0巽\0竪\0辿\0棚\0谷\0狸\0鱈\0樽\0誰\0丹\0単\0嘆\0坦\0担\0探\0旦\0歎\0淡\0湛\0炭\0短\0端\0箪\0綻\0耽\0胆\0蛋\0誕\0鍛\0団\0壇\0弾\0断\0暖\0檀\0段\0男\0談\0値\0知\0地\0弛\0恥\0智\0池\0痴\0稚\0置\0致\0蜘\0遅\0馳\0築\0畜\0竹\0筑\0蓄\0逐\0秩\0窒\0茶\0嫡\0着\0中\0仲\0宙\0忠\0抽\0昼\0柱\0注\0虫\0衷\0註\0酎\0鋳\0駐\0樗\0瀦\0猪\0苧\0著\0貯\0丁\0兆\0凋\0喋\0寵\0" +
2074: "帖\0帳\0庁\0弔\0張\0彫\0徴\0懲\0挑\0暢\0朝\0潮\0牒\0町\0眺\0聴\0脹\0腸\0蝶\0調\0諜\0超\0跳\0銚\0長\0頂\0鳥\0勅\0捗\0直\0朕\0沈\0珍\0賃\0鎮\0陳\0津\0墜\0椎\0槌\0追\0鎚\0痛\0通\0塚\0栂\0掴\0槻\0佃\0漬\0柘\0辻\0蔦\0綴\0鍔\0椿\0潰\0坪\0壷\0嬬\0紬\0爪\0吊\0釣\0鶴\0亭\0低\0停\0偵\0剃\0貞\0呈\0堤\0定\0帝\0底\0庭\0廷\0弟\0悌\0抵\0挺\0提\0梯\0汀\0碇\0禎\0程\0締\0艇\0訂\0諦\0蹄\0逓\0" +
2075: "邸\0鄭\0釘\0鼎\0泥\0摘\0擢\0敵\0滴\0的\0笛\0適\0鏑\0溺\0哲\0徹\0撤\0轍\0迭\0鉄\0典\0填\0天\0展\0店\0添\0纏\0甜\0貼\0転\0顛\0点\0伝\0殿\0澱\0田\0電\0兎\0吐\0堵\0塗\0妬\0屠\0徒\0斗\0杜\0渡\0登\0菟\0賭\0途\0都\0鍍\0砥\0砺\0努\0度\0土\0奴\0怒\0倒\0党\0冬\0凍\0刀\0唐\0塔\0塘\0套\0宕\0島\0嶋\0悼\0投\0搭\0東\0桃\0梼\0棟\0盗\0淘\0湯\0涛\0灯\0燈\0当\0痘\0祷\0等\0答\0筒\0糖\0統\0到\0" +
2076: "董\0蕩\0藤\0討\0謄\0豆\0踏\0逃\0透\0鐙\0陶\0頭\0騰\0闘\0働\0動\0同\0堂\0導\0憧\0撞\0洞\0瞳\0童\0胴\0萄\0道\0銅\0峠\0鴇\0匿\0得\0徳\0涜\0特\0督\0禿\0篤\0毒\0独\0読\0栃\0橡\0凸\0突\0椴\0届\0鳶\0苫\0寅\0酉\0瀞\0噸\0屯\0惇\0敦\0沌\0豚\0遁\0頓\0呑\0曇\0鈍\0奈\0那\0内\0乍\0凪\0薙\0謎\0灘\0捺\0鍋\0楢\0馴\0縄\0畷\0南\0楠\0軟\0難\0汝\0二\0尼\0弐\0迩\0匂\0賑\0肉\0虹\0廿\0日\0乳\0入\0" +
2077: "如\0尿\0韮\0任\0妊\0忍\0認\0濡\0禰\0祢\0寧\0葱\0猫\0熱\0年\0念\0捻\0撚\0燃\0粘\0乃\0廼\0之\0埜\0嚢\0悩\0濃\0納\0能\0脳\0膿\0農\0覗\0蚤\0巴\0把\0播\0覇\0杷\0波\0派\0琶\0破\0婆\0罵\0芭\0馬\0俳\0廃\0拝\0排\0敗\0杯\0盃\0牌\0背\0肺\0輩\0配\0倍\0培\0媒\0梅\0楳\0煤\0狽\0買\0売\0賠\0陪\0這\0蝿\0秤\0矧\0萩\0伯\0剥\0博\0拍\0柏\0泊\0白\0箔\0粕\0舶\0薄\0迫\0曝\0漠\0爆\0縛\0莫\0駁\0麦\0" +
2078: "函\0箱\0硲\0箸\0肇\0筈\0櫨\0幡\0肌\0畑\0畠\0八\0鉢\0溌\0発\0醗\0髪\0伐\0罰\0抜\0筏\0閥\0鳩\0噺\0塙\0蛤\0隼\0伴\0判\0半\0反\0叛\0帆\0搬\0斑\0板\0氾\0汎\0版\0犯\0班\0畔\0繁\0般\0藩\0販\0範\0釆\0煩\0頒\0飯\0挽\0晩\0番\0盤\0磐\0蕃\0蛮\0匪\0卑\0否\0妃\0庇\0彼\0悲\0扉\0批\0披\0斐\0比\0泌\0疲\0皮\0碑\0秘\0緋\0罷\0肥\0被\0誹\0費\0避\0非\0飛\0樋\0簸\0備\0尾\0微\0枇\0毘\0琵\0眉\0美\0" +
2079: "鼻\0柊\0稗\0匹\0疋\0髭\0彦\0膝\0菱\0肘\0弼\0必\0畢\0筆\0逼\0桧\0姫\0媛\0紐\0百\0謬\0俵\0彪\0標\0氷\0漂\0瓢\0票\0表\0評\0豹\0廟\0描\0病\0秒\0苗\0錨\0鋲\0蒜\0蛭\0鰭\0品\0彬\0斌\0浜\0瀕\0貧\0賓\0頻\0敏\0瓶\0不\0付\0埠\0夫\0婦\0富\0冨\0布\0府\0怖\0扶\0敷\0斧\0普\0浮\0父\0符\0腐\0膚\0芙\0譜\0負\0賦\0赴\0阜\0附\0侮\0撫\0武\0舞\0葡\0蕪\0部\0封\0楓\0風\0葺\0蕗\0伏\0副\0復\0幅\0服\0" +
2080: "福\0腹\0複\0覆\0淵\0弗\0払\0沸\0仏\0物\0鮒\0分\0吻\0噴\0墳\0憤\0扮\0焚\0奮\0粉\0糞\0紛\0雰\0文\0聞\0丙\0併\0兵\0塀\0幣\0平\0弊\0柄\0並\0蔽\0閉\0陛\0米\0頁\0僻\0壁\0癖\0碧\0別\0瞥\0蔑\0箆\0偏\0変\0片\0篇\0編\0辺\0返\0遍\0便\0勉\0娩\0弁\0鞭\0保\0舗\0鋪\0圃\0捕\0歩\0甫\0補\0輔\0穂\0募\0墓\0慕\0戊\0暮\0母\0簿\0菩\0倣\0俸\0包\0呆\0報\0奉\0宝\0峰\0峯\0崩\0庖\0抱\0捧\0放\0方\0朋\0" +
2081: "法\0泡\0烹\0砲\0縫\0胞\0芳\0萌\0蓬\0蜂\0褒\0訪\0豊\0邦\0鋒\0飽\0鳳\0鵬\0乏\0亡\0傍\0剖\0坊\0妨\0帽\0忘\0忙\0房\0暴\0望\0某\0棒\0冒\0紡\0肪\0膨\0謀\0貌\0貿\0鉾\0防\0吠\0頬\0北\0僕\0卜\0墨\0撲\0朴\0牧\0睦\0穆\0釦\0勃\0没\0殆\0堀\0幌\0奔\0本\0翻\0凡\0盆\0摩\0磨\0魔\0麻\0埋\0妹\0昧\0枚\0毎\0哩\0槙\0幕\0膜\0枕\0鮪\0柾\0鱒\0桝\0亦\0俣\0又\0抹\0末\0沫\0迄\0侭\0繭\0麿\0万\0慢\0満\0" +
2082: "漫\0蔓\0味\0未\0魅\0巳\0箕\0岬\0密\0蜜\0湊\0蓑\0稔\0脈\0妙\0粍\0民\0眠\0務\0夢\0無\0牟\0矛\0霧\0鵡\0椋\0婿\0娘\0冥\0名\0命\0明\0盟\0迷\0銘\0鳴\0姪\0牝\0滅\0免\0棉\0綿\0緬\0面\0麺\0摸\0模\0茂\0妄\0孟\0毛\0猛\0盲\0網\0耗\0蒙\0儲\0木\0黙\0目\0杢\0勿\0餅\0尤\0戻\0籾\0貰\0問\0悶\0紋\0門\0匁\0也\0冶\0夜\0爺\0耶\0野\0弥\0矢\0厄\0役\0約\0薬\0訳\0躍\0靖\0柳\0薮\0鑓\0愉\0愈\0油\0癒\0" +
2083: "諭\0輸\0唯\0佑\0優\0勇\0友\0宥\0幽\0悠\0憂\0揖\0有\0柚\0湧\0涌\0猶\0猷\0由\0祐\0裕\0誘\0遊\0邑\0郵\0雄\0融\0夕\0予\0余\0与\0誉\0輿\0預\0傭\0幼\0妖\0容\0庸\0揚\0揺\0擁\0曜\0楊\0様\0洋\0溶\0熔\0用\0窯\0羊\0耀\0葉\0蓉\0要\0謡\0踊\0遥\0陽\0養\0慾\0抑\0欲\0沃\0浴\0翌\0翼\0淀\0羅\0螺\0裸\0来\0莱\0頼\0雷\0洛\0絡\0落\0酪\0乱\0卵\0嵐\0欄\0濫\0藍\0蘭\0覧\0利\0吏\0履\0李\0梨\0理\0璃\0" +
2084: "痢\0裏\0裡\0里\0離\0陸\0律\0率\0立\0葎\0掠\0略\0劉\0流\0溜\0琉\0留\0硫\0粒\0隆\0竜\0龍\0侶\0慮\0旅\0虜\0了\0亮\0僚\0両\0凌\0寮\0料\0梁\0涼\0猟\0療\0瞭\0稜\0糧\0良\0諒\0遼\0量\0陵\0領\0力\0緑\0倫\0厘\0林\0淋\0燐\0琳\0臨\0輪\0隣\0鱗\0麟\0瑠\0塁\0涙\0累\0類\0令\0伶\0例\0冷\0励\0嶺\0怜\0玲\0礼\0苓\0鈴\0隷\0零\0霊\0麗\0齢\0暦\0歴\0列\0劣\0烈\0裂\0廉\0恋\0憐\0漣\0煉\0簾\0練\0聯\0" +
2085: "蓮\0連\0錬\0呂\0魯\0櫓\0炉\0賂\0路\0露\0労\0婁\0廊\0弄\0朗\0楼\0榔\0浪\0漏\0牢\0狼\0篭\0老\0聾\0蝋\0郎\0六\0麓\0禄\0肋\0録\0論\0倭\0和\0話\0歪\0賄\0脇\0惑\0枠\0鷲\0亙\0亘\0鰐\0詫\0藁\0蕨\0椀\0湾\0碗\0腕\0\u0078\u039f\u5b41\0\u5b56\0\u5b7d\0\u5b93\0\u5bd8\0\u5bec\0\u5c12\0\u5c1e\0\u5c23\0\u5c2b\0\u378d\0\u5c62\0\ufa3b\0\ufa3c\0\u007b\u02b4\u5c7a\0\u5c8f\0\u5c9f\0\u5ca3\0\u5caa\0\u5cba\0\u5ccb\0\u5cd0\0\u5cd2\0\u5cf4\0\u007d\u0234\u37e2\0\u5d0d\0\u5d27\0\ufa11\0\u5d46\0\u5d47\0\u5d53\0\u5d4a\0\u5d6d\0\u5d81\0\u5da0\0\u5da4\0\u5da7\0\u5db8\0\u5dcb\0\u541e\0" +
2086: "弌\0丐\0丕\0个\0丱\0丶\0丼\0丿\0乂\0乖\0乘\0亂\0亅\0豫\0亊\0舒\0弍\0于\0亞\0亟\0亠\0亢\0亰\0亳\0亶\0从\0仍\0仄\0仆\0仂\0仗\0仞\0仭\0仟\0价\0伉\0佚\0估\0佛\0佝\0佗\0佇\0佶\0侈\0侏\0侘\0佻\0佩\0佰\0侑\0佯\0來\0侖\0儘\0俔\0俟\0俎\0俘\0俛\0俑\0俚\0俐\0俤\0俥\0倚\0倨\0倔\0倪\0倥\0倅\0伜\0俶\0倡\0倩\0倬\0俾\0俯\0們\0倆\0偃\0假\0會\0偕\0偐\0偈\0做\0偖\0偬\0偸\0傀\0傚\0傅\0傴\0傲\0" +
2087: "僉\0僊\0傳\0僂\0僖\0僞\0僥\0僭\0僣\0僮\0價\0僵\0儉\0儁\0儂\0儖\0儕\0儔\0儚\0儡\0儺\0儷\0儼\0儻\0儿\0兀\0兒\0兌\0兔\0兢\0竸\0兩\0兪\0兮\0冀\0冂\0囘\0册\0冉\0冏\0冑\0冓\0冕\0冖\0冤\0冦\0冢\0冩\0冪\0冫\0决\0冱\0冲\0冰\0况\0冽\0凅\0凉\0凛\0几\0處\0凩\0凭\0凰\0凵\0凾\0刄\0刋\0刔\0刎\0刧\0刪\0刮\0刳\0刹\0剏\0剄\0剋\0剌\0剞\0剔\0剪\0剴\0剩\0剳\0剿\0剽\0劍\0劔\0劒\0剱\0劈\0劑\0辨\0" +
2088: "辧\0劬\0劭\0劼\0劵\0勁\0勍\0勗\0勞\0勣\0勦\0飭\0勠\0勳\0勵\0勸\0勹\0匆\0匈\0甸\0匍\0匐\0匏\0匕\0匚\0匣\0匯\0匱\0匳\0匸\0區\0卆\0卅\0丗\0卉\0卍\0凖\0卞\0卩\0卮\0夘\0卻\0卷\0厂\0厖\0厠\0厦\0厥\0厮\0厰\0厶\0參\0簒\0雙\0叟\0曼\0燮\0叮\0叨\0叭\0叺\0吁\0吽\0呀\0听\0吭\0吼\0吮\0吶\0吩\0吝\0呎\0咏\0呵\0咎\0呟\0呱\0呷\0呰\0咒\0呻\0咀\0呶\0咄\0咐\0咆\0哇\0咢\0咸\0咥\0咬\0哄\0哈\0咨\0" +
2089: "咫\0哂\0咤\0咾\0咼\0哘\0哥\0哦\0唏\0唔\0哽\0哮\0哭\0哺\0哢\0唹\0啀\0啣\0啌\0售\0啜\0啅\0啖\0啗\0唸\0唳\0啝\0喙\0喀\0咯\0喊\0喟\0啻\0啾\0喘\0喞\0單\0啼\0喃\0喩\0喇\0喨\0嗚\0嗅\0嗟\0嗄\0嗜\0嗤\0嗔\0嘔\0嗷\0嘖\0嗾\0嗽\0嘛\0嗹\0噎\0噐\0營\0嘴\0嘶\0嘲\0嘸\0噫\0噤\0嘯\0噬\0噪\0嚆\0嚀\0嚊\0嚠\0嚔\0嚏\0嚥\0嚮\0嚶\0嚴\0囂\0嚼\0囁\0囃\0囀\0囈\0囎\0囑\0囓\0囗\0囮\0囹\0圀\0囿\0圄\0圉\0" +
2090: "圈\0國\0圍\0圓\0團\0圖\0嗇\0圜\0圦\0圷\0圸\0坎\0圻\0址\0坏\0坩\0埀\0垈\0坡\0坿\0垉\0垓\0垠\0垳\0垤\0垪\0垰\0埃\0埆\0埔\0埒\0埓\0堊\0埖\0埣\0堋\0堙\0堝\0塲\0堡\0塢\0塋\0塰\0毀\0塒\0堽\0塹\0墅\0墹\0墟\0墫\0墺\0壞\0墻\0墸\0墮\0壅\0壓\0壑\0壗\0壙\0壘\0壥\0壜\0壤\0壟\0壯\0壺\0壹\0壻\0壼\0壽\0夂\0夊\0夐\0夛\0梦\0夥\0夬\0夭\0夲\0夸\0夾\0竒\0奕\0奐\0奎\0奚\0奘\0奢\0奠\0奧\0奬\0奩\0" +
2091: "奸\0妁\0妝\0佞\0侫\0妣\0妲\0姆\0姨\0姜\0妍\0姙\0姚\0娥\0娟\0娑\0娜\0娉\0娚\0婀\0婬\0婉\0娵\0娶\0婢\0婪\0媚\0媼\0媾\0嫋\0嫂\0媽\0嫣\0嫗\0嫦\0嫩\0嫖\0嫺\0嫻\0嬌\0嬋\0嬖\0嬲\0嫐\0嬪\0嬶\0嬾\0孃\0孅\0孀\0孑\0孕\0孚\0孛\0孥\0孩\0孰\0孳\0孵\0學\0斈\0孺\0宀\0它\0宦\0宸\0寃\0寇\0寉\0寔\0寐\0寤\0實\0寢\0寞\0寥\0寫\0寰\0寶\0寳\0尅\0將\0專\0對\0尓\0尠\0尢\0尨\0尸\0尹\0屁\0屆\0屎\0屓\0" +
2092: "屐\0屏\0孱\0屬\0屮\0乢\0屶\0屹\0岌\0岑\0岔\0妛\0岫\0岻\0岶\0岼\0岷\0峅\0岾\0峇\0峙\0峩\0峽\0峺\0峭\0嶌\0峪\0崋\0崕\0崗\0嵜\0崟\0崛\0崑\0崔\0崢\0崚\0崙\0崘\0嵌\0嵒\0嵎\0嵋\0嵬\0嵳\0嵶\0嶇\0嶄\0嶂\0嶢\0嶝\0嶬\0嶮\0嶽\0嶐\0嶷\0嶼\0巉\0巍\0巓\0巒\0巖\0巛\0巫\0已\0巵\0帋\0帚\0帙\0帑\0帛\0帶\0帷\0幄\0幃\0幀\0幎\0幗\0幔\0幟\0幢\0幤\0幇\0幵\0并\0幺\0麼\0广\0庠\0廁\0廂\0廈\0廐\0廏\0" +
2093: "廖\0廣\0廝\0廚\0廛\0廢\0廡\0廨\0廩\0廬\0廱\0廳\0廰\0廴\0廸\0廾\0弃\0弉\0彝\0彜\0弋\0弑\0弖\0弩\0弭\0弸\0彁\0彈\0彌\0彎\0弯\0彑\0彖\0彗\0彙\0彡\0彭\0彳\0彷\0徃\0徂\0彿\0徊\0很\0徑\0徇\0從\0徙\0徘\0徠\0徨\0徭\0徼\0忖\0忻\0忤\0忸\0忱\0忝\0悳\0忿\0怡\0恠\0怙\0怐\0怩\0怎\0怱\0怛\0怕\0怫\0怦\0怏\0怺\0恚\0恁\0恪\0恷\0恟\0恊\0恆\0恍\0恣\0恃\0恤\0恂\0恬\0恫\0恙\0悁\0悍\0惧\0悃\0悚\0" +
2094: "悄\0悛\0悖\0悗\0悒\0悧\0悋\0惡\0悸\0惠\0惓\0悴\0忰\0悽\0惆\0悵\0惘\0慍\0愕\0愆\0惶\0惷\0愀\0惴\0惺\0愃\0愡\0惻\0惱\0愍\0愎\0慇\0愾\0愨\0愧\0慊\0愿\0愼\0愬\0愴\0愽\0慂\0慄\0慳\0慷\0慘\0慙\0慚\0慫\0慴\0慯\0慥\0慱\0慟\0慝\0慓\0慵\0憙\0憖\0憇\0憬\0憔\0憚\0憊\0憑\0憫\0憮\0懌\0懊\0應\0懷\0懈\0懃\0懆\0憺\0懋\0罹\0懍\0懦\0懣\0懶\0懺\0懴\0懿\0懽\0懼\0懾\0戀\0戈\0戉\0戍\0戌\0戔\0戛\0" +
2095: "戞\0戡\0截\0戮\0戰\0戲\0戳\0扁\0扎\0扞\0扣\0扛\0扠\0扨\0扼\0抂\0抉\0找\0抒\0抓\0抖\0拔\0抃\0抔\0拗\0拑\0抻\0拏\0拿\0拆\0擔\0拈\0拜\0拌\0拊\0拂\0拇\0抛\0拉\0挌\0拮\0拱\0挧\0挂\0挈\0拯\0拵\0捐\0挾\0捍\0搜\0捏\0掖\0掎\0掀\0掫\0捶\0掣\0掏\0掉\0掟\0掵\0捫\0捩\0掾\0揩\0揀\0揆\0揣\0揉\0插\0揶\0揄\0搖\0搴\0搆\0搓\0搦\0搶\0攝\0搗\0搨\0搏\0摧\0摯\0摶\0摎\0攪\0撕\0撓\0撥\0撩\0撈\0撼\0" +
2096: "據\0擒\0擅\0擇\0撻\0擘\0擂\0擱\0擧\0舉\0擠\0擡\0抬\0擣\0擯\0攬\0擶\0擴\0擲\0擺\0攀\0擽\0攘\0攜\0攅\0攤\0攣\0攫\0攴\0攵\0攷\0收\0攸\0畋\0效\0敖\0敕\0敍\0敘\0敞\0敝\0敲\0數\0斂\0斃\0變\0斛\0斟\0斫\0斷\0旃\0旆\0旁\0旄\0旌\0旒\0旛\0旙\0无\0旡\0旱\0杲\0昊\0昃\0旻\0杳\0昵\0昶\0昴\0昜\0晏\0晄\0晉\0晁\0晞\0晝\0晤\0晧\0晨\0晟\0晢\0晰\0暃\0暈\0暎\0暉\0暄\0暘\0暝\0曁\0暹\0曉\0暾\0暼\0" +
2097: "曄\0暸\0曖\0曚\0曠\0昿\0曦\0曩\0曰\0曵\0曷\0朏\0朖\0朞\0朦\0朧\0霸\0朮\0朿\0朶\0杁\0朸\0朷\0杆\0杞\0杠\0杙\0杣\0杤\0枉\0杰\0枩\0杼\0杪\0枌\0枋\0枦\0枡\0枅\0枷\0柯\0枴\0柬\0枳\0柩\0枸\0柤\0柞\0柝\0柢\0柮\0枹\0柎\0柆\0柧\0檜\0栞\0框\0栩\0桀\0桍\0栲\0桎\0梳\0栫\0桙\0档\0桷\0桿\0梟\0梏\0梭\0梔\0條\0梛\0梃\0檮\0梹\0桴\0梵\0梠\0梺\0椏\0梍\0桾\0椁\0棊\0椈\0棘\0椢\0椦\0棡\0椌\0棍\0" +
2098: "棔\0棧\0棕\0椶\0椒\0椄\0棗\0棣\0椥\0棹\0棠\0棯\0椨\0椪\0椚\0椣\0椡\0棆\0楹\0楷\0楜\0楸\0楫\0楔\0楾\0楮\0椹\0楴\0椽\0楙\0椰\0楡\0楞\0楝\0榁\0楪\0榲\0榮\0槐\0榿\0槁\0槓\0榾\0槎\0寨\0槊\0槝\0榻\0槃\0榧\0樮\0榑\0榠\0榜\0榕\0榴\0槞\0槨\0樂\0樛\0槿\0權\0槹\0槲\0槧\0樅\0榱\0樞\0槭\0樔\0槫\0樊\0樒\0櫁\0樣\0樓\0橄\0樌\0橲\0樶\0橸\0橇\0橢\0橙\0橦\0橈\0樸\0樢\0檐\0檍\0檠\0檄\0檢\0檣\0" +
2099: "檗\0蘗\0檻\0櫃\0櫂\0檸\0檳\0檬\0櫞\0櫑\0櫟\0檪\0櫚\0櫪\0櫻\0欅\0蘖\0櫺\0欒\0欖\0鬱\0欟\0欸\0欷\0盜\0欹\0飮\0歇\0歃\0歉\0歐\0歙\0歔\0歛\0歟\0歡\0歸\0歹\0歿\0殀\0殄\0殃\0殍\0殘\0殕\0殞\0殤\0殪\0殫\0殯\0殲\0殱\0殳\0殷\0殼\0毆\0毋\0毓\0毟\0毬\0毫\0毳\0毯\0麾\0氈\0氓\0气\0氛\0氤\0氣\0汞\0汕\0汢\0汪\0沂\0沍\0沚\0沁\0沛\0汾\0汨\0汳\0沒\0沐\0泄\0泱\0泓\0沽\0泗\0泅\0泝\0沮\0沱\0沾\0" +
2100: "沺\0泛\0泯\0泙\0泪\0洟\0衍\0洶\0洫\0洽\0洸\0洙\0洵\0洳\0洒\0洌\0浣\0涓\0浤\0浚\0浹\0浙\0涎\0涕\0濤\0涅\0淹\0渕\0渊\0涵\0淇\0淦\0涸\0淆\0淬\0淞\0淌\0淨\0淒\0淅\0淺\0淙\0淤\0淕\0淪\0淮\0渭\0湮\0渮\0渙\0湲\0湟\0渾\0渣\0湫\0渫\0湶\0湍\0渟\0湃\0渺\0湎\0渤\0滿\0渝\0游\0溂\0溪\0溘\0滉\0溷\0滓\0溽\0溯\0滄\0溲\0滔\0滕\0溏\0溥\0滂\0溟\0潁\0漑\0灌\0滬\0滸\0滾\0漿\0滲\0漱\0滯\0漲\0滌\0" +
2101: "漾\0漓\0滷\0澆\0潺\0潸\0澁\0澀\0潯\0潛\0濳\0潭\0澂\0潼\0潘\0澎\0澑\0濂\0潦\0澳\0澣\0澡\0澤\0澹\0濆\0澪\0濟\0濕\0濬\0濔\0濘\0濱\0濮\0濛\0瀉\0瀋\0濺\0瀑\0瀁\0瀏\0濾\0瀛\0瀚\0潴\0瀝\0瀘\0瀟\0瀰\0瀾\0瀲\0灑\0灣\0炙\0炒\0炯\0烱\0炬\0炸\0炳\0炮\0烟\0烋\0烝\0烙\0焉\0烽\0焜\0焙\0煥\0煕\0熈\0煦\0煢\0煌\0煖\0煬\0熏\0燻\0熄\0熕\0熨\0熬\0燗\0熹\0熾\0燒\0燉\0燔\0燎\0燠\0燬\0燧\0燵\0燼\0" +
2102: "燹\0燿\0爍\0爐\0爛\0爨\0爭\0爬\0爰\0爲\0爻\0爼\0爿\0牀\0牆\0牋\0牘\0牴\0牾\0犂\0犁\0犇\0犒\0犖\0犢\0犧\0犹\0犲\0狃\0狆\0狄\0狎\0狒\0狢\0狠\0狡\0狹\0狷\0倏\0猗\0猊\0猜\0猖\0猝\0猴\0猯\0猩\0猥\0猾\0獎\0獏\0默\0獗\0獪\0獨\0獰\0獸\0獵\0獻\0獺\0珈\0玳\0珎\0玻\0珀\0珥\0珮\0珞\0璢\0琅\0瑯\0琥\0珸\0琲\0琺\0瑕\0琿\0瑟\0瑙\0瑁\0瑜\0瑩\0瑰\0瑣\0瑪\0瑶\0瑾\0璋\0璞\0璧\0瓊\0瓏\0瓔\0珱\0" +
2103: "瓠\0瓣\0瓧\0瓩\0瓮\0瓲\0瓰\0瓱\0瓸\0瓷\0甄\0甃\0甅\0甌\0甎\0甍\0甕\0甓\0甞\0甦\0甬\0甼\0畄\0畍\0畊\0畉\0畛\0畆\0畚\0畩\0畤\0畧\0畫\0畭\0畸\0當\0疆\0疇\0畴\0疊\0疉\0疂\0疔\0疚\0疝\0疥\0疣\0痂\0疳\0痃\0疵\0疽\0疸\0疼\0疱\0痍\0痊\0痒\0痙\0痣\0痞\0痾\0痿\0痼\0瘁\0痰\0痺\0痲\0痳\0瘋\0瘍\0瘉\0瘟\0瘧\0瘠\0瘡\0瘢\0瘤\0瘴\0瘰\0瘻\0癇\0癈\0癆\0癜\0癘\0癡\0癢\0癨\0癩\0癪\0癧\0癬\0癰\0" +
2104: "癲\0癶\0癸\0發\0皀\0皃\0皈\0皋\0皎\0皖\0皓\0皙\0皚\0皰\0皴\0皸\0皹\0皺\0盂\0盍\0盖\0盒\0盞\0盡\0盥\0盧\0盪\0蘯\0盻\0眈\0眇\0眄\0眩\0眤\0眞\0眥\0眦\0眛\0眷\0眸\0睇\0睚\0睨\0睫\0睛\0睥\0睿\0睾\0睹\0瞎\0瞋\0瞑\0瞠\0瞞\0瞰\0瞶\0瞹\0瞿\0瞼\0瞽\0瞻\0矇\0矍\0矗\0矚\0矜\0矣\0矮\0矼\0砌\0砒\0礦\0砠\0礪\0硅\0碎\0硴\0碆\0硼\0碚\0碌\0碣\0碵\0碪\0碯\0磑\0磆\0磋\0磔\0碾\0碼\0磅\0磊\0磬\0" +
2105: "磧\0磚\0磽\0磴\0礇\0礒\0礑\0礙\0礬\0礫\0祀\0祠\0祗\0祟\0祚\0祕\0祓\0祺\0祿\0禊\0禝\0禧\0齋\0禪\0禮\0禳\0禹\0禺\0秉\0秕\0秧\0秬\0秡\0秣\0稈\0稍\0稘\0稙\0稠\0稟\0禀\0稱\0稻\0稾\0稷\0穃\0穗\0穉\0穡\0穢\0穩\0龝\0穰\0穹\0穽\0窈\0窗\0窕\0窘\0窖\0窩\0竈\0窰\0窶\0竅\0竄\0窿\0邃\0竇\0竊\0竍\0竏\0竕\0竓\0站\0竚\0竝\0竡\0竢\0竦\0竭\0竰\0笂\0笏\0笊\0笆\0笳\0笘\0笙\0笞\0笵\0笨\0笶\0筐\0" +
2106: "筺\0笄\0筍\0笋\0筌\0筅\0筵\0筥\0筴\0筧\0筰\0筱\0筬\0筮\0箝\0箘\0箟\0箍\0箜\0箚\0箋\0箒\0箏\0筝\0箙\0篋\0篁\0篌\0篏\0箴\0篆\0篝\0篩\0簑\0簔\0篦\0篥\0籠\0簀\0簇\0簓\0篳\0篷\0簗\0簍\0篶\0簣\0簧\0簪\0簟\0簷\0簫\0簽\0籌\0籃\0籔\0籏\0籀\0籐\0籘\0籟\0籤\0籖\0籥\0籬\0籵\0粃\0粐\0粤\0粭\0粢\0粫\0粡\0粨\0粳\0粲\0粱\0粮\0粹\0粽\0糀\0糅\0糂\0糘\0糒\0糜\0糢\0鬻\0糯\0糲\0糴\0糶\0糺\0紆\0" +
2107: "紂\0紜\0紕\0紊\0絅\0絋\0紮\0紲\0紿\0紵\0絆\0絳\0絖\0絎\0絲\0絨\0絮\0絏\0絣\0經\0綉\0絛\0綏\0絽\0綛\0綺\0綮\0綣\0綵\0緇\0綽\0綫\0總\0綢\0綯\0緜\0綸\0綟\0綰\0緘\0緝\0緤\0緞\0緻\0緲\0緡\0縅\0縊\0縣\0縡\0縒\0縱\0縟\0縉\0縋\0縢\0繆\0繦\0縻\0縵\0縹\0繃\0縷\0縲\0縺\0繧\0繝\0繖\0繞\0繙\0繚\0繹\0繪\0繩\0繼\0繻\0纃\0緕\0繽\0辮\0繿\0纈\0纉\0續\0纒\0纐\0纓\0纔\0纖\0纎\0纛\0纜\0缸\0缺\0" +
2108: "罅\0罌\0罍\0罎\0罐\0网\0罕\0罔\0罘\0罟\0罠\0罨\0罩\0罧\0罸\0羂\0羆\0羃\0羈\0羇\0羌\0羔\0羞\0羝\0羚\0羣\0羯\0羲\0羹\0羮\0羶\0羸\0譱\0翅\0翆\0翊\0翕\0翔\0翡\0翦\0翩\0翳\0翹\0飜\0耆\0耄\0耋\0耒\0耘\0耙\0耜\0耡\0耨\0耿\0耻\0聊\0聆\0聒\0聘\0聚\0聟\0聢\0聨\0聳\0聲\0聰\0聶\0聹\0聽\0聿\0肄\0肆\0肅\0肛\0肓\0肚\0肭\0冐\0肬\0胛\0胥\0胙\0胝\0胄\0胚\0胖\0脉\0胯\0胱\0脛\0脩\0脣\0脯\0腋\0" +
2109: "隋\0腆\0脾\0腓\0腑\0胼\0腱\0腮\0腥\0腦\0腴\0膃\0膈\0膊\0膀\0膂\0膠\0膕\0膤\0膣\0腟\0膓\0膩\0膰\0膵\0膾\0膸\0膽\0臀\0臂\0膺\0臉\0臍\0臑\0臙\0臘\0臈\0臚\0臟\0臠\0臧\0臺\0臻\0臾\0舁\0舂\0舅\0與\0舊\0舍\0舐\0舖\0舩\0舫\0舸\0舳\0艀\0艙\0艘\0艝\0艚\0艟\0艤\0艢\0艨\0艪\0艫\0舮\0艱\0艷\0艸\0艾\0芍\0芒\0芫\0芟\0芻\0芬\0苡\0苣\0苟\0苒\0苴\0苳\0苺\0莓\0范\0苻\0苹\0苞\0茆\0苜\0茉\0苙\0" +
2110: "茵\0茴\0茖\0茲\0茱\0荀\0茹\0荐\0荅\0茯\0茫\0茗\0茘\0莅\0莚\0莪\0莟\0莢\0莖\0茣\0莎\0莇\0莊\0荼\0莵\0荳\0荵\0莠\0莉\0莨\0菴\0萓\0菫\0菎\0菽\0萃\0菘\0萋\0菁\0菷\0萇\0菠\0菲\0萍\0萢\0萠\0莽\0萸\0蔆\0菻\0葭\0萪\0萼\0蕚\0蒄\0葷\0葫\0蒭\0葮\0蒂\0葩\0葆\0萬\0葯\0葹\0萵\0蓊\0葢\0蒹\0蒿\0蒟\0蓙\0蓍\0蒻\0蓚\0蓐\0蓁\0蓆\0蓖\0蒡\0蔡\0蓿\0蓴\0蔗\0蔘\0蔬\0蔟\0蔕\0蔔\0蓼\0蕀\0蕣\0蕘\0蕈\0" +
2111: "蕁\0蘂\0蕋\0蕕\0薀\0薤\0薈\0薑\0薊\0薨\0蕭\0薔\0薛\0藪\0薇\0薜\0蕷\0蕾\0薐\0藉\0薺\0藏\0薹\0藐\0藕\0藝\0藥\0藜\0藹\0蘊\0蘓\0蘋\0藾\0藺\0蘆\0蘢\0蘚\0蘰\0蘿\0虍\0乕\0虔\0號\0虧\0虱\0蚓\0蚣\0蚩\0蚪\0蚋\0蚌\0蚶\0蚯\0蛄\0蛆\0蚰\0蛉\0蠣\0蚫\0蛔\0蛞\0蛩\0蛬\0蛟\0蛛\0蛯\0蜒\0蜆\0蜈\0蜀\0蜃\0蛻\0蜑\0蜉\0蜍\0蛹\0蜊\0蜴\0蜿\0蜷\0蜻\0蜥\0蜩\0蜚\0蝠\0蝟\0蝸\0蝌\0蝎\0蝴\0蝗\0蝨\0蝮\0蝙\0" +
2112: "蝓\0蝣\0蝪\0蠅\0螢\0螟\0螂\0螯\0蟋\0螽\0蟀\0蟐\0雖\0螫\0蟄\0螳\0蟇\0蟆\0螻\0蟯\0蟲\0蟠\0蠏\0蠍\0蟾\0蟶\0蟷\0蠎\0蟒\0蠑\0蠖\0蠕\0蠢\0蠡\0蠱\0蠶\0蠹\0蠧\0蠻\0衄\0衂\0衒\0衙\0衞\0衢\0衫\0袁\0衾\0袞\0衵\0衽\0袵\0衲\0袂\0袗\0袒\0袮\0袙\0袢\0袍\0袤\0袰\0袿\0袱\0裃\0裄\0裔\0裘\0裙\0裝\0裹\0褂\0裼\0裴\0裨\0裲\0褄\0褌\0褊\0褓\0襃\0褞\0褥\0褪\0褫\0襁\0襄\0褻\0褶\0褸\0襌\0褝\0襠\0襞\0" +
2113: "襦\0襤\0襭\0襪\0襯\0襴\0襷\0襾\0覃\0覈\0覊\0覓\0覘\0覡\0覩\0覦\0覬\0覯\0覲\0覺\0覽\0覿\0觀\0觚\0觜\0觝\0觧\0觴\0觸\0訃\0訖\0訐\0訌\0訛\0訝\0訥\0訶\0詁\0詛\0詒\0詆\0詈\0詼\0詭\0詬\0詢\0誅\0誂\0誄\0誨\0誡\0誑\0誥\0誦\0誚\0誣\0諄\0諍\0諂\0諚\0諫\0諳\0諧\0諤\0諱\0謔\0諠\0諢\0諷\0諞\0諛\0謌\0謇\0謚\0諡\0謖\0謐\0謗\0謠\0謳\0鞫\0謦\0謫\0謾\0謨\0譁\0譌\0譏\0譎\0證\0譖\0譛\0譚\0譫\0" +
2114: "譟\0譬\0譯\0譴\0譽\0讀\0讌\0讎\0讒\0讓\0讖\0讙\0讚\0谺\0豁\0谿\0豈\0豌\0豎\0豐\0豕\0豢\0豬\0豸\0豺\0貂\0貉\0貅\0貊\0貍\0貎\0貔\0豼\0貘\0戝\0貭\0貪\0貽\0貲\0貳\0貮\0貶\0賈\0賁\0賤\0賣\0賚\0賽\0賺\0賻\0贄\0贅\0贊\0贇\0贏\0贍\0贐\0齎\0贓\0賍\0贔\0贖\0赧\0赭\0赱\0赳\0趁\0趙\0跂\0趾\0趺\0跏\0跚\0跖\0跌\0跛\0跋\0跪\0跫\0跟\0跣\0跼\0踈\0踉\0跿\0踝\0踞\0踐\0踟\0蹂\0踵\0踰\0踴\0蹊\0" +
2115: "蹇\0蹉\0蹌\0蹐\0蹈\0蹙\0蹤\0蹠\0踪\0蹣\0蹕\0蹶\0蹲\0蹼\0躁\0躇\0躅\0躄\0躋\0躊\0躓\0躑\0躔\0躙\0躪\0躡\0躬\0躰\0軆\0躱\0躾\0軅\0軈\0軋\0軛\0軣\0軼\0軻\0軫\0軾\0輊\0輅\0輕\0輒\0輙\0輓\0輜\0輟\0輛\0輌\0輦\0輳\0輻\0輹\0轅\0轂\0輾\0轌\0轉\0轆\0轎\0轗\0轜\0轢\0轣\0轤\0辜\0辟\0辣\0辭\0辯\0辷\0迚\0迥\0迢\0迪\0迯\0邇\0迴\0逅\0迹\0迺\0逑\0逕\0逡\0逍\0逞\0逖\0逋\0逧\0逶\0逵\0逹\0迸\0" +
2116: "遏\0遐\0遑\0遒\0逎\0遉\0逾\0遖\0遘\0遞\0遨\0遯\0遶\0隨\0遲\0邂\0遽\0邁\0邀\0邊\0邉\0邏\0邨\0邯\0邱\0邵\0郢\0郤\0扈\0郛\0鄂\0鄒\0鄙\0鄲\0鄰\0酊\0酖\0酘\0酣\0酥\0酩\0酳\0酲\0醋\0醉\0醂\0醢\0醫\0醯\0醪\0醵\0醴\0醺\0釀\0釁\0釉\0釋\0釐\0釖\0釟\0釡\0釛\0釼\0釵\0釶\0鈞\0釿\0鈔\0鈬\0鈕\0鈑\0鉞\0鉗\0鉅\0鉉\0鉤\0鉈\0銕\0鈿\0鉋\0鉐\0銜\0銖\0銓\0銛\0鉚\0鋏\0銹\0銷\0鋩\0錏\0鋺\0鍄\0錮\0" +
2117: "錙\0錢\0錚\0錣\0錺\0錵\0錻\0鍜\0鍠\0鍼\0鍮\0鍖\0鎰\0鎬\0鎭\0鎔\0鎹\0鏖\0鏗\0鏨\0鏥\0鏘\0鏃\0鏝\0鏐\0鏈\0鏤\0鐚\0鐔\0鐓\0鐃\0鐇\0鐐\0鐶\0鐫\0鐵\0鐡\0鐺\0鑁\0鑒\0鑄\0鑛\0鑠\0鑢\0鑞\0鑪\0鈩\0鑰\0鑵\0鑷\0鑽\0鑚\0鑼\0鑾\0钁\0鑿\0閂\0閇\0閊\0閔\0閖\0閘\0閙\0閠\0閨\0閧\0閭\0閼\0閻\0閹\0閾\0闊\0濶\0闃\0闍\0闌\0闕\0闔\0闖\0關\0闡\0闥\0闢\0阡\0阨\0阮\0阯\0陂\0陌\0陏\0陋\0陷\0陜\0陞\0" +
2118: "陝\0陟\0陦\0陲\0陬\0隍\0隘\0隕\0隗\0險\0隧\0隱\0隲\0隰\0隴\0隶\0隸\0隹\0雎\0雋\0雉\0雍\0襍\0雜\0霍\0雕\0雹\0霄\0霆\0霈\0霓\0霎\0霑\0霏\0霖\0霙\0霤\0霪\0霰\0霹\0霽\0霾\0靄\0靆\0靈\0靂\0靉\0靜\0靠\0靤\0靦\0靨\0勒\0靫\0靱\0靹\0鞅\0靼\0鞁\0靺\0鞆\0鞋\0鞏\0鞐\0鞜\0鞨\0鞦\0鞣\0鞳\0鞴\0韃\0韆\0韈\0韋\0韜\0韭\0齏\0韲\0竟\0韶\0韵\0頏\0頌\0頸\0頤\0頡\0頷\0頽\0顆\0顏\0顋\0顫\0顯\0顰\0" +
2119: "顱\0顴\0顳\0颪\0颯\0颱\0颶\0飄\0飃\0飆\0飩\0飫\0餃\0餉\0餒\0餔\0餘\0餡\0餝\0餞\0餤\0餠\0餬\0餮\0餽\0餾\0饂\0饉\0饅\0饐\0饋\0饑\0饒\0饌\0饕\0馗\0馘\0馥\0馭\0馮\0馼\0駟\0駛\0駝\0駘\0駑\0駭\0駮\0駱\0駲\0駻\0駸\0騁\0騏\0騅\0駢\0騙\0騫\0騷\0驅\0驂\0驀\0驃\0騾\0驕\0驍\0驛\0驗\0驟\0驢\0驥\0驤\0驩\0驫\0驪\0骭\0骰\0骼\0髀\0髏\0髑\0髓\0體\0髞\0髟\0髢\0髣\0髦\0髯\0髫\0髮\0髴\0髱\0髷\0" +
2120: "髻\0鬆\0鬘\0鬚\0鬟\0鬢\0鬣\0鬥\0鬧\0鬨\0鬩\0鬪\0鬮\0鬯\0鬲\0魄\0魃\0魏\0魍\0魎\0魑\0魘\0魴\0鮓\0鮃\0鮑\0鮖\0鮗\0鮟\0鮠\0鮨\0鮴\0鯀\0鯊\0鮹\0鯆\0鯏\0鯑\0鯒\0鯣\0鯢\0鯤\0鯔\0鯡\0鰺\0鯲\0鯱\0鯰\0鰕\0鰔\0鰉\0鰓\0鰌\0鰆\0鰈\0鰒\0鰊\0鰄\0鰮\0鰛\0鰥\0鰤\0鰡\0鰰\0鱇\0鰲\0鱆\0鰾\0鱚\0鱠\0鱧\0鱶\0鱸\0鳧\0鳬\0鳰\0鴉\0鴈\0鳫\0鴃\0鴆\0鴪\0鴦\0鶯\0鴣\0鴟\0鵄\0鴕\0鴒\0鵁\0鴿\0鴾\0鵆\0鵈\0" +
2121: "鵝\0鵞\0鵤\0鵑\0鵐\0鵙\0鵲\0鶉\0鶇\0鶫\0鵯\0鵺\0鶚\0鶤\0鶩\0鶲\0鷄\0鷁\0鶻\0鶸\0鶺\0鷆\0鷏\0鷂\0鷙\0鷓\0鷸\0鷦\0鷭\0鷯\0鷽\0鸚\0鸛\0鸞\0鹵\0鹹\0鹽\0麁\0麈\0麋\0麌\0麒\0麕\0麑\0麝\0麥\0麩\0麸\0麪\0麭\0靡\0黌\0黎\0黏\0黐\0黔\0黜\0點\0黝\0黠\0黥\0黨\0黯\0黴\0黶\0黷\0黹\0黻\0黼\0黽\0鼇\0鼈\0皷\0鼕\0鼡\0鼬\0鼾\0齊\0齒\0齔\0齣\0齟\0齠\0齡\0齦\0齧\0齬\0齪\0齷\0齲\0齶\0龕\0龜\0龠\0" +
2122: "堯\0槇\0遙\0瑤\0\u51dc\0\u7199\0\u5653\0\u5de2\0\u5e14\0\u5e18\0\u5e58\0\u5e5e\0\u5ebe\0\uf928\0\u5ecb\0\u5ef9\0\u5f00\0\u5f02\0\u5f07\0\u5f1d\0\u5f23\0\u5f34\0\u5f36\0\u5f3d\0\u5f40\0\u5f45\0\u5f54\0\u5f58\0\u5f64\0\u5f67\0\u5f7d\0\u5f89\0\u5f9c\0\u5fa7\0\u5faf\0\u5fb5\0\u5fb7\0\u5fc9\0\u5fde\0\u5fe1\0\u5fe9\0\u600d\0\u6014\0\u6018\0\u6033\0\u6035\0\u6047\0\ufa3d\0\u609d\0\u609e\0\u60cb\0\u60d4\0\u60d5\0\u60dd\0\u60f8\0\u611c\0\u612b\0\u6130\0\u6137\0\ufa3e\0\u618d\0\ufa3f\0\u61bc\0\u61b9\0\ufa40\0\u6222\0\u623e\0\u6243\0\u6256\0\u625a\0\u626f\0\u6285\0\u62c4\0\u62d6\0\u62fc\0\u630a\0\u6318\0\u6339\0\u6343\0\u6365\0\u637c\0\u63e5\0\u63ed\0\u63f5\0\u6410\0\u6414\0\u6422\0\u6479\0\u6451\0\u6460\0\u646d\0\u64ce\0\u64be\0\u64bf\0" +
2123: "\u64c4\0\u64ca\0\u64d0\0\u64f7\0\u64fb\0\u6522\0\u6529\0\ufa41\0\u6567\0\u659d\0\ufa42\0\u6600\0\u6609\0\u6615\0\u661e\0\u663a\0\u6622\0\u6624\0\u662b\0\u6630\0\u6631\0\u6633\0\u66fb\0\u6648\0\u664c\0\u0082\u01c4\u6659\0\u665a\0\u6661\0\u6665\0\u6673\0\u6677\0\u6678\0\u668d\0\ufa43\0\u66a0\0\u66b2\0\u66bb\0\u66c6\0\u66c8\0\u3b22\0\u66db\0\u66e8\0\u66fa\0\u6713\0\uf929\0\u6733\0\u6766\0\u6747\0\u6748\0\u677b\0\u6781\0\u6793\0\u6798\0\u679b\0\u67bb\0\u67f9\0\u67c0\0\u67d7\0\u67fc\0\u6801\0\u6852\0\u681d\0\u682c\0\u6831\0\u685b\0\u6872\0\u6875\0\ufa44\0\u68a3\0\u68a5\0\u68b2\0\u68c8\0\u68d0\0\u68e8\0\u68ed\0\u68f0\0\u68f1\0\u68fc\0\u690a\0\u6949\0\u0083\u01c4\u6935\0\u6942\0\u6957\0\u6963\0\u6964\0\u6968\0\u6980\0\ufa14\0\u69a5\0\u69ad\0\u69cf\0\u3bb6\0" +
2124: "\u3bc3\0\u69e2\0\u69e9\0\u69ea\0\u69f5\0\u69f6\0\u6a0f\0\u6a15\0\u0083\u033f\u6a3b\0\u6a3e\0\u6a45\0\u6a50\0\u6a56\0\u6a5b\0\u6a6b\0\u6a73\0\u0083\u0363\u6a89\0\u6a94\0\u6a9d\0\u6a9e\0\u6aa5\0\u6ae4\0\u6ae7\0\u3c0f\0\uf91d\0\u6b1b\0\u6b1e\0\u6b2c\0\u6b35\0\u6b46\0\u6b56\0\u6b60\0\u6b65\0\u6b67\0\u6b77\0\u6b82\0\u6ba9\0\u6bad\0\uf970\0\u6bcf\0\u6bd6\0\u6bd7\0\u6bff\0\u6c05\0\u6c10\0\u6c33\0\u6c59\0\u6c5c\0\u6caa\0\u6c74\0\u6c76\0\u6c85\0\u6c86\0\u6c98\0\u6c9c\0\u6cfb\0\u6cc6\0\u6cd4\0\u6ce0\0\u6ceb\0\u6cee\0\u0085\u00fe\u6d04\0\u6d0e\0\u6d2e\0\u6d31\0\u6d39\0\u6d3f\0\u6d58\0\u6d65\0\ufa45\0\u6d82\0\u6d87\0\u6d89\0\u6d94\0\u6daa\0\u6dac\0\u6dbf\0\u6dc4\0\u6dd6\0\u6dda\0\u6ddb\0\u6ddd\0\u6dfc\0\ufa46\0\u6e34\0\u6e44\0\u6e5c\0\u6e5e\0\u6eab\0\u6eb1\0\u6ec1\0" +
2125: "\u6ec7\0\u6ece\0\u6f10\0\u6f1a\0\ufa47\0\u6f2a\0\u6f2f\0\u6f33\0\u6f51\0\u6f59\0\u6f5e\0\u6f61\0\u6f62\0\u6f7e\0\u6f88\0\u6f8c\0\u6f8d\0\u6f94\0\u6fa0\0\u6fa7\0\u6fb6\0\u6fbc\0\u6fc7\0\u6fca\0\u6ff9\0\u6ff0\0\u6ff5\0\u7005\0\u7006\0\u7028\0\u704a\0\u705d\0\u705e\0\u704e\0\u7064\0\u7075\0\u7085\0\u70a4\0\u70ab\0\u70b7\0\u70d4\0\u70d8\0\u70e4\0\u710f\0\u712b\0\u711e\0\u7120\0\u712e\0\u7130\0\u7146\0\u7147\0\u7151\0\ufa48\0\u7152\0\u715c\0\u7160\0\u7168\0\ufa15\0\u7185\0\u7187\0\u7192\0\u71c1\0\u71ba\0\u71c4\0\u71fe\0\u7200\0\u7215\0\u7255\0\u7256\0\u3e3f\0\u728d\0\u729b\0\u72be\0\u72c0\0\u72fb\0\u0087\u03f1\u7327\0\u7328\0\ufa16\0\u7350\0\u7366\0\u737c\0\u7395\0\u739f\0\u73a0\0\u73a2\0\u73a6\0\u73ab\0\u73c9\0\u73cf\0\u73d6\0\u73d9\0\u73e3\0\u73e9\0" +
2126: "\u7407\0\u740a\0\u741a\0\u741b\0\ufa4a\0\u7426\0\u7428\0\u742a\0\u742b\0\u742c\0\u742e\0\u742f\0\u7430\0\u7444\0\u7446\0\u7447\0\u744b\0\u7457\0\u7462\0\u746b\0\u746d\0\u7486\0\u7487\0\u7489\0\u7498\0\u749c\0\u749f\0\u74a3\0\u7490\0\u74a6\0\u74a8\0\u74a9\0\u74b5\0\u74bf\0\u74c8\0\u74c9\0\u74da\0\u74ff\0\u7501\0\u7517\0\u752f\0\u756f\0\u7579\0\u7592\0\u3f72\0\u75ce\0\u75e4\0\u7600\0\u7602\0\u7608\0\u7615\0\u7616\0\u7619\0\u761e\0\u762d\0\u7635\0\u7643\0\u764b\0\u7664\0\u7665\0\u766d\0\u766f\0\u7671\0\u7681\0\u769b\0\u769d\0\u769e\0\u76a6\0\u76aa\0\u76b6\0\u76c5\0\u76cc\0\u76ce\0\u76d4\0\u76e6\0\u76f1\0\u76fc\0\u770a\0\u7719\0\u7734\0\u7736\0\u7746\0\u774d\0\u774e\0\u775c\0\u775f\0\u7762\0\u777a\0\u7780\0\u7794\0\u77aa\0\u77e0\0\u782d\0\u008b\u008e" +
2127: "\u7843\0\u784e\0\u784f\0\u7851\0\u7868\0\u786e\0\ufa4b\0\u78b0\0\u008b\u010e\u78ad\0\u78e4\0\u78f2\0\u7900\0\u78f7\0\u791c\0\u792e\0\u7931\0\u7934\0\ufa4c\0\ufa4d\0\u7945\0\u7946\0\ufa4e\0\ufa4f\0\ufa50\0\u795c\0\ufa51\0\ufa19\0\ufa1a\0\u7979\0\ufa52\0\ufa53\0\ufa1b\0\u7998\0\u79b1\0\u79b8\0\u79c8\0\u79ca\0\u008b\u0371\u79d4\0\u79de\0\u79eb\0\u79ed\0\u7a03\0\ufa54\0\u7a39\0\u7a5d\0\u7a6d\0\ufa55\0\u7a85\0\u7aa0\0\u008c\u01c4\u7ab3\0\u7abb\0\u7ace\0\u7aeb\0\u7afd\0\u7b12\0\u7b2d\0\u7b3b\0\u7b47\0\u7b4e\0\u7b60\0\u7b6d\0\u7b6f\0\u7b72\0\u7b9e\0\ufa56\0\u7bd7\0\u7bd9\0\u7c01\0\u7c31\0\u7c1e\0\u7c20\0\u7c33\0\u7c36\0\u4264\0\u008d\u01a1\u7c59\0\u7c6d\0\u7c79\0\u7c8f\0\u7c94\0\u7ca0\0\u7cbc\0\u7cd5\0\u7cd9\0\u7cdd\0\u7d07\0\u7d08\0\u7d13\0\u7d1d\0\u7d23\0\u7d31\0" +
2128: "\u7d41\0\u7d48\0\u7d53\0\u7d5c\0\u7d7a\0\u7d83\0\u7d8b\0\u7da0\0\u7da6\0\u7dc2\0\u7dcc\0\u7dd6\0\u7de3\0\ufa57\0\u7e28\0\u7e08\0\u7e11\0\u7e15\0\ufa59\0\u7e47\0\u7e52\0\u7e61\0\u7e8a\0\u7e8d\0\u7f47\0\ufa5a\0\u7f91\0\u7f97\0\u7fbf\0\u7fce\0\u7fdb\0\u7fdf\0\u7fec\0\u7fee\0\u7ffa\0\ufa5b\0\u8014\0\u8026\0\u8035\0\u8037\0\u803c\0\u80ca\0\u80d7\0\u80e0\0\u80f3\0\u8118\0\u814a\0\u8160\0\u8167\0\u8168\0\u816d\0\u81bb\0\u81ca\0\u81cf\0\u81d7\0\ufa5c\0\u4453\0\u445b\0\u8260\0\u8274\0\u0090\u02ff\u828e\0\u82a1\0\u82a3\0\u82a4\0\u82a9\0\u82ae\0\u82b7\0\u82be\0\u82bf\0\u82c6\0\u82d5\0\u82fd\0\u82fe\0\u8300\0\u8301\0\u8362\0\u8322\0\u832d\0\u833a\0\u8343\0\u8347\0\u8351\0\u8355\0\u837d\0\u8386\0\u8392\0\u8398\0\u83a7\0\u83a9\0\u83bf\0\u83c0\0\u83c7\0\u83cf\0" +
2129: "\u83d1\0\u83e1\0\u83ea\0\u8401\0\u8406\0\u840a\0\ufa5f\0\u8448\0\u845f\0\u8470\0\u8473\0\u8485\0\u849e\0\u84af\0\u84b4\0\u84ba\0\u84c0\0\u84c2\0\u0091\u0240\u8532\0\u851e\0\u8523\0\u852f\0\u8559\0\u8564\0\ufa1f\0\u85ad\0\u857a\0\u858c\0\u858f\0\u85a2\0\u85b0\0\u85cb\0\u85ce\0\u85ed\0\u8612\0\u85ff\0\u8604\0\u8605\0\u8610\0\u0092\u00f4\u8618\0\u8629\0\u8638\0\u8657\0\u865b\0\uf936\0\u8662\0\u459d\0\u866c\0\u8675\0\u8698\0\u86b8\0\u86fa\0\u86fc\0\u86fd\0\u870b\0\u8771\0\u8787\0\u8788\0\u87ac\0\u87ad\0\u87b5\0\u45ea\0\u87d6\0\u87ec\0\u8806\0\u880a\0\u8810\0\u8814\0\u881f\0\u8898\0\u88aa\0\u88ca\0\u88ce\0\u0093\u0284\u88f5\0\u891c\0\ufa60\0\u8918\0\u8919\0\u891a\0\u8927\0\u8930\0\u8932\0\u8939\0\u8940\0\u8994\0\ufa61\0\u89d4\0\u89e5\0\u89f6\0\u8a12\0\u8a15\0" +
2130: "\u8a22\0\u8a37\0\u8a47\0\u8a4e\0\u8a5d\0\u8a61\0\u8a75\0\u8a79\0\u8aa7\0\u8ad0\0\u8adf\0\u8af4\0\u8af6\0\ufa22\0\ufa62\0\ufa63\0\u8b46\0\u8b54\0\u8b59\0\u8b69\0\u8b9d\0\u8c49\0\u8c68\0\ufa64\0\u8ce1\0\u8cf4\0\u8cf8\0\u8cfe\0\ufa65\0\u8d12\0\u8d1b\0\u8daf\0\u8dce\0\u8dd1\0\u8dd7\0\u8e20\0\u8e23\0\u8e3d\0\u8e70\0\u8e7b\0\u0096\u0277\u8ec0\0\u4844\0\u8efa\0\u8f1e\0\u8f2d\0\u8f36\0\u8f54\0\u0096\u03cd\u8fa6\0\u8fb5\0\u8fe4\0\u8fe8\0\u8fee\0\u9008\0\u902d\0\ufa67\0\u9088\0\u9095\0\u9097\0\u9099\0\u909b\0\u90a2\0\u90b3\0\u90be\0\u90c4\0\u90c5\0\u90c7\0\u90d7\0\u90dd\0\u90de\0\u90ef\0\u90f4\0\ufa26\0\u9114\0\u9115\0\u9116\0\u9122\0\u9123\0\u9127\0\u912f\0\u9131\0\u9134\0\u913d\0\u9148\0\u915b\0\u9183\0\u919e\0\u91ac\0\u91b1\0\u91bc\0\u91d7\0\u91fb\0\u91e4\0" +
2131: "\u91e5\0\u91ed\0\u91f1\0\u9207\0\u9210\0\u9238\0\u9239\0\u923a\0\u923c\0\u9240\0\u9243\0\u924f\0\u9278\0\u9288\0\u92c2\0\u92cb\0\u92cc\0\u92d3\0\u92e0\0\u92ff\0\u9304\0\u931f\0\u9321\0\u9325\0\u9348\0\u9349\0\u934a\0\u9364\0\u9365\0\u936a\0\u9370\0\u939b\0\u93a3\0\u93ba\0\u93c6\0\u93de\0\u93df\0\u9404\0\u93fd\0\u9433\0\u944a\0\u9463\0\u946b\0\u9471\0\u9472\0\u958e\0\u959f\0\u95a6\0\u95a9\0\u95ac\0\u95b6\0\u95bd\0\u95cb\0\u95d0\0\u95d3\0\u49b0\0\u95da\0\u95de\0\u9658\0\u9684\0\uf9dc\0\u969d\0\u96a4\0\u96a5\0\u96d2\0\u96de\0\ufa68\0\u96e9\0\u96ef\0\u9733\0\u973b\0\u974d\0\u974e\0\u974f\0\u975a\0\u976e\0\u9773\0\u9795\0\u97ae\0\u97ba\0\u97c1\0\u97c9\0\u97de\0\u97db\0\u97f4\0\ufa69\0\u980a\0\u981e\0\u982b\0\u9830\0\ufa6a\0\u9852\0\u9853\0\u9856\0" +
2132: "\u9857\0\u9859\0\u985a\0\uf9d0\0\u9865\0\u986c\0\u98ba\0\u98c8\0\u98e7\0\u9958\0\u999e\0\u9a02\0\u9a03\0\u9a24\0\u9a2d\0\u9a2e\0\u9a38\0\u9a4a\0\u9a4e\0\u9a52\0\u9ab6\0\u9ac1\0\u9ac3\0\u9ace\0\u9ad6\0\u9af9\0\u9b02\0\u9b08\0\u9b20\0\u4c17\0\u9b2d\0\u9b5e\0\u9b79\0\u9b66\0\u9b72\0\u9b75\0\u9b84\0\u9b8a\0\u9b8f\0\u9b9e\0\u9ba7\0\u9bc1\0\u9bce\0\u9be5\0\u9bf8\0\u9bfd\0\u9c00\0\u9c23\0\u9c41\0\u9c4f\0\u9c50\0\u9c53\0\u9c63\0\u9c65\0\u9c77\0\u9d1d\0\u9d1e\0\u9d43\0\u9d47\0\u9d52\0\u9d63\0\u9d70\0\u9d7c\0\u9d8a\0\u9d96\0\u9dc0\0\u9dac\0\u9dbc\0\u9dd7\0\u009e\u0190\u9de7\0\u9e07\0\u9e15\0\u9e7c\0\u9e9e\0\u9ea4\0\u9eac\0\u9eaf\0\u9eb4\0\u9eb5\0\u9ec3\0\u9ed1\0\u9f10\0\u9f39\0\u9f57\0\u9f90\0\u9f94\0\u9f97\0\u9fa2\0\u59f8\0\u5c5b\0\u5e77\0\u7626\0\u7e6b\0"
2133: ).toCharArray ();
2134:
2135: public FontPage.Han fnpHanPage;
2136:
2137: public Zen (int characterWidth, int characterHeight, String nameEn, String nameJa, String dataName, String imageName) {
2138: this (characterWidth, characterHeight, nameEn, nameJa, dataName, imageName, null, 0);
2139: }
2140: public Zen (int characterWidth, int characterHeight, String nameEn, String nameJa, String dataName, String imageName,
2141: byte[] memoryArray, int memoryAddress) {
2142: super (characterWidth, characterHeight, nameEn, nameJa, dataName, imageName,
2143: 94, 94, 77,
2144: memoryArray, memoryAddress,
2145: new char[][] { FULL_BASE });
2146: }
2147:
2148:
2149:
2150: public void setHanPage (FontPage.Han hanPage) {
2151: fnpHanPage = hanPage;
2152: fnpMaximumFontDataFileLength = hanPage.fnpBinaryBytes + fnpBinaryBytes;
2153: }
2154:
2155:
2156:
2157:
2158: @Override public boolean fnpIsFontDataFileLength (long longLength) {
2159: return (longLength == (long) fnpBinaryBytes ||
2160: longLength == (long) (fnpHanPage.fnpBinaryBytes + fnpBinaryBytes));
2161: }
2162:
2163:
2164:
2165:
2166: @Override public boolean fnpLoadFontDataArray (byte[] array, int start, int length) {
2167: if (length == fnpCharacterBytes * 94 * 77) {
2168: System.arraycopy (array, start, fnpBinaryArray, 0, fnpCharacterBytes * 94 * 8);
2169: Arrays.fill (fnpBinaryArray, fnpCharacterBytes * 94 * 8, fnpCharacterBytes * 94 * 15, (byte) 0);
2170: System.arraycopy (array, start + fnpCharacterBytes * 94 * 8, fnpBinaryArray, fnpCharacterBytes * 94 * 15, fnpCharacterBytes * 94 * 69);
2171: Arrays.fill (fnpBinaryArray, fnpCharacterBytes * 94 * 84, fnpCharacterBytes * 94 * 94, (byte) 0);
2172: } else if (length == fnpBinaryBytes) {
2173: System.arraycopy (array, start, fnpBinaryArray, 0, fnpBinaryBytes);
2174: } else if (length == fnpHanPage.fnpBinaryBytes + fnpBinaryBytes) {
2175: System.arraycopy (array, start + fnpHanPage.fnpBinaryBytes, fnpBinaryArray, 0, fnpBinaryBytes);
2176: } else {
2177: return false;
2178: }
2179: fnpBinaryToMemory ();
2180: fnpBinaryToImage ();
2181: if (!fnpReady) {
2182: System.out.println (Multilingual.mlnJapanese ? fnpNameJa + " フォントの準備ができました" :
2183: fnpNameEn + " font is ready");
2184: fnpReady = true;
2185: }
2186: return true;
2187: }
2188:
2189:
2190:
2191:
2192: @Override public byte[] fnpSaveFontDataArray () {
2193: byte[] array = new byte[fnpHanPage.fnpBinaryBytes + fnpBinaryBytes];
2194: System.arraycopy (fnpHanPage.fnpBinaryArray, 0, array, 0, fnpHanPage.fnpBinaryBytes);
2195: System.arraycopy (fnpBinaryArray, 0, array, fnpHanPage.fnpBinaryBytes, fnpBinaryBytes);
2196: return array;
2197: }
2198:
2199:
2200:
2201:
2202: @Override public String fnpGetExtension () {
2203: if (fnpExtension == null) {
2204: fnpExtension = fnpCharacterHeight == 16 ? ".fon" : ".f" + fnpCharacterHeight;
2205: }
2206: return fnpExtension;
2207: }
2208:
2209:
2210:
2211:
2212:
2213: @Override public boolean fnpInputImage (BufferedImage image) {
2214: if (image.getWidth () == fnpImageWidth &&
2215: image.getHeight () == fnpCharacterHeight * 77) {
2216: Raster raster1to8 = image.getData (new Rectangle (0, 0, fnpImageWidth, fnpCharacterHeight * 8));
2217: Raster raster16to84 = image.getData (new Rectangle (0, fnpCharacterHeight * 8, fnpImageWidth, fnpCharacterHeight * 69));
2218: raster16to84 = raster16to84.createTranslatedChild (0, fnpCharacterHeight * 15);
2219: BufferedImage newImage = new BufferedImage (fnpImageWidth, fnpImageHeight, BufferedImage.TYPE_INT_RGB);
2220: newImage.setData (raster1to8);
2221: newImage.setData (raster16to84);
2222: image = newImage;
2223: }
2224: return super.fnpInputImage (image);
2225: }
2226:
2227: }
2228:
2229:
2230:
2231:
2232:
2233: public static final class Prn extends FontPage {
2234:
2235:
2236:
2237:
2238:
2239:
2240:
2241:
2242:
2243:
2244:
2245:
2246:
2247:
2248:
2249:
2250:
2251:
2252:
2253:
2254:
2255:
2256:
2257:
2258:
2259:
2260:
2261:
2262:
2263:
2264:
2265:
2266:
2267:
2268:
2269:
2270:
2271:
2272:
2273:
2274:
2275:
2276:
2277:
2278:
2279:
2280:
2281:
2282:
2283:
2284:
2285:
2286:
2287:
2288:
2289:
2290:
2291:
2292:
2293:
2294:
2295:
2296:
2297:
2298:
2299:
2300:
2301:
2302:
2303:
2304:
2305:
2306: public static final char[] HALF_BASE = (
2307:
2308:
2309: " " +
2310: " " +
2311: " !\"#$%&'()*+,-./" +
2312: "0123456789:;<=>?" +
2313: "@ABCDEFGHIJKLMNO" +
2314: "PQRSTUVWXYZ[\u00a5]^_" +
2315: "`abcdefghijklmno" +
2316: "pqrstuvwxyz{|}\u00af " +
2317: "\u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588\u258f\u258e\u258d\u258c\u258b\u258a\u2589\u2571" +
2318: " \u256e\u2570\u256f\u256d\u2572" +
2319: " 。「」、・ヲァィゥェォャュョッ" +
2320: "ーアイウエオカキクケコサシスセソ" +
2321: "タチツテトナニヌネノハヒフヘホマ" +
2322: "ミムメモヤユヨラリルレロワン゙゚" +
2323: " \u2660\u2665\u2666\u2663\u25e2\u25e3\u2573 " +
2324: "\u2593 " +
2325:
2326:
2327: " " +
2328: " " +
2329: " !\"#$%&'()*+,-./" +
2330: "0123456789:;<=>?" +
2331: "@ABCDEFGHIJKLMNO" +
2332: "PQRSTUVWXYZ[\u00a5]^_" +
2333: "`abcdefghijklmno" +
2334: "pqrstuvwxyz{|}\u00af " +
2335: "\u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588\u258f\u258e\u258d\u258c\u258b\u258a\u2589\u2571" +
2336: " \u256e\u2570\u256f\u256d\u2572" +
2337: " " +
2338: " " +
2339: " " +
2340: " " +
2341: " \u2660\u2665\u2666\u2663\u25e2\u25e3\u2573 " +
2342: "\u2593 "
2343: ).toCharArray ();
2344:
2345:
2346: public static final char[] FULL_BASE = (
2347:
2348:
2349: " " +
2350: " " +
2351: " !”#$%&’()*+,-./" +
2352: "0123456789:;<=>?" +
2353: "@ABCDEFGHIJKLMNO" +
2354: "PQRSTUVWXYZ[¥]^_" +
2355: "`abcdefghijklmno" +
2356: "pqrstuvwxyz{|} ̄π" +
2357: " " +
2358: "─│┴┬┤├┼┐┘└┌ " +
2359: " " +
2360: " " +
2361: " " +
2362: " " +
2363: "●○ \u2598\u2596\u259d\u2597\u259e\u259a□" +
2364: " 土金木水火月日時分秒年円人生〒" +
2365:
2366:
2367: " " +
2368: " " +
2369: " !”#$%&’()*+,-./" +
2370: "0123456789:;<=>?" +
2371: "@ABCDEFGHIJKLMNO" +
2372: "PQRSTUVWXYZ[¥]^_" +
2373: "`abcdefghijklmno" +
2374: "pqrstuvwxyz{|} ̄π" +
2375: " " +
2376: "─│┴┬┤├┼┐┘└┌ " +
2377: " 。「」、・をぁぃぅぇぉゃゅょっ" +
2378: "ーあいうえおかきくけこさしすせそ" +
2379: "たちつてとなにぬねのはひふへほま" +
2380: "みむめもやゆよらりるれろわん゛゜" +
2381: "●○ \u2598\u2596\u259d\u2597\u259e\u259a□" +
2382: " 土金木水火月日時分秒年円人生〒"
2383: ).toCharArray ();
2384:
2385: public Prn (int characterWidth, int characterHeight, String nameEn, String nameJa, String dataName, String imageName) {
2386: super (characterWidth, characterHeight, nameEn, nameJa, dataName, imageName,
2387: 16, 32, 32,
2388: null, 0,
2389: new char[][] { FULL_BASE, HALF_BASE });
2390: }
2391:
2392: }
2393:
2394:
2395:
2396:
2397:
2398: public static final class Lcd extends FontPage {
2399:
2400: public Lcd (int characterWidth, int characterHeight, String nameEn, String nameJa, String dataName, String imageName) {
2401: super (characterWidth, characterHeight, nameEn, nameJa, dataName, imageName,
2402: 16, 16, 16,
2403: null, 0,
2404: new char[][] {});
2405: if (characterHeight == 6) {
2406: fnpLoadFontDataArray (LCD4X6_FONT, 0, LCD4X6_FONT.length);
2407: } else if (characterHeight == 8) {
2408: fnpLoadFontDataArray (LCD6X8_FONT, 0, LCD6X8_FONT.length);
2409: }
2410: }
2411:
2412:
2413:
2414:
2415:
2416:
2417:
2418:
2419:
2420:
2421:
2422:
2423:
2424:
2425:
2426:
2427:
2428:
2429:
2430:
2431:
2432:
2433:
2434:
2435:
2436:
2437:
2438:
2439:
2440:
2441:
2442:
2443:
2444:
2445:
2446:
2447:
2448:
2449:
2450:
2451:
2452:
2453:
2454:
2455:
2456:
2457:
2458:
2459:
2460:
2461:
2462:
2463:
2464:
2465:
2466:
2467:
2468:
2469:
2470:
2471:
2472:
2473:
2474:
2475:
2476:
2477:
2478:
2479:
2480:
2481:
2482:
2483:
2484:
2485:
2486:
2487:
2488:
2489:
2490:
2491:
2492:
2493:
2494:
2495:
2496:
2497:
2498:
2499:
2500:
2501:
2502:
2503:
2504:
2505:
2506:
2507:
2508:
2509:
2510:
2511:
2512:
2513:
2514:
2515:
2516:
2517:
2518:
2519:
2520:
2521:
2522:
2523:
2524:
2525:
2526:
2527:
2528:
2529:
2530:
2531:
2532:
2533:
2534:
2535:
2536:
2537:
2538:
2539:
2540:
2541:
2542:
2543:
2544:
2545:
2546:
2547:
2548:
2549:
2550:
2551:
2552:
2553:
2554:
2555:
2556:
2557:
2558:
2559:
2560:
2561:
2562:
2563:
2564:
2565:
2566:
2567:
2568:
2569:
2570:
2571:
2572:
2573:
2574:
2575:
2576:
2577:
2578:
2579:
2580:
2581:
2582:
2583:
2584:
2585:
2586:
2587:
2588:
2589:
2590:
2591:
2592:
2593:
2594:
2595:
2596:
2597:
2598:
2599:
2600:
2601:
2602:
2603:
2604:
2605:
2606:
2607:
2608:
2609:
2610:
2611:
2612:
2613:
2614:
2615:
2616:
2617:
2618:
2619:
2620:
2621:
2622:
2623:
2624:
2625:
2626:
2627:
2628:
2629:
2630:
2631:
2632:
2633:
2634:
2635:
2636:
2637:
2638:
2639:
2640:
2641:
2642:
2643:
2644:
2645:
2646:
2647:
2648:
2649:
2650:
2651:
2652:
2653:
2654:
2655:
2656:
2657:
2658:
2659:
2660:
2661:
2662:
2663:
2664:
2665:
2666:
2667:
2668:
2669:
2670:
2671:
2672:
2673:
2674:
2675:
2676:
2677:
2678:
2679:
2680:
2681:
2682:
2683:
2684:
2685:
2686:
2687:
2688:
2689:
2690:
2691:
2692:
2693:
2694:
2695:
2696:
2697:
2698:
2699:
2700:
2701:
2702:
2703:
2704:
2705:
2706:
2707:
2708:
2709:
2710:
2711:
2712:
2713:
2714:
2715:
2716:
2717:
2718:
2719:
2720:
2721:
2722:
2723:
2724:
2725:
2726:
2727:
2728:
2729:
2730:
2731:
2732:
2733:
2734:
2735:
2736:
2737:
2738:
2739:
2740:
2741:
2742:
2743:
2744:
2745:
2746:
2747:
2748:
2749:
2750:
2751:
2752:
2753:
2754:
2755:
2756:
2757:
2758:
2759:
2760:
2761:
2762:
2763:
2764:
2765:
2766:
2767:
2768:
2769:
2770:
2771:
2772:
2773:
2774:
2775:
2776:
2777:
2778:
2779:
2780:
2781:
2782:
2783:
2784:
2785:
2786:
2787:
2788:
2789:
2790:
2791:
2792:
2793:
2794:
2795:
2796:
2797:
2798:
2799:
2800:
2801:
2802:
2803:
2804:
2805:
2806:
2807:
2808:
2809:
2810:
2811:
2812:
2813:
2814:
2815:
2816:
2817:
2818:
2819:
2820:
2821:
2822:
2823:
2824:
2825:
2826:
2827:
2828:
2829:
2830:
2831:
2832:
2833:
2834:
2835:
2836:
2837:
2838:
2839:
2840:
2841:
2842:
2843:
2844:
2845:
2846:
2847:
2848:
2849:
2850:
2851:
2852:
2853:
2854:
2855:
2856:
2857:
2858:
2859:
2860:
2861:
2862:
2863:
2864:
2865:
2866:
2867:
2868:
2869:
2870:
2871:
2872:
2873:
2874:
2875:
2876:
2877:
2878:
2879:
2880:
2881:
2882:
2883:
2884:
2885:
2886:
2887:
2888:
2889:
2890:
2891:
2892:
2893:
2894:
2895:
2896:
2897:
2898:
2899:
2900:
2901:
2902:
2903:
2904:
2905:
2906:
2907:
2908:
2909:
2910:
2911:
2912:
2913:
2914:
2915:
2916:
2917:
2918:
2919:
2920:
2921:
2922:
2923:
2924:
2925:
2926:
2927:
2928:
2929:
2930:
2931:
2932:
2933:
2934:
2935:
2936:
2937:
2938:
2939:
2940:
2941:
2942:
2943:
2944:
2945:
2946:
2947:
2948:
2949:
2950:
2951:
2952:
2953:
2954:
2955:
2956:
2957:
2958:
2959:
2960:
2961:
2962:
2963:
2964:
2965:
2966:
2967:
2968:
2969:
2970:
2971:
2972:
2973:
2974:
2975:
2976:
2977:
2978:
2979:
2980:
2981:
2982:
2983:
2984:
2985:
2986:
2987:
2988:
2989:
2990:
2991:
2992:
2993:
2994:
2995:
2996:
2997:
2998:
2999:
3000:
3001:
3002:
3003:
3004:
3005:
3006:
3007:
3008:
3009:
3010:
3011:
3012:
3013:
3014:
3015:
3016:
3017:
3018:
3019:
3020:
3021:
3022:
3023:
3024:
3025:
3026:
3027:
3028:
3029:
3030:
3031:
3032:
3033:
3034:
3035:
3036:
3037:
3038:
3039:
3040:
3041:
3042:
3043:
3044:
3045:
3046:
3047:
3048:
3049:
3050:
3051:
3052:
3053:
3054:
3055:
3056:
3057:
3058:
3059:
3060:
3061:
3062:
3063:
3064:
3065:
3066:
3067:
3068:
3069:
3070:
3071:
3072:
3073:
3074:
3075:
3076:
3077:
3078:
3079:
3080:
3081:
3082:
3083:
3084:
3085:
3086:
3087:
3088:
3089:
3090:
3091:
3092:
3093:
3094:
3095:
3096:
3097:
3098:
3099:
3100:
3101:
3102:
3103:
3104:
3105:
3106:
3107:
3108:
3109:
3110:
3111:
3112:
3113:
3114:
3115:
3116:
3117:
3118:
3119:
3120:
3121:
3122:
3123:
3124:
3125:
3126:
3127:
3128:
3129:
3130:
3131:
3132:
3133:
3134:
3135:
3136:
3137:
3138:
3139:
3140:
3141:
3142:
3143:
3144:
3145:
3146:
3147:
3148:
3149:
3150:
3151:
3152:
3153:
3154:
3155:
3156:
3157:
3158:
3159:
3160:
3161:
3162:
3163:
3164:
3165:
3166:
3167:
3168:
3169:
3170:
3171:
3172:
3173:
3174:
3175:
3176:
3177:
3178:
3179:
3180:
3181:
3182:
3183:
3184:
3185:
3186:
3187:
3188:
3189:
3190:
3191:
3192:
3193:
3194:
3195:
3196:
3197:
3198:
3199:
3200:
3201:
3202:
3203:
3204:
3205:
3206:
3207:
3208:
3209:
3210:
3211:
3212:
3213:
3214:
3215:
3216:
3217:
3218:
3219:
3220:
3221:
3222:
3223:
3224:
3225:
3226:
3227:
3228:
3229:
3230:
3231:
3232:
3233:
3234:
3235:
3236:
3237:
3238:
3239:
3240:
3241:
3242:
3243:
3244:
3245:
3246:
3247:
3248:
3249:
3250:
3251:
3252:
3253:
3254:
3255:
3256:
3257:
3258:
3259:
3260:
3261:
3262:
3263:
3264:
3265:
3266:
3267:
3268:
3269:
3270:
3271:
3272:
3273:
3274:
3275:
3276:
3277:
3278:
3279:
3280:
3281:
3282:
3283:
3284:
3285:
3286:
3287:
3288:
3289:
3290:
3291:
3292:
3293:
3294:
3295:
3296:
3297:
3298:
3299:
3300:
3301:
3302:
3303:
3304:
3305:
3306:
3307:
3308:
3309:
3310:
3311:
3312:
3313:
3314:
3315:
3316:
3317:
3318:
3319:
3320:
3321:
3322:
3323:
3324:
3325:
3326:
3327:
3328:
3329:
3330:
3331:
3332:
3333:
3334:
3335:
3336:
3337:
3338:
3339:
3340:
3341:
3342:
3343:
3344:
3345:
3346:
3347:
3348:
3349:
3350:
3351:
3352:
3353:
3354:
3355:
3356:
3357:
3358:
3359:
3360:
3361:
3362:
3363:
3364:
3365:
3366:
3367:
3368:
3369:
3370:
3371:
3372:
3373:
3374:
3375:
3376:
3377:
3378:
3379:
3380:
3381:
3382:
3383:
3384:
3385:
3386:
3387:
3388:
3389:
3390:
3391:
3392:
3393:
3394:
3395:
3396:
3397:
3398:
3399:
3400:
3401:
3402:
3403:
3404:
3405:
3406:
3407:
3408:
3409:
3410:
3411:
3412:
3413:
3414:
3415:
3416:
3417:
3418:
3419:
3420:
3421:
3422:
3423:
3424:
3425:
3426:
3427:
3428:
3429:
3430:
3431:
3432:
3433:
3434:
3435:
3436:
3437:
3438:
3439:
3440:
3441:
3442:
3443:
3444:
3445:
3446:
3447:
3448:
3449:
3450:
3451:
3452:
3453:
3454:
3455:
3456:
3457:
3458:
3459:
3460:
3461:
3462:
3463:
3464:
3465:
3466:
3467:
3468:
3469:
3470:
3471:
3472:
3473:
3474:
3475:
3476:
3477:
3478:
3479:
3480:
3481:
3482:
3483:
3484:
3485:
3486:
3487:
3488:
3489:
3490:
3491:
3492:
3493:
3494:
3495:
3496:
3497:
3498:
3499:
3500:
3501:
3502:
3503:
3504:
3505:
3506:
3507:
3508:
3509:
3510:
3511:
3512:
3513:
3514:
3515:
3516:
3517:
3518:
3519:
3520:
3521:
3522:
3523:
3524:
3525:
3526:
3527:
3528:
3529:
3530:
3531:
3532:
3533:
3534:
3535:
3536:
3537:
3538:
3539:
3540:
3541:
3542:
3543:
3544:
3545:
3546:
3547:
3548:
3549:
3550:
3551:
3552:
3553:
3554:
3555:
3556:
3557:
3558:
3559:
3560:
3561:
3562:
3563:
3564:
3565:
3566:
3567:
3568:
3569:
3570:
3571:
3572:
3573:
3574:
3575:
3576:
3577:
3578:
3579:
3580:
3581:
3582:
3583:
3584:
3585:
3586:
3587:
3588:
3589:
3590:
3591:
3592:
3593:
3594:
3595:
3596:
3597:
3598:
3599:
3600:
3601:
3602:
3603:
3604:
3605:
3606:
3607:
3608:
3609:
3610:
3611:
3612:
3613:
3614:
3615:
3616:
3617:
3618:
3619:
3620:
3621:
3622:
3623:
3624:
3625:
3626:
3627:
3628:
3629:
3630:
3631:
3632:
3633:
3634:
3635:
3636:
3637:
3638:
3639:
3640:
3641:
3642:
3643:
3644:
3645:
3646:
3647:
3648:
3649:
3650:
3651:
3652:
3653:
3654:
3655:
3656:
3657:
3658:
3659:
3660:
3661:
3662:
3663:
3664:
3665:
3666:
3667:
3668:
3669:
3670:
3671:
3672:
3673:
3674:
3675:
3676:
3677:
3678:
3679:
3680:
3681:
3682:
3683:
3684:
3685:
3686:
3687:
3688:
3689:
3690:
3691:
3692:
3693:
3694:
3695:
3696:
3697:
3698:
3699:
3700:
3701:
3702:
3703:
3704:
3705:
3706:
3707:
3708:
3709:
3710:
3711:
3712:
3713:
3714:
3715:
3716:
3717:
3718:
3719:
3720:
3721:
3722:
3723:
3724:
3725:
3726:
3727:
3728:
3729:
3730:
3731:
3732:
3733:
3734:
3735:
3736:
3737:
3738:
3739:
3740:
3741:
3742:
3743:
3744:
3745:
3746:
3747:
3748:
3749:
3750:
3751:
3752:
3753:
3754:
3755:
3756:
3757:
3758:
3759:
3760:
3761:
3762:
3763:
3764:
3765:
3766:
3767:
3768:
3769:
3770:
3771:
3772:
3773:
3774:
3775:
3776:
3777:
3778:
3779:
3780:
3781:
3782:
3783:
3784:
3785:
3786:
3787:
3788:
3789:
3790:
3791:
3792:
3793:
3794:
3795:
3796:
3797:
3798:
3799:
3800:
3801:
3802:
3803:
3804:
3805:
3806:
3807:
3808:
3809:
3810:
3811:
3812:
3813:
3814:
3815:
3816:
3817:
3818:
3819:
3820:
3821:
3822:
3823:
3824:
3825:
3826:
3827:
3828:
3829:
3830:
3831:
3832:
3833:
3834:
3835:
3836:
3837:
3838:
3839:
3840:
3841:
3842:
3843:
3844:
3845:
3846:
3847:
3848:
3849:
3850:
3851:
3852:
3853:
3854:
3855:
3856:
3857:
3858:
3859:
3860:
3861:
3862:
3863:
3864:
3865:
3866:
3867:
3868:
3869:
3870:
3871:
3872:
3873:
3874:
3875:
3876:
3877:
3878:
3879:
3880:
3881:
3882:
3883:
3884:
3885:
3886:
3887:
3888:
3889:
3890:
3891:
3892:
3893:
3894:
3895:
3896:
3897:
3898:
3899:
3900:
3901:
3902:
3903:
3904:
3905:
3906:
3907:
3908:
3909:
3910:
3911:
3912:
3913:
3914:
3915:
3916:
3917:
3918:
3919:
3920:
3921:
3922:
3923:
3924:
3925:
3926:
3927:
3928:
3929:
3930:
3931:
3932:
3933:
3934:
3935:
3936:
3937:
3938:
3939:
3940:
3941:
3942:
3943:
3944:
3945:
3946:
3947:
3948:
3949:
3950:
3951:
3952:
3953:
3954:
3955:
3956:
3957:
3958:
3959:
3960:
3961:
3962:
3963:
3964:
3965:
3966:
3967:
3968:
3969:
3970:
3971:
3972:
3973:
3974:
3975:
3976:
3977:
3978:
3979:
3980:
3981:
3982:
3983:
3984:
3985:
3986:
3987:
3988:
3989:
3990:
3991:
3992:
3993:
3994:
3995:
3996:
3997:
3998:
3999:
4000:
4001:
4002:
4003:
4004:
4005:
4006:
4007:
4008:
4009:
4010:
4011:
4012:
4013:
4014:
4015:
4016:
4017:
4018:
4019:
4020:
4021:
4022:
4023:
4024:
4025:
4026:
4027:
4028:
4029:
4030:
4031:
4032:
4033:
4034:
4035:
4036:
4037:
4038:
4039:
4040:
4041:
4042:
4043:
4044:
4045:
4046:
4047:
4048:
4049:
4050:
4051:
4052:
4053:
4054:
4055:
4056:
4057:
4058:
4059:
4060:
4061:
4062:
4063:
4064:
4065:
4066:
4067:
4068:
4069:
4070:
4071:
4072:
4073:
4074:
4075:
4076:
4077:
4078:
4079:
4080:
4081:
4082:
4083:
4084:
4085:
4086:
4087:
4088:
4089:
4090:
4091:
4092:
4093:
4094:
4095:
4096:
4097:
4098:
4099:
4100:
4101:
4102:
4103:
4104:
4105:
4106:
4107:
4108:
4109:
4110:
4111:
4112:
4113:
4114:
4115:
4116:
4117:
4118:
4119:
4120:
4121:
4122:
4123:
4124:
4125:
4126:
4127:
4128:
4129:
4130:
4131:
4132:
4133:
4134:
4135:
4136:
4137:
4138:
4139:
4140:
4141:
4142:
4143:
4144:
4145:
4146:
4147:
4148:
4149:
4150:
4151:
4152:
4153:
4154:
4155:
4156:
4157:
4158:
4159:
4160:
4161:
4162:
4163:
4164:
4165:
4166:
4167:
4168:
4169:
4170:
4171:
4172:
4173:
4174:
4175:
4176:
4177:
4178:
4179:
4180:
4181:
4182:
4183:
4184:
4185:
4186:
4187:
4188:
4189:
4190:
4191:
4192:
4193:
4194:
4195:
4196:
4197:
4198:
4199:
4200:
4201:
4202:
4203:
4204:
4205:
4206:
4207:
4208:
4209:
4210: public static final byte[] LCD4X6_FONT = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@@\0@\0\240\240\0\0\0\0\240\340\240\340\240\0`\300@`\300\0\240\300@`\240\0\300\300@\240\300\0@@\0\0\0\0 @@@ \0\200@@@\200\0\0\240@\240\0\0\0@\340@\0\0\0\0\0@@\0\0\0\340\0\0\0\0\0\0\0@\0\0 @\200\0\0\340\240\240\240\340\0@@@@@\0\340 \340\200\340\0\340 \340 \340\0\240\240\340 \0\340\200\340 \340\0\340\200\340\240\340\0\340 \0\340\240\340\240\340\0\340\240\340 \340\0\0@\0@\0\0\0@\0@@\0 @\200@ \0\0\340\0\340\0\0\200@ @\200\0\300 @\0@\0@\240\340\200`\0@\240\340\240\240\0\300\240\300\240\300\0`\200\200\200`\0\300\240\240\240\300\0\340\200\340\200\340\0\340\200\340\200\200\0`\200\240\240`\0\240\240\340\240\240\0\340@@@\340\0 \300\0\240\240\300\240\240\0\200\200\200\200\340\0\240\340\340\240\240\0\300\240\240\240\240\0@\240\240\240@\0\300\240\300\200\200\0@\240\240\340`\0\300\240\300\240\240\0`\200@ \300\0\340@@@@\0\240\240\240\240\340\0\240\240\240\240@\0\240\240\340\340\240\0\240\240@\240\240\0\240\240@@@\0\340 @\200\340\0`@@@`\0\0\200@ \0\0\300@@@\300\0@\240\0\0\0\0\0\0\0\0\340\0@ \0\0\0\0\0`\240\240`\0\200\300\240\240\300\0\0`\200\200`\0 `\240\240`\0\0`\240\300`\0`\340@@@\0`\240\340 \300\0\200\300\240\240\240\0@\0@@@\0 \0 \300\0\200\240\300\300\240\0\300@@@@\0\0\300\340\340\240\0\0\300\240\240\240\0\0@\240\240@\0\0\300\240\300\200\0\0`\240` \0\0`\200\200\200\0\0`@ \300\0@\340@@ \0\0\240\240\240`\0\0\240\240\240@\0\0\240\340\340`\0\0\240@@\240\0\0\240\240@\200\0\0\340 @\340\0 @\300@ \0@@\0@@\0\200@`@\200\0\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0".getBytes (XEiJ.ISO_8859_1);
4211:
4212:
4213:
4214:
4215:
4216:
4217:
4218:
4219:
4220:
4221:
4222:
4223:
4224:
4225:
4226:
4227:
4228:
4229:
4230:
4231:
4232:
4233:
4234:
4235:
4236:
4237:
4238:
4239:
4240:
4241:
4242:
4243:
4244:
4245:
4246:
4247:
4248:
4249:
4250:
4251:
4252:
4253:
4254:
4255:
4256:
4257:
4258:
4259:
4260:
4261:
4262:
4263:
4264:
4265:
4266:
4267:
4268:
4269:
4270:
4271:
4272:
4273:
4274:
4275:
4276:
4277:
4278:
4279:
4280:
4281:
4282:
4283:
4284:
4285:
4286:
4287:
4288:
4289:
4290:
4291:
4292:
4293:
4294:
4295:
4296:
4297:
4298:
4299:
4300:
4301:
4302:
4303:
4304:
4305:
4306:
4307:
4308:
4309:
4310:
4311:
4312:
4313:
4314:
4315:
4316:
4317:
4318:
4319:
4320:
4321:
4322:
4323:
4324:
4325:
4326:
4327:
4328:
4329:
4330:
4331:
4332:
4333:
4334:
4335:
4336:
4337:
4338:
4339:
4340:
4341:
4342:
4343:
4344:
4345:
4346:
4347:
4348:
4349:
4350:
4351:
4352:
4353:
4354:
4355:
4356:
4357:
4358:
4359:
4360:
4361:
4362:
4363:
4364:
4365:
4366:
4367:
4368:
4369:
4370:
4371:
4372:
4373:
4374:
4375:
4376:
4377:
4378:
4379:
4380:
4381:
4382:
4383:
4384:
4385:
4386:
4387:
4388:
4389:
4390:
4391:
4392:
4393:
4394:
4395:
4396:
4397:
4398:
4399:
4400:
4401:
4402:
4403:
4404:
4405:
4406:
4407:
4408:
4409:
4410:
4411:
4412:
4413:
4414:
4415:
4416:
4417:
4418:
4419:
4420:
4421:
4422:
4423:
4424:
4425:
4426:
4427:
4428:
4429:
4430:
4431:
4432:
4433:
4434:
4435:
4436:
4437:
4438:
4439:
4440:
4441:
4442:
4443:
4444:
4445:
4446:
4447:
4448:
4449:
4450:
4451:
4452:
4453:
4454:
4455:
4456:
4457:
4458:
4459:
4460:
4461:
4462:
4463:
4464:
4465:
4466:
4467:
4468:
4469:
4470:
4471:
4472:
4473:
4474:
4475:
4476:
4477:
4478:
4479:
4480:
4481:
4482:
4483:
4484:
4485:
4486:
4487:
4488:
4489:
4490:
4491:
4492:
4493:
4494:
4495:
4496:
4497:
4498:
4499:
4500:
4501:
4502:
4503:
4504:
4505:
4506:
4507:
4508:
4509:
4510:
4511:
4512:
4513:
4514:
4515:
4516:
4517:
4518:
4519:
4520:
4521:
4522:
4523:
4524:
4525:
4526:
4527:
4528:
4529:
4530:
4531:
4532:
4533:
4534:
4535:
4536:
4537:
4538:
4539:
4540:
4541:
4542:
4543:
4544:
4545:
4546:
4547:
4548:
4549:
4550:
4551:
4552:
4553:
4554:
4555:
4556:
4557:
4558:
4559:
4560:
4561:
4562:
4563:
4564:
4565:
4566:
4567:
4568:
4569:
4570:
4571:
4572:
4573:
4574:
4575:
4576:
4577:
4578:
4579:
4580:
4581:
4582:
4583:
4584:
4585:
4586:
4587:
4588:
4589:
4590:
4591:
4592:
4593:
4594:
4595:
4596:
4597:
4598:
4599:
4600:
4601:
4602:
4603:
4604:
4605:
4606:
4607:
4608:
4609:
4610:
4611:
4612:
4613:
4614:
4615:
4616:
4617:
4618:
4619:
4620:
4621:
4622:
4623:
4624:
4625:
4626:
4627:
4628:
4629:
4630:
4631:
4632:
4633:
4634:
4635:
4636:
4637:
4638:
4639:
4640:
4641:
4642:
4643:
4644:
4645:
4646:
4647:
4648:
4649:
4650:
4651:
4652:
4653:
4654:
4655:
4656:
4657:
4658:
4659:
4660:
4661:
4662:
4663:
4664:
4665:
4666:
4667:
4668:
4669:
4670:
4671:
4672:
4673:
4674:
4675:
4676:
4677:
4678:
4679:
4680:
4681:
4682:
4683:
4684:
4685:
4686:
4687:
4688:
4689:
4690:
4691:
4692:
4693:
4694:
4695:
4696:
4697:
4698:
4699:
4700:
4701:
4702:
4703:
4704:
4705:
4706:
4707:
4708:
4709:
4710:
4711:
4712:
4713:
4714:
4715:
4716:
4717:
4718:
4719:
4720:
4721:
4722:
4723:
4724:
4725:
4726:
4727:
4728:
4729:
4730:
4731:
4732:
4733:
4734:
4735:
4736:
4737:
4738:
4739:
4740:
4741:
4742:
4743:
4744:
4745:
4746:
4747:
4748:
4749:
4750:
4751:
4752:
4753:
4754:
4755:
4756:
4757:
4758:
4759:
4760:
4761:
4762:
4763:
4764:
4765:
4766:
4767:
4768:
4769:
4770:
4771:
4772:
4773:
4774:
4775:
4776:
4777:
4778:
4779:
4780:
4781:
4782:
4783:
4784:
4785:
4786:
4787:
4788:
4789:
4790:
4791:
4792:
4793:
4794:
4795:
4796:
4797:
4798:
4799:
4800:
4801:
4802:
4803:
4804:
4805:
4806:
4807:
4808:
4809:
4810:
4811:
4812:
4813:
4814:
4815:
4816:
4817:
4818:
4819:
4820:
4821:
4822:
4823:
4824:
4825:
4826:
4827:
4828:
4829:
4830:
4831:
4832:
4833:
4834:
4835:
4836:
4837:
4838:
4839:
4840:
4841:
4842:
4843:
4844:
4845:
4846:
4847:
4848:
4849:
4850:
4851:
4852:
4853:
4854:
4855:
4856:
4857:
4858:
4859:
4860:
4861:
4862:
4863:
4864:
4865:
4866:
4867:
4868:
4869:
4870:
4871:
4872:
4873:
4874:
4875:
4876:
4877:
4878:
4879:
4880:
4881:
4882:
4883:
4884:
4885:
4886:
4887:
4888:
4889:
4890:
4891:
4892:
4893:
4894:
4895:
4896:
4897:
4898:
4899:
4900:
4901:
4902:
4903:
4904:
4905:
4906:
4907:
4908:
4909:
4910:
4911:
4912:
4913:
4914:
4915:
4916:
4917:
4918:
4919:
4920:
4921:
4922:
4923:
4924:
4925:
4926:
4927:
4928:
4929:
4930:
4931:
4932:
4933:
4934:
4935:
4936:
4937:
4938:
4939:
4940:
4941:
4942:
4943:
4944:
4945:
4946:
4947:
4948:
4949:
4950:
4951:
4952:
4953:
4954:
4955:
4956:
4957:
4958:
4959:
4960:
4961:
4962:
4963:
4964:
4965:
4966:
4967:
4968:
4969:
4970:
4971:
4972:
4973:
4974:
4975:
4976:
4977:
4978:
4979:
4980:
4981:
4982:
4983:
4984:
4985:
4986:
4987:
4988:
4989:
4990:
4991:
4992:
4993:
4994:
4995:
4996:
4997:
4998:
4999:
5000:
5001:
5002:
5003:
5004:
5005:
5006:
5007:
5008:
5009:
5010:
5011:
5012:
5013:
5014:
5015:
5016:
5017:
5018:
5019:
5020:
5021:
5022:
5023:
5024:
5025:
5026:
5027:
5028:
5029:
5030:
5031:
5032:
5033:
5034:
5035:
5036:
5037:
5038:
5039:
5040:
5041:
5042:
5043:
5044:
5045:
5046:
5047:
5048:
5049:
5050:
5051:
5052:
5053:
5054:
5055:
5056:
5057:
5058:
5059:
5060:
5061:
5062:
5063:
5064:
5065:
5066:
5067:
5068:
5069:
5070:
5071:
5072:
5073:
5074:
5075:
5076:
5077:
5078:
5079:
5080:
5081:
5082:
5083:
5084:
5085:
5086:
5087:
5088:
5089:
5090:
5091:
5092:
5093:
5094:
5095:
5096:
5097:
5098:
5099:
5100:
5101:
5102:
5103:
5104:
5105:
5106:
5107:
5108:
5109:
5110:
5111:
5112:
5113:
5114:
5115:
5116:
5117:
5118:
5119:
5120:
5121:
5122:
5123:
5124:
5125:
5126:
5127:
5128:
5129:
5130:
5131:
5132:
5133:
5134:
5135:
5136:
5137:
5138:
5139:
5140:
5141:
5142:
5143:
5144:
5145:
5146:
5147:
5148:
5149:
5150:
5151:
5152:
5153:
5154:
5155:
5156:
5157:
5158:
5159:
5160:
5161:
5162:
5163:
5164:
5165:
5166:
5167:
5168:
5169:
5170:
5171:
5172:
5173:
5174:
5175:
5176:
5177:
5178:
5179:
5180:
5181:
5182:
5183:
5184:
5185:
5186:
5187:
5188:
5189:
5190:
5191:
5192:
5193:
5194:
5195:
5196:
5197:
5198:
5199:
5200:
5201:
5202:
5203:
5204:
5205:
5206:
5207:
5208:
5209:
5210:
5211:
5212:
5213:
5214:
5215:
5216:
5217:
5218:
5219:
5220:
5221:
5222:
5223:
5224:
5225:
5226:
5227:
5228:
5229:
5230:
5231:
5232:
5233:
5234:
5235:
5236:
5237:
5238:
5239:
5240:
5241:
5242:
5243:
5244:
5245:
5246:
5247:
5248:
5249:
5250:
5251:
5252:
5253:
5254:
5255:
5256:
5257:
5258:
5259:
5260:
5261:
5262:
5263:
5264:
5265:
5266:
5267:
5268:
5269:
5270:
5271:
5272:
5273:
5274:
5275:
5276:
5277:
5278:
5279:
5280:
5281:
5282:
5283:
5284:
5285:
5286:
5287:
5288:
5289:
5290:
5291:
5292:
5293:
5294:
5295:
5296:
5297:
5298:
5299:
5300:
5301:
5302:
5303:
5304:
5305:
5306:
5307:
5308:
5309:
5310:
5311:
5312:
5313:
5314:
5315:
5316:
5317:
5318:
5319:
5320:
5321:
5322:
5323:
5324:
5325:
5326:
5327:
5328:
5329:
5330:
5331:
5332:
5333:
5334:
5335:
5336:
5337:
5338:
5339:
5340:
5341:
5342:
5343:
5344:
5345:
5346:
5347:
5348:
5349:
5350:
5351:
5352:
5353:
5354:
5355:
5356:
5357:
5358:
5359:
5360:
5361:
5362:
5363:
5364:
5365:
5366:
5367:
5368:
5369:
5370:
5371:
5372:
5373:
5374:
5375:
5376:
5377:
5378:
5379:
5380:
5381:
5382:
5383:
5384:
5385:
5386:
5387:
5388:
5389:
5390:
5391:
5392:
5393:
5394:
5395:
5396:
5397:
5398:
5399:
5400:
5401:
5402:
5403:
5404:
5405:
5406:
5407:
5408:
5409:
5410:
5411:
5412:
5413:
5414:
5415:
5416:
5417:
5418:
5419:
5420:
5421:
5422:
5423:
5424:
5425:
5426:
5427:
5428:
5429:
5430:
5431:
5432:
5433:
5434:
5435:
5436:
5437:
5438:
5439:
5440:
5441:
5442:
5443:
5444:
5445:
5446:
5447:
5448:
5449:
5450:
5451:
5452:
5453:
5454:
5455:
5456:
5457:
5458:
5459:
5460:
5461:
5462:
5463:
5464:
5465:
5466:
5467:
5468:
5469:
5470:
5471:
5472:
5473:
5474:
5475:
5476:
5477:
5478:
5479:
5480:
5481:
5482:
5483:
5484:
5485:
5486:
5487:
5488:
5489:
5490:
5491:
5492:
5493:
5494:
5495:
5496:
5497:
5498:
5499:
5500:
5501:
5502:
5503:
5504:
5505:
5506:
5507:
5508:
5509:
5510:
5511:
5512:
5513:
5514:
5515:
5516:
5517:
5518:
5519:
5520:
5521:
5522:
5523:
5524:
5525:
5526:
5527:
5528:
5529:
5530:
5531:
5532:
5533:
5534:
5535:
5536:
5537:
5538:
5539:
5540:
5541:
5542:
5543:
5544:
5545:
5546:
5547:
5548:
5549:
5550:
5551:
5552:
5553:
5554:
5555:
5556:
5557:
5558:
5559:
5560:
5561:
5562:
5563:
5564:
5565:
5566:
5567:
5568:
5569:
5570:
5571:
5572:
5573:
5574:
5575:
5576:
5577:
5578:
5579:
5580:
5581:
5582:
5583:
5584:
5585:
5586:
5587:
5588:
5589:
5590:
5591:
5592:
5593:
5594:
5595:
5596:
5597:
5598:
5599:
5600:
5601:
5602:
5603:
5604:
5605:
5606:
5607:
5608:
5609:
5610:
5611:
5612:
5613:
5614:
5615:
5616:
5617:
5618:
5619:
5620:
5621:
5622:
5623:
5624:
5625:
5626:
5627:
5628:
5629:
5630:
5631:
5632:
5633:
5634:
5635:
5636:
5637:
5638:
5639:
5640:
5641:
5642:
5643:
5644:
5645:
5646:
5647:
5648:
5649:
5650:
5651:
5652:
5653:
5654:
5655:
5656:
5657:
5658:
5659:
5660:
5661:
5662:
5663:
5664:
5665:
5666:
5667:
5668:
5669:
5670:
5671:
5672:
5673:
5674:
5675:
5676:
5677:
5678:
5679:
5680:
5681:
5682:
5683:
5684:
5685:
5686:
5687:
5688:
5689:
5690:
5691:
5692:
5693:
5694:
5695:
5696:
5697:
5698:
5699:
5700:
5701:
5702:
5703:
5704:
5705:
5706:
5707:
5708:
5709:
5710:
5711:
5712:
5713:
5714:
5715:
5716:
5717:
5718:
5719:
5720:
5721:
5722:
5723:
5724:
5725:
5726:
5727:
5728:
5729:
5730:
5731:
5732:
5733:
5734:
5735:
5736:
5737:
5738:
5739:
5740:
5741:
5742:
5743:
5744:
5745:
5746:
5747:
5748:
5749:
5750:
5751:
5752:
5753:
5754:
5755:
5756:
5757:
5758:
5759:
5760:
5761:
5762:
5763:
5764:
5765:
5766:
5767:
5768:
5769:
5770:
5771:
5772:
5773:
5774:
5775:
5776:
5777:
5778:
5779:
5780:
5781:
5782:
5783:
5784:
5785:
5786:
5787:
5788:
5789:
5790:
5791:
5792:
5793:
5794:
5795:
5796:
5797:
5798:
5799:
5800:
5801:
5802:
5803:
5804:
5805:
5806:
5807:
5808:
5809:
5810:
5811:
5812:
5813:
5814:
5815:
5816:
5817:
5818:
5819:
5820:
5821:
5822:
5823:
5824:
5825:
5826:
5827:
5828:
5829:
5830:
5831:
5832:
5833:
5834:
5835:
5836:
5837:
5838:
5839:
5840:
5841:
5842:
5843:
5844:
5845:
5846:
5847:
5848:
5849:
5850:
5851:
5852:
5853:
5854:
5855:
5856:
5857:
5858:
5859:
5860:
5861:
5862:
5863:
5864:
5865:
5866:
5867:
5868:
5869:
5870:
5871:
5872:
5873:
5874:
5875:
5876:
5877:
5878:
5879:
5880:
5881:
5882:
5883:
5884:
5885:
5886:
5887:
5888:
5889:
5890:
5891:
5892:
5893:
5894:
5895:
5896:
5897:
5898:
5899:
5900:
5901:
5902:
5903:
5904:
5905:
5906:
5907:
5908:
5909:
5910:
5911:
5912:
5913:
5914:
5915:
5916:
5917:
5918:
5919:
5920:
5921:
5922:
5923:
5924:
5925:
5926:
5927:
5928:
5929:
5930:
5931:
5932:
5933:
5934:
5935:
5936:
5937:
5938:
5939:
5940:
5941:
5942:
5943:
5944:
5945:
5946:
5947:
5948:
5949:
5950:
5951:
5952:
5953:
5954:
5955:
5956:
5957:
5958:
5959:
5960:
5961:
5962:
5963:
5964:
5965:
5966:
5967:
5968:
5969:
5970:
5971:
5972:
5973:
5974:
5975:
5976:
5977:
5978:
5979:
5980:
5981:
5982:
5983:
5984:
5985:
5986:
5987:
5988:
5989:
5990:
5991:
5992:
5993:
5994:
5995:
5996:
5997:
5998:
5999:
6000:
6001:
6002:
6003:
6004:
6005:
6006:
6007:
6008:
6009:
6010:
6011:
6012:
6013:
6014:
6015:
6016:
6017:
6018:
6019:
6020:
6021:
6022:
6023:
6024:
6025:
6026:
6027:
6028:
6029:
6030:
6031:
6032:
6033:
6034:
6035:
6036:
6037:
6038:
6039:
6040:
6041:
6042:
6043:
6044:
6045:
6046:
6047:
6048:
6049:
6050:
6051:
6052:
6053:
6054:
6055:
6056:
6057:
6058:
6059:
6060:
6061:
6062:
6063:
6064:
6065:
6066:
6067:
6068:
6069:
6070:
6071:
6072:
6073:
6074:
6075:
6076:
6077:
6078:
6079:
6080:
6081:
6082:
6083:
6084:
6085:
6086:
6087:
6088:
6089:
6090:
6091:
6092:
6093:
6094:
6095:
6096:
6097:
6098:
6099:
6100:
6101:
6102:
6103:
6104:
6105:
6106:
6107:
6108:
6109:
6110:
6111:
6112:
6113:
6114:
6115:
6116:
6117:
6118:
6119:
6120:
6121:
6122:
6123:
6124:
6125:
6126:
6127:
6128:
6129:
6130:
6131:
6132:
6133:
6134:
6135:
6136:
6137:
6138:
6139:
6140:
6141:
6142:
6143:
6144:
6145:
6146:
6147:
6148:
6149:
6150:
6151:
6152:
6153:
6154:
6155:
6156:
6157:
6158:
6159:
6160:
6161:
6162:
6163:
6164:
6165:
6166:
6167:
6168:
6169:
6170:
6171:
6172:
6173:
6174:
6175:
6176:
6177:
6178:
6179:
6180:
6181:
6182:
6183:
6184:
6185:
6186:
6187:
6188:
6189:
6190:
6191:
6192:
6193:
6194:
6195:
6196:
6197:
6198:
6199:
6200:
6201:
6202:
6203:
6204:
6205:
6206:
6207:
6208:
6209:
6210:
6211:
6212:
6213:
6214:
6215:
6216:
6217:
6218:
6219:
6220:
6221:
6222:
6223:
6224:
6225:
6226:
6227:
6228:
6229:
6230:
6231:
6232:
6233:
6234:
6235:
6236:
6237:
6238:
6239:
6240:
6241:
6242:
6243:
6244:
6245:
6246:
6247:
6248:
6249:
6250:
6251:
6252:
6253:
6254:
6255:
6256:
6257:
6258:
6259:
6260:
6261:
6262:
6263:
6264:
6265:
6266:
6267:
6268:
6269:
6270:
6271:
6272:
6273:
6274:
6275:
6276:
6277:
6278:
6279:
6280:
6281:
6282:
6283:
6284:
6285:
6286:
6287:
6288:
6289:
6290:
6291:
6292:
6293:
6294:
6295:
6296:
6297:
6298:
6299:
6300:
6301:
6302:
6303:
6304:
6305:
6306:
6307:
6308:
6309:
6310:
6311:
6312:
6313:
6314:
6315:
6316:
6317:
6318:
6319:
6320:
6321:
6322:
6323:
6324:
6325:
6326:
6327:
6328:
6329:
6330:
6331:
6332:
6333:
6334:
6335:
6336:
6337:
6338:
6339:
6340:
6341:
6342:
6343:
6344:
6345:
6346:
6347:
6348:
6349:
6350:
6351:
6352:
6353:
6354:
6355:
6356:
6357:
6358:
6359:
6360:
6361:
6362:
6363:
6364:
6365:
6366:
6367:
6368:
6369:
6370:
6371:
6372:
6373:
6374:
6375:
6376:
6377:
6378:
6379:
6380:
6381:
6382:
6383:
6384:
6385:
6386:
6387:
6388:
6389:
6390:
6391:
6392:
6393:
6394:
6395:
6396:
6397:
6398:
6399:
6400:
6401:
6402:
6403:
6404:
6405:
6406:
6407:
6408:
6409:
6410:
6411:
6412:
6413:
6414:
6415:
6416:
6417:
6418:
6419:
6420:
6421:
6422:
6423:
6424:
6425:
6426:
6427:
6428:
6429:
6430:
6431:
6432:
6433:
6434:
6435:
6436:
6437:
6438:
6439:
6440:
6441:
6442:
6443:
6444:
6445:
6446:
6447:
6448:
6449:
6450:
6451:
6452:
6453:
6454:
6455:
6456:
6457:
6458:
6459:
6460:
6461:
6462:
6463:
6464:
6465:
6466:
6467:
6468:
6469:
6470:
6471:
6472:
6473:
6474:
6475:
6476:
6477:
6478:
6479:
6480:
6481:
6482:
6483:
6484:
6485:
6486:
6487:
6488:
6489:
6490:
6491:
6492:
6493:
6494:
6495:
6496:
6497:
6498:
6499:
6500:
6501:
6502:
6503:
6504:
6505:
6506:
6507:
6508:
6509:
6510:
6511:
6512:
6513:
6514:
6515:
6516:
6517:
6518:
6519:
6520:
6521:
6522: public static final byte[] LCD6X8_FONT = "\0\0\0\0\0\0\0\0`\200h(\370((\0`\200h(\320((\0\340\200\340\250\360((\0\340\200\370\220\360\20\20\0\340\200\320\250\3500\30\0@\240\350\250\260((\0\300\240\340\240\340 8\0\300\240\330\240\320\b0\0\240\240\370\260\260\20\20\0\200\200\270\240\370 \0\240\240\270\260P\20\20\0\340\200\370\240\270 \0`\200\260\250p((\0`\200P(\350(\20\0`\200H(\310\b\b\0\300\240\270\240\360 8\0\300\240\250\250\310\b\b\0\300\240\270\250\320 8\0\300\240\270\250\330\b8\0\300\240\250\250\330\b\b\0\300\240\240\250\260((\0`\200p(\350((\0\340\200\360\250\360(0\0`\200\260\250h((\0\340\200\350\270\370((\0`\200p(\360(0\0\340\200\330\240\340 \30\0\0 \20\370\20 \0\0\0 @\370@ \0\0 p\250 \0 \250p \0\0\0\0\0\0\0\0\0 \0\0 \0PPP\0\0\0\0\0PP\370P\370PP\0 x\240p(\360 \0\300\310\20 @\230\30\0`\220\240@\250\220h\0` @\0\0\0\0\0\20 @@@ \20\0@ \20\20\20 @\0\0 \250p\250 \0\0\0 \370 \0\0\0\0\0\0` @\0\0\0\0\370\0\0\0\0\0\0\0\0\0``\0\0\b\20 @\200\0\0p\210\230\250\310\210p\0 ` p\0p\210\b\20 @\370\0\370\20 \20\b\210p\0\0200P\220\370\20\20\0\370\200\360\b\b\210p\0000@\200\360\210\210p\0\370\b\20 @@@\0p\210\210p\210\210p\0p\210\210x\b\20`\0\0``\0``\0\0\0``\0` @\0\20 @\200@ \20\0\0\0\370\0\370\0\0\0@ \20\b\20 @\0p\210\b\20 \0 \0p\210\bh\250\250p\0p\210\210\210\370\210\210\0\360\210\210\360\210\210\360\0p\210\200\200\200\210p\0\340\220\210\210\210\220\340\0\370\200\200\360\200\200\370\0\370\200\200\360\200\200\200\0p\210\200\270\210\210x\0\210\210\210\370\210\210\210\0p p\08\20\20\20\20\220`\0\210\220\240\300\240\220\210\0\200\200\200\200\200\200\370\0\210\330\250\250\210\210\210\0\210\210\310\250\230\210\210\0p\210\210\210\210\210p\0\360\210\210\360\200\200\200\0p\210\210\210\250\220h\0\360\210\210\360\240\220\210\0x\200\200p\b\b\360\0\370 \0\210\210\210\210\210\210p\0\210\210\210\210\210P \0\210\210\210\250\250\250P\0\210\210P P\210\210\0\210\210\210P \0\370\b\20 @\200\370\0p@@@@@p\0\210P\370 \370 \0p\20\20\20\20\20p\0 P\210\0\0\0\0\0\0\0\0\0\0\0\370\0@ \20\0\0\0\0\0\0\0p\bx\210x\0\200\200\260\310\210\210\360\0\0\0p\200\200\210p\0\b\bh\230\210\210x\0\0\0p\210\370\200p\0000H@\340@@@\0\0x\210\210x\bp\0\200\200\260\310\210\210\210\0 \0` p\0\20\0000\20\20\220`\0\200\200\220\240\300\240\220\0` p\0\0\0\320\250\250\210\210\0\0\0\260\310\210\210\210\0\0\0p\210\210\210p\0\0\0\360\210\360\200\200\0\0\0h\230x\b\b\0\0\0\260\310\200\200\200\0\0\0p\200p\b\360\0@@\340@@H0\0\0\0\210\210\210\230h\0\0\0\210\210\210P \0\0\0\210\210\250\250P\0\0\0\210P P\210\0\0\0\210\210x\bp\0\0\0\370\20 @\370\0\20 @ \20\0 \0@ \20 @\0\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200@ \20\b\0\0h\220\0\0\0\0\0\0 \0 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\240\340\08 \0\0\0\0\0\0\0 \340\0\0\0\0\0\200@ \0\0\0\0``\0\0\0\0\370\b\370\b\20 \0\0\0\370\b0 @\0\0\0\20 `\240 \0\0\0 \370\210\b0\0\0\0\0\370 \370\0\0\0\20\3700P\220\0\0\0@\370HP@\0\0\0\0p\20\20\370\0\0\0\360\20\360\20\360\0\0\0\0\250\250\b0\0\0\0\0\370\0\0\0\0\370\b(0 @\0\b\20 `\240 \0 \370\210\210\b\20 \0\0\370 \370\0\20\370\0200P\220\20\0@\370HHHH\220\0 \370 \370 \0\0xH\210\b\20`\0@x\220\20\20\20 \0\0\370\b\b\b\b\370\0P\370PP\20 @\0\0\300\b\310\b\20\340\0\0\370\b\20 P\210\0@\370HP@@8\0\0\210\210H\b\20`\0\0xH\250\30\20`\0\20\340 \370 @\0\0\250\250\250\b\20 \0p\0\370 @\0@@@`P@@\0 \370 @\200\0\0p\0\0\0\0\370\0\0\370\bP P\200\0 \370\20 p\250 \0\20\20\20\20\20 @\0\0 \20\210\210\210\210\0\200\200\370\200\200\200x\0\0\370\b\b\b\20`\0\0@\240\20\b\b\0\0 \370 \250\250 \0\0\370\b\bP \20\0\0p\0p\0p\b\0\0 @\200\210\370\b\0\0\b\bP P\200\0\0\370@\370@@8\0@@\370HP@@\0\0p\20\20\20\20\370\0\0\370\b\370\b\b\370\0p\0\370\b\b\20 \0\220\220\220\220\20 @\0\0 \240\240\250\250\260\0\0\200\200\210\220\240\300\0\0\370\210\210\210\210\370\0\0\370\210\210\b\20 \0\0\300\0\b\b\20\340\0 \220@\0\0\0\0\0\340\240\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0".getBytes (XEiJ.ISO_8859_1);
6523:
6524: }
6525:
6526:
6527:
6528:
6529:
6530: public static final class Smk extends FontPage {
6531:
6532:
6533: public static final char[] HALF_BASE = (
6534:
6535:
6536: " " +
6537: " " +
6538: " !\"#$%&'()*+,-./" +
6539: "0123456789:;<=>?" +
6540: "@ABCDEFGHIJKLMNO" +
6541: "PQRSTUVWXYZ[¥]^_" +
6542: "`abcdefghijklmno" +
6543: "pqrstuvwxyz{|} " +
6544: " " +
6545: " " +
6546: " 。「」、・ヲァィゥェォャュョッ" +
6547: "ーアイウエオカキクケコサシスセソ" +
6548: "タチツテトナニヌネノハヒフヘホマ" +
6549: "ミムメモヤユヨラリルレロワン゙゚" +
6550: "αäβεμδρg j̽¢£ñö" +
6551: "pqθ ΩüΣπ y ÷ █" +
6552:
6553:
6554: " " +
6555: "▶◀ ↵ ≤≥ " +
6556: " !\"#$%&'()*+,-./" +
6557: "0123456789:;<=>?" +
6558: "@ABCDEFGHIJKLMNO" +
6559: "PQRSTUVWXYZ[ ]^_" +
6560: "`abcdefghijklmno" +
6561: "pqrstuvwxyz{|}~⌂" +
6562: "БДЖЗИЙЛПУЦЧШЩЪЫЭ" +
6563: "α ΓπΣσ♬τ\u237eΘΩδ ♥ε " +
6564: " ¡¢£¤¥¦§ƒ©ª«ЮЯ® " +
6565: "°±²³₧µ¶·ω¹º»¼½¾¿" +
6566: "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ" +
6567: "ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß" +
6568: "àáâãäåæçèéêëìíîï" +
6569: "ðñòóôõö÷øùúûüýþÿ"
6570: ).toCharArray ();
6571:
6572:
6573: public static final char[] FULL_BASE = (
6574:
6575:
6576: " " +
6577: " " +
6578: " " +
6579: " " +
6580: " " +
6581: " " +
6582: " " +
6583: " →←" +
6584: " " +
6585: " " +
6586: " " +
6587: " " +
6588: " " +
6589: " " +
6590: " √ " +
6591: " ∞ 千万円 " +
6592:
6593:
6594: " " +
6595: " “” ● ↑↓→← ▲▼" +
6596: " " +
6597: " " +
6598: " " +
6599: " \ " +
6600: " " +
6601: " " +
6602: " " +
6603: " ♪ ∞ ∩" +
6604: " ‘" +
6605: " " +
6606: " " +
6607: " " +
6608: " " +
6609: " "
6610: ).toCharArray ();
6611:
6612: public Smk (int characterWidth, int characterHeight, String nameEn, String nameJa, String dataName, String imageName) {
6613: super (characterWidth, characterHeight, nameEn, nameJa, dataName, imageName,
6614: 16, 32, 32,
6615: null, 0,
6616: new char[][] { FULL_BASE, HALF_BASE });
6617: fnpLoadFontDataArray (SMK6X8_FONT, 0, SMK6X8_FONT.length);
6618: }
6619:
6620:
6621:
6622:
6623:
6624:
6625:
6626:
6627:
6628:
6629:
6630:
6631:
6632:
6633:
6634:
6635:
6636:
6637:
6638:
6639:
6640:
6641:
6642:
6643:
6644:
6645:
6646:
6647:
6648:
6649:
6650:
6651:
6652:
6653:
6654:
6655:
6656:
6657:
6658:
6659:
6660:
6661:
6662:
6663:
6664:
6665:
6666:
6667:
6668:
6669:
6670:
6671:
6672:
6673:
6674:
6675:
6676:
6677:
6678:
6679:
6680:
6681:
6682:
6683:
6684:
6685:
6686:
6687:
6688:
6689:
6690:
6691:
6692:
6693:
6694:
6695:
6696:
6697:
6698:
6699:
6700:
6701:
6702:
6703:
6704:
6705:
6706:
6707:
6708:
6709:
6710:
6711:
6712:
6713:
6714:
6715:
6716:
6717:
6718:
6719:
6720:
6721:
6722:
6723:
6724:
6725:
6726:
6727:
6728:
6729:
6730:
6731:
6732:
6733:
6734:
6735:
6736:
6737:
6738:
6739:
6740:
6741:
6742:
6743:
6744:
6745:
6746:
6747:
6748:
6749:
6750:
6751:
6752:
6753:
6754:
6755:
6756:
6757:
6758:
6759:
6760:
6761:
6762:
6763:
6764:
6765:
6766:
6767:
6768:
6769:
6770:
6771:
6772:
6773:
6774:
6775:
6776:
6777:
6778:
6779:
6780:
6781:
6782:
6783:
6784:
6785:
6786:
6787:
6788:
6789:
6790:
6791:
6792:
6793:
6794:
6795:
6796:
6797:
6798:
6799:
6800:
6801:
6802:
6803:
6804:
6805:
6806:
6807:
6808:
6809:
6810:
6811:
6812:
6813:
6814:
6815:
6816:
6817:
6818:
6819:
6820:
6821:
6822:
6823:
6824:
6825:
6826:
6827:
6828:
6829:
6830:
6831:
6832:
6833:
6834:
6835:
6836:
6837:
6838:
6839:
6840:
6841:
6842:
6843:
6844:
6845:
6846:
6847:
6848:
6849:
6850:
6851:
6852:
6853:
6854:
6855:
6856:
6857:
6858:
6859:
6860:
6861:
6862:
6863:
6864:
6865:
6866:
6867:
6868:
6869:
6870:
6871:
6872:
6873:
6874:
6875:
6876:
6877:
6878:
6879:
6880:
6881:
6882:
6883:
6884:
6885:
6886:
6887:
6888:
6889:
6890:
6891:
6892:
6893:
6894:
6895:
6896:
6897:
6898:
6899:
6900:
6901:
6902:
6903:
6904:
6905:
6906:
6907:
6908:
6909:
6910:
6911:
6912:
6913:
6914:
6915:
6916:
6917:
6918:
6919:
6920:
6921:
6922:
6923:
6924:
6925:
6926:
6927:
6928:
6929:
6930:
6931:
6932:
6933:
6934:
6935:
6936:
6937:
6938:
6939:
6940:
6941:
6942:
6943:
6944:
6945:
6946:
6947:
6948:
6949:
6950:
6951:
6952:
6953:
6954:
6955:
6956:
6957:
6958:
6959:
6960:
6961:
6962:
6963:
6964:
6965:
6966:
6967:
6968:
6969:
6970:
6971:
6972:
6973:
6974:
6975:
6976:
6977:
6978:
6979:
6980:
6981:
6982:
6983:
6984:
6985:
6986:
6987:
6988:
6989:
6990:
6991:
6992:
6993:
6994:
6995:
6996:
6997:
6998:
6999:
7000:
7001:
7002:
7003:
7004:
7005:
7006:
7007:
7008:
7009:
7010:
7011:
7012:
7013:
7014:
7015:
7016:
7017:
7018:
7019:
7020:
7021:
7022:
7023:
7024:
7025:
7026:
7027:
7028:
7029:
7030:
7031:
7032:
7033:
7034:
7035:
7036:
7037:
7038:
7039:
7040:
7041:
7042:
7043:
7044:
7045:
7046:
7047:
7048:
7049:
7050:
7051:
7052:
7053:
7054:
7055:
7056:
7057:
7058:
7059:
7060:
7061:
7062:
7063:
7064:
7065:
7066:
7067:
7068:
7069:
7070:
7071:
7072:
7073:
7074:
7075:
7076:
7077:
7078:
7079:
7080:
7081:
7082:
7083:
7084:
7085:
7086:
7087:
7088:
7089:
7090:
7091:
7092:
7093:
7094:
7095:
7096:
7097:
7098:
7099:
7100:
7101:
7102:
7103:
7104:
7105:
7106:
7107:
7108:
7109:
7110:
7111:
7112:
7113:
7114:
7115:
7116:
7117:
7118:
7119:
7120:
7121:
7122:
7123:
7124:
7125:
7126:
7127:
7128:
7129:
7130:
7131:
7132:
7133:
7134:
7135:
7136:
7137:
7138:
7139:
7140:
7141:
7142:
7143:
7144:
7145:
7146:
7147:
7148:
7149:
7150:
7151:
7152:
7153:
7154:
7155:
7156:
7157:
7158:
7159:
7160:
7161:
7162:
7163:
7164:
7165:
7166:
7167:
7168:
7169:
7170:
7171:
7172:
7173:
7174:
7175:
7176:
7177:
7178:
7179:
7180:
7181:
7182:
7183:
7184:
7185:
7186:
7187:
7188:
7189:
7190:
7191:
7192:
7193:
7194:
7195:
7196:
7197:
7198:
7199:
7200:
7201:
7202:
7203:
7204:
7205:
7206:
7207:
7208:
7209:
7210:
7211:
7212:
7213:
7214:
7215:
7216:
7217:
7218:
7219:
7220:
7221:
7222:
7223:
7224:
7225:
7226:
7227:
7228:
7229:
7230:
7231:
7232:
7233:
7234:
7235:
7236:
7237:
7238:
7239:
7240:
7241:
7242:
7243:
7244:
7245:
7246:
7247:
7248:
7249:
7250:
7251:
7252:
7253:
7254:
7255:
7256:
7257:
7258:
7259:
7260:
7261:
7262:
7263:
7264:
7265:
7266:
7267:
7268:
7269:
7270:
7271:
7272:
7273:
7274:
7275:
7276:
7277:
7278:
7279:
7280:
7281:
7282:
7283:
7284:
7285:
7286:
7287:
7288:
7289:
7290:
7291:
7292:
7293:
7294:
7295:
7296:
7297:
7298:
7299:
7300:
7301:
7302:
7303:
7304:
7305:
7306:
7307:
7308:
7309:
7310:
7311:
7312:
7313:
7314:
7315:
7316:
7317:
7318:
7319:
7320:
7321:
7322:
7323:
7324:
7325:
7326:
7327:
7328:
7329:
7330:
7331:
7332:
7333:
7334:
7335:
7336:
7337:
7338:
7339:
7340:
7341:
7342:
7343:
7344:
7345:
7346:
7347:
7348:
7349:
7350:
7351:
7352:
7353:
7354:
7355:
7356:
7357:
7358:
7359:
7360:
7361:
7362:
7363:
7364:
7365:
7366:
7367:
7368:
7369:
7370:
7371:
7372:
7373:
7374:
7375:
7376:
7377:
7378:
7379:
7380:
7381:
7382:
7383:
7384:
7385:
7386:
7387:
7388:
7389:
7390:
7391:
7392:
7393:
7394:
7395:
7396:
7397:
7398:
7399:
7400:
7401:
7402:
7403:
7404:
7405:
7406:
7407:
7408:
7409:
7410:
7411:
7412:
7413:
7414:
7415:
7416:
7417:
7418:
7419:
7420:
7421:
7422:
7423:
7424:
7425:
7426:
7427:
7428:
7429:
7430:
7431:
7432:
7433:
7434:
7435:
7436:
7437:
7438:
7439:
7440:
7441:
7442:
7443:
7444:
7445:
7446:
7447:
7448:
7449:
7450:
7451:
7452:
7453:
7454:
7455:
7456:
7457:
7458:
7459:
7460:
7461:
7462:
7463:
7464:
7465:
7466:
7467:
7468:
7469:
7470:
7471:
7472:
7473:
7474:
7475:
7476:
7477:
7478:
7479:
7480:
7481:
7482:
7483:
7484:
7485:
7486:
7487:
7488:
7489:
7490:
7491:
7492:
7493:
7494:
7495:
7496:
7497:
7498:
7499:
7500:
7501:
7502:
7503:
7504:
7505:
7506:
7507:
7508:
7509:
7510:
7511:
7512:
7513:
7514:
7515:
7516:
7517:
7518:
7519:
7520:
7521:
7522:
7523:
7524:
7525:
7526:
7527:
7528:
7529:
7530:
7531:
7532:
7533:
7534:
7535:
7536:
7537:
7538:
7539:
7540:
7541:
7542:
7543:
7544:
7545:
7546:
7547:
7548:
7549:
7550:
7551:
7552:
7553:
7554:
7555:
7556:
7557:
7558:
7559:
7560:
7561:
7562:
7563:
7564:
7565:
7566:
7567:
7568:
7569:
7570:
7571:
7572:
7573:
7574:
7575:
7576:
7577:
7578:
7579:
7580:
7581:
7582:
7583:
7584:
7585:
7586:
7587:
7588:
7589:
7590:
7591:
7592:
7593:
7594:
7595:
7596:
7597:
7598:
7599:
7600:
7601:
7602:
7603:
7604:
7605:
7606:
7607:
7608:
7609:
7610:
7611:
7612:
7613:
7614:
7615:
7616:
7617:
7618:
7619:
7620:
7621:
7622:
7623:
7624:
7625:
7626:
7627:
7628:
7629:
7630:
7631:
7632:
7633:
7634:
7635:
7636:
7637:
7638:
7639:
7640:
7641:
7642:
7643:
7644:
7645:
7646:
7647:
7648:
7649:
7650:
7651:
7652:
7653:
7654:
7655:
7656:
7657:
7658:
7659:
7660:
7661:
7662:
7663:
7664:
7665:
7666:
7667:
7668:
7669:
7670:
7671:
7672:
7673:
7674:
7675:
7676:
7677:
7678:
7679:
7680:
7681:
7682:
7683:
7684:
7685:
7686:
7687:
7688:
7689:
7690:
7691:
7692:
7693:
7694:
7695:
7696:
7697:
7698:
7699:
7700:
7701:
7702:
7703:
7704:
7705:
7706:
7707:
7708:
7709:
7710:
7711:
7712:
7713:
7714:
7715:
7716:
7717:
7718:
7719:
7720:
7721:
7722:
7723:
7724:
7725:
7726:
7727:
7728:
7729:
7730:
7731:
7732:
7733:
7734:
7735:
7736:
7737:
7738:
7739:
7740:
7741:
7742:
7743:
7744:
7745:
7746:
7747:
7748:
7749:
7750:
7751:
7752:
7753:
7754:
7755:
7756:
7757:
7758:
7759:
7760:
7761:
7762:
7763:
7764:
7765:
7766:
7767:
7768:
7769:
7770:
7771:
7772:
7773:
7774:
7775:
7776:
7777:
7778:
7779:
7780:
7781:
7782:
7783:
7784:
7785:
7786:
7787:
7788:
7789:
7790:
7791:
7792:
7793:
7794:
7795:
7796:
7797:
7798:
7799:
7800:
7801:
7802:
7803:
7804:
7805:
7806:
7807:
7808:
7809:
7810:
7811:
7812:
7813:
7814:
7815:
7816:
7817:
7818:
7819:
7820:
7821:
7822:
7823:
7824:
7825:
7826:
7827:
7828:
7829:
7830:
7831:
7832:
7833:
7834:
7835:
7836:
7837:
7838:
7839:
7840:
7841:
7842:
7843:
7844:
7845:
7846:
7847:
7848:
7849:
7850:
7851:
7852:
7853:
7854:
7855:
7856:
7857:
7858:
7859:
7860:
7861:
7862:
7863:
7864:
7865:
7866:
7867:
7868:
7869:
7870:
7871:
7872:
7873:
7874:
7875:
7876:
7877:
7878:
7879:
7880:
7881:
7882:
7883:
7884:
7885:
7886:
7887:
7888:
7889:
7890:
7891:
7892:
7893:
7894:
7895:
7896:
7897:
7898:
7899:
7900:
7901:
7902:
7903:
7904:
7905:
7906:
7907:
7908:
7909:
7910:
7911:
7912:
7913:
7914:
7915:
7916:
7917:
7918:
7919:
7920:
7921:
7922:
7923:
7924:
7925:
7926:
7927:
7928:
7929:
7930:
7931:
7932:
7933:
7934:
7935:
7936:
7937:
7938:
7939:
7940:
7941:
7942:
7943:
7944:
7945:
7946:
7947:
7948:
7949:
7950:
7951:
7952:
7953:
7954:
7955:
7956:
7957:
7958:
7959:
7960:
7961:
7962:
7963:
7964:
7965:
7966:
7967:
7968:
7969:
7970:
7971:
7972:
7973:
7974:
7975:
7976:
7977:
7978:
7979:
7980:
7981:
7982:
7983:
7984:
7985:
7986:
7987:
7988:
7989:
7990:
7991:
7992:
7993:
7994:
7995:
7996:
7997:
7998:
7999:
8000:
8001:
8002:
8003:
8004:
8005:
8006:
8007:
8008:
8009:
8010:
8011:
8012:
8013:
8014:
8015:
8016:
8017:
8018:
8019:
8020:
8021:
8022:
8023:
8024:
8025:
8026:
8027:
8028:
8029:
8030:
8031:
8032:
8033:
8034:
8035:
8036:
8037:
8038:
8039:
8040:
8041:
8042:
8043:
8044:
8045:
8046:
8047:
8048:
8049:
8050:
8051:
8052:
8053:
8054:
8055:
8056:
8057:
8058:
8059:
8060:
8061:
8062:
8063:
8064:
8065:
8066:
8067:
8068:
8069:
8070:
8071:
8072:
8073:
8074:
8075:
8076:
8077:
8078:
8079:
8080:
8081:
8082:
8083:
8084:
8085:
8086:
8087:
8088:
8089:
8090:
8091:
8092:
8093:
8094:
8095:
8096:
8097:
8098:
8099:
8100:
8101:
8102:
8103:
8104:
8105:
8106:
8107:
8108:
8109:
8110:
8111:
8112:
8113:
8114:
8115:
8116:
8117:
8118:
8119:
8120:
8121:
8122:
8123:
8124:
8125:
8126:
8127:
8128:
8129:
8130:
8131:
8132:
8133:
8134:
8135:
8136:
8137:
8138:
8139:
8140:
8141:
8142:
8143:
8144:
8145:
8146:
8147:
8148:
8149:
8150:
8151:
8152:
8153:
8154:
8155:
8156:
8157:
8158:
8159:
8160:
8161:
8162:
8163:
8164:
8165:
8166:
8167:
8168:
8169:
8170:
8171:
8172:
8173:
8174:
8175:
8176:
8177:
8178:
8179:
8180:
8181:
8182:
8183:
8184:
8185:
8186:
8187:
8188:
8189:
8190:
8191:
8192:
8193:
8194:
8195:
8196:
8197:
8198:
8199:
8200:
8201:
8202:
8203:
8204:
8205:
8206:
8207:
8208:
8209:
8210:
8211:
8212:
8213:
8214:
8215:
8216:
8217:
8218:
8219:
8220:
8221:
8222:
8223:
8224:
8225:
8226:
8227:
8228:
8229:
8230:
8231:
8232:
8233:
8234:
8235:
8236:
8237:
8238:
8239:
8240:
8241:
8242:
8243:
8244:
8245:
8246:
8247:
8248:
8249:
8250:
8251:
8252:
8253:
8254:
8255:
8256:
8257:
8258:
8259:
8260:
8261:
8262:
8263:
8264:
8265:
8266:
8267:
8268:
8269:
8270:
8271:
8272:
8273:
8274:
8275:
8276:
8277:
8278:
8279:
8280:
8281:
8282:
8283:
8284:
8285:
8286:
8287:
8288:
8289:
8290:
8291:
8292:
8293:
8294:
8295:
8296:
8297:
8298:
8299:
8300:
8301:
8302:
8303:
8304:
8305:
8306:
8307:
8308:
8309:
8310:
8311:
8312:
8313:
8314:
8315:
8316:
8317:
8318:
8319:
8320:
8321:
8322:
8323:
8324:
8325:
8326:
8327:
8328:
8329:
8330:
8331:
8332:
8333:
8334:
8335:
8336:
8337:
8338:
8339:
8340:
8341:
8342:
8343:
8344:
8345:
8346:
8347:
8348:
8349:
8350:
8351:
8352:
8353:
8354:
8355:
8356:
8357:
8358:
8359:
8360:
8361:
8362:
8363:
8364:
8365:
8366:
8367:
8368:
8369:
8370:
8371:
8372:
8373:
8374:
8375:
8376:
8377:
8378:
8379:
8380:
8381:
8382:
8383:
8384:
8385:
8386:
8387:
8388:
8389:
8390:
8391:
8392:
8393:
8394:
8395:
8396:
8397:
8398:
8399:
8400:
8401:
8402:
8403:
8404:
8405:
8406:
8407:
8408:
8409:
8410:
8411:
8412:
8413:
8414:
8415:
8416:
8417:
8418:
8419:
8420:
8421:
8422:
8423:
8424:
8425:
8426:
8427:
8428:
8429:
8430:
8431:
8432:
8433:
8434:
8435:
8436:
8437:
8438:
8439:
8440:
8441:
8442:
8443:
8444:
8445:
8446:
8447:
8448:
8449:
8450:
8451:
8452:
8453:
8454:
8455:
8456:
8457:
8458:
8459:
8460:
8461:
8462:
8463:
8464:
8465:
8466:
8467:
8468:
8469:
8470:
8471:
8472:
8473:
8474:
8475:
8476:
8477:
8478:
8479:
8480:
8481:
8482:
8483:
8484:
8485:
8486:
8487:
8488:
8489:
8490:
8491:
8492:
8493:
8494:
8495:
8496:
8497:
8498:
8499:
8500:
8501:
8502:
8503:
8504:
8505:
8506:
8507:
8508:
8509:
8510:
8511:
8512:
8513:
8514:
8515:
8516:
8517:
8518:
8519:
8520:
8521:
8522:
8523:
8524:
8525:
8526:
8527:
8528:
8529:
8530:
8531:
8532:
8533:
8534:
8535:
8536:
8537:
8538:
8539:
8540:
8541:
8542:
8543:
8544:
8545:
8546:
8547:
8548:
8549:
8550:
8551:
8552:
8553:
8554:
8555:
8556:
8557:
8558:
8559:
8560:
8561:
8562:
8563:
8564:
8565:
8566:
8567:
8568:
8569:
8570:
8571:
8572:
8573:
8574:
8575:
8576:
8577:
8578:
8579:
8580:
8581:
8582:
8583:
8584:
8585:
8586:
8587:
8588:
8589:
8590:
8591:
8592:
8593:
8594:
8595:
8596:
8597:
8598:
8599:
8600:
8601:
8602:
8603:
8604:
8605:
8606:
8607:
8608:
8609:
8610:
8611:
8612:
8613:
8614:
8615:
8616:
8617:
8618:
8619:
8620:
8621:
8622:
8623:
8624:
8625:
8626:
8627:
8628:
8629:
8630:
8631:
8632:
8633:
8634:
8635:
8636:
8637:
8638:
8639:
8640:
8641:
8642:
8643:
8644:
8645:
8646:
8647:
8648:
8649:
8650:
8651:
8652:
8653:
8654:
8655:
8656:
8657:
8658:
8659:
8660:
8661:
8662:
8663:
8664:
8665:
8666:
8667:
8668:
8669:
8670:
8671:
8672:
8673:
8674:
8675:
8676:
8677:
8678:
8679:
8680:
8681:
8682:
8683:
8684:
8685:
8686:
8687:
8688:
8689:
8690:
8691:
8692:
8693:
8694:
8695:
8696:
8697:
8698:
8699:
8700:
8701:
8702:
8703:
8704:
8705:
8706:
8707:
8708:
8709:
8710:
8711:
8712:
8713:
8714:
8715:
8716:
8717:
8718:
8719:
8720:
8721:
8722:
8723:
8724:
8725:
8726:
8727:
8728:
8729:
8730:
8731:
8732:
8733:
8734:
8735:
8736:
8737:
8738:
8739:
8740:
8741:
8742:
8743:
8744:
8745:
8746:
8747:
8748:
8749:
8750:
8751:
8752:
8753:
8754:
8755:
8756:
8757:
8758:
8759:
8760:
8761:
8762:
8763:
8764:
8765:
8766:
8767:
8768:
8769:
8770:
8771:
8772:
8773:
8774:
8775:
8776:
8777:
8778:
8779:
8780:
8781:
8782:
8783:
8784:
8785:
8786:
8787:
8788:
8789:
8790:
8791:
8792:
8793:
8794:
8795:
8796:
8797:
8798:
8799:
8800:
8801:
8802:
8803:
8804:
8805:
8806:
8807:
8808:
8809:
8810:
8811:
8812:
8813:
8814:
8815:
8816:
8817:
8818:
8819:
8820:
8821:
8822:
8823:
8824:
8825:
8826:
8827:
8828:
8829:
8830:
8831:
8832:
8833:
8834:
8835:
8836:
8837:
8838:
8839:
8840:
8841:
8842:
8843:
8844:
8845:
8846:
8847:
8848:
8849:
8850:
8851:
8852:
8853:
8854:
8855:
8856:
8857:
8858:
8859:
8860:
8861:
8862:
8863:
8864:
8865:
8866:
8867:
8868:
8869:
8870:
8871:
8872:
8873:
8874:
8875:
8876:
8877:
8878:
8879:
8880:
8881:
8882:
8883:
8884:
8885:
8886:
8887:
8888:
8889:
8890:
8891:
8892:
8893:
8894:
8895:
8896:
8897:
8898:
8899:
8900:
8901:
8902:
8903:
8904:
8905:
8906:
8907:
8908:
8909:
8910:
8911:
8912:
8913:
8914:
8915:
8916:
8917:
8918:
8919:
8920:
8921:
8922:
8923:
8924:
8925:
8926:
8927:
8928:
8929:
8930:
8931:
8932:
8933:
8934:
8935:
8936:
8937:
8938:
8939:
8940:
8941:
8942:
8943:
8944:
8945:
8946:
8947:
8948:
8949:
8950:
8951:
8952:
8953:
8954:
8955:
8956:
8957:
8958:
8959:
8960:
8961:
8962:
8963:
8964:
8965:
8966:
8967:
8968:
8969:
8970:
8971:
8972:
8973:
8974:
8975:
8976:
8977:
8978:
8979:
8980:
8981:
8982:
8983:
8984:
8985:
8986:
8987:
8988:
8989:
8990:
8991:
8992:
8993:
8994:
8995:
8996:
8997:
8998:
8999:
9000:
9001:
9002:
9003:
9004:
9005:
9006:
9007:
9008:
9009:
9010:
9011:
9012:
9013:
9014:
9015:
9016:
9017:
9018:
9019:
9020:
9021:
9022:
9023:
9024:
9025:
9026:
9027:
9028:
9029:
9030:
9031:
9032:
9033:
9034:
9035:
9036:
9037:
9038:
9039:
9040:
9041:
9042:
9043:
9044:
9045:
9046:
9047:
9048:
9049:
9050:
9051:
9052:
9053:
9054:
9055:
9056:
9057:
9058:
9059:
9060:
9061:
9062:
9063:
9064:
9065:
9066:
9067:
9068:
9069:
9070:
9071:
9072:
9073:
9074:
9075:
9076:
9077:
9078:
9079:
9080:
9081:
9082:
9083:
9084:
9085:
9086:
9087:
9088:
9089:
9090:
9091:
9092:
9093:
9094:
9095:
9096:
9097:
9098:
9099:
9100:
9101:
9102:
9103:
9104:
9105:
9106:
9107:
9108:
9109:
9110:
9111:
9112:
9113:
9114:
9115:
9116:
9117:
9118:
9119:
9120:
9121:
9122:
9123:
9124:
9125:
9126:
9127:
9128:
9129:
9130:
9131:
9132:
9133:
9134:
9135:
9136:
9137:
9138:
9139:
9140:
9141:
9142:
9143:
9144:
9145:
9146:
9147:
9148:
9149:
9150:
9151:
9152:
9153:
9154:
9155:
9156:
9157:
9158:
9159:
9160:
9161:
9162:
9163:
9164:
9165:
9166:
9167:
9168:
9169:
9170:
9171:
9172:
9173:
9174:
9175:
9176:
9177:
9178:
9179:
9180:
9181:
9182:
9183:
9184:
9185:
9186:
9187:
9188:
9189:
9190:
9191:
9192:
9193:
9194:
9195:
9196:
9197:
9198:
9199:
9200:
9201:
9202:
9203:
9204:
9205:
9206:
9207:
9208:
9209:
9210:
9211:
9212:
9213:
9214:
9215:
9216:
9217:
9218:
9219:
9220:
9221:
9222:
9223:
9224:
9225:
9226:
9227:
9228:
9229:
9230:
9231:
9232:
9233:
9234:
9235:
9236:
9237:
9238:
9239:
9240:
9241:
9242:
9243:
9244:
9245:
9246:
9247:
9248:
9249:
9250:
9251:
9252:
9253:
9254:
9255:
9256:
9257:
9258:
9259:
9260:
9261:
9262:
9263:
9264:
9265:
9266:
9267:
9268:
9269:
9270:
9271:
9272:
9273:
9274:
9275:
9276:
9277:
9278:
9279:
9280:
9281:
9282:
9283:
9284:
9285:
9286:
9287:
9288:
9289:
9290:
9291:
9292:
9293:
9294:
9295:
9296:
9297:
9298:
9299:
9300:
9301:
9302:
9303:
9304:
9305:
9306:
9307:
9308:
9309:
9310:
9311:
9312:
9313:
9314:
9315:
9316:
9317:
9318:
9319:
9320:
9321:
9322:
9323:
9324:
9325:
9326:
9327:
9328:
9329:
9330:
9331:
9332:
9333:
9334:
9335:
9336:
9337:
9338:
9339:
9340:
9341:
9342:
9343:
9344:
9345:
9346:
9347:
9348:
9349:
9350:
9351:
9352:
9353:
9354:
9355:
9356:
9357:
9358:
9359:
9360:
9361:
9362:
9363:
9364:
9365:
9366:
9367:
9368:
9369:
9370:
9371:
9372:
9373:
9374:
9375:
9376:
9377:
9378:
9379:
9380:
9381:
9382:
9383:
9384:
9385:
9386:
9387:
9388:
9389:
9390:
9391:
9392:
9393:
9394:
9395:
9396:
9397:
9398:
9399:
9400:
9401:
9402:
9403:
9404:
9405:
9406:
9407:
9408:
9409:
9410:
9411:
9412:
9413:
9414:
9415:
9416:
9417:
9418:
9419:
9420:
9421:
9422:
9423:
9424:
9425:
9426:
9427:
9428:
9429:
9430:
9431:
9432:
9433:
9434:
9435:
9436:
9437:
9438:
9439:
9440:
9441:
9442:
9443:
9444:
9445:
9446:
9447:
9448:
9449:
9450:
9451:
9452:
9453:
9454:
9455:
9456:
9457:
9458:
9459:
9460:
9461:
9462:
9463:
9464:
9465:
9466:
9467:
9468:
9469:
9470:
9471:
9472:
9473:
9474:
9475:
9476:
9477:
9478:
9479:
9480:
9481:
9482:
9483:
9484:
9485:
9486:
9487:
9488:
9489:
9490:
9491:
9492:
9493:
9494:
9495:
9496:
9497:
9498:
9499:
9500:
9501:
9502:
9503:
9504:
9505:
9506:
9507:
9508:
9509:
9510:
9511:
9512:
9513:
9514:
9515:
9516:
9517:
9518:
9519:
9520:
9521:
9522:
9523:
9524:
9525:
9526:
9527:
9528:
9529:
9530:
9531:
9532:
9533:
9534:
9535:
9536:
9537:
9538:
9539:
9540:
9541:
9542:
9543:
9544:
9545:
9546:
9547:
9548:
9549:
9550:
9551:
9552:
9553:
9554:
9555:
9556:
9557:
9558:
9559:
9560:
9561:
9562:
9563:
9564:
9565:
9566:
9567:
9568:
9569:
9570:
9571:
9572:
9573:
9574:
9575:
9576:
9577:
9578:
9579:
9580:
9581:
9582:
9583:
9584:
9585:
9586:
9587:
9588:
9589:
9590:
9591:
9592:
9593:
9594:
9595:
9596:
9597:
9598:
9599:
9600:
9601:
9602:
9603:
9604:
9605:
9606:
9607:
9608:
9609:
9610:
9611:
9612:
9613:
9614:
9615:
9616:
9617:
9618:
9619:
9620:
9621:
9622:
9623:
9624:
9625:
9626:
9627:
9628:
9629:
9630:
9631:
9632:
9633:
9634:
9635:
9636:
9637:
9638:
9639:
9640:
9641:
9642:
9643:
9644:
9645:
9646:
9647:
9648:
9649:
9650:
9651:
9652:
9653:
9654:
9655:
9656:
9657:
9658:
9659:
9660:
9661:
9662:
9663:
9664:
9665:
9666:
9667:
9668:
9669:
9670:
9671:
9672:
9673:
9674:
9675:
9676:
9677:
9678:
9679:
9680:
9681:
9682:
9683:
9684:
9685:
9686:
9687:
9688:
9689:
9690:
9691:
9692:
9693:
9694:
9695:
9696:
9697:
9698:
9699:
9700:
9701:
9702:
9703:
9704:
9705:
9706:
9707:
9708:
9709:
9710:
9711:
9712:
9713:
9714:
9715:
9716:
9717:
9718:
9719:
9720:
9721:
9722:
9723:
9724:
9725:
9726:
9727:
9728:
9729:
9730:
9731:
9732:
9733:
9734:
9735:
9736:
9737:
9738:
9739:
9740:
9741:
9742:
9743:
9744:
9745:
9746:
9747:
9748:
9749:
9750:
9751:
9752:
9753:
9754:
9755:
9756:
9757:
9758:
9759:
9760:
9761:
9762:
9763:
9764:
9765:
9766:
9767:
9768:
9769:
9770:
9771:
9772:
9773:
9774:
9775:
9776:
9777:
9778:
9779:
9780:
9781:
9782:
9783:
9784:
9785:
9786:
9787:
9788:
9789:
9790:
9791:
9792:
9793:
9794:
9795:
9796:
9797:
9798:
9799:
9800:
9801:
9802:
9803:
9804:
9805:
9806:
9807:
9808:
9809:
9810:
9811:
9812:
9813:
9814:
9815:
9816:
9817:
9818:
9819:
9820:
9821:
9822:
9823:
9824:
9825:
9826:
9827:
9828:
9829:
9830:
9831:
9832:
9833:
9834:
9835:
9836:
9837:
9838:
9839:
9840:
9841:
9842:
9843:
9844:
9845:
9846:
9847:
9848:
9849:
9850:
9851:
9852:
9853:
9854:
9855:
9856:
9857:
9858:
9859:
9860:
9861:
9862:
9863:
9864:
9865:
9866:
9867:
9868:
9869:
9870:
9871:
9872:
9873:
9874:
9875:
9876:
9877:
9878:
9879:
9880:
9881:
9882:
9883:
9884:
9885:
9886:
9887:
9888:
9889:
9890:
9891:
9892:
9893:
9894:
9895:
9896:
9897:
9898:
9899:
9900:
9901:
9902:
9903:
9904:
9905:
9906:
9907:
9908:
9909:
9910:
9911:
9912:
9913:
9914:
9915:
9916:
9917:
9918:
9919:
9920:
9921:
9922:
9923:
9924:
9925:
9926:
9927:
9928:
9929:
9930:
9931:
9932:
9933:
9934:
9935:
9936:
9937:
9938:
9939:
9940:
9941:
9942:
9943:
9944:
9945:
9946:
9947:
9948:
9949:
9950:
9951:
9952:
9953:
9954:
9955:
9956:
9957:
9958:
9959:
9960:
9961:
9962:
9963:
9964:
9965:
9966:
9967:
9968:
9969:
9970:
9971:
9972:
9973:
9974:
9975:
9976:
9977:
9978:
9979:
9980:
9981:
9982:
9983:
9984:
9985:
9986:
9987:
9988:
9989:
9990:
9991:
9992:
9993:
9994:
9995:
9996:
9997:
9998:
9999:
10000:
10001:
10002:
10003:
10004:
10005:
10006:
10007:
10008:
10009:
10010:
10011:
10012:
10013:
10014:
10015:
10016:
10017:
10018:
10019:
10020:
10021:
10022:
10023:
10024:
10025:
10026:
10027:
10028:
10029:
10030:
10031:
10032:
10033:
10034:
10035:
10036:
10037:
10038:
10039:
10040:
10041:
10042:
10043:
10044:
10045:
10046:
10047:
10048:
10049:
10050:
10051:
10052:
10053:
10054:
10055:
10056:
10057:
10058:
10059:
10060:
10061:
10062:
10063:
10064:
10065:
10066:
10067:
10068:
10069:
10070:
10071:
10072:
10073:
10074:
10075:
10076:
10077:
10078:
10079:
10080:
10081:
10082:
10083:
10084:
10085:
10086:
10087:
10088:
10089:
10090:
10091:
10092:
10093:
10094:
10095:
10096:
10097:
10098:
10099:
10100:
10101:
10102:
10103:
10104:
10105:
10106:
10107:
10108:
10109:
10110:
10111:
10112:
10113:
10114:
10115:
10116:
10117:
10118:
10119:
10120:
10121:
10122:
10123:
10124:
10125:
10126:
10127:
10128:
10129:
10130:
10131:
10132:
10133:
10134:
10135:
10136:
10137:
10138:
10139:
10140:
10141:
10142:
10143:
10144:
10145:
10146:
10147:
10148:
10149:
10150:
10151:
10152:
10153:
10154:
10155:
10156:
10157:
10158:
10159:
10160:
10161:
10162:
10163:
10164:
10165:
10166:
10167:
10168:
10169:
10170:
10171:
10172:
10173:
10174:
10175:
10176:
10177:
10178:
10179:
10180:
10181:
10182:
10183:
10184:
10185:
10186:
10187:
10188:
10189:
10190:
10191:
10192:
10193:
10194:
10195:
10196:
10197:
10198:
10199:
10200:
10201:
10202:
10203:
10204:
10205:
10206:
10207:
10208:
10209:
10210:
10211:
10212:
10213:
10214:
10215:
10216:
10217:
10218:
10219:
10220:
10221:
10222:
10223:
10224:
10225:
10226:
10227:
10228:
10229:
10230:
10231:
10232:
10233:
10234:
10235:
10236:
10237:
10238:
10239:
10240:
10241:
10242:
10243:
10244:
10245:
10246:
10247:
10248:
10249:
10250:
10251:
10252:
10253:
10254:
10255:
10256:
10257:
10258:
10259:
10260:
10261:
10262:
10263:
10264:
10265:
10266:
10267:
10268:
10269:
10270:
10271:
10272:
10273:
10274:
10275:
10276:
10277:
10278:
10279:
10280:
10281:
10282:
10283:
10284:
10285:
10286:
10287:
10288:
10289:
10290:
10291:
10292:
10293:
10294:
10295:
10296:
10297:
10298:
10299:
10300:
10301:
10302:
10303:
10304:
10305:
10306:
10307:
10308:
10309:
10310:
10311:
10312:
10313:
10314:
10315:
10316:
10317:
10318:
10319:
10320:
10321:
10322:
10323:
10324:
10325:
10326:
10327:
10328:
10329:
10330:
10331:
10332:
10333:
10334:
10335:
10336:
10337:
10338:
10339:
10340:
10341:
10342:
10343:
10344:
10345:
10346:
10347:
10348:
10349:
10350:
10351:
10352:
10353:
10354:
10355:
10356:
10357:
10358:
10359:
10360:
10361:
10362:
10363:
10364:
10365:
10366:
10367:
10368:
10369:
10370:
10371:
10372:
10373:
10374:
10375:
10376:
10377:
10378:
10379:
10380:
10381:
10382:
10383:
10384:
10385:
10386:
10387:
10388:
10389:
10390:
10391:
10392:
10393:
10394:
10395:
10396:
10397:
10398:
10399:
10400:
10401:
10402:
10403:
10404:
10405:
10406:
10407:
10408:
10409:
10410:
10411:
10412:
10413:
10414:
10415:
10416:
10417:
10418:
10419:
10420:
10421:
10422:
10423:
10424:
10425:
10426:
10427:
10428:
10429:
10430:
10431:
10432:
10433:
10434:
10435:
10436:
10437:
10438:
10439:
10440:
10441:
10442:
10443:
10444:
10445:
10446:
10447:
10448:
10449:
10450:
10451:
10452:
10453:
10454:
10455:
10456:
10457:
10458:
10459:
10460:
10461:
10462:
10463:
10464:
10465:
10466:
10467:
10468:
10469:
10470:
10471:
10472:
10473:
10474:
10475:
10476:
10477:
10478:
10479:
10480:
10481:
10482:
10483:
10484:
10485:
10486:
10487:
10488:
10489:
10490:
10491:
10492:
10493:
10494:
10495:
10496:
10497:
10498:
10499:
10500:
10501:
10502:
10503:
10504:
10505:
10506:
10507:
10508:
10509:
10510:
10511:
10512:
10513:
10514:
10515:
10516:
10517:
10518:
10519:
10520:
10521:
10522:
10523:
10524:
10525:
10526:
10527:
10528:
10529:
10530:
10531:
10532:
10533:
10534:
10535:
10536:
10537:
10538:
10539:
10540:
10541:
10542:
10543:
10544:
10545:
10546:
10547:
10548:
10549:
10550:
10551:
10552:
10553:
10554:
10555:
10556:
10557:
10558:
10559:
10560:
10561:
10562:
10563:
10564:
10565:
10566:
10567:
10568:
10569:
10570:
10571:
10572:
10573:
10574:
10575:
10576:
10577:
10578:
10579:
10580:
10581:
10582:
10583:
10584:
10585:
10586:
10587:
10588:
10589:
10590:
10591:
10592:
10593:
10594:
10595:
10596:
10597:
10598:
10599:
10600:
10601:
10602:
10603:
10604:
10605:
10606:
10607:
10608:
10609:
10610:
10611:
10612:
10613:
10614:
10615:
10616:
10617:
10618:
10619:
10620:
10621:
10622:
10623:
10624:
10625:
10626:
10627:
10628:
10629:
10630:
10631:
10632:
10633:
10634:
10635:
10636:
10637:
10638:
10639:
10640:
10641:
10642:
10643:
10644:
10645:
10646:
10647:
10648:
10649:
10650:
10651:
10652:
10653:
10654:
10655:
10656:
10657:
10658:
10659:
10660:
10661:
10662:
10663:
10664:
10665:
10666:
10667:
10668:
10669:
10670:
10671:
10672:
10673:
10674:
10675:
10676:
10677:
10678:
10679:
10680:
10681:
10682:
10683:
10684:
10685:
10686:
10687:
10688:
10689:
10690:
10691:
10692:
10693:
10694:
10695:
10696:
10697:
10698:
10699:
10700:
10701:
10702:
10703:
10704:
10705:
10706:
10707:
10708:
10709:
10710:
10711:
10712:
10713:
10714:
10715:
10716:
10717:
10718:
10719:
10720:
10721:
10722:
10723:
10724:
10725:
10726:
10727:
10728:
10729:
10730:
10731:
10732:
10733:
10734:
10735:
10736:
10737:
10738:
10739:
10740:
10741:
10742:
10743:
10744:
10745:
10746:
10747:
10748:
10749:
10750:
10751:
10752:
10753:
10754:
10755:
10756:
10757:
10758:
10759:
10760:
10761:
10762:
10763:
10764:
10765:
10766:
10767:
10768:
10769:
10770:
10771:
10772:
10773:
10774:
10775:
10776:
10777:
10778:
10779:
10780:
10781:
10782:
10783:
10784:
10785:
10786:
10787:
10788:
10789:
10790:
10791:
10792:
10793:
10794:
10795:
10796:
10797:
10798:
10799:
10800:
10801:
10802:
10803:
10804:
10805:
10806:
10807:
10808:
10809:
10810:
10811:
10812:
10813:
10814:
10815:
10816:
10817:
10818:
10819:
10820:
10821:
10822:
10823:
10824:
10825:
10826:
10827:
10828:
10829:
10830:
10831:
10832:
10833:
10834:
10835:
10836:
10837:
10838:
10839:
10840:
10841:
10842:
10843:
10844:
10845:
10846:
10847:
10848:
10849:
10850:
10851:
10852:
10853:
10854:
10855:
10856:
10857:
10858:
10859:
10860:
10861:
10862:
10863:
10864:
10865:
10866:
10867:
10868:
10869:
10870:
10871:
10872:
10873:
10874:
10875:
10876:
10877:
10878:
10879:
10880:
10881:
10882:
10883:
10884:
10885:
10886:
10887:
10888:
10889:
10890:
10891:
10892:
10893:
10894:
10895:
10896:
10897:
10898:
10899:
10900:
10901:
10902:
10903:
10904:
10905:
10906:
10907:
10908:
10909:
10910:
10911:
10912:
10913:
10914:
10915:
10916:
10917:
10918:
10919:
10920:
10921:
10922:
10923:
10924:
10925:
10926:
10927:
10928:
10929:
10930:
10931:
10932:
10933:
10934:
10935:
10936:
10937:
10938:
10939:
10940:
10941:
10942:
10943:
10944:
10945:
10946:
10947:
10948:
10949:
10950:
10951:
10952:
10953:
10954:
10955:
10956:
10957:
10958:
10959:
10960:
10961:
10962:
10963:
10964:
10965:
10966:
10967:
10968:
10969:
10970:
10971:
10972:
10973:
10974:
10975:
10976:
10977:
10978:
10979:
10980:
10981:
10982:
10983:
10984:
10985:
10986:
10987:
10988:
10989:
10990:
10991:
10992:
10993:
10994:
10995:
10996:
10997:
10998:
10999:
11000:
11001:
11002:
11003:
11004:
11005:
11006:
11007:
11008:
11009:
11010:
11011:
11012:
11013:
11014:
11015:
11016:
11017:
11018:
11019:
11020:
11021:
11022:
11023:
11024:
11025:
11026:
11027:
11028:
11029:
11030:
11031:
11032:
11033:
11034:
11035:
11036:
11037:
11038:
11039:
11040:
11041:
11042:
11043:
11044:
11045:
11046:
11047:
11048:
11049:
11050:
11051:
11052:
11053:
11054:
11055:
11056:
11057:
11058:
11059:
11060:
11061:
11062:
11063:
11064:
11065:
11066:
11067:
11068:
11069:
11070:
11071:
11072:
11073:
11074:
11075:
11076:
11077:
11078:
11079:
11080:
11081:
11082:
11083:
11084:
11085:
11086:
11087:
11088:
11089:
11090:
11091:
11092:
11093:
11094:
11095:
11096:
11097:
11098:
11099:
11100:
11101:
11102:
11103:
11104:
11105:
11106:
11107:
11108:
11109:
11110:
11111:
11112:
11113:
11114:
11115:
11116:
11117:
11118:
11119:
11120:
11121:
11122:
11123:
11124:
11125:
11126:
11127:
11128:
11129:
11130:
11131:
11132:
11133:
11134:
11135:
11136:
11137:
11138:
11139:
11140:
11141:
11142:
11143:
11144:
11145:
11146:
11147:
11148:
11149:
11150:
11151:
11152:
11153:
11154:
11155:
11156:
11157:
11158:
11159:
11160:
11161:
11162:
11163:
11164:
11165:
11166:
11167:
11168:
11169:
11170:
11171:
11172:
11173:
11174:
11175:
11176:
11177:
11178:
11179:
11180:
11181:
11182:
11183:
11184:
11185:
11186:
11187:
11188:
11189:
11190:
11191:
11192:
11193:
11194:
11195:
11196:
11197:
11198:
11199:
11200:
11201:
11202:
11203:
11204:
11205:
11206:
11207:
11208:
11209:
11210:
11211:
11212:
11213:
11214:
11215:
11216:
11217:
11218:
11219:
11220:
11221:
11222:
11223:
11224:
11225:
11226:
11227:
11228:
11229:
11230:
11231:
11232:
11233:
11234:
11235:
11236:
11237:
11238:
11239:
11240: public static final byte[] SMK6X8_FONT = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\20\20\20\0\0\20\0(((\0\0\0\0\0((|(|((\0\20<P8\24x\20\0`d\b\20 L\f\0000HP TH4\0000\20 \0\0\0\0\0\b\20 \20\b\0 \20\b\b\b\20 \0\0\20T8T\20\0\0\0\20\20|\20\20\0\0\0\0\0\0000\20 \0\0\0\0|\0\0\0\0\0\0\0\0\00000\0\0\4\b\20 @\0\08DLTdD8\0\0200\20\20\20\208\08D\4\b\20 |\0|\b\20\b\4D8\0\b\30(H|\b\b\0|@x\4\4D8\0\30 @xDD8\0|\4\b\20 \08DD8DD8\08DD<\4\b0\0\00000\00000\0\0\00000\0000\20 \0\b\20 @ \20\b\0\0\0|\0|\0\0\0 \20\b\4\b\20 \08D\4\b\20\0\20\08D\0044TT8\08DDD|DD\0xDDxDDx\08D@@@D8\0pHDDDHp\0|@@x@@|\0|@@x@@@\08D@\\DD<\0DDD|DDD\08\20\20\20\20\208\0\34\b\b\b\bH0\0DHP`PHD\0@@@@@@|\0DlTTDDD\0DDdTLDD\08DDDDD8\0xDDx@@@\08DDDTH4\0xDDxPHD\0<@@8\4\4x\0|\20\20\20\20\20\20\0DDDDDD8\0DDDDD(\20\0DDDTTT(\0DD(\20(DD\0DDD(\20\20\20\0|\4\b\20 @|\08 8\0D(|\20|\20\20\08\b\b\b\b\b8\0\20(D\0\0\0\0\0\0\0\0\0\0\0|\0 \20\b\0\0\0\0\0\0\08\4<D<\0@@XdDDx\0\0\08@@D8\0\4\0044LDD<\0\0\08D|@8\0\30$ p \0\0<DD<\48\0@@XdDDD\0\20\0000\20\20\208\0\b\0\30\b\bH0\0@@HP`PH\0000\20\20\20\20\208\0\0\0hTTDD\0\0\0XdDDD\0\0\08DDD8\0\0\0xDx@@\0\0\0004L<\4\4\0\0\0Xd@@@\0\0\08@8\4x\0 p $\30\0\0\0DDDL4\0\0\0DDD(\20\0\0\0DDTT(\0\0\0D(\20(D\0\0\0DD<\48\0\0\0|\b\20 |\0\b\20\20 \20\20\b\0\20\20\20\20\20\20\20\0 \20\20\b\20\20 \0\0\20\b|\b\20\0\0\0\20 | \20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pPp\0\34\20\20\20\0\0\0\0\0\0\0\20\20\20p\0\0\0\0\0@ \20\0\0\0\00000\0\0\0\0|\4|\4\b\20\0\0\0|\4\30\20 \0\0\0\b\0200P\20\0\0\0\20|D\4\30\0\0\0\0|\20\20|\0\0\0\b|\30(H\0\0\0 |$( \0\0\0\08\b\b|\0\0\0x\bx\bx\0\0\0\0TT\4\30\0\0\0\0|\0\0\0\0|\4\24\30\20\20 \0\4\b\0200P\20\20\0\20|DD\4\b\20\0\0|\20\20\20\20|\0\b|\b\30(H\b\0 |$$$$H\0\20|\20|\20\20\20\0\0<$D\4\b0\0 <H\b\b\b\20\0\0|\4\4\4\4|\0(|((\b\20 \0\0`\4d\4\bp\0\0|\4\b\20(D\0 |$( \34\0\0DD$\4\b0\0\0<$T\f\b0\0\bp\20|\20\20 \0\0TTT\4\b\20\08\0|\20\20\20 \0 0( \0\20\20|\20\20 @\0\08\0\0\0\0|\0\0|\4(\20(@\0\20|\b\208T\20\0\b\b\b\b\b\20 \0\0\20\bDDDD\0@@|@@@<\0\0|\4\4\4\b0\0\0 P\b\4\4\0\0\20|\20\20TT\20\0\0|\4\4(\20\b\0\08\08\08\4\0\0\20 @D|\4\0\0\4\4(\20(@\0\0| | \34\0 |$( \0\08\b\b\b\b|\0\0|\4|\4\4|\08\0|\4\4\b\20\0HHHH\b\20 \0\0\20PPTTX\0\0@@DHP`\0\0|DDDD|\0\0|DD\4\b\20\0\0`\0\4\4\bp\0\20H \0\0\0\0\0pPp\0\0\0\0\0\0\0$THH4\0(\08\4<D<\0\0\08DxDx@\0\08@0D8\0\0\0DDDLt@\0\0<PHD8\0\0\0\30$DDx@\0\0<DDD<\4\0\0\34\20\20P \0\0\bh\b\0\0\0\0\b\0\30\b\b\b\b\b\0P P\0\0\0\0\0\208PT8\20\0 p p <\08\0XdDDD\0(\08DDD8\0\0\0XdDDx@\0000LDD<\4\4\08D|DD8\0\0\0\0,Th\0\0\0\08DD(l\0(\0DDDDL4|@ \20 @|\0\0\0|(((L\0|\0D(\20(D\0\0\0DDDD<\4\0\4x\20|\20\20\0\0\0| <$D\0\0\0|T|DD\0\0\20\0|\0\20\0\0\0\0\0\0\0\0\0\0||||||||\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 08<80 \0\b\308x8\30\b\0$Hl\0\0\0\0\0l$H\0\0\0\0\0\208|\0\208|\0|8\20\0|8\20\0\08|||8\0\0\4\4\24$| \20\0\208T\20\20\20\20\0\20\20\20\20T8\20\0\0\20\b|\b\20\0\0\0\20 | \20\0\0\b\20 \20\b\0|\0 \20\b\20 \0|\0\0\20\2088|\0\0\0|88\20\20\0\0\0\0\0\0\0\0\0\0\20\20\20\20\0\0\20\0(((\0\0\0\0\0((|(|((\0\20<P8\24x\20\0`d\b\20 L\f\0000HP TH4\0000\20 \0\0\0\0\0\b\20 \20\b\0 \20\b\b\b\20 \0\0\20T8T\20\0\0\0\20\20|\20\20\0\0\0\0\0\0000\20 \0\0\0\0|\0\0\0\0\0\0\0\0\00000\0\0\4\b\20 @\0\08DLTdD8\0\0200\20\20\20\208\08D\4\b\20 |\0|\b\20\b\4D8\0\b\30(H|\b\b\0|@x\4\4D8\0\30 @xDD8\0|D\4\b\20\20\20\08DD8DD8\08DD<\4\b0\0\00000\00000\0\0\00000\0000\20 \0\b\20 @ \20\b\0\0\0|\0|\0\0\0 \20\b\4\b\20 \08D\4\b\20\0\20\08D\0044TT8\0\20(DD|DD\0xDDxDDx\08D@@@D8\0pHDDDHp\0|@@x@@|\0|@@x@@@\08D@\\DD<\0DDD|DDD\08\20\20\20\20\208\0\34\b\b\b\bH0\0DHP`PHD\0@@@@@@|\0DlTTDDD\0DDdTLDD\08DDDDD8\0xDDx@@@\08DDDTH4\0xDDxPHD\08D@8\4D8\0|\20\20\20\20\20\20\0DDDDDD8\0DDDDD(\20\0DDDTTT(\0DD(\20(DD\0DDD(\20\20\20\0|\4\b\20 @|\08 8\0\0@ \20\b\4\0\08\b\b\b\b\b8\0\20(D\0\0\0\0\0\0\0\0\0\0\0|\0 \20\b\0\0\0\0\0\0\08\4<D<\0@@XdDDx\0\0\08@@D8\0\4\0044LDD<\0\0\08D|@8\0\30$ p \0\0\0<D<\48\0@@XdDDD\0\20\0\0200\20\208\0\b\0\30\b\bH0\0@@HP`PH\0000\20\20\20\20\208\0\0\0hTTTT\0\0\0XdDDD\0\0\08DDD8\0\0\0xDx@@\0\0\0004L<\4\4\0\0\0Xd@@@\0\0\08@8\4x\0 p $\30\0\0\0DDDL4\0\0\0DDD(\20\0\0\0DDTT(\0\0\0D(\20(D\0\0\0DD<\48\0\0\0|\b\20 |\0\b\20\20 \20\20\b\0\20\20\20\20\20\20\20\0 \20\20\b\20\20 \0\0\0\0004H\0\0\0\20(DDD|\0\0|D@xDDx<\24\24$D|DD\0TTT8TTT\0x\4\4\30\4\4x\0DDLTdDD(\20DDLTdD\0<\24\24\24\24T$\0|DDDDDD\0DDD(\20 @\0DDDDD|\4\0DDD<\4\4\4\0\0TTTTT|\0TTTTT|\4\0` 8$$8\0DDDdTTd\08D\24,\4D8\0\0\0$THH4\0\20\30\24\24\20pp\0|D@@@@@\0\0\0|(((L\0|@ \20 @|\0\0\0<HHH0\30\24\34\24\24tl\f\0\0\48P\20\20\b\0\20888|\20\0\08DD|DD8\0\08DDD(l\0\30$\20(DD8\0\0\0,Th\0\0\0\0(|||8\20\0\0\08@0D8\08DDDDDD\0lllllll\0\20\0\0\20\20\20\20\0\208PPT8\20\0\30 p $X\0\0D8(8D\0\0D(|\20|\20\20\0\20\20\20\0\20\20\20\0\30$\20(\20H0\0\b\24\20|\20P \0|DT\\TD|\08\4<D<\0|\0\0\24(P(\24\0\0HTTtTTH\0<DD<\24$D\0|DTDLT|\0\20 0\0\0\0\0000HHH0\0\0\0\0\20\20|\20\20\0|0H\20 x\0\0\0p\b0\bp\0\0\0pHp@H\\H\f\0DDDLt@@\0<LL<\f\f\f\0\0\0\00000\0\0\0\0\0(DTT( ` p\0\0\0\08DDD8\0|\0\0P(\24(P\0DHP(X(<\bDHP(T\4\b\34` `$l\24\34\4\0\20\0\20 @D8 \20\20(D|DD\b\20\20(D|DD\20(\08D|DD4H\08D|DD(\0\20(D|DD\20(\208D|DD\0\0340P\\pP\\8D@@D8\b\30 \20\0|@x@|\b\20\0|@x@|\20(\0|@x@|\0(\0|@x@| \20\08\20\20\208\b\20\08\20\20\208\20(\08\20\20\208\0(\08\20\20\208\08$$t$$84H\0DdTLD \208DDDD8\b\208DDDD8\20(\08DDD84H\08DDD8(\08DDDD8\0\0D(\20(D\0\08\208T8\208 \20DDDDD8\b\20DDDDD8\20(\0DDDD8(\0DDDDD8\b\20D(\20\20\20\20` 8$$8 `\0\30$$8$$X \20\08\4<D<\b\20\08\4<D<\20(\08\4<D<4H\08\4<D<\0(\08\4<D<\20(\208\4<D<\0\0h\24<PT(\0\08@D8\0200 \20\08D|@8\b\20\08D|@8\20(\08D|@8\0(\08D|@8 \20\0\0200\20\208\b\20\0\0200\20\208\20(\0\0200\20\208\0(\0\0200\20\208\0P P\b<D84H\0XdDDD \20\08DDD8\b\20\08DDD8\0\20(\08DD8\0004H\08DD8\0(\08DDD8\0\0\20\0|\0\20\0\0\b\208T8\20 \20\0DDDL4\b\20\0DDDL4\20(\0DDDL4\0(\0DDDL4\0\b\20DD<\48\0000\20\30\24\30\208\0(\0DD<\48".getBytes (XEiJ.ISO_8859_1);
11241:
11242: }
11243:
11244:
11245:
11246: }
11247:
11248:
11249: