MMLCompiler.java
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13: package xeij;
14:
15: import java.util.*;
16:
17: public class MMLCompiler {
18:
19: public static final int TONES = 200;
20: public static final int TRACKS = 80;
21:
22:
23:
24: public MMLCompiler () {
25:
26: mmcToneData = new byte[55 * TONES];
27: System.arraycopy (TONE_DATA_68, 0, mmcToneData, 0, TONE_DATA_68.length);
28: Arrays.fill (mmcToneData, TONE_DATA_68.length, 55 * TONES, (byte) 0);
29:
30: mmcTempo = (60.0 / 120.0) / 48.0 * 1000000.0;
31:
32: mmcTqToTrack = new Track[TRACKS];
33: for (int tq = 0; tq < TRACKS; tq++) {
34: mmcTqToTrack[tq] = new Track (tq);
35: }
36: mmcCnToTq = new int[8];
37: for (int cn = 0; cn < 8; cn++) {
38: mmcCnToTq[cn] = -1;
39: }
40: }
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83: public int[] compile (String program) {
84: mmcProgram = program;
85: mmcIndex = 0;
86: mmcLine = 1;
87: mmcOutput = new ArrayList<Integer> ();
88: mmcError = "";
89: for (;;) {
90: mmcSkipSpace (-1);
91: int c = mmcGetChar ();
92: if (c == -1) {
93: break;
94: }
95: if (c != '(') {
96: mmcError = "line " + mmcLine + ": ( not found";
97: return null;
98: }
99: c = mmcGetChar ();
100: boolean success = true;
101: if (c == 'A' || c == 'a') {
102: success = mmcCommandA ();
103: } else if (c == 'I' || c == 'i') {
104: success = mmcCommandI ();
105: } else if (c == 'M' || c == 'm') {
106: success = mmcCommandM ();
107: } else if (c == 'P' || c == 'p') {
108: success = mmcCommandP ();
109: } else if (c == 'T' || c == 't') {
110: success = mmcCommandT ();
111: } else if (c == 'V' || c == 'v') {
112: success = mmcCommandV ();
113: } else {
114: mmcError = "line " + mmcLine + ": unknown command";
115: return null;
116: }
117: if (!success) {
118: return null;
119: }
120: }
121:
122: mmcOutput.add (mmcTqToTrack[0].getTimeUS ());
123: mmcOutput.add (-1);
124:
125: int size = mmcOutput.size ();
126: int[] array = new int[size];
127: for (int i = 0; i < size; i++) {
128: array[i] = mmcOutput.get (i);
129: }
130: mmcOutput = null;
131: return array;
132: }
133:
134:
135:
136: public String getError () {
137: return mmcError;
138: }
139:
140:
141:
142: protected byte[] mmcToneData;
143: protected double mmcTempo;
144: protected Track[] mmcTqToTrack;
145: protected int[] mmcCnToTq;
146:
147: protected String mmcProgram;
148: protected int mmcIndex;
149: protected int mmcLine;
150: protected ArrayList<Integer> mmcOutput;
151: protected String mmcError;
152:
153:
154:
155:
156: protected int mmcGetChar () {
157: int c = -1;
158: if (mmcIndex < mmcProgram.length ()) {
159: c = mmcProgram.charAt (mmcIndex++);
160: if (c == '\n') {
161: mmcLine++;
162: }
163: }
164: return c;
165: }
166:
167:
168:
169:
170: protected void mmcUngetChar (int c) {
171: if (c != -1) {
172: mmcIndex--;
173: if (c == '\n') {
174: mmcLine--;
175: }
176: }
177: }
178:
179:
180:
181:
182:
183:
184: protected int mmcSkipSpace (int comma) {
185: for (;;) {
186: int c = mmcGetChar ();
187: if (c == -1) {
188: return -1;
189: }
190: if (c <= ' ') {
191: continue;
192: }
193: if (c == '/') {
194: do {
195: c = mmcGetChar ();
196: if (c == -1) {
197: return -1;
198: }
199: } while (c != '\n');
200: continue;
201: }
202: if (c == comma) {
203: comma = -1;
204: continue;
205: }
206: mmcUngetChar (c);
207: return c;
208: }
209: }
210:
211:
212:
213:
214:
215:
216: protected int mmcGetNumber (int comma) {
217: mmcSkipSpace (comma);
218: int n = -1;
219: int c = mmcGetChar ();
220: if (c == '$') {
221: c = mmcGetChar ();
222: if (('0' <= c && c <= '9') ||
223: ('A' <= c && c <= 'F') ||
224: ('a' <= c && c <= 'f')) {
225: n = 0;
226: do {
227: n = 16 * n + (c <= '9' ? c - '0' : (c | 0x20) - 'a' + 10);
228: c = mmcGetChar ();
229: } while (('0' <= c && c <= '9') ||
230: ('A' <= c && c <= 'F') ||
231: ('a' <= c && c <= 'f'));
232: }
233: } else {
234: if ('0' <= c && c <= '9') {
235: n = 0;
236: do {
237: n = 10 * n + (c - '0');
238: c = mmcGetChar ();
239: } while ('0' <= c && c <= '9');
240: }
241: }
242: mmcUngetChar (c);
243: return n;
244: }
245:
246:
247:
248:
249:
250:
251:
252:
253: protected boolean mmcCommandA () {
254:
255: int c = mmcGetChar ();
256: if (c == 'F' || c == 'f') {
257: c = mmcGetChar ();
258: if (c == 'M' || c == 'm') {
259: } else {
260: mmcUngetChar (c);
261: mmcError = "line " + mmcLine + ": syntax error";
262: }
263: } else {
264: mmcUngetChar (c);
265: }
266: int ch = mmcGetNumber (-1);
267: if (ch < 1 || 8 < ch) {
268: mmcError = "line " + mmcLine + ": channel out of range";
269: return false;
270: }
271: int cn = ch - 1;
272:
273: int tr = mmcGetNumber (',');
274: if (tr < 1 || TRACKS < tr) {
275: mmcError = "line " + mmcLine + ": track number out of range";
276: return false;
277: }
278: int tq = tr - 1;
279: c = mmcGetChar ();
280: if (c != ')') {
281: mmcError = "line " + mmcLine + ": ) not found";
282: return false;
283: }
284: mmcCnToTq[cn] = tq;
285: return true;
286: }
287:
288:
289:
290:
291:
292:
293:
294:
295: protected boolean mmcCommandI () {
296:
297: int mode = mmcGetNumber (-1);
298: if (mode == -1) {
299: mode = 0;
300: } else {
301: if (mode < 0 || 2 < mode) {
302: mmcError = "line " + mmcLine + ": mode out of range";
303: return false;
304: }
305: }
306: int c = mmcGetChar ();
307: if (c != ')') {
308: mmcError = "line " + mmcLine + ": ) not found";
309: return false;
310: }
311: if (mode == 1) {
312: System.arraycopy (TONE_DATA_68, 0, mmcToneData, 0, TONE_DATA_68.length);
313: Arrays.fill (mmcToneData, TONE_DATA_68.length, 55 * TONES, (byte) 0);
314: } else if (mode == 2) {
315: System.arraycopy (TONE_DATA_X1, 0, mmcToneData, 0, TONE_DATA_X1.length);
316: Arrays.fill (mmcToneData, TONE_DATA_X1.length, 55 * TONES, (byte) 0);
317: }
318:
319: mmcTempo = (60.0 / 120.0) / 48.0 * 1000000.0;
320:
321: for (int tq = 0; tq < TRACKS; tq++) {
322: Track track = mmcTqToTrack[tq];
323: track.init ();
324: }
325: return true;
326: }
327:
328:
329:
330:
331:
332:
333:
334:
335: protected boolean mmcCommandM () {
336:
337: int tr = mmcGetNumber (-1);
338: if (tr == -1) {
339: mmcError = "line " + mmcLine + ": track number not specified";
340: return false;
341: }
342: if (tr < 1 || TRACKS < tr) {
343: mmcError = "line " + mmcLine + ": track number out of range";
344: return false;
345: }
346: int tq = tr - 1;
347:
348: int size = mmcGetNumber (',');
349: if (size == -1) {
350: mmcError = "line " + mmcLine + ": size not specified";
351: return false;
352: }
353: int c = mmcGetChar ();
354: if (c != ')') {
355: mmcError = "line " + mmcLine + ": ) not found";
356: return false;
357: }
358:
359: return true;
360: }
361:
362:
363:
364:
365:
366:
367: protected boolean mmcCommandP () {
368: mmcSkipSpace (-1);
369: int c = mmcGetChar ();
370: if (c != ')') {
371: mmcError = "line " + mmcLine + ": ) not found";
372: return false;
373: }
374:
375: for (;;) {
376:
377: int selectedTimeUS = Integer.MAX_VALUE;
378: Track selectedTrack = null;
379: for (int tq = 0; tq < TRACKS; tq++) {
380: Track track = mmcTqToTrack[tq];
381: if (track.hasNext ()) {
382: int timeUS = track.getTimeUS ();
383: if (timeUS < selectedTimeUS) {
384: selectedTimeUS = timeUS;
385: selectedTrack = track;
386: }
387: }
388: }
389:
390: if (selectedTrack == null) {
391: break;
392: }
393:
394: if (!selectedTrack.trkCommand ()) {
395: return false;
396: }
397: }
398:
399: int endTimeUS = 0;
400: for (int tq = 0; tq < TRACKS; tq++) {
401: Track track = mmcTqToTrack[tq];
402: int timeUS = track.getTimeUS ();
403: if (endTimeUS < timeUS) {
404: endTimeUS = timeUS;
405: }
406: }
407: endTimeUS += 1000000 * 2;
408: for (int tq = 0; tq < TRACKS; tq++) {
409: Track track = mmcTqToTrack[tq];
410: track.flush ();
411: track.setTimeUS (endTimeUS);
412: }
413: return true;
414: }
415:
416:
417:
418:
419:
420:
421:
422: protected boolean mmcCommandT () {
423: int tr = mmcGetNumber (-1);
424: if (tr == -1) {
425: mmcError = "line " + mmcLine + ": track number not specified";
426: return false;
427: }
428: if (tr < 1 || TRACKS < tr) {
429: mmcError = "line " + mmcLine + ": track number out of range";
430: return false;
431: }
432: int tq = tr - 1;
433: mmcSkipSpace (-1);
434: int c = mmcGetChar ();
435: if (c == -1 || c != ')') {
436: mmcError = "line " + mmcLine + ": ) not found";
437: return false;
438: }
439: int start = mmcIndex;
440: while (c != -1 && c != '(') {
441: c = mmcGetChar ();
442: }
443: mmcUngetChar (c);
444: int end = mmcIndex;
445: Track track = mmcTqToTrack[tq];
446: track.add (mmcProgram.substring (start, end));
447: return true;
448: }
449:
450:
451:
452:
453:
454:
455:
456:
457: protected boolean mmcCommandV () {
458:
459: int n = mmcGetNumber (-1);
460: if (n == -1) {
461: mmcError = "line " + mmcLine + ": tone number not specified";
462: return false;
463: }
464: if (n < 1 || 200 < n) {
465: mmcError = "line " + mmcLine + ": tone number out of range";
466: return false;
467: }
468:
469: int s = mmcGetNumber (',');
470: if (s == -1) {
471: mmcError = "line " + mmcLine + ": start position not specified";
472: return false;
473: }
474: if (s < 0 || 54 <= s) {
475: mmcError = "line " + mmcLine + ": start position out of range";
476: return false;
477: }
478:
479: for (int i = s; i < 55; i++) {
480: int e = mmcGetNumber (',');
481: if (e == -1) {
482: mmcError = "line " + mmcLine + ": tone element not specified";
483: return false;
484: }
485: if (e < 0 || (TONE_MASK[i] & 255) < e) {
486: mmcError = "line " + mmcLine + ": tone element out of range";
487: return false;
488: }
489: mmcToneData[55 * (n - 1) + i] = (byte) e;
490: }
491: mmcSkipSpace (-1);
492: int c = mmcGetChar ();
493: if (c != ')') {
494: mmcError = "line " + mmcLine + ": ) not found";
495: return false;
496: }
497: return true;
498: }
499:
500:
501:
502:
503:
504: protected class Track {
505:
506:
507:
508:
509: public Track (int tq) {
510: trkTq = tq;
511:
512: init ();
513: }
514:
515:
516:
517: public void init () {
518: trkTi = 55 * (1 - 1);
519: trkLength = 48;
520: trkOctave = 4;
521: trkPan = 3;
522: trkGate = 0;
523: trkVolume = trkVToAtV[8];
524: trkKeyTranspose = 0;
525: trkDetune = 0;
526:
527: flush ();
528: }
529:
530:
531:
532: public void flush () {
533: trkMML = new StringBuilder ();
534: trkIndex = 0;
535: trkTimeUS = 0;
536: trkKeyOff = false;
537: trkWaitUS = 0;
538: trkTie = false;
539: }
540:
541:
542:
543: public void add (String mml) {
544: trkMML.append (mml);
545: }
546:
547:
548:
549: public boolean hasNext () {
550: return trkIndex < trkMML.length () || trkKeyOff;
551: }
552:
553:
554:
555: public int getTimeUS () {
556: return trkTimeUS;
557: }
558:
559:
560:
561: public void setTimeUS (int timeUS) {
562: trkTimeUS = timeUS;
563: }
564:
565:
566:
567: protected int trkTq;
568:
569: protected int trkTi;
570: protected int trkLength;
571: protected int trkOctave;
572: protected int trkPan;
573: protected int trkGate;
574: protected int trkVolume;
575: protected int trkKeyTranspose;
576: protected int trkDetune;
577:
578: protected StringBuilder trkMML;
579: protected int trkIndex;
580: protected int trkTimeUS;
581: protected boolean trkKeyOff;
582: protected int trkWaitUS;
583: protected boolean trkTie;
584:
585:
586: protected int trkGetChar () {
587: return trkIndex < trkMML.length () ? trkMML.charAt (trkIndex++) : -1;
588: }
589:
590:
591: protected void trkUngetChar (int c) {
592: if (0 < trkIndex && c != -1) {
593: trkIndex--;
594: }
595: }
596:
597:
598: protected int trkSkipSpace () {
599: int c = trkGetChar ();
600: while (c != -1 && c <= ' ') {
601: c = trkGetChar ();
602: }
603: trkUngetChar (c);
604: return c;
605: }
606:
607:
608: protected int trkGetNumber () {
609: trkSkipSpace ();
610: int n = -1;
611: int c = trkGetChar ();
612: if (c == '$') {
613: c = trkGetChar ();
614: if (('0' <= c && c <= '9') ||
615: ('A' <= c && c <= 'F') ||
616: ('a' <= c && c <= 'f')) {
617: n = 0;
618: do {
619: n = 16 * n + (c <= '9' ? c - '0' : (c | 0x20) - 'a' + 10);
620: c = trkGetChar ();
621: } while (('0' <= c && c <= '9') ||
622: ('A' <= c && c <= 'F') ||
623: ('a' <= c && c <= 'f'));
624: }
625: } else {
626: if ('0' <= c && c <= '9') {
627: n = 0;
628: do {
629: n = 10 * n + (c - '0');
630: c = trkGetChar ();
631: } while ('0' <= c && c <= '9');
632: }
633: }
634: trkUngetChar (c);
635: return n;
636: }
637:
638:
639:
640: protected boolean trkCommand () {
641:
642: if (trkKeyOff) {
643: trkKeyOff = false;
644: for (int cn = 0; cn < 8; cn++) {
645: if (mmcCnToTq[cn] == trkTq) {
646: trkSetData (0x08, cn);
647: }
648: }
649: if (trkWaitUS != 0) {
650: trkTimeUS += trkWaitUS;
651: trkWaitUS = 0;
652: return true;
653: }
654: }
655:
656: int startTimeUS = trkTimeUS;
657: boolean success = true;
658: do {
659: trkSkipSpace ();
660: int c = trkGetChar ();
661: if (c == -1) {
662: return true;
663: }
664: if (c == 'A' || c == 'a') {
665: success = trkCommandA (8);
666: } else if (c == 'B' || c == 'b') {
667: success = trkCommandA (10);
668: } else if (c == 'C' || c == 'c') {
669: success = trkCommandA (-1);
670: } else if (c == 'D' || c == 'd') {
671: success = trkCommandA (1);
672: } else if (c == 'E' || c == 'e') {
673: success = trkCommandA (3);
674: } else if (c == 'F' || c == 'f') {
675: success = trkCommandA (4);
676: } else if (c == 'G' || c == 'g') {
677: success = trkCommandA (6);
678: } else if (c == 'K' || c == 'k') {
679: success = trkCommandK ();
680: } else if (c == 'O' || c == 'o') {
681: success = trkCommandO ();
682: } else if (c == 'P' || c == 'p') {
683: success = trkCommandP ();
684: } else if (c == 'Q' || c == 'q') {
685: success = trkCommandQ ();
686: } else if (c == 'R' || c == 'r') {
687: success = trkCommandA (92);
688: } else if (c == 'T' || c == 't') {
689: success = trkCommandT ();
690: } else if (c == 'V' || c == 'v') {
691: success = trkCommandV ();
692: } else if (c == 'Y' || c == 'y') {
693: success = trkCommandY ();
694: } else if (c == '@') {
695: trkSkipSpace ();
696: c = trkGetChar ();
697: if (c == 'K' || c == 'k') {
698: success = trkCommandAtK ();
699: } else if (c == 'L' || c == 'l') {
700: success = trkCommandAtL ();
701: } else if (c == 'V' || c == 'v') {
702: success = trkCommandAtV ();
703: } else if (c == 'W' || c == 'w') {
704: success = trkCommandA (92);
705: } else {
706: trkUngetChar (c);
707: success = trkCommandAt ();
708: }
709: } else if (c == '<') {
710: success = trkCommandLessThan ();
711: } else if (c == '>') {
712: success = trkCommandGreaterThan ();
713: } else if (c == '{') {
714:
715: } else {
716: trkUngetChar (c);
717: success = trkSyntaxError ();
718: }
719: } while (success && startTimeUS == trkTimeUS);
720: return success;
721: }
722:
723:
724: protected boolean trkCommandAt () {
725:
726: int n = trkGetNumber ();
727: if (n == -1) {
728: return trkSyntaxError ();
729: }
730: trkTi = 55 * (n - 1);
731:
732:
733: trkPan = mmcToneData[trkTi + 9] & 3;
734: trkSetDataAll (0x20, trkPan << 6 | (mmcToneData[trkTi + 0] & 63));
735:
736:
737: trkSetData (0x1b, mmcToneData[trkTi + 2] & 3);
738:
739:
740: trkSetData (0x18, mmcToneData[trkTi + 4] & 255);
741:
742: trkSetData (0x19, 1 << 7 | (mmcToneData[trkTi + 5] & 127));
743:
744: trkSetData (0x19, 0 << 7 | (mmcToneData[trkTi + 6] & 127));
745:
746:
747: trkSetDataAll (0x38, (mmcToneData[trkTi + 7] & 7) << 4 | (mmcToneData[trkTi + 8] & 3));
748:
749:
750:
751: trkSetDataAll (0x80, (mmcToneData[trkTi + 11 + 6] & 3) << 6 | (mmcToneData[trkTi + 11 + 0] & 31));
752: trkSetDataAll (0x88, (mmcToneData[trkTi + 33 + 6] & 3) << 6 | (mmcToneData[trkTi + 33 + 0] & 31));
753: trkSetDataAll (0x90, (mmcToneData[trkTi + 22 + 6] & 3) << 6 | (mmcToneData[trkTi + 22 + 0] & 31));
754: trkSetDataAll (0x98, (mmcToneData[trkTi + 44 + 6] & 3) << 6 | (mmcToneData[trkTi + 44 + 0] & 31));
755:
756:
757: trkSetDataAll (0xa0, (mmcToneData[trkTi + 11 + 10] & 1) << 7 | (mmcToneData[trkTi + 11 + 1] & 31));
758: trkSetDataAll (0xa8, (mmcToneData[trkTi + 33 + 10] & 1) << 7 | (mmcToneData[trkTi + 33 + 1] & 31));
759: trkSetDataAll (0xb0, (mmcToneData[trkTi + 22 + 10] & 1) << 7 | (mmcToneData[trkTi + 22 + 1] & 31));
760: trkSetDataAll (0xb8, (mmcToneData[trkTi + 44 + 10] & 1) << 7 | (mmcToneData[trkTi + 44 + 1] & 31));
761:
762:
763: trkSetDataAll (0xc0, (mmcToneData[trkTi + 11 + 9] & 3) << 6 | (mmcToneData[trkTi + 11 + 2] & 31));
764: trkSetDataAll (0xc8, (mmcToneData[trkTi + 33 + 9] & 3) << 6 | (mmcToneData[trkTi + 33 + 2] & 31));
765: trkSetDataAll (0xd0, (mmcToneData[trkTi + 22 + 9] & 3) << 6 | (mmcToneData[trkTi + 22 + 2] & 31));
766: trkSetDataAll (0xd8, (mmcToneData[trkTi + 44 + 9] & 3) << 6 | (mmcToneData[trkTi + 44 + 2] & 31));
767:
768:
769: trkSetDataAll (0xe0, (mmcToneData[trkTi + 11 + 4] & 15) << 4 | (mmcToneData[trkTi + 11 + 3] & 15));
770: trkSetDataAll (0xe8, (mmcToneData[trkTi + 33 + 4] & 15) << 4 | (mmcToneData[trkTi + 33 + 3] & 15));
771: trkSetDataAll (0xf0, (mmcToneData[trkTi + 22 + 4] & 15) << 4 | (mmcToneData[trkTi + 22 + 3] & 15));
772: trkSetDataAll (0xf8, (mmcToneData[trkTi + 44 + 4] & 15) << 4 | (mmcToneData[trkTi + 44 + 3] & 15));
773:
774:
775:
776:
777:
778:
779:
780:
781:
782:
783:
784:
785:
786:
787:
788:
789:
790:
791:
792:
793:
794:
795:
796:
797:
798: int con = mmcToneData[trkTi + 0] & 7;
799: trkSetDataAll (0x60, Math.min (127, (mmcToneData[trkTi + 11 + 5] & 127) + (con < 7 ? 0 : 127 - trkVolume)));
800: trkSetDataAll (0x68, Math.min (127, (mmcToneData[trkTi + 33 + 5] & 127) + (con < 5 ? 0 : 127 - trkVolume)));
801: trkSetDataAll (0x70, Math.min (127, (mmcToneData[trkTi + 22 + 5] & 127) + (con < 4 ? 0 : 127 - trkVolume)));
802: trkSetDataAll (0x78, Math.min (127, (mmcToneData[trkTi + 44 + 5] & 127) + ( 127 - trkVolume)));
803:
804:
805: trkSetDataAll (0x40, (mmcToneData[trkTi + 11 + 8] & 7) << 4 | (mmcToneData[trkTi + 11 + 7] & 15));
806: trkSetDataAll (0x48, (mmcToneData[trkTi + 33 + 8] & 7) << 4 | (mmcToneData[trkTi + 33 + 7] & 15));
807: trkSetDataAll (0x50, (mmcToneData[trkTi + 22 + 8] & 7) << 4 | (mmcToneData[trkTi + 22 + 7] & 15));
808: trkSetDataAll (0x58, (mmcToneData[trkTi + 44 + 8] & 7) << 4 | (mmcToneData[trkTi + 44 + 7] & 15));
809: return true;
810: }
811:
812:
813:
814: @SuppressWarnings ("fallthrough") protected boolean trkCommandA (int note12) {
815:
816: int sharp = 0;
817: if (note12 != 92) {
818: trkSkipSpace ();
819: int c = trkGetChar ();
820: while (c == '#' || c == '+' || c == '-') {
821: sharp += c == '-' ? -1 : 1;
822: c = trkGetChar ();
823: }
824: trkUngetChar (c);
825: }
826:
827: int length = trkLength;
828: trkSkipSpace ();
829: int c = trkGetChar ();
830: if (c == '*') {
831:
832: int n = trkGetNumber ();
833: if (n == -1) {
834: return trkSyntaxError ();
835: }
836: length = n;
837: } else {
838: trkUngetChar (c);
839:
840: int n = trkGetNumber ();
841: if (n == -1) {
842: } else {
843: if (!(1 <= n && n <= 64)) {
844: return trkSyntaxError ();
845: } else {
846: length = 192 / n;
847: }
848: }
849: }
850:
851: int half = length >> 1;
852: trkSkipSpace ();
853: c = trkGetChar ();
854: while (c == '.') {
855: length += half;
856: half >>= 1;
857: c = trkGetChar ();
858: }
859: trkUngetChar (c);
860:
861:
862: int kc = 0;
863: int kf = 0;
864: if (note12 != 92) {
865: kf = 64 * (12 * trkOctave + note12 + sharp + trkKeyTranspose) - 123 + trkDetune;
866: kc = kf >> 6;
867: kf &= 63;
868: kc += kc / 3;
869: if (kc < 0 || 128 <= kc) {
870: note12 = 92;
871: }
872: }
873: if (note12 != 92) {
874:
875: if ((mmcToneData[trkTi + 3] & 1) != 0) {
876: trkSetData (0x01, 1 << 1);
877: trkSetData (0x01, 0 << 1);
878: }
879:
880: trkSetDataAll (0x20, trkPan << 6 | (mmcToneData[trkTi + 0] & 63));
881:
882: trkSetDataAll (0x28, kc);
883: trkSetDataAll (0x30, kf << 2);
884:
885:
886:
887:
888:
889: switch (mmcToneData[trkTi + 0] & 7) {
890: case 7:
891: trkSetDataAll (0x60, Math.min (127, (mmcToneData[trkTi + 11 + 5] & 127) + (127 - trkVolume)));
892:
893: case 6:
894: case 5:
895: trkSetDataAll (0x68, Math.min (127, (mmcToneData[trkTi + 33 + 5] & 127) + (127 - trkVolume)));
896:
897: case 4:
898: trkSetDataAll (0x70, Math.min (127, (mmcToneData[trkTi + 22 + 5] & 127) + (127 - trkVolume)));
899:
900: case 3:
901: case 2:
902: case 1:
903: case 0:
904: trkSetDataAll (0x78, Math.min (127, (mmcToneData[trkTi + 44 + 5] & 127) + (127 - trkVolume)));
905: }
906: if (!trkTie) {
907: for (int cn = 0; cn < 8; cn++) {
908: if (mmcCnToTq[cn] == trkTq) {
909:
910: trkSetData (0x08, ((mmcToneData[trkTi + 1] & 15) << 3) + cn);
911: }
912: }
913: }
914: }
915:
916: trkTie = false;
917: trkSkipSpace ();
918: c = trkGetChar ();
919: if (c == '&') {
920: trkTie = true;
921: c = trkGetChar ();
922: }
923: trkUngetChar (c);
924: if (note12 == 92 || trkTie) {
925: trkTimeUS += (int) Math.round (mmcTempo * (double) length);
926: trkKeyOff = false;
927: trkWaitUS = 0;
928: } else {
929: int gateLength = length - (trkGate < 0 ? -trkGate : (length * trkGate) >> 3);
930: if (gateLength < 0) {
931: gateLength = length;
932: }
933: trkTimeUS += (int) Math.round (mmcTempo * (double) gateLength);
934: trkKeyOff = true;
935: trkWaitUS = (int) Math.round (mmcTempo * (double) (length - gateLength));
936: }
937: return true;
938: }
939:
940:
941: protected boolean trkCommandL () {
942:
943: int length = trkLength;
944: trkSkipSpace ();
945: int c = trkGetChar ();
946: if (c == '*') {
947:
948: int n = trkGetNumber ();
949: if (n == -1) {
950: return trkSyntaxError ();
951: }
952: length = n;
953: } else {
954: trkUngetChar (c);
955:
956: int n = trkGetNumber ();
957: if (n == -1) {
958: return trkSyntaxError ();
959: } else {
960: if (!(1 <= n && n <= 64)) {
961: return trkSyntaxError ();
962: } else {
963: length = 192 / n;
964: }
965: }
966: }
967:
968: int half = length >> 1;
969: trkSkipSpace ();
970: c = trkGetChar ();
971: while (c == '.') {
972: length += half;
973: half >>= 1;
974: c = trkGetChar ();
975: }
976: trkUngetChar (c);
977: trkLength = length;
978: return true;
979: }
980:
981:
982: protected boolean trkCommandK () {
983:
984: int sign = 1;
985: int c = trkGetChar ();
986: if (c == '+') {
987: } else if (c == '-') {
988: sign = -1;
989: } else {
990: trkUngetChar (c);
991: }
992:
993: int abs = trkGetNumber ();
994: if (abs == -1) {
995: return trkSyntaxError ();
996: }
997: trkKeyTranspose = sign * abs;
998: return true;
999: }
1000:
1001:
1002: protected boolean trkCommandAtK () {
1003:
1004: int sign = 1;
1005: int c = trkGetChar ();
1006: if (c == '+') {
1007: } else if (c == '-') {
1008: sign = -1;
1009: } else {
1010: trkUngetChar (c);
1011: }
1012:
1013: int abs = trkGetNumber ();
1014: if (abs == -1) {
1015: return trkSyntaxError ();
1016: }
1017: trkDetune = sign * abs;
1018: return true;
1019: }
1020:
1021:
1022: protected boolean trkCommandAtL () {
1023:
1024: int n = trkGetNumber ();
1025: if (n == -1) {
1026: return trkSyntaxError ();
1027: }
1028: trkLength = n;
1029: return true;
1030: }
1031:
1032:
1033: protected boolean trkCommandO () {
1034:
1035: int n = trkGetNumber ();
1036: if (n == -1) {
1037: return trkSyntaxError ();
1038: }
1039: if (0 <= n && n <= 8) {
1040: trkOctave = n;
1041: } else {
1042: return trkSyntaxError ();
1043: }
1044: return true;
1045: }
1046:
1047:
1048: protected boolean trkCommandLessThan () {
1049: int n = trkOctave + 1;
1050: if (!(0 <= n && n <= 8)) {
1051: return trkSyntaxError ();
1052: }
1053: trkOctave = n;
1054: return true;
1055: }
1056:
1057:
1058: protected boolean trkCommandGreaterThan () {
1059: int n = trkOctave - 1;
1060: if (!(0 <= n && n <= 8)) {
1061: return trkSyntaxError ();
1062: }
1063: trkOctave = n;
1064: return true;
1065: }
1066:
1067:
1068: protected boolean trkCommandP () {
1069:
1070: int n = trkGetNumber ();
1071: if (n == -1 || !(0 <= n && n <= 3)) {
1072: return trkSyntaxError ();
1073: }
1074: trkPan = n;
1075: return true;
1076: }
1077:
1078:
1079: protected boolean trkCommandQ () {
1080:
1081: int n = trkGetNumber ();
1082: if (n == -1 || !(0 <= n && n <= 8)) {
1083: return trkSyntaxError ();
1084: }
1085: trkGate = 8 - n;
1086: return true;
1087: }
1088:
1089:
1090: protected boolean trkCommandAtQ () {
1091:
1092: int n = trkGetNumber ();
1093: if (n == -1) {
1094: return trkSyntaxError ();
1095: }
1096: trkGate = -n;
1097: return true;
1098: }
1099:
1100:
1101: protected boolean trkCommandT () {
1102:
1103: int n = trkGetNumber ();
1104: if (n == -1 || !(1 <= n && n <= 10000)) {
1105: return trkSyntaxError ();
1106: }
1107: mmcTempo = (60.0 / (double) n) / 48.0 * 1000000.0;
1108: return true;
1109: }
1110:
1111:
1112: protected static final int[] trkVToAtV = new int[] {
1113: 127 - 127,
1114: 127 - 40,
1115: 127 - 37,
1116: 127 - 34,
1117: 127 - 32,
1118: 127 - 29,
1119: 127 - 26,
1120: 127 - 24,
1121: 127 - 21,
1122: 127 - 18,
1123: 127 - 16,
1124: 127 - 13,
1125: 127 - 10,
1126: 127 - 8,
1127: 127 - 5,
1128: 127 - 2,
1129: 127 - 0,
1130: };
1131:
1132:
1133: protected boolean trkCommandV () {
1134:
1135: int n = trkGetNumber ();
1136: if (n == -1 || !(0 <= n && n <= 16)) {
1137: return trkSyntaxError ();
1138: }
1139: trkVolume = trkVToAtV[n];
1140: return true;
1141: }
1142:
1143:
1144: protected boolean trkCommandAtV () {
1145:
1146: int n = trkGetNumber ();
1147: if (n == -1 || !(0 <= n && n <= 127)) {
1148: return trkSyntaxError ();
1149: }
1150: trkVolume = n;
1151: return true;
1152: }
1153:
1154:
1155: protected boolean trkCommandY () {
1156:
1157: int a = trkGetNumber ();
1158: if (a == -1 || !(0 <= a && a <= 255)) {
1159: return trkSyntaxError ();
1160: }
1161: trkSkipSpace ();
1162: int c = trkGetChar ();
1163: if (c != ',') {
1164: return trkSyntaxError ();
1165: }
1166:
1167: int d = trkGetNumber ();
1168: if (d == -1 || !(0 <= d && d <= 255)) {
1169: return trkSyntaxError ();
1170: }
1171: trkSetData (a, d);
1172: return true;
1173: }
1174:
1175:
1176:
1177:
1178:
1179:
1180:
1181: protected boolean trkSyntaxError () {
1182: int i0 = Math.max (0, trkIndex - 20);
1183: int i1 = Math.min (trkMML.length (), trkIndex + 20);
1184: StringBuilder sb = new StringBuilder ();
1185: sb.append ("track ");
1186: sb.append (trkTq + 1);
1187: sb.append (" syntax error at ");
1188: sb.append (trkIndex);
1189: sb.append ("\n");
1190: for (int i = i0; i < i1; i++) {
1191: int c = trkMML.charAt (i);
1192: if (c < ' ') {
1193: c = ' ';
1194: }
1195: if (i == trkIndex) {
1196: sb.append ('[');
1197: }
1198: sb.append ((char) c);
1199: if (i == trkIndex) {
1200: sb.append (']');
1201: }
1202: }
1203: mmcError = sb.toString ();
1204: return false;
1205: }
1206:
1207:
1208:
1209: protected void trkSetDataAll (int address, int data) {
1210: for (int cn = 0; cn < 8; cn++) {
1211: if (mmcCnToTq[cn] == trkTq) {
1212: trkSetData (address + cn, data);
1213: }
1214: }
1215: }
1216:
1217:
1218:
1219: protected void trkSetData (int address, int data) {
1220: mmcOutput.add (trkTimeUS);
1221: mmcOutput.add (address << 8 | data);
1222: }
1223:
1224: }
1225:
1226:
1227:
1228:
1229:
1230:
1231:
1232:
1233:
1234:
1235:
1236:
1237:
1238:
1239:
1240:
1241:
1242:
1243:
1244:
1245:
1246:
1247:
1248:
1249:
1250:
1251:
1252:
1253:
1254:
1255:
1256:
1257:
1258:
1259:
1260:
1261:
1262:
1263:
1264:
1265:
1266:
1267:
1268:
1269:
1270:
1271:
1272:
1273:
1274:
1275:
1276:
1277:
1278:
1279:
1280:
1281:
1282:
1283:
1284:
1285:
1286:
1287:
1288:
1289:
1290:
1291:
1292:
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:
1338:
1339:
1340:
1341:
1342:
1343:
1344:
1345:
1346:
1347:
1348:
1349:
1350:
1351:
1352:
1353:
1354:
1355:
1356:
1357:
1358:
1359:
1360:
1361:
1362:
1363:
1364:
1365:
1366:
1367:
1368:
1369:
1370:
1371:
1372:
1373:
1374:
1375:
1376:
1377:
1378:
1379:
1380:
1381:
1382:
1383:
1384:
1385:
1386:
1387:
1388:
1389:
1390:
1391:
1392:
1393:
1394:
1395:
1396:
1397:
1398:
1399:
1400:
1401:
1402:
1403:
1404:
1405:
1406:
1407:
1408:
1409:
1410:
1411:
1412:
1413:
1414:
1415:
1416:
1417:
1418:
1419:
1420:
1421:
1422:
1423:
1424:
1425:
1426:
1427:
1428:
1429:
1430:
1431:
1432:
1433:
1434:
1435:
1436:
1437:
1438:
1439:
1440:
1441:
1442:
1443:
1444:
1445:
1446:
1447:
1448:
1449:
1450:
1451:
1452:
1453:
1454:
1455:
1456:
1457:
1458:
1459:
1460:
1461:
1462:
1463:
1464:
1465:
1466:
1467:
1468:
1469:
1470:
1471:
1472:
1473:
1474:
1475:
1476:
1477:
1478:
1479:
1480:
1481:
1482:
1483:
1484:
1485:
1486:
1487:
1488:
1489:
1490:
1491:
1492:
1493:
1494:
1495:
1496:
1497:
1498:
1499:
1500:
1501:
1502:
1503:
1504:
1505:
1506:
1507:
1508:
1509:
1510:
1511:
1512:
1513:
1514:
1515:
1516:
1517:
1518:
1519:
1520:
1521:
1522:
1523:
1524:
1525:
1526:
1527:
1528:
1529:
1530:
1531:
1532:
1533:
1534:
1535:
1536:
1537:
1538:
1539:
1540:
1541:
1542:
1543:
1544:
1545:
1546:
1547:
1548:
1549:
1550:
1551:
1552:
1553:
1554:
1555:
1556:
1557:
1558:
1559:
1560:
1561:
1562:
1563:
1564:
1565:
1566:
1567:
1568:
1569:
1570:
1571:
1572:
1573:
1574:
1575:
1576:
1577:
1578:
1579:
1580:
1581:
1582:
1583:
1584:
1585:
1586:
1587:
1588:
1589:
1590:
1591:
1592:
1593:
1594:
1595:
1596:
1597:
1598:
1599:
1600:
1601:
1602:
1603:
1604:
1605:
1606:
1607:
1608:
1609:
1610:
1611:
1612:
1613:
1614:
1615:
1616:
1617:
1618:
1619:
1620:
1621:
1622:
1623:
1624:
1625:
1626:
1627:
1628:
1629:
1630:
1631:
1632:
1633:
1634:
1635:
1636:
1637:
1638:
1639:
1640:
1641:
1642:
1643: public static final byte[] TONE_DATA_68 = ":\17\2\0\334\0\0\0\0\3\0\34\4\0\5\1%\2\1\7\0\0\26\t\1\2\1/\2\f\0\0\0\35\4\3\6\1%\1\3\3\0\0\17\7\0\5\n\0\2\1\0\0\1\34\17\2\0\336\36\n\0\0\3\0\37\n\1\3\17\35\0\7\3\0\0\35\f\t\7\n\0\0\7\7\0\1\37\5\1\3\17\'\2\5\3\1\0\34\f\t\7\n\0\0\7\3\0\1\34\17\2\0\264\0\0\0\0\3\0\37\17\0\6\0075\2\17\5\1\0\37\7\5\b\2\r\3\1\0\0\1\37\6\0\6\4%\2\1\2\0\0\37\7\0\7\0\0\1\1\7\0\1:\17\2\0\202\0\0\0\0\3\0\34\4\3\7\1#\2\1\3\0\0\33\b\1\2\0%\3\17\7\0\0\34\3\0\0\17\33\2\1\6\0\0\32\t\0\n\17\0\2\n\0\0\1\r\17\0\0\0\0\0\0\0\3\0\37\n\f\5\17H\1\16\2\0\1\37\n\f\5\17\7\1\4\7\0\1\37\n\f\7\17\7\1\f\7\0\1\37\n\f\6\17\7\1\t\3\0\0012\17\0\0\0\0\0\0\0\3\0\37\0\0\17\0\31\1\3\0\0\0\37\0\0\17\0#\3\f\4\0\1\37\0\0\2\0$\1\1\0\0\0\37\6\4\5\17\0\2\1\4\0\1!\17\0\0\0\0\0\0\0\3\0\34\5\4\3\17*\3\2\1\0\0\37\7\4\1\2%\1\3\7\0\0\37\3\4\1\2#\3\3\4\0\0\37\2\1\4\1\0\2\1\2\0\0:\17\2\0\322\0\0\0\0\3\0\37\r\1\4\17)\2\17\3\0\0\37\24\5\17\169\1\r\7\2\0\24\n\1\7\b#\1\3\7\0\0\27\5\1\7\17\0\0\1\3\0\1:\17\2\0\226\0\0\0\0\3\0\37\r\1\4\17 \1\0\7\0\0\37\13\1\n\0177\1\4\5\0\0\37\13\1\n\17\35\0\0\2\0\0\37\13\1\b\17\0\1\0\3\0\1\3\17\0\0\0\0\0\0\0\3\0\37\16\1\n\n*\0\6\6\0\0\37\5\0\n\6\32\0\0\4\0\0\37\2\4\6\1 \0\0\4\0\0\34\1\6\b\1\0\0\1\3\0\1:\17\0\0\0\0\0\0\0\3\0\30\n\0\2\5\33\1\5\7\0\0\32\20\0\b\13\36\0\17\0\0\0\34\20\0\4\3 \0\1\6\0\0\30\13\0\6\17\0\2\1\3\0\0\1\17\2\0\310\0\0\0\0\3\0\37\37\b\2\f4\0\3\7\0\0\37\13\1\3\1#\1\t\3\0\0\34\7\t\4\17\21\0\1\1\0\0\22\1\1\4\17\0\1\1\0\0\1:\17\0\0\0\0\0\0\0\3\0\37\31\1\2\2L\0\6\0\0\0\37\20\1\2\r\32\1\3\7\0\0\37\4\2\2\f%\1\1\0\0\0\37\n\0\3\17\0\1\1\0\0\18\17\2\0\310\0\0\0\0\3\0\32\b\5\7\2\34\3\3\7\0\0\35\4\5\5\1\37\3\4\1\0\0\34\4\2\6\2 \3\1\7\0\0\35\t\3\3\1\0\3\1\3\0\1>\17\2\0\2\b\1\3\2\3\0\37\24\0\n\0$\0\b\3\0\0\24\2\1\n\3\0\0\2\7\0\1\24\2\1\n\3\0\0\1\1\0\1\24\2\1\n\3\0\0\6\2\0\1?\17\2\0\276\0\0\0\0\3\0\37\1\1\n\0\35\0\b\3\0\1\23\2\1\n\1\2\0\3\7\0\1\23\2\1\n\1\2\0\1\0\0\1\23\2\1\n\1\2\0\2\6\0\1\37\17\2\0\310\3\2\2\1\3\0\37\24\0\17\17\f\0\7\0\0\1\37\2\1\17\0\5\0\3\2\0\1\37\2\1\17\0\7\0\3\0\0\1\37\2\1\17\0\5\0\2\6\0\18\17\2\0\264\36\0\2\0\3\0\37\0\0\0\0\'\1\6\3\0\0\37\3\1\1\1&\1\7\3\0\1\23\2\1\6\1&\1\1\7\0\0\20\0\0\t\0\0\1\2\7\0\1:\17\2\0\3128\3\3\0\3\0\24\2\0\5\1!\1\1\0\0\0\31\6\0\b\3\36\1\5\7\0\0\34\3\0\6\0010\1\1\0\0\0\f\4\0\6\0\0\1\1\4\0\18\17\2\0\310P\0\2\0\3\0\22\37\24\n\0\n\1\17\7\3\0\37\21\f\n\0#\1\6\7\0\0\r\22\1\3\0\33\2\1\7\0\0\f\2\1\n\1\0\1\1\3\0\1:\17\2\0\315P\0\2\0\3\0\36\1\0\1\1\36\3\0\2\0\0\37\1\0\2\1&\3\2\3\0\0\36\1\0\1\0010\1\1\3\0\0\b\2\0\6\0\0\0\1\4\0\1=\17\2\0\310Z\0\2\0\3\0\37\1\1\2\0\37\3\0\0\0\0\t\1\0\6\0\0\0\1\1\0\0\n\1\0\7\0\0\0\1\1\0\0\t\2\0\7\0\0\0\1\1\0\1<\17\0\0\0\0\0\0\0\3\0\37\26\1\3\17\30\0\1\3\0\0\22\17\1\5\16\0\1\1\7\0\1\37\17\0\3\17 \1\1\3\0\0\37\17\1\5\16\0\1\1\3\0\1\6\17\2\0\310Z\0\4\0\3\0\n\0\1\3\0M\0\1\0\0\0\f\0\0\5\0\7\2\3\3\0\1\f\0\1\6\2\0\1\2\7\0\1\22\0\0\6\0\21\1\1\3\0\1)\17\2\0\316(\0\4\0\3\0\23\22\4\4\5B\0\6\3\3\0\25\16\6\n\0064\0\4\7\3\0\13\37\3\n\0-\0\1\7\0\0\16\37\1\b\0\0\0\1\3\0\1$\17\0\0P\1\2\1\1\3\0\24\2\1\5\3$\1\4\0\0\1\6\7\7\6\0\0\0\0\0\1\1\24\2\1\5\3%\3\4\6\0\0\7\7\7\7\0\0\0\0\2\1\1\7\17\2\0\310F\0\4\0\3\0\0\0\0\0\0\177\0\0\4\0\0\0\0\0\0\0\177\0\0\4\0\0\17\f\0\t\0\0\0\5\7\2\0\r\f\0\t\0\0\0\b\7\0\1\4\17\2\0\310\0\0\0\0\3\0\22\n\1\n\3/\1\2\4\0\0\23\13\3\t\2\0\0\2\4\0\0\22\n\1\n\5M\1\6\4\3\0\23\13\3\t\2\0\0\2\4\0\0;\17\2\0\304\20\0\5\0\3\0\34\5\3\5\16*\3\2\7\1\0\13\7\0\5\0173\1\2\0\0\0\16\2\0\4\0020\3\1\3\0\0\f\20\0\6\1\0\2\1\0\0\1:\17\2\0\306\36\b\4\1\3\0\31\13\0\3\1%\3\1\3\0\0\34\f\f\13\5%\3\t\3\0\0\31\20\0\13\1/\1\2\3\0\0\21\n\0\13\1\0\1\4\3\0\1:\17\2\0\306\13\0\4\0\3\0\23\2\2\0\1$\1\2\0\0\0\34\22\3\13\4 \0\t\0\0\0\35\24\1\t\0017\1\1\0\0\0\21\17\0\t\0\0\0\1\0\0\1,\17\0\0\0\0\0\0\0\3\0\22\0\0\n\0/\0\1\4\0\0\24\0\0\n\0\0\1\2\4\0\0\23\16\0\n\1\'\0\1\4\0\0\24\0\0\n\0\0\0\5\4\0\0:\17\2\0\310(\0\3\0\3\0\22\0\0\6\0$\0\0\0\0\0\22\0\0\6\3/\0\4\0\1\0\22\0\0\6\0*\0\0\0\0\0\16\b\0\b\1\0\0\1\7\0\1:\17\0\0\0\0\0\0\0\3\0\16\16\0\3\1\33\2\1\3\0\0\16\16\0\3\17%\2\7\2\0\0\r\16\0\3\1%\2\1\4\0\0\23\3\0\n\0\0\1\1\6\0\1:\17\2\0\315\0\0\0\0\3\0\r\t\0\t\3\"\0\1\4\0\0\37\21\0\17\f-\1\5\4\2\0\f\13\0\b\0012\0\1\4\0\0\16\37\0\n\0\1\0\1\4\0\1:\17\0\0\0\0\0\0\0\3\0\20\f\0\b\0\34\0\1\0\0\0\16\16\0\n\17(\0\2\0\2\0\24\16\0\n\0071\0\1\0\0\0\20\16\0\b\1\0\0\1\0\0\0016\17\2\0\313\2\2\1\1\3\0\17\n\1\5\6\25\1\0\1\0\0\21\2\1\b\3\0\0\1\3\0\1\36\2\22\n\5\0\2\1\7\0\1\17\2\1\n\5\0\2\0\3\0\1<\17\0\0\310\0\0\0\0\3\0\22\f\1\n\2 \1\1\0\0\0\22\n\1\n\3\0\0\1\1\0\1\17\n\1\n\5\23\1\1\2\0\0\24\2\1\n\3\7\0\1\6\0\1:\17\2\0\316(\0\3\0\3\0\20\17\0\b\1\30\0\1\7\0\0\20\f\0\4\1;\0\b\0\2\0\22\0\0\4\0003\0\1\0\0\0\20\0\0\n\0\0\0\2\0\0\18\17\2\0\322\1\5\3\1\3\0\22\0\0\3\0&\0\t\3\0\0\22\0\0\3\0&\0\7\7\0\0\17\5\0\3\1%\0\1\3\0\0\17\b\0\t\2\0\0\3\7\0\1;\17\2\0\314\24\0\5\0\3\0\37\20\0\n\17\f\0\4\0\0\0\30\n\0\n\0M\0\2\0\0\0\24\24\0\n\3M\0\3\7\1\0\20\5\0\n\7\0\0\4\0\0\1;\17\2\0\304\22\0\5\0\3\0\21\21\20\6\0037\0\4\4\1\0\17\22\1\0\2/\0\2\4\0\0\r\24\0\7\2/\0\2\7\0\0\20\37\0\t\0\0\0\1\4\0\1\2\17\2\0\364/\0\7\0\3\0\37\0\0\n\0/\0\6\0\0\0\0\0\0\0\17\177\0\1\0\0\0\37\0\0\n\0+\0\n\0\0\0\24\b\0\n\1\0\0\2\0\0\1;\17\2\0\310P\0\3\0\3\0\24\0\0\n\0\0\0\4\0\0\0\16\20\0\n\5>\0\2\3\0\0\22\22\0\n\t&\0\3\0\1\0\16\f\0\n\2\0\1\1\0\0\1<\17\0\0\0\0\0\0\0\3\0\37\31\5\2\0\0\0\17\0\0\0\37\22\22\f\7\0\0\1\0\0\1\37\31\0\0\17\0\0\3\0\1\0\37\21\17\n\17\0\0\1\0\0\1\2\17\0\0\0\0\0\0\0\3\0\36\20\1\n\17+\0\2\0\3\0\36\n\0\n\17/\0\0\7\1\0\36\24\0\n\17\17\0\0\3\3\0\36\23\0\n\17\0\0\1\0\0\1\0\17\0\0\0\0\0\0\0\3\0\36\32\0\r\17\32\0\1\0\1\0\36\34\0\16\17%\0\16\0\3\0\36\20\0\b\17\5\0\0\0\1\0\35\20\0\b\17\0\0\0\0\0\1;\17\2\0n\0\0\0\0\3\0\34\24\f\17\n\26\0\3\0\2\0\34\23\5\2\n\21\3\1\0\1\0\34\17\n\n\5\21\3\0\3\0\0\36\f\7\5\6\0\1\1\0\0\1\2\17\0\0\0\0\0\0\0\3\0\34\f\0\4\17$\1\0\0\1\0\24\b\0\4\17\33\1\0\0\2\0\34\n\0\5\17\"\0\0\0\0\0\20\5\0\2\17\0\3\0\0\0\1;\17\0\0\0\0\0\0\0\3\0\30\27\0\13\17\0\0\3\0\3\0\32\16\0\7\17(\0\2\0\2\0\32\n\0\5\179\0\2\0\3\0\26\20\0\b\17\0\2\6\0\0\0012\17\0\0\0\0\0\0\0\3\0\34\17\0\6\17\32\1\2\3\3\0\30\20\0\7\17 \0\b\7\2\0\32\13\0\7\17\35\1\5\3\0\0\30\7\0\4\17\0\2\2\7\3\1\3\17\0\0d\0\0\0\0\3\0\37\6\0\4\0173\0\1\0\3\0\37\0\0\2\0\33\0\b\7\2\0\37\b\0\6\5C\0\t\3\1\0\37\n\0\5\17\0\0\n\3\2\1;\17\0\0\0\0\0\0\0\3\0\36\24\0\n\17\33\0\17\2\0\0\36\21\0\b\17\33\1\4\0\1\0\34\f\0\6\17+\1\2\3\2\0\32\20\0\b\17\0\1\2\0\3\1\4\17\0\0\0\0\0\0\0\3\0\37\7\0\1\1#\0\7\3\0\0\37\n\0\6\0\0\0\2\7\0\1\37\7\0\1\1#\0\7\7\0\0\37\r\0\6\0\0\0\2\3\0\1\4\17\2\0\320\0\0\0\0\3\0\r\n\4\4\17\35\1\3\7\0\0\21\7\0\4\17\0\2\1\0\0\1\16\b\5\3\17#\2\1\7\0\0\17\b\0\4\17\7\2\4\3\0\1\34\17\0\0\0\0\0\0\0\3\0\37\30\0\f\17 \0\16\2\0\0\37\17\0\b\17\0\0\2\0\0\0\37\24\0\4\17\33\0\17\0\0\0\37\16\0\5\17\0\0\2\0\0\1,\17\2\0\305(\r\2\3\3\0\30\16\0\7\0172\1\f\3\0\0\30\n\0\7\17\0\1\4\0\0\1\32\16\0\6\179\1\4\0\0\0\32\b\0\6\17\0\2\1\0\0\1,\17\0\0\0\0\0\0\0\3\0\30\21\0\7\17*\1\4\3\0\0\30\4\0\2\17\0\3\0\3\0\1\30\24\0\n\17 \1\6\7\0\0\30\f\0\6\17\0\2\2\7\0\1;\17\0\0\0\0\0\0\0\3\0\35\4\3\2\3\0\0\16\0\1\0\35\17\3\2\7\33\0\6\0\1\0\35\27\0\n\17\33\0\7\0\2\0\36\24\25\17\17\0\0\1\0\0\0014\17\2\0o\0\0\0\0\3\0\37\1\0\5\f\7\0\0\0\3\0\37\r\17\n\17\16\0\16\0\1\0\37\26\7\b\6\23\0\0\7\0\0\37\24\24\b\17\2\0\0\0\1\0,\17\2\0\310\0\0\0\0\3\0\37\4\0\0\1\4\0\3\7\1\0\37\37\3\2\1\35\1\5\0\2\0\31\34\5\3\3\7\0\1\7\2\0\37\37\5\3\7\0\2\7\0\3\1\32\17\2\0\310\24\3\3\2\3\0\22\1\1\n\3\21\1\2\1\0\0\24\2\1\n\0\f\0\3\0\1\0\37\23\1\0\17\31\0\0\0\0\0\24\2\1\n\3\0\2\1\3\0\1\34\3\2\0\322(\0\3\0\3\0\37\20\0\0\17\7\1\2\3\0\0\37\0\0\b\0\7\1\1\6\0\1\37\0\0\b\0\f\1\2\7\0\0\37\0\0\b\0\0\1\1\3\0\1\4\17\1\0\236D\0\6\0\3\0\0\0\0\0\17\177\0\1\0\0\0\0\0\0\0\17\177\0\1\0\0\1\37\0\0\1\0%\0\16\0\0\0\20\0\0\4\0\0\0\5\7\1\1:\17\2\0xx\36\7\2\3\0\37\0\0\0\0\21\0\2\0\2\0\37\0\0\0\0\n\0\1\0\1\0\37\0\0\0\0\35\0\1\0\2\0\f\0\0\4\0\0\0\0\0\0\1\4\17\0\0\334x\0\7\0\3\0\37\0\0\5\0\17\0\0\0\3\0\24\0\0\n\0\7\0\7\0\1\1\f\0\0\5\0/\0\3\0\3\0\20\0\0\b\0\0\0\1\0\0\1\6\17\3\0\321F\0\6\0\3\0\37\0\0\0\0\31\0\f\0\0\0\24\16\0\7\17\7\0\4\0\0\0\24\16\0\7\17\0\0\2\4\3\0\24\16\0\7\17\0\0\2\4\0\0 \17\0\0\0\0\0\0\0\3\0\37\b\0\4\17\r\0\3\0\2\0\n\7\0\4\17\21\3\1\0\1\0\37\0\0\0\0\3\0\1\0\2\0\20\t\0\4\17\0\3\0\0\0\1".getBytes (XEiJ.ISO_8859_1);
1644:
1645:
1646:
1647:
1648:
1649:
1650:
1651:
1652:
1653:
1654:
1655:
1656:
1657:
1658:
1659:
1660:
1661:
1662:
1663:
1664:
1665:
1666:
1667:
1668:
1669:
1670:
1671:
1672:
1673:
1674:
1675:
1676:
1677:
1678:
1679:
1680:
1681:
1682:
1683:
1684:
1685:
1686:
1687:
1688:
1689:
1690:
1691:
1692:
1693:
1694:
1695:
1696:
1697:
1698:
1699:
1700:
1701:
1702:
1703:
1704:
1705:
1706:
1707:
1708:
1709:
1710:
1711:
1712:
1713:
1714:
1715:
1716:
1717:
1718:
1719:
1720:
1721:
1722:
1723:
1724:
1725:
1726:
1727:
1728:
1729:
1730:
1731:
1732:
1733:
1734:
1735:
1736:
1737:
1738:
1739:
1740:
1741:
1742:
1743:
1744:
1745:
1746:
1747:
1748:
1749:
1750:
1751:
1752:
1753:
1754:
1755:
1756:
1757:
1758:
1759:
1760:
1761:
1762:
1763:
1764:
1765:
1766:
1767:
1768:
1769:
1770:
1771:
1772:
1773:
1774:
1775:
1776:
1777:
1778:
1779:
1780:
1781:
1782:
1783:
1784:
1785:
1786:
1787:
1788:
1789:
1790:
1791:
1792:
1793:
1794:
1795:
1796:
1797:
1798:
1799:
1800:
1801:
1802:
1803:
1804:
1805:
1806:
1807:
1808:
1809:
1810:
1811:
1812:
1813:
1814:
1815:
1816:
1817:
1818:
1819:
1820:
1821:
1822:
1823:
1824:
1825:
1826:
1827:
1828:
1829:
1830:
1831:
1832:
1833:
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:
1874:
1875:
1876:
1877:
1878:
1879:
1880:
1881:
1882:
1883:
1884:
1885:
1886:
1887:
1888:
1889:
1890:
1891:
1892:
1893:
1894:
1895:
1896:
1897:
1898:
1899:
1900:
1901:
1902:
1903:
1904:
1905:
1906:
1907:
1908:
1909:
1910:
1911:
1912:
1913:
1914:
1915:
1916:
1917:
1918:
1919:
1920:
1921:
1922:
1923:
1924:
1925:
1926:
1927:
1928:
1929:
1930:
1931:
1932:
1933:
1934:
1935:
1936:
1937:
1938:
1939:
1940:
1941:
1942:
1943:
1944:
1945:
1946:
1947:
1948:
1949:
1950:
1951:
1952:
1953:
1954:
1955:
1956:
1957:
1958:
1959:
1960:
1961:
1962:
1963:
1964:
1965:
1966:
1967:
1968:
1969:
1970:
1971:
1972:
1973:
1974:
1975:
1976:
1977:
1978:
1979:
1980:
1981:
1982:
1983:
1984:
1985:
1986:
1987:
1988:
1989:
1990:
1991:
1992:
1993:
1994:
1995:
1996:
1997:
1998:
1999:
2000:
2001:
2002:
2003:
2004:
2005:
2006:
2007:
2008:
2009:
2010:
2011:
2012:
2013:
2014:
2015:
2016:
2017:
2018:
2019:
2020:
2021:
2022:
2023:
2024:
2025:
2026:
2027:
2028:
2029:
2030:
2031:
2032:
2033:
2034:
2035:
2036:
2037:
2038:
2039:
2040:
2041:
2042:
2043:
2044:
2045:
2046:
2047:
2048:
2049:
2050:
2051:
2052:
2053:
2054:
2055:
2056:
2057:
2058:
2059:
2060:
2061:
2062:
2063:
2064:
2065:
2066:
2067:
2068:
2069:
2070:
2071:
2072:
2073:
2074:
2075:
2076:
2077:
2078:
2079:
2080:
2081:
2082:
2083:
2084:
2085:
2086:
2087:
2088:
2089:
2090:
2091:
2092:
2093:
2094:
2095:
2096:
2097:
2098:
2099:
2100:
2101:
2102:
2103:
2104:
2105:
2106:
2107:
2108:
2109:
2110:
2111:
2112:
2113:
2114:
2115:
2116:
2117:
2118:
2119:
2120:
2121:
2122:
2123:
2124:
2125:
2126:
2127:
2128:
2129:
2130:
2131:
2132:
2133:
2134:
2135:
2136:
2137:
2138:
2139:
2140:
2141:
2142:
2143:
2144:
2145:
2146:
2147:
2148:
2149:
2150:
2151:
2152:
2153:
2154:
2155:
2156:
2157:
2158:
2159:
2160:
2161:
2162:
2163:
2164:
2165:
2166:
2167:
2168:
2169:
2170:
2171:
2172:
2173:
2174:
2175:
2176:
2177:
2178:
2179:
2180:
2181:
2182:
2183:
2184:
2185:
2186:
2187:
2188:
2189:
2190:
2191:
2192:
2193:
2194:
2195:
2196:
2197:
2198:
2199:
2200:
2201:
2202:
2203:
2204:
2205:
2206:
2207:
2208:
2209:
2210:
2211:
2212:
2213:
2214:
2215:
2216:
2217:
2218:
2219:
2220:
2221:
2222:
2223:
2224:
2225:
2226:
2227:
2228:
2229:
2230:
2231:
2232:
2233:
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:
2307:
2308:
2309:
2310:
2311:
2312:
2313:
2314:
2315:
2316:
2317:
2318:
2319:
2320:
2321:
2322:
2323:
2324:
2325:
2326:
2327:
2328:
2329:
2330:
2331:
2332:
2333:
2334:
2335:
2336:
2337:
2338:
2339:
2340:
2341:
2342:
2343:
2344:
2345:
2346:
2347:
2348:
2349:
2350:
2351:
2352:
2353:
2354:
2355:
2356:
2357:
2358:
2359:
2360:
2361:
2362:
2363:
2364:
2365:
2366:
2367:
2368:
2369:
2370:
2371:
2372:
2373:
2374:
2375:
2376:
2377:
2378:
2379:
2380:
2381:
2382:
2383:
2384:
2385:
2386:
2387:
2388:
2389:
2390:
2391:
2392:
2393:
2394:
2395:
2396:
2397:
2398:
2399:
2400:
2401:
2402:
2403:
2404:
2405:
2406:
2407:
2408:
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: public static final byte[] TONE_DATA_X1 = ":\17\2\1\334\0\4\1\1\3\0\37\5\7\4\t%\1\1\5\0\0\26\0\4\5\4>\1\5\2\0\0\35\0\4\5\4M\1\1\7\0\0\37\7\6\5\4\0\2\1\1\0\1\34\17\2\0\264\0\1\0\1\3\0\37\24\b\n\0\30\0\1\3\0\0\37\n\5\n\0\0\0\1\7\0\1\37\24\b\n\0-\0\3\7\0\0\31\n\5\n\0\0\3\1\3\0\1:\17\2\0\315\0\0\0\0\2\0\23\2\1\4\3!\3\5\4\0\0\23\2\1\4\3\31\3\5\2\0\0\23\2\1\4\3\37\2\1\7\0\0\23\2\1\4\3\0\3\1\4\0\1\34\17\2\0\334\0\n\0\0\3\0\37\n\1\3\17\30\2\7\3\0\0\35\f\t\7\n\0\0\7\7\0\1\37\5\1\3\17#\2\5\7\1\0\34\f\t\7\n\0\0\7\3\0\1,\17\2\0\264\n\2\5\3\3\0\31\24\0\6\7C\2\n\3\1\0\30\n\5\b\2\0\2\1\2\0\1\32\7\3\6\4/\3\n\0\0\0\30\f\5\b\2\0\1\1\0\0\1\34\17\2\0\310\2\2\2\1\3\0\37\n\0\n\5/\0\17\3\3\0\33\b\4\6\139\2\5\0\0\1\36\6\13\6\17!\2\1\3\0\0\36\6\13\6\17\0\1\1\3\0\1<\17\2\1\276\0\2\0\3\3\0\37\n\0\2\179\2\7\3\1\0\37\n\5\5\2\33\2\1\2\0\1\37\7\3\4\4/\3\n\7\0\0\37\f\5\6\1\0\1\1\3\0\1:\17\2\0\275\5\5\4\1\3\0\34\4\3\7\1&\2\1\3\0\0\33\t\1\2\09\3\7\7\3\0\34\4\3\6\0-\2\5\6\0\0\32\2\0\5\17\0\3\2\3\0\1<\17\2\0\310\0\0\0\0\3\0\37\2\24\n\0\21\1\0\7\0\0\37\n\2\3\0\33\2\2\3\0\1\37\2\17\n\0 \1\f\7\0\0\37\n\r\5\5\0\1\2\3\0\1:\17\2\0\310\0\0\0\0\3\0\34\4\3\7\1#\2\1\3\0\0\33\t\1\2\0%\3\17\7\0\0\34\3\0\0\17\33\2\1\6\0\0\32\6\0\n\17\0\3\n\0\0\1:\17\2\0\202\n\0\3\3\3\0\34\4\3\7\1/\2\b\3\0\0\33\5\5\2\3/\3\17\7\0\0\37\5\5\0\17\21\2\2\6\0\0\32\7\2\n\17\0\3\n\0\0\1<\17\2\0\202\n\0\3\3\3\0\34\4\3\7\1 \2\2\3\0\0\33\5\5\n\3\0\3\17\7\0\1\37\2\0\0\17\21\2\1\6\0\0\32\5\5\n\17\0\3\n\3\0\1\r\17\2\0\310\0\0\0\0\1\0\37\n\f\7\17n\1\16\6\0\0\37\n\f\7\17 \1\4\6\0\0\37\n\f\7\17 \1\f\6\0\0\37\n\f\7\17 \1\t\6\0\0?\17\2\0\310\0\0\0\0\3\0\37\n\f\6\0174\1\1\0\0\1\37\b\f\6\17%\1\0\0\0\1\37\n\f\6\17\33\1\4\0\0\1\37\n\f\6\17/\1\2\0\0\1\4\17\2\0\310\0\0\0\0\3\0\37\4\0\2\0\7\3\4\5\0\0\37\b\1\b\17\0\1\2\0\0\1\37\4\0\2\0\6\0\3\5\0\0\37\b\1\b\17\0\0\1\0\0\1$\17\2\0\310\0\0\0\0\3\0\0\0\0\0\0\177\0\0\4\0\0\0\0\0\0\0\177\0\0\0\0\0\37\4\0\2\0\3\3\3\7\0\0\37\r\f\b\17\0\0\1\0\0\0\2\17\2\0\310\0\0\0\0\3\0\30\n\0\5\179\1\f\1\0\0\24\f\b\4\1%\1\6\7\0\0\35\n\4\4\1%\1\3\4\0\0\22\22\6\7\1\0\2\1\2\0\0:\17\2\1\264\3\0\5\0\3\0\37\n\1\2\3%\1\1\2\0\0\37\n\37\3\n \1\16\1\1\0\37\n\n\3\5W\0\3\1\0\0\37\22\f\7\6\0\0\1\7\0\19\17\2\0\310\0\0\0\0\3\0\37\26\b\6\7\13\2\f\6\0\0\37\6\0\6\3!\1\3\3\0\0\34\6\0\6\17 \0\3\4\0\0\37\b\0\b\17\0\0\1\4\0\0<\17\2\0\310\0\0\0\0\3\0\35\b\0\6\17\33\1\3\7\0\0\26\b\0\6\17\7\1\1\0\0\0\32\b\0\4\17\17\1\6\3\0\0\30\n\0\7\17\0\1\b\2\0\0:\17\2\0\322\6\2\6\1\3\0\37\r\1\4\17%\2\1\3\0\0\37\24\1\n\179\1\r\7\2\0\24\n\1\7\17%\1\3\7\0\0\27\5\1\7\17\0\0\1\3\0\1=\17\2\0\317\6\0\5\0\3\0\34\2\1\n\17\27\2\2\0\0\0\37\0\1\n\0\0\0\1\0\0\1\37\0\1\n\0\0\0\1\0\0\1\6\0\1\n\0\0\0\b\0\0\1\2\17\2\0\310\0\0\0\0\3\0\36\24\0\n\17-\0\6\0\0\0\22\24\0\n\7!\1\4\0\0\0\37\16\0\n\17\'\1\0\0\0\0\34\16\0\7\17\0\2\1\4\0\0\2\17\2\0\310\0\0\0\0\3\0\34\0\0\n\09\0\2\7\0\0\37\22\0\n\2!\1\b\7\0\0\32\20\6\n\2\35\1\0\4\0\0\34\6\0\b\17\0\1\1\4\0\0\21\17\2\0\322\7\0\5\0\3\0\37\0\4\2\0\3\0\3\3\0\0\37\0\0\2\0\t\0\0\2\0\0\32\0\0\2\0\37\0\b\4\0\0\24\0\4\6\0\0\1\0\4\0\1:\17\2\0\226\0\n\0\1\3\0\37\f\1\4\17!\1\0\7\0\0\37\n\1\n\179\1\4\5\0\0\37\n\1\n\17\33\0\0\2\0\0\37\n\1\b\17\t\1\0\3\0\1:\17\2\0\226\0\n\0\1\3\0\33\22\1\4\17\35\1\0\7\0\0\37\n\1\3\17*\1\3\5\0\0\37\n\1\3\17 \0\0\2\0\0\35\f\1\6\17\0\1\0\3\0\1\3\17\2\0\310\0\0\0\0\3\0\37\f\0\n\17/\0\5\6\0\0\37\0\0\n\0\27\0\0\4\0\0\37\0\4\6\0!\0\0\4\0\0\34\0\6\b\0\0\0\0\3\0\1<\17\2\0\310\0\0\0\0\3\0\37\2\24\0\0\27\1\1\0\0\0\37\2\n\6\0\0\1\1\3\0\1\37\2\n\4\0\17\2\0\0\0\0\24\2\n\5\0\0\1\0\0\0\1 \17\2\0\310\0\0\0\0\3\0\37\7\7\t\2\35\3\6\4\0\0\37\6\6\t\1/\3\5\4\0\0\32\t\6\t\1\35\2\0\4\0\0\37\b\4\t\3\0\2\1\4\0\1\33\17\2\0\310\0\0\0\0\3\0\37\25\0\b\17\0\0\6\4\0\0\37\17\0\b\17#\0\t\7\0\0\37\0\0\6\0%\0\0\4\0\0\37\b\0\n\17\0\0\1\0\0\0\21\17\2\0\334\5\0\5\0\3\0\37\0\0\4\0\21\0\3\3\0\0\37\0\0\4\0\r\0\0\5\0\0\32\0\0\4\0\37\0\2\4\0\0\24\0\3\6\0\0\0\0\4\0\0\3\17\2\0\310\0\0\0\0\3\0\34\26\0\n\17\33\0\b\0\0\0\37\6\0\3\3\23\0\4\4\0\0\37\b\0\4\3\27\0\5\6\0\0\30\f\0\6\17\0\1\1\3\0\0\1\17\2\0\310\0\0\0\0\3\0\32\20\0\6\0173\1\t\4\0\0\37\n\0\4\17)\1\3\3\0\0\37\n\0\6\17%\1\3\7\0\0\30\f\0\7\17\0\1\1\6\0\0:\17\2\0\310\0\0\0\0\3\0\30\n\0\2\5\31\1\5\7\0\0\32\20\0\b\13\35\0\17\0\0\0\34\20\0\4\3\37\0\1\6\0\0\30\13\0\6\17\0\2\1\3\0\0\2\17\2\0d\n\n\1\2\3\0\37\37\r\3\1\21\0\7\2\0\0\37\17\1\n\3\33\1\t\3\0\0\37\17\n\3\3\33\0\1\7\0\0\24\2\1\4\3\7\1\1\3\0\19\17\2\0\310\0\0\0\0\3\0\24\36\1\5\17/\1\6\0\0\0\24\n\1\5\17/\2\4\0\0\0\24\5\1\5\179\1\2\7\0\0\35\n\1\5\17\0\1\2\0\0\1\0\17\2\0\310\0\0\0\0\3\0\0\0\0\0\17\177\0\1\0\0\0\37\f\1\5\17\33\1\1\7\0\0\37\5\0\3\17#\1\1\0\0\0\37\n\0\4\17\7\1\1\0\0\19\17\2\0\310\0\0\0\0\3\0\37\f\0\4\17\26\0\2\0\0\0\37\r\0\6\1&\0\1\4\0\0\37\6\5\5\1,\0\2\0\0\0\37\f\7\5\1\0\0\1\0\0\1\0\17\2\1\310\5\0\5\0\3\0\37\n\2\5\r\33\0\3\7\0\0\37\n\2\5\n%\2\4\1\0\0\35\b\0\4\r\33\1\1\7\0\0\35\t\n\5\n\0\0\1\3\0\1>\17\2\0\310\b\1\3\2\3\0\37\24\0\n\0\30\0\6\3\0\0\24\2\1\n\3\0\0\2\7\0\1\24\2\1\n\3\0\0\1\1\0\1\24\2\1\n\3\0\0\6\2\0\1?\17\2\0\276\0\3\0\1\3\0\37\1\1\n\0u\0\b\3\0\1\24\2\1\n\0\0\0\3\7\0\1\24\2\1\n\0\0\0\1\0\0\1\24\2\1\n\0\0\0\2\6\0\0016\17\2\0\372\5\n\1\1\3\0\37\25\0\17\0*\3\3\7\0\0\35\37\0\n\0\33\1\b\1\0\1\37\37\0\n\0\0\1\1\6\0\1\22\37\0\n\0\0\2\4\3\0\1\27\17\2\0\303\5\0\4\0\3\0\20\0\0\n\0\0\0\2\7\0\1\22\2\1\n\3%\0\5\3\0\1\22\2\1\n\3\33\0\2\6\0\1\22\2\1\n\3\33\0\3\1\0\1>\17\2\0\310\b\1\3\2\3\0\37\24\0\n\0\33\0\f\3\0\1\24\2\1\n\3\0\0\b\7\0\1\24\2\1\n\3\0\0\0\1\0\1\24\2\1\n\3\0\0\2\2\0\1?\17\2\0\310\3\2\2\1\3\0\37\16\0\17\17k\0\6\0\0\1\37\2\1\17\0\0\0\1\2\0\1\37\2\1\17\0\0\0\3\0\0\1\37\2\1\17\0\0\0\2\6\0\1>\17\2\1\303\5\5\1\1\3\0\37\23\0\n\17/\0\3\7\0\0\37\2\1\n\3\0\1\f\3\0\1\37\0\0\n\0\0\1\1\7\0\1\37\0\0\n\0\0\1\3\3\0\1\7\17\2\0\276\n\2\2\1\3\0\37\22\0\17\17\7\0\6\0\0\1\37\2\1\17\3\0\0\2\2\0\1\37\2\1\17\3\0\0\3\0\0\1\37\2\1\17\3\0\0\1\6\0\0014\17\2\0\310\6\2\4\1\3\0\17\2\0\3\0\17\2\3\7\0\0\20\2\0\6\0\b\2\5\7\0\1\17\2\0\3\0\f\2\0\6\0\0\17\2\0\7\0\0\2\1\1\0\1\6\17\2\0\310\n\n\1\1\3\0\37\0\0\17\0\21\0\3\2\0\1\37\0\0\17\0\7\0\3\6\0\1\37\0\0\17\3\0\0\0\3\0\1\37\0\0\17\0\7\0\2\7\0\1>\17\2\1\276\n\0\1\1\3\0\37\0\0\17\0\36\0\0\3\0\0\37\0\0\17\0\0\0\0\7\0\1\37\0\0\17\0\0\0\3\2\0\1\37\0\0\17\0\0\0\2\3\0\1<\17\2\1\310\6\0\4\1\3\0\37\0\0\17\0%\0\0\3\0\0\37\0\0\17\0\0\0\0\7\0\1\37\0\0\17\0\30\0\3\1\0\0\37\0\0\17\0\0\0\2\3\0\1<\17\2\0\310\6\1\3\1\3\0\24\2\0\6\0 \3\2\3\0\0\t\2\1\n\3\0\3\2\3\0\1\22\n\0\6\0\26\3\2\3\0\0\t\0\0\b\0\0\3\2\0\0\1<\17\2\0\264\6\0\5\0\3\0\22\0\0\2\0\31\1\1\3\0\0\17\2\0\n\0\0\1\1\7\0\1\37\2\0\6\0\33\1\3\7\0\0\17\2\0\n\0\0\1\3\2\0\1<\17\2\0\264\5\0\5\0\3\0\22\2\1\2\0 \1\1\3\0\0\17\2\1\n\0\0\1\1\7\0\1\37\2\1\6\0\21\1\1\7\0\0\24\2\1\n\0\21\1\1\2\0\1\1\17\2\0\322\6\0\5\0\3\0\37\0\0\6\09\0\3\7\0\0\37\0\0\6\0001\0\4\6\0\0\37\0\0\6\0\23\0\0\2\0\0\16\0\0\n\0\0\0\1\0\0\0:\17\2\0\312\n\3\5\0\3\0\24\2\0\5\1#\1\1\0\0\0\31\6\0\b\3 \1\5\7\0\0\34\3\0\6\1/\1\1\0\0\0\f\4\0\6\0\f\1\1\4\0\1\30\17\2\0\310\6\0\6\0\3\0\21\n\22\n\0*\1\17\7\3\0\22\2\t\n\0%\1\6\7\0\0\22\5\1\3\0\21\2\1\7\0\0\f\2\1\7\1\0\1\1\3\0\1:\17\2\0\314\5\0\6\0\3\0\24\n\0\b\1\35\0\2\4\0\0\36\21\0\n\n\35\0\n\7\1\0\22\t\0\6\2\25\0\3\3\0\0\r\f\0\b\1\0\0\1\1\0\08\17\2\0\310\5\0\7\0\3\0\22\37\24\n\0\21\1\17\7\3\0\37\21\f\n\0%\1\6\7\0\0\r\22\1\3\0\21\2\1\7\0\0\f\2\1\n\1\0\1\1\3\0\18\17\2\0\276\5\0\6\0\3\0\17\37\37\n\2\26\1\17\7\3\0\25\34\f\n\2\26\1\6\4\0\0\17\22\0\3\0\26\2\1\7\0\0\n\2\1\b\0\0\0\1\3\0\08\17\2\0\310\6\0\6\0\3\0\22\37\24\n\0\33\1\17\7\3\0\17\21\f\n\0/\1\6\7\0\0\17\22\1\3\0\21\2\1\7\0\0\f\2\1\t\1\0\1\1\3\0\1:\17\2\0\315\n\0\5\0\3\0\36\1\0\1\1\26\3\0\2\0\0\37\1\0\5\1/\3\2\3\0\0\36\1\0\5\19\1\1\3\0\0\r\2\0\6\0\0\1\1\7\0\1:\17\2\0\310\6\0\6\0\3\0\36\1\0\1\1\35\3\0\2\0\0\37\1\0\5\1k\3\2\3\0\0\36\1\0\5\1a\1\1\3\0\0\r\2\0\6\0\0\1\1\7\0\1<\17\2\0\310\3\0\7\0\3\0\37\37\0\5\0\36\0\2\3\0\1\r\37\0\6\0\0\0\2\7\0\1\37\37\0\5\0\"\1\4\2\0\1\r\37\0\6\0\f\1\4\3\0\1=\17\2\0\312\6\0\7\0\3\0\37\0\0\4\0\35\0\1\4\0\0\n\0\0\6\0%\0\2\4\0\0\n\0\0\6\0#\0\1\7\0\0\n\0\0\6\0\0\0\1\4\0\0<\17\2\0\310\0\0\0\0\3\0\37\24\1\3\17\33\0\1\3\0\0\22\17\1\5\16\7\1\1\7\0\1\37\n\0\3\17%\1\1\3\0\0\37\17\1\5\16\7\1\1\3\0\18\17\2\0\310\0\0\0\0\3\0\37\24\1\3\17\33\0\0\3\0\0\22\17\1\6\16&\1\0\7\0\0\37\n\0\3\17%\1\1\3\0\0\37\17\1\6\16\7\1\1\3\0\1\6\17\2\0\310\t\0\5\0\3\0\n\0\1\3\0M\0\1\0\0\0\n\0\0\5\0\0\2\3\3\0\1\n\0\1\6\2\0\1\2\7\0\1\n\0\0\6\0\0\1\1\3\0\1\6\17\2\0\304\5\0\7\0\3\0\24\0\0\6\09\0\1\4\0\0\16\0\0\b\0\0\0\2\4\0\0\16\0\0\b\0{\0\5\4\2\0\16\0\0\b\0\0\0\3\4\0\0$\17\2\0\310\6\0\7\0\3\0\24\0\0\4\0\31\0\1\4\0\0\16\0\0\b\0\0\0\2\7\0\0\24\0\0\n\0 \0\1\4\0\0\16\0\0\n\0/\0\13\0\3\0\3\17\2\0\312\5\0\7\0\3\0\16\n\0\5\0013\0\17\3\3\0\20\n\0\5\2\35\0\1\3\0\0\17\n\0\5\0011\1\6\4\2\0\17\0\0\b\0\0\0\3\4\0\0)\17\2\0\313\5\0\6\0\3\0\23\22\4\4\5D\0\6\3\3\0\25\16\6\n\69\0\4\7\3\0\13\37\3\n\0/\0\1\7\0\0\16\37\1\b\0\0\0\1\3\0\1\3\17\2\0\310\5\0\7\0\3\0\20\0\0\4\0?\0\17\4\2\0\20\0\0\4\0\35\0\1\7\0\0\20\0\0\4\0;\0\4\7\0\0\17\0\0\b\0\0\0\1\7\0\0<\17\2\0\310\n\0\5\0\3\0\17\2\1\3\0/\2\7\7\3\0\n\2\1\5\3\7\2\7\3\3\1\24\2\1\3\3\24\1\4\3\0\0\n\2\1\5\3\0\2\4\7\0\1\4\17\2\0\306\5\0\7\0\3\0\24\0\0\2\0\'\0\1\4\0\0\n\0\0\6\0\0\0\1\4\0\0\24\0\0\2\0003\0\2\6\0\0\n\0\0\6\0\0\0\2\6\0\0\4\17\2\0\316\6\0\6\0\3\0\24\0\0\n\0(\0\1\4\0\0\22\0\0\n\0\0\0\3\4\0\0\24\0\0\n\0)\0\1\4\0\0\24\0\0\n\0\21\0\5\4\3\0$\17\0\0P\1\2\1\1\3\0\24\2\1\5\3 \1\4\0\0\0\b\7\7\5\0\0\1\0\0\1\1\24\2\1\5\3 \3\4\6\0\0\b\7\7\5\0\0\0\0\2\1\1<\17\0\0P\1\2\1\1\3\0\24\2\1\5\3\35\1\5\0\0\0\b\7\7\5\0\0\1\0\0\1\1\24\2\1\5\3\21\2\5\6\0\0\b\7\7\5\0\0\0\0\2\1\1\7\17\2\0\310\5\0\7\0\3\0\0\0\0\0\0\177\0\0\4\0\0\0\0\0\0\0\177\0\0\4\0\0\16\f\0\b\0\0\0\5\7\2\0\16\f\0\b\0\0\0\b\7\0\1\4\17\2\0\310\0\0\0\0\3\0\24\n\1\n\3C\1\1\4\0\0\24\13\3\t\2\n\0\1\4\0\0\24\n\1\n\5R\1\3\4\3\0\24\13\3\t\2\21\0\1\4\0\0;\17\2\0\304\5\13\6\3\3\0\37\5\3\5\0167\3\2\7\1\0\f\7\0\5\179\1\2\0\0\0\17\2\0\4\0027\3\1\3\0\0\f\20\0\6\1\0\2\1\0\0\1;\17\2\0\313\n&\5\0\3\0\37\24\23\t\5\34\1\3\4\1\0\37\21\0\6\2/\0\4\4\0\0\31\24\0\5\7-\0\2\4\0\0\20\37\0\13\0\0\1\2\4\0\1;\17\2\0\304\t\24\5\1\3\0\37\0\0\n\0\0\0\17\0\3\0\n\6\0\n\2Q\2\f\0\3\0\24\0\0\6\0\'\1\1\3\0\0\n\6\0\6\1\0\2\1\5\0\1:\17\2\0\306\7\b\6\1\3\0\37\0\0\6\0\'\3\1\3\0\0\34\f\f\13\5\'\3\t\3\0\0\34\20\0\5\29\1\2\3\0\0\16\20\0\b\1\0\1\4\3\0\1\22\17\2\0\310\0\0\0\0\3\0\22\24\0\n\t/\0\6\4\0\0\24\0\0\6\0+\0\2\4\0\0\24\0\0\6\0\33\0\1\4\0\0\22\0\0\n\0\0\0\4\4\0\0\2\17\2\0\310\b\b\5\1\3\0\26\24\0\n\13\37\0\4\4\0\0\24\0\0\6\0\37\0\2\4\0\0\24\0\0\6\0\37\0\1\4\0\0\21\20\0\t\1\0\0\2\4\0\1:\17\2\0\306\t\24\4\1\3\0\23\31\0\n\2#\2\2\0\0\0\35\23\0\b\3\35\2\t\0\0\0\35\24\0\7\0015\0\1\0\0\0\21\37\0\t\0\21\1\1\0\0\1:\17\2\0\310\0\0\0\0\3\0\22\24\0\n\tG\0\t\4\2\0\24\0\0\6\0\'\0\2\4\0\0\24\0\0\6\0\31\0\2\4\0\0\22\0\0\n\0\0\0\1\4\0\0:\17\2\0\310\0\0\0\0\3\0\22\24\0\n\t+\0\t\0\2\0\24\0\0\6\0\35\0\2\0\0\0\24\0\0\6\0\21\0\2\0\0\0\20\0\0\n\0\0\0\1\0\0\1,\17\2\0\310\0\0\0\0\3\0\22\0\0\n\0%\0\1\4\0\0\24\0\0\n\0\0\1\2\4\0\0\23\16\0\n\1%\0\1\4\0\0\24\0\0\n\0\0\0\5\4\0\0\2\17\2\0\306\n\0\5\0\3\0\22\0\0\b\09\0\3\4\0\0\37\0\0\b\0k\0\b\4\0\0\22\0\0\b\0%\0\1\4\0\0\24\0\0\13\0\0\3\2\4\0\0:\17\2\0\310\t\0\5\0\3\0\22\0\0\6\0%\0\0\0\0\0\22\0\0\6\3I\0\4\0\1\0\22\0\0\6\0)\0\0\0\0\0\20\b\0\b\1\6\0\1\7\0\18\17\2\0\314\n\0\5\0\3\0\24\0\0\6\0\33\0\1\0\0\0\24\0\0\6\0\35\0\1\0\0\0\24\0\0\6\0%\0\2\0\0\0\20\0\0\b\0\0\1\1\0\0\1:\17\2\0\314\n\0\5\0\3\0\24\4\0\6\1\33\1\1\2\0\0\24\16\0\b\3-\1\6\0\2\0\24\0\0\6\0\'\1\1\7\0\0\20\0\0\n\0\0\1\2\0\0\0012\17\2\0\314\n\0\5\0\3\0\20\f\0\6\1\33\0\1\0\0\0\0\0\0\0\17\177\0\1\0\0\0\24\0\0\6\0003\0\1\0\0\0\22\0\0\n\0\0\0\1\0\0\1:\17\2\0\310\0\0\0\0\3\0\20\5\n\0\t\36\1\1\3\0\0\r\n\1\n\n%\3\2\2\0\0\17\n\0\n\1%\1\1\4\0\0\24\n\0\n\0\r\1\1\6\0\1:\17\2\0\314\t\n\5\1\3\0\20\16\0\b\0\33\1\1\0\0\0\17\f\0\n\17?\1\2\0\2\0\24\0\0\n\0/\0\1\0\0\0\20\0\0\n\0\0\1\1\0\0\0012\17\2\0\314\4\0\6\0\3\0\16\0\0\b\0\36\1\1\0\0\0\16\17\0\n\13C\0\4\0\2\0\24\0\0\b\0\'\0\2\0\0\0\22\n\0\n\1\0\0\1\0\0\1;\17\2\0\310\0\0\0\0\3\0\37\16\0\n\1\27\0\4\6\0\0\20\n\0\n\1\31\1\1\4\0\0\24\0\0\6\0\36\0\1\4\0\0\22\0\0\n\0\33\1\1\4\0\0:\17\2\0\310\0\0\0\0\3\0\16\t\0\t\2#\0\1\4\0\0\37\21\0\17\f9\1\5\4\2\0\r\13\0\b\1.\0\1\4\0\0\17\37\0\n\0\1\0\1\4\0\1:\17\2\0\310\0\0\0\0\3\0\f\b\0\n\2!\0\1\0\0\0\20\f\0\n\1;\0\2\7\2\0\16\f\0\n\5%\0\1\0\0\0\17\f\0\b\2\0\1\1\0\0\19\17\2\0\310\0\0\0\0\3\0\16\n\0\n\3/\1\2\4\0\0\13\t\0\b\t?\0\6\7\2\0\20\0\0\b\0#\0\1\4\0\0\20\f\0\t\1\0\0\2\4\0\0:\17\2\0\310\0\0\0\0\3\0\20\f\0\b\0\35\0\1\0\0\0\16\16\0\n\17)\0\2\0\2\0\24\16\0\n\7/\0\1\0\0\0\20\16\0\b\1\0\0\1\0\0\1:\17\2\0\310\b\0\6\0\3\0\r\0\0\b\0 \1\1\0\0\0\0\0\0\0\17\177\0\1\0\0\0\f\0\0\6\0004\0\1\0\0\0\20\b\0\b\1\0\0\1\0\0\1;\17\2\0\310\0\0\0\0\3\0\20\16\0\n\1\33\0\1\6\0\0\20\n\0\n\1+\1\1\4\0\0\24\0\0\6\0!\0\1\4\0\0\22\0\0\n\0\0\1\1\4\0\0006\17\2\0\313\2\2\1\1\3\0\16\n\1\5\5\30\1\0\1\0\0\22\2\1\b\3\0\0\1\3\0\1\37\2\22\n\5\0\2\1\7\0\1\17\2\1\n\5\0\2\0\3\0\1<\17\2\0\310\0\0\0\0\3\0\22\f\1\n\2 \1\1\0\0\0\22\n\1\n\3\0\0\1\1\0\1\17\n\1\n\5\27\1\1\2\0\0\24\2\1\n\3\7\0\1\6\0\1:\17\2\0\316\7\0\5\0\3\0\20\17\0\b\1\31\0\1\7\0\0\20\f\0\4\1?\0\b\0\2\0\22\0\0\4\0005\0\1\0\0\0\20\0\0\n\0\0\0\2\0\0\1<\17\2\0\310\b\0\5\0\3\0\16\f\0\4\1\31\1\1\3\0\0\22\0\0\b\0\0\1\1\3\0\1\17\0\0\6\0\17\1\0\7\0\0\20\0\0\t\0!\1\1\7\0\1;\17\2\0\311\6\16\7\1\2\0\37\37\0\6\0#\0\5\4\0\0\37\37\0\5\08\0\6\7\0\0\37\37\0\5\0\37\0\1\4\0\0\r\37\0\t\0\1\0\1\4\0\1\0\17\2\0\275\n\13\4\1\3\0\37\37\0\t\0G\0\t\4\2\1\n\37\0\t\0$\0\n\4\0\0\37\37\0\3\0000\0\1\4\0\0\r\37\0\b\0\0\0\2\4\0\1;\17\2\0\314\b\0\6\0\3\0\37\20\0\n\17%\0\4\0\0\0\30\0\0\n\0M\0\2\0\0\0\24\0\0\n\0M\0\3\7\1\0\20\5\0\n\7\0\0\4\0\0\1;\17\2\0\304\n\0\5\0\2\0\16\21\20\6\3;\0\4\4\1\0\20\37\0\0\0H\0\2\4\0\0\31\37\0\7\0\"\0\2\7\0\0\21\37\0\t\0\0\0\1\4\0\1\34\17\2\0\310\n\24\4\1\3\0\17\24\0\n\2\35\1\4\7\0\0\22\2\1\n\0\r\2\2\3\0\1\24\37\17\n\3\30\0\4\7\0\0\20\2\1\n\0\0\1\2\3\0\1;\17\2\0\310\n\0\5\0\3\0\24\0\0\n\0\0\0\4\0\0\0\16\20\0\n\5;\0\2\3\0\0\22\22\0\n\t\'\0\3\0\1\0\16\f\0\n\2\0\1\1\0\0\1\3\17\2\0\310\0\0\0\0\3\0\24\0\0\4\0\33\0\2\0\0\0\24\0\0\4\0\25\0\1\0\0\0\30\24\0\n\17\21\0\2\0\0\0\21\0\0\n\0\0\0\3\0\0\1\2\17\2\0\3542\0\7\0\3\0\37\0\0\n\0/\0\6\0\0\0\0\0\0\0\17\177\0\1\0\0\0\37\0\0\n\0+\0\n\0\0\0\24\b\0\n\1\0\0\2\0\0\1;\17\2\0\302\0(\0\1\3\0\37\0\0\n\0\0\0\n\0\0\0\30\16\0\n\3;\0\2\6\0\0\30\n\0\n\79\0\2\0\0\0\16\13\0\b\3\0\1\1\3\0\1\3\17\2\0\310\0\0\0\0\3\0\37\0\0\4\3\27\0\2\0\0\0\37\0\0\4\0\31\0\1\0\0\0\24\0\0\2\0\31\0\1\0\0\0\n\0\0\n\0\0\0\2\0\0\1<\17\2\0\310\0\0\0\0\3\0\37\0\0\1\0\0\0\f\0\3\0\34\21\0\b\17\7\1\1\0\0\1\36\21\0\t\r%\1\0\0\2\0\34\17\0\7\17\0\2\1\0\0\1<\17\2\0\310\0\0\0\0\3\0\36\0\0\1\0\0\0\2\0\2\0\34\20\0\b\17C\0\1\0\0\1\34\22\0\t\17!\0\0\0\3\0\36\20\0\b\17\0\0\0\0\2\1\2\17\2\0\310\0\0\0\0\3\0\36\20\1\n\17-\0\3\0\3\0\36\n\0\n\17)\0\0\7\1\0\36\24\0\n\17\21\0\0\3\3\0\36\24\0\n\17\0\0\1\0\0\1:\17\2\0\310\0\0\0\0\3\0\37\0\0\2\0\0\0\16\0\0\0\37\0\0\2\0\0\0\t\0\0\0\37\0\0\2\0\0\0\5\0\0\0\b\b\0\4\17\0\3\1\0\0\1\0\17\2\0\310\0\0\0\0\2\0\36\32\0\r\17\25\0\1\0\1\0\36\34\0\16\17/\0\16\0\3\0\36\20\0\b\17\7\0\0\0\1\0\35\20\0\b\17\0\0\0\0\0\1+\17\2\0\310\0\0\0\0\3\0\37\24\0\n\17\13\0\1\0\0\0\37\f\0\6\17\37\0\0\0\3\0\37\26\0\n\3\21\0\0\0\0\0\37\22\0\t\17\0\0\1\0\0\0012\17\2\1\214\177\0\5\0\3\0\30\24\0\n\17\25\1\2\0\0\0\32\f\0\6\17\27\1\1\0\2\0\37\n\0\4\17%\1\1\3\1\0\32\13\0\5\17\0\2\1\0\0\1!\17\2\0\310\0\0\0\0\3\0\32\26\0\n\n\7\0\3\0\0\0\34\24\0\n\17\17\0\2\0\1\0\34\26\0\n\0175\0\1\0\3\0\32\f\0\6\17\0\2\1\0\0\1\2\17\2\0\310\0\0\0\0\3\0\34\f\0\4\17%\1\0\0\1\0\24\b\0\4\17\'\1\0\0\2\0\34\n\0\5\17%\0\0\0\0\0\20\5\0\2\17\0\3\0\0\0\0012\17\2\0\310\16\0\7\0\3\0\36\n\0\2\17!\1\0\0\0\0\36\n\0\4\17\37\0\0\5\3\0\36\n\0\4\5!\1\0\3\1\0\32\b\0\4\17\0\2\0\0\0\1;\17\2\0\310\0\0\0\0\3\0\30\27\0\13\17\3\0\3\0\3\0\32\16\0\7\17+\0\2\0\2\0\32\n\0\5\17;\0\2\0\3\0\26\20\0\b\17\0\2\6\0\0\0013\17\2\0\310\0\0\0\0\3\0\31\27\0\f\17\7\0\3\0\3\0\32\16\0\7\0173\0\3\0\0\0\32\b\0\5\59\0\4\0\0\0\30\20\0\b\17\0\2\6\0\0\0012\17\2\0\310\0\0\0\0\3\0\34\17\0\6\17\25\1\2\3\3\0\30\20\0\7\17!\0\b\7\2\0\32\17\0\7\17\37\1\5\3\0\0\30\13\0\5\17\0\2\2\7\3\1\4\17\2\0\310\0\0\0\0\3\0\0\0\0\0\0\177\0\1\0\0\0\0\0\0\0\0\177\0\1\0\0\0\20\32\0\n\17/\0\1\0\0\0\16\30\0\n\17\0\0\1\0\0\1\3\17\2\0\310\0\0\0\0\3\0\37\6\0\4\0173\0\1\0\3\0\37\0\0\2\0\25\0\b\7\2\0\37\b\0\6\5C\0\t\3\1\0\37\n\0\5\17\0\0\n\3\2\1:\17\2\0\343\35\0\7\0\3\0\37\25\0\4\5\13\0\17\0\3\0\37\0\0\3\0003\0\0\0\3\0\37\0\0\4\0\23\0\0\0\0\0\24\20\0\b\17\0\0\r\0\0\1:\17\2\0\343\35\0\7\0\3\0\30\22\0\4\1\35\0\17\0\3\0\37\0\0\3\0I\0\2\0\1\0\37\0\0\3\0\25\0\0\0\0\0\22\16\0\7\17\0\0\r\0\0\1\"\17\2\0\310\0\0\0\0\3\0\37\30\0\n\17\21\0\b\3\3\0\37\n\0\2\7\27\0\13\3\3\0\37\20\0\b\7!\0\5\3\0\0\37\16\0\6\17\0\0\3\0\3\1;\17\2\0\310\0\0\0\0\3\0\36\24\0\n\17\33\0\17\2\0\0\36\21\0\b\17\33\1\4\0\1\0\34\f\0\6\17+\1\2\3\2\0\32\20\0\b\17\0\1\2\0\3\1*\17\2\0\310\0\0\0\0\3\0\37\26\0\f\17\23\0\17\0\3\0\37\20\0\n\17)\0\16\7\0\0\37\b\0\4\17\31\0\7\0\0\0\37\n\0\4\17\21\1\2\3\0\1.\17\2\0\310\0\0\0\0\3\0\37\6\0\3\17\35\0\r\0\0\0\36\b\0\4\17\21\1\5\0\0\1\36\b\0\4\17\21\1\f\0\0\1\37\25\0\n\17\21\0\16\0\3\1\2\17\2\0\320\5\0\5\0\3\0\37\24\0\n\0175\0\2\0\2\0\37\20\0\t\179\0\5\0\3\0\37\b\0\4\17\31\0\t\7\0\0\37\b\0\4\17\13\1\2\3\0\1\4\17\2\0\320\6\0\6\0\3\0\r\b\0\4\17\31\1\3\0\0\0\22\b\0\4\17\3\2\1\7\0\1\16\b\0\4\17\37\1\2\7\0\0\20\b\0\4\17\21\2\2\3\0\1\23\17\2\0\310\0\0\0\0\3\0\37\30\0\f\17C\0\n\2\1\0\37\20\0\b\17\33\0\6\0\3\0\37\f\0\4\0173\0\4\0\0\0\37\n\0\5\17\0\0\2\0\0\1,\17\2\0\304\6\20\5\3\3\0\30\16\0\7\179\1\f\3\0\0\30\n\0\7\17\0\1\4\0\0\1\32\16\0\6\179\1\4\0\0\0\32\b\0\6\17\5\2\1\0\0\1\3\17\2\0\310\0\30\0\1\3\0\32\16\0\7\17/\0\n\0\0\0\30\16\0\4\179\2\t\0\0\0\36\n\0\0\0G\0\3\3\0\0\30\b\0\5\17\0\2\1\0\0\1\2\17\2\0\310\0\0\0\0\3\0\37\24\0\n\0173\0\2\0\3\0\37\30\0\n\17\21\0\4\0\1\0\37\20\0\n\17C\0\4\0\0\0\36\22\0\n\17\0\0\2\0\0\1\33\17\2\0\310\0\0\0\0\3\0\37\22\0\n\17\23\0\2\0\2\0\37\32\0\n\17\37\0\2\3\0\0\37\26\0\n\17/\0\2\0\3\0\36\24\0\n\17\0\0\2\7\0\1<\17\2\0\310\0\0\0\0\3\0\36\32\0\n\17)\0\6\0\2\0\34\24\0\n\17\0\0\b\0\0\1\34\24\0\n\179\0\17\0\0\0\30\23\0\t\17/\1\t\7\0\1\4\17\2\0\310\0\0\0\0\3\0\36\30\0\n\17\t\0\5\0\3\0\34\24\0\n\17\0\0\3\0\0\1\25\32\0\n\17\3\0\t\0\3\0\33\24\0\n\17\0\0\2\0\2\1\2\17\1\0\370\0P\0\3\3\0\24\0\0\n\0\33\0\2\0\2\0\37\0\0\n\0\21\0\1\0\0\0\37\0\0\n\0!\0\3\0\3\0\20\b\24\f\1\0\0\17\0\1\1\4\17\2\0\310\0\0\0\0\3\0\37\22\0\n\17!\0\6\0\0\0\37\26\0\n\17\0\0\3\0\0\1\37\30\0\b\17/\0\4\0\0\0\37\20\0\b\17\7\0\1\0\0\1,\17\2\0\310\0\0\0\0\3\0\30\16\0\7\17!\1\4\3\0\0\30\4\0\2\17\0\3\0\3\0\1\30\24\0\n\17/\1\6\7\0\0\30\f\0\6\17\13\2\2\7\0\1:\17\2\0\310\0\0\0\0\3\0\37\0\0\2\0\0\0\16\0\0\0\37\0\0\2\0\0\0\f\0\0\0\37\0\0\2\0\0\0\n\0\0\0\20\24\0\n\17\3\2\1\0\0\1:\17\2\0\310\0\0\0\0\3\0\37\0\0\2\0\0\0\16\0\0\0\37\0\0\2\0\0\0\t\0\0\0\37\0\0\2\0\0\0\5\0\0\0\20\22\0\t\17\t\0\1\0\0\18\17\2\1\364\3\0\7\0\3\0\32\n\0\5\0)\0\0\0\0\0\34\22\0\n\17\21\0\0\0\0\0\26\n\0\6\17\t\0\1\0\0\0\32\24\0\n\17\0\0\b\0\0\1;\17\2\0\310\0\0\0\0\3\0\32\4\0\2\3\17\0\16\0\1\0\32\b\0\2\7\33\0\6\0\1\0\32\26\0\n\13\21\0\7\0\2\0\26\22\0\b\17\5\0\0\0\0\0013\17\2\0\310P\0\3\0\3\0\32\0\0\n\0\21\0\1\7\1\0\32\4\0\f\2\b\0\4\0\3\0\24\22\1\f\3\25\0\1\0\2\0\27\13\f\16\4\21\0\1\3\0\1;\17\2\0\310<\0\3\0\3\0\36\4\0\2\17\26\0\1\7\1\0\36\2\0\1\17\31\0\4\0\2\0\37\b\0\4\17#\0\t\0\2\0\34\f\0\6\17\21\0\1\3\0\1\2\17\2\0\310\7\0\7\0\3\0\t\6\0\1\17%\2\1\7\1\0\n\0\0\1\0#\1\3\3\1\0\2\0\0\1\0\21\2\1\0\2\0\f\2\4\2\0\0\2\0\0\0\1\32\17\2\0\310\t\3\5\2\3\0\24\1\1\n\3\7\1\2\1\0\0\24\2\1\n\0\0\0\3\0\1\0\37\24\1\0\17\33\0\0\0\0\0\24\2\1\n\3\20\2\1\3\0\1\34\17\2\1\322\5\0\6\0\3\0\37\20\0\0\17\0\1\2\3\0\0\37\0\0\b\0\20\1\1\6\0\1\37\0\0\b\0\21\1\2\7\0\0\37\0\0\b\0\20\1\1\3\0\1<\17\2\0\313\b\0\6\0\3\0\37\b\0\n\2\26\0\1\0\0\0\24\0\0\n\0\t\0\0\0\0\1\21\0\0\n\0\33\0\1\0\0\0\24\2\1\n\3\0\0\0\0\0\1=\17\2\0\303\4\0\6\0\3\0\31\r\0\n\5\30\0\f\0\0\0\34\0\0\n\0\0\0\6\0\0\1\34\2\1\n\3\7\0\b\0\0\1\34\0\0\n\0\7\0\t\0\0\18\17\2\0\314\5\0\6\0\3\0\34\0\0\4\0\35\0\7\6\0\0\34\0\4\4\0\37\0\3\4\0\0\34\0\6\4\0\33\0\1\4\0\0\30\16\4\b\1\0\0\2\4\0\0>\17\2\0\311\6\0\6\0\3\0\r\17\0\n\2\23\0\2\3\0\0\37\n\0\b\5\33\0\2\3\0\0\24\0\0\b\0/\0\1\6\0\0\24\0\4\b\0\0\0\2\4\0\1<\17\2\0\314\6\0\5\0\3\0\37\n\6\3\5\35\0\b\3\0\0\32\f\6\6\3\0\0\2\7\0\0\37\0\0\3\3\37\0\2\3\3\0\24\f\6\b\2\0\0\0\3\0\1;\17\2\0\310\0\0\3\0\3\0\24\5\1\f\3\35\1\1\1\0\0\24\30\0\b\2\21\1\1\2\0\0\37\30\0\0\0 \0\0\0\0\0\24\0\0\t\0\0\0\1\7\0\0=\17\2\0\310\0\0\0\0\3\0\22\6\6\17\6\26\0\1\0\0\0\24\f\f\17\6\0\0\1\2\0\0\24\f\f\17\6\0\0\3\0\0\0\24\f\f\17\5\0\0\2\6\0\0\34\17\2\0\310\0\0\0\0\3\0\13\b\1\n\5\22\1\0\3\0\0\17\n\n\n\5\0\0\1\3\0\1\17\n\1\n\5\33\1\0\7\0\0\17\2\n\n\5\7\0\0\3\0\1=\17\2\0\310\3\2\2\1\3\0\37\n\0\17\r\26\0\6\0\0\0\37\f\5\17\r\0\0\1\2\0\1\37\f\5\17\r\0\0\3\0\0\1\37\f\5\17\r\0\0\2\6\0\18\17\2\1\310\4\0\6\0\3\0\37\37\n\5\17\0\0\1\7\0\0\37\5\n\5\5\26\2\1\1\0\0\35\4\0\5\5\22\1\1\7\0\0\31\n\5\b\5\0\0\1\3\0\1,\17\2\0\310\0\0\0\0\3\0\25\n\0\4\17\26\1\0\7\0\0\37\n\0\b\3\0\1\0\1\0\1\25\16\0\4\17\7\2\0\7\0\0\37\n\0\b\3\0\0\0\0\0\1=\17\2\0\310\0\0\0\0\3\0\24\n\0\n\2#\0\3\4\0\0\32\0\0\n\0\0\0\1\7\0\0\32\0\0\n\0\0\0\1\4\0\0\32\0\0\n\0\0\0\2\4\0\0\3\17\2\0\310\0\0\0\0\3\0\30\b\0\n\3\33\0\0\3\0\0\32\b\0\n\17\7\0\0\4\0\0\32\b\0\n\17%\0\b\7\0\0\32\0\4\n\0\0\0\1\4\0\0=\17\2\0\310\0\0\0\0\3\0\33\21\0\n\17#\0\n\4\0\0\24\0\0\n\0\0\0\2\4\0\0\24\0\0\n\0\0\0\1\4\0\0\24\0\0\n\0\0\0\0\4\0\0;\17\2\0\310\0\0\0\0\3\0\26\0\0\n\0\r\0\n\0\0\0\32\32\0\n\17\23\0\r\0\3\0\32\26\0\13\17\13\0\0\0\1\0\36\16\0\7\17\0\1\1\0\0\1;\17\0\1\260P\0\7\0\3\0\37\0\0\5\0\f\0\16\0\0\0\37\n\0\5\0171\0\0\0\3\0\33\33\0\n\17%\0\n\0\2\0\34\16\0\7\17\0\1\0\0\1\1$\17\2\0\306\6\24\7\1\3\0\37\20\0\b\17\33\1\f\0\3\0\37\n\0\5\17\21\1\4\0\0\1\24\0\0\n\0%\0\1\0\0\0\16\b\0\b\1\0\1\1\0\0\1<\17\2\0\302\4\0\6\0\3\0\20\f\0\n\1\35\1\1\0\0\0\22\n\0\b\2\0\1\1\0\0\1\37\20\0\b\17\21\1\f\0\3\0\37\n\0\5\17\t\1\4\0\0\1<\17\2\0\306\7\0\6\0\3\0\24\0\0\2\0 \0\1\6\0\0\b\0\0\6\0\21\1\1\3\0\1\34\f\1\4\f3\1\f\0\0\0\32\1\1\7\2\0\2\1\3\0\1\4\17\2\1\322x\0\6\0\3\0\21\0\0\n\09\0\2\0\0\0\20\22\0\n\17\n\0\2\0\0\1\17\0\0\n\09\0\2\2\0\0\21\21\0\n\17\n\0\2\7\0\1\3\17\2\1\326\177\0\7\0\3\0\24\30\0\n\17%\0\b\0\0\0\22\30\0\n\17+\0\3\0\0\0\24\n\0\5\17\23\0\0\0\0\0\22\23\0\t\17\0\0\f\0\0\1\7\17\2\0\374}<\5\2\3\0\0\0\0\0\17\177\0\1\0\0\1\0\0\0\0\17\177\0\5\0\0\1\20\0\0\n\0\0\0\1\3\0\1\20\0\0\n\0\0\0\1\5\0\1\4\17\2\0\340d\0\5\0\3\0\24\0\0\n\0\21\0\0\0\3\0\24\0\0\n\0\0\0\f\0\2\1\24\0\0\n\0\n\0\0\0\1\0\24\0\0\n\0\0\0\16\0\3\1\4\17\1\0\206\0d\0\3\3\0\0\0\0\0\17\177\0\1\0\0\0\0\0\0\0\17\177\0\1\0\0\1\37\0\0\n\0#\0\16\7\0\0\24\0\0\n\0\0\0\5\3\1\1<\17\1\0\346\0\22\0\3\3\0\37\0\0\17\0%\0\5\0\0\0\37\0\0\17\0\21\0\1\0\0\1\37\0\0\17\2\30\0\5\0\0\0\37\0\0\17\2\n\0\1\0\0\1\4\17\1\0\231D\0\6\0\3\0\0\0\0\0\17\177\0\1\0\0\0\0\0\0\0\17\177\0\1\0\0\1\37\0\0\1\0%\0\16\0\0\0\20\0\0\4\0\0\0\5\7\1\1\0\17\2\0\202x\0\7\0\3\0\0\0\0\0\17\177\0\1\0\0\0\37\0\0\1\0\37\0\1\0\0\0\37\0\0\1\0\27\0\1\0\0\0\20\0\0\b\0\0\0\1\0\0\1:\17\2\0xx\36\7\2\3\0\37\0\0\0\0\21\0\2\0\2\0\37\0\0\0\0\n\0\1\0\1\0\37\0\0\0\0\35\0\1\0\2\0\f\0\0\4\0\0\0\0\0\0\1:\17\2\0\310\0\0\0\0\3\0\37\0\0\0\0\f\0\0\0\1\0\37\0\0\0\0\21\0\f\0\2\0\37\0\0\0\0\f\0\5\0\3\0\1\0\4\2\0\0\3\4\0\0\1\4\17\0\1\324x\0\7\0\3\0\37\0\0\5\0\17\0\0\0\3\0\24\0\0\n\0\7\0\7\0\1\1\f\0\0\5\0/\0\3\0\3\0\20\0\0\b\0\0\0\1\0\0\1\3\17\3\0\322P\0\7\0\3\0\30\26\0\13\17\n\0\1\0\1\0\37\n\0\5\17%\0\6\0\3\0\37\0\0\0\0003\0\r\0\3\0\34\r\0\6\17\0\0\3\0\2\1\6\17\3\0\310P\0\6\0\3\0\37\0\0\0\0C\0\f\0\0\0\24\16\0\7\17\7\0\4\0\0\0\24\16\0\7\17\21\0\2\4\3\0\24\16\0\7\17\0\0\2\4\0\0 \17\2\0\310\0\0\0\0\3\0\37\b\0\4\17\r\0\3\0\2\0\n\n\0\4\17\21\3\1\0\1\0\37\0\0\0\0\3\0\1\0\2\0\20\n\0\5\17\0\3\0\0\0\1\4\17\3\0\202x\0\7\0\3\0\37\0\0\4\0\21\0\16\0\2\0\20\0\0\b\0\0\0\b\0\0\1\37\0\0\4\0%\0\3\0\2\0\20\0\0\7\0\0\0\1\0\0\1\4\17\2\1\276\24\0\2\0\3\0\22\16\0\7\17\23\0\f\2\0\0\25\f\n\6\7\21\0\1\4\3\0\f\16\0\7\17\21\0\n\7\0\0\32\f\n\6\7\0\0\2\4\0\1\4\17\3\0\330\0\0\1\0\3\0\37\13\6\0\1\16\0\4\4\3\0\37\r\t\3\5$\1\1\5\0\1\13\5\3\0\1\r\1\17\4\2\0\b\7\6\3\3\35\1\5\4\0\1\4\17\2\0\372dd\1\2\3\0\n\n\0\17\0%\0\1\4\0\0\b\5\n\n\1\0\0\17\4\3\0\37\37\0\1\0\f\3\0\7\0\1\37\37\0\2\0\0\3\0\3\0\1\7\17\2\0\310\0\0\0\0\3\0\0\0\0\0\0\177\0\1\4\0\0\0\0\0\0\0\177\0\1\4\0\0\0\0\0\0\0\177\0\1\4\0\0\37\37\0\17\0\0\0\1\4\0\0".getBytes (XEiJ.ISO_8859_1);
2853:
2854:
2855:
2856:
2857:
2858:
2859:
2860:
2861:
2862:
2863:
2864:
2865:
2866:
2867:
2868: public static final byte[] TONE_MASK = "?\17\3\1\377\177\177\7\3\3\0\37\37\37\17\17\177\3\17\7\3\1\37\37\37\17\17\177\3\17\7\3\1\37\37\37\17\17\177\3\17\7\3\1\37\37\37\17\17\177\3\17\7\3\1".getBytes (XEiJ.ISO_8859_1);
2869:
2870:
2871:
2872:
2873:
2874:
2875:
2876:
2877:
2878:
2879:
2880:
2881:
2882:
2883:
2884:
2885:
2886:
2887:
2888:
2889:
2890: }