Browse Source

Improve PlaySynthMusic

dds
PaulStoffregen 10 years ago
parent
commit
80aca92492
5 changed files with 147 additions and 893 deletions
  1. +0
    -29
      examples/Synthesis/PlayMidiTones/PlayMidiTones.h
  2. +0
    -137
      examples/Synthesis/PlayMidiTones/PlayMidiTones.ino
  3. +0
    -636
      examples/Synthesis/PlayMidiTones/william_tell_overture.c
  4. +0
    -17
      examples/Synthesis/PlaySynthMusic/PlaySynthMusic.h
  5. +147
    -74
      examples/Synthesis/PlaySynthMusic/PlaySynthMusic.ino

+ 0
- 29
examples/Synthesis/PlayMidiTones/PlayMidiTones.h View File

@@ -1,29 +0,0 @@

// Table of midi note frequencies * 2
// They are times 2 for greater accuracy, yet still fits in a word.
// Generated from Excel by =ROUND(2*440/32*(2^((x-9)/12)),0) for 0<x<128
// The lowest notes might not work, depending on the Arduino clock frequency

const unsigned int tune_frequencies2_PGM[128] =
{
16,17,18,19,21,22,23,24,26,28,29,31,33,35,37,39,41,
44,46,49,52,55,58,62,65,69,73,78,82,87,92,98,104,110,
117,123,131,139,147,156,165,175,185,196,208,220,233,
247,262,277,294,311,330,349,370,392,415,440,466,494,
523,554,587,622,659,698,740,784,831,880,932,988,1047,
1109,1175,1245,1319,1397,1480,1568,1661,1760,1865,1976,
2093,2217,2349,2489,2637,2794,2960,3136,3322,3520,3729,
3951,4186,4435,4699,4978,5274,5588,5920,6272,6645,7040,
7459,7902,8372,8870,9397,9956,10548,11175,11840,12544,
13290,14080,14917,15804,16744,17740,18795,19912,21096,
22351,23680,25088
};

#define AMPLITUDE (0.4)
#define CMD_PLAYNOTE 0x90 /* play a note: low nibble is generator #, note is next byte */
#define CMD_STOPNOTE 0x80 /* stop a note: low nibble is generator # */
#define CMD_RESTART 0xe0 /* restart the score from the beginning */
#define CMD_STOP 0xf0 /* stop playing */

// User must supply this score array
extern unsigned char score[];

+ 0
- 137
examples/Synthesis/PlayMidiTones/PlayMidiTones.ino View File

@@ -1,137 +0,0 @@
#include <Audio.h>
#include <Wire.h>
//#include <WM8731.h>
#include <SD.h>
#include <SPI.h>

#include "PlayMidiTones.h"

unsigned char *sp = score;

//AudioInputI2S adc;
//AudioInputAnalog ana(16);
AudioSynthWaveform sine0(AudioWaveformSine);
AudioSynthWaveform sine1(AudioWaveformTriangle);
AudioSynthWaveform sine2(AudioWaveformSquare);
AudioSynthWaveform sine3(AudioWaveformSawtooth);
AudioSynthWaveform sine4(AudioWaveformSine);
AudioSynthWaveform sine5(AudioWaveformTriangle);
AudioSynthWaveform sine6(AudioWaveformSquare);
AudioSynthWaveform sine7(AudioWaveformSawtooth);
AudioSynthWaveform *waves[8] = {
&sine0,
&sine1,
&sine2,
&sine3,
&sine4,
&sine5,
&sine6,
&sine7,
};

AudioMixer4 mixer1;
AudioMixer4 mixer2;
AudioOutputI2S audioOut;

AudioConnection c0(sine0, 0, mixer1, 0);
AudioConnection c1(sine1, 0, mixer1, 1);
AudioConnection c2(sine2, 0, mixer1, 2);
AudioConnection c3(sine3, 0, mixer1, 3);

AudioConnection c4(sine4, 0, mixer2, 0);
AudioConnection c5(sine5, 0, mixer2, 1);
AudioConnection c6(sine6, 0, mixer2, 2);
AudioConnection c7(sine7, 0, mixer2, 3);
AudioConnection c11(mixer1, 0, audioOut, 0);
AudioConnection c12(mixer2, 0, audioOut, 1);

//AudioControl_WM8731 codec;
AudioControlSGTL5000 codec;

int volume = 50;

void setup()
{
Serial.begin(115200);
while (!Serial) ;
delay(3000);

// Audio connections require memory to work. For more
// detailed information, see the MemoryAndCpuUsage example
AudioMemory(8);
codec.enable();
codec.volume(0.5);
// I want output on the line out too
codec.unmuteLineout();

delay(200);
Serial.println("Begin PlayMidiTones");
delay(50);
Serial.println("setup done");
AudioProcessorUsageMaxReset();
AudioMemoryUsageMaxReset();
}

unsigned long last_time = millis();
void loop()
{
unsigned char c,opcode,chan;
unsigned long d_time;
if(0) {
// For PlayMidiTones this produces:
// Proc = 6 (12), Mem = 2 (8)
if(millis() - last_time >= 5000) {
Serial.print("Proc = ");
Serial.print(AudioProcessorUsage());
Serial.print(" (");
Serial.print(AudioProcessorUsageMax());
Serial.print("), Mem = ");
Serial.print(AudioMemoryUsage());
Serial.print(" (");
Serial.print(AudioMemoryUsageMax());
Serial.println(")");
last_time = millis();
}
}

// Volume control
int n = analogRead(15);
if (n != volume) {
volume = n;
codec.volume((float)n / 1023);
}
c = *sp++;
opcode = c & 0xf0;
chan = c & 0x07;

if(c < 0x80) {
// Delay
d_time = (c << 8) | *sp++;
delay(d_time);
return;
}
if(*sp == CMD_STOP) {
Serial.println("DONE");
while(1);
}

// It is a command
if(opcode == CMD_STOPNOTE) {
waves[chan]->amplitude(0);
return;
}

if(opcode == CMD_PLAYNOTE) {
waves[chan]->frequency(tune_frequencies2_PGM[*sp++]);
waves[chan]->amplitude(AMPLITUDE);
return;
}

if(opcode == CMD_RESTART) {
sp = score;
return;
}
}

+ 0
- 636
examples/Synthesis/PlayMidiTones/william_tell_overture.c View File

@@ -1,636 +0,0 @@
// Playtune bytestream for file "william_tell_overture.mid" created by MIDITONES V1.6 on Sat Oct 26 02:48:13 2013
// command line: ./miditones -t10 william_tell_overture
#include "Arduino.h"
const unsigned char score [] = {
0x90,72, 0x91,72, 0x92,72, 0x93,72, 0x94,72, 1,169, 0x80, 0x81, 0x82, 0x83, 0x84, 0,183, 0x90,72,
0x91,72, 0x92,72, 0x93,72, 0x94,72, 0,41, 0x80, 0x81, 0x82, 0x83, 0x84, 0,58, 0x90,72, 0x91,72,
0x92,72, 0x93,72, 0x94,72, 0,41, 0x80, 0x81, 0x82, 0x83, 0x84, 0,58, 0x90,72, 0x91,72, 0x92,72,
0x93,72, 0x94,72, 1,239, 0x80, 0x81, 0x82, 0x83, 0x84, 0,112, 0x90,72, 0x91,72, 0x92,72, 0x93,72,
0x94,72, 0,54, 0x80, 0x81, 0x82, 0x83, 0x84, 0,50, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0x94,72,
0,50, 0x80, 0x81, 0x82, 0x83, 0x84, 0,50, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0x94,72, 0,104,
0x80, 0x81, 0x82, 0x83, 0x84, 0,100, 0x90,69, 0x91,69, 0x92,69, 0x93,69, 0x94,69, 0,83, 0x80, 0x81,
0x82, 0x83, 0x84, 0,116, 0x90,65, 0x91,65, 0x92,65, 0x93,65, 0x94,65, 0,108, 0x80, 0x81, 0x82, 0x83,
0x84, 0,95, 0x90,69, 0x91,69, 0x92,69, 0x93,69, 0x94,69, 0,112, 0x80, 0x81, 0x82, 0x83, 0x84, 0,91,
0x90,72, 0x91,72, 0x92,72, 0x93,72, 0x94,72, 0,100, 0x80, 0x81, 0x82, 0x83, 0x84, 0,100, 0x90,69,
0x91,69, 0x92,69, 0x93,69, 0x94,69, 0,112, 0x80, 0x81, 0x82, 0x83, 0x84, 0,91, 0x90,72, 0x91,72,
0x92,72, 0x93,72, 0x94,72, 0,100, 0x80, 0x81, 0x82, 0x83, 0x84, 0,104, 0x90,77, 0x91,77, 0x92,77,
0x93,77, 0x94,77, 0,91, 0x80, 0x81, 0x82, 0x83, 0x84, 0,108, 0x90,72, 0x91,72, 0x92,72, 0x93,72,
0x94,72, 0,100, 0x80, 0x81, 0x82, 0x83, 0x84, 0,104, 0x90,69, 0x91,69, 0x92,69, 0x93,69, 0x94,69,
0,83, 0x80, 0x81, 0x82, 0x83, 0x84, 0,120, 0x90,65, 0x91,65, 0x92,65, 0x93,65, 0x94,65, 0,100,
0x80, 0x81, 0x82, 0x83, 0x84, 0,100, 0x90,69, 0x91,69, 0x92,69, 0x93,69, 0x94,69, 0,91, 0x80, 0x81,
0x82, 0x83, 0x84, 0,112, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0x94,72, 0,87, 0x80, 0x81, 0x82, 0x83,
0x84, 0,116, 0x90,69, 0x91,69, 0x92,69, 0x93,69, 0x94,69, 0,91, 0x80, 0x81, 0x82, 0x83, 0x84, 0,108,
0x90,72, 0x91,72, 0x92,72, 0x93,72, 0x94,72, 0,91, 0x80, 0x81, 0x82, 0x83, 0x84, 0,112, 0x90,77,
0x91,77, 0x92,77, 0x93,77, 0x94,77, 0,83, 0x80, 0x81, 0x82, 0x83, 0x84, 0,120, 0x90,72, 0x91,72,
0x92,72, 0x93,72, 0x94,72, 1,119, 0x80, 0x81, 0x82, 0x83, 0x84, 0,233, 0x90,72, 0x91,72, 0x92,72,
0x93,72, 0x94,72, 0,41, 0x80, 0x81, 0x82, 0x83, 0x84, 0,58, 0x90,72, 0x91,72, 0x92,72, 0x93,72,
0x94,72, 0,50, 0x80, 0x81, 0x82, 0x83, 0x84, 0,50, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0x94,72,
2,8, 0x80, 0x81, 0x82, 0x83, 0x84, 0,87, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0x94,72, 0,54,
0x80, 0x81, 0x82, 0x83, 0x84, 0,45, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0x94,72, 0,62, 0x80, 0x81,
0x82, 0x83, 0x84, 0,41, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0x94,72, 0,95, 0x80, 0x81, 0x82, 0x83,
0x84, 0,108, 0x90,72, 0x91,67, 0x92,64, 0x93,60, 0x94,72, 0x95,67, 0x96,72, 0x97,67, 0x98,64,
0x99,60, 0,41, 0x82, 0x88, 0,4, 0x83, 0x89, 0,4, 0x80, 0x84, 0x86, 0x81, 0x85, 0x87, 0,50, 0x90,67,
0x91,72, 0x92,64, 0x93,60, 0x94,67, 0x95,72, 0x96,67, 0x97,72, 0x98,64, 0x99,60, 0,41, 0x80,
0x84, 0x86, 0,4, 0x82, 0x88, 0x83, 0x89, 0,12, 0x81, 0x85, 0x87, 0,41, 0x90,67, 0x91,72, 0x92,64,
0x93,60, 0x94,67, 0x95,72, 0x96,67, 0x97,72, 0x98,64, 0x99,60, 0,58, 0x82, 0x88, 0x83, 0x89, 0,4,
0x80, 0x84, 0x86, 0,12, 0x81, 0x85, 0x87, 0,129, 0x90,67, 0x91,72, 0x92,60, 0x93,64, 0x94,67, 0x95,72,
0x96,67, 0x97,72, 0x98,60, 0x99,64, 0,54, 0x80, 0x84, 0x86, 0x82, 0x88, 0x83, 0x89, 0,12, 0x81, 0x85,
0x87, 0,133, 0x90,67, 0x91,48, 0x92,72, 0x93,64, 0x94,67, 0x95,72, 0x96,67, 0x97,72, 0x98,60,
0x99,64, 0,62, 0x88, 0x83, 0x89, 0,29, 0x80, 0x84, 0x86, 0x81, 0,4, 0x82, 0x85, 0x87, 0,108, 0x90,67,
0x91,72, 0x92,48, 0x93,64, 0x94,67, 0x95,72, 0x96,67, 0x97,72, 0x98,60, 0x99,64, 0,41, 0x80,
0x84, 0x86, 0,4, 0x83, 0x89, 0x88, 0,4, 0x81, 0x85, 0x87, 0,41, 0x82, 0,8, 0x90,67, 0x91,72,
0x92,48, 0x93,64, 0x94,67, 0x95,72, 0x96,67, 0x97,72, 0x98,60, 0x99,64, 0,41, 0x88, 0x80, 0x84,
0x86, 0,4, 0x81, 0x85, 0x87, 0x83, 0x89, 0,45, 0x82, 0,12, 0x90,67, 0x91,72, 0x92,48, 0x93,64,
0x94,67, 0x95,72, 0x96,67, 0x97,72, 0x98,64, 0x99,60, 0,45, 0x83, 0x88, 0x89, 0,12, 0x80, 0x84,
0x86, 0,8, 0x81, 0x85, 0x87, 0,20, 0x82, 0,112, 0x90,67, 0x91,72, 0x92,48, 0x93,64, 0x94,67,
0x95,72, 0x96,67, 0x97,72, 0x98,60, 0x99,64, 0,50, 0x80, 0x84, 0x86, 0,4, 0x88, 0x83, 0x89, 0x81,
0x85, 0x87, 0,37, 0x82, 0,112, 0x90,72, 0x91,67, 0x92,48, 0x93,64, 0x94,72, 0x95,67, 0x96,72,
0x97,67, 0x98,64, 0x99,60, 2,167, 0x80, 0x84, 0x86, 0,8, 0x81, 0x85, 0x87, 0x82, 0,120, 0x90,72,
0x91,67, 0x92,48, 0x94,72, 0x95,67, 0x96,72, 0x97,67, 0,104, 0x82, 0,100, 0x83, 0x88, 0,12,
0x80, 0x84, 0x86, 0,4, 0x89, 0x81, 0x85, 0x87, 0,87, 1,44, 0x90,60, 0x91,60, 0x92,60, 0x93,60,
0x94,60, 0,54, 0x80, 0x81, 0x82, 0x83, 0x84, 0,50, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0x94,60,
0,62, 0x80, 0x81, 0x82, 0x83, 0x84, 0,37, 0x90,41, 0x91,57, 0x92,53, 0x93,60, 0x94,60, 0x95,41,
0x96,57, 0x97,53, 0x98,60, 0x99,60, 0,70, 0x80, 0x85, 0x81, 0x86, 0,12, 0x83, 0x84, 0x88, 0x89, 0,4,
0x82, 0x87, 0,116, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,50, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,60,
0x91,60, 0x92,60, 0x93,60, 0,58, 0x80, 0x81, 0x82, 0x83, 0,41, 0x90,57, 0x91,53, 0x92,41, 0x93,60,
0x94,60, 0x95,57, 0x96,53, 0x97,41, 0x98,60, 0x99,60, 0,75, 0x80, 0x85, 0x83, 0x84, 0x88, 0x89, 0,4,
0x81, 0x86, 0x82, 0x87, 0,125, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,41, 0x80, 0x81, 0x82, 0x83, 0,62,
0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,66, 0x80, 0x81, 0x82, 0x83, 0,33, 0x90,57, 0x91,41, 0x92,53,
0x93,65, 0x94,65, 0x95,57, 0x96,41, 0x97,53, 0x98,65, 0x99,65, 0,58, 0x80, 0x85, 0,8, 0x81,
0x86, 0x82, 0x87, 0,8, 0x83, 0x84, 0x88, 0x89, 0,125, 0x90,53, 0x91,57, 0x92,41, 0x93,67, 0x94,67,
0x95,53, 0x96,57, 0x97,41, 0x98,67, 0x99,67, 0,58, 0x80, 0x85, 0,4, 0x81, 0x86, 0,4, 0x82,
0x87, 0,16, 0x83, 0x84, 0x88, 0x89, 0,120, 0x90,57, 0x91,53, 0x92,41, 0x93,69, 0x94,69, 0x95,57,
0x96,53, 0x97,41, 0x98,69, 0x99,69, 0,54, 0x80, 0x85, 0,4, 0x81, 0x86, 0,12, 0x82, 0x87, 0x83,
0x84, 0x88, 0x89, 0,133, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,45, 0x80, 0x81, 0x82, 0x83, 0,54,
0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,54, 0x80, 0x81, 0x82, 0x83, 0,45, 0x90,53, 0x91,57, 0x92,41,
0x93,60, 0x94,60, 0x95,53, 0x96,57, 0x97,41, 0x98,60, 0x99,60, 0,54, 0x80, 0x85, 0,4, 0x81,
0x86, 0,8, 0x82, 0x87, 0,8, 0x83, 0x84, 0x88, 0x89, 0,129, 0x90,60, 0x91,60, 0x92,60, 0x93,60,
0,50, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,62, 0x80, 0x81, 0x82,
0x83, 0,41, 0x90,53, 0x91,57, 0x92,41, 0x93,65, 0x94,65, 0x95,53, 0x96,57, 0x97,41, 0x98,65,
0x99,65, 0,58, 0x80, 0x85, 0,4, 0x81, 0x86, 0,4, 0x82, 0x87, 0,16, 0x83, 0x84, 0x88, 0x89, 0,116,
0x90,69, 0x91,69, 0x92,69, 0x93,69, 0,50, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,69, 0x91,69, 0x92,69,
0x93,69, 0,66, 0x80, 0x81, 0x82, 0x83, 0,37, 0x90,48, 0x91,36, 0x92,52, 0x93,55, 0x94,67, 0x95,67,
0x96,48, 0x97,36, 0x98,52, 0x99,55, 0,45, 0x80, 0x86, 0,16, 0x81, 0x87, 0x82, 0x88, 0,4, 0x83,
0x89, 0x84, 0x85, 0,137, 0x90,48, 0x91,52, 0x92,55, 0x93,36, 0x94,64, 0x95,64, 0x96,48, 0x97,52,
0x98,55, 0x99,36, 0,37, 0x80, 0x86, 0,20, 0x81, 0x87, 0x82, 0x88, 0,4, 0x83, 0x89, 0,8, 0x84,
0x85, 0,129, 0x90,48, 0x91,52, 0x92,55, 0x93,36, 0x94,60, 0x95,60, 0x96,48, 0x97,52, 0x98,55,
0x99,36, 0,50, 0x80, 0x86, 0,4, 0x81, 0x87, 0,20, 0x82, 0x88, 0x83, 0x89, 0,4, 0x84, 0x85, 0,125,
0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,45, 0x80, 0x81, 0x82, 0x83, 0,54, 0x90,60, 0x91,60, 0x92,60,
0x93,60, 0,58, 0x80, 0x81, 0x82, 0x83, 0,45, 0x90,53, 0x91,57, 0x92,41, 0x93,60, 0x94,60, 0x95,53,
0x96,57, 0x97,41, 0x98,60, 0x99,60, 0,54, 0x80, 0x85, 0,12, 0x81, 0x86, 0,8, 0x82, 0x87, 0x83,
0x84, 0x88, 0x89, 0,125, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,50, 0x80, 0x81, 0x82, 0x83, 0,50,
0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,58, 0x80, 0x81, 0x82, 0x83, 0,45, 0x90,53, 0x91,57, 0x92,41,
0x93,60, 0x94,60, 0x95,53, 0x96,57, 0x97,41, 0x98,60, 0x99,60, 0,54, 0x80, 0x85, 0,4, 0x83,
0x84, 0x88, 0x89, 0,4, 0x81, 0x86, 0,8, 0x82, 0x87, 0,133, 0x90,60, 0x91,60, 0x92,60, 0x93,60,
0,50, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,41, 0x80, 0x81, 0x82,
0x83, 0,58, 0x90,53, 0x91,57, 0x92,41, 0x93,65, 0x94,65, 0x95,53, 0x96,57, 0x97,41, 0x98,65,
0x99,65, 0,54, 0x80, 0x85, 0,8, 0x81, 0x86, 0x82, 0x87, 0,16, 0x83, 0x84, 0x88, 0x89, 0,125, 0x90,53,
0x91,41, 0x92,57, 0x93,67, 0x94,67, 0x95,53, 0x96,41, 0x97,57, 0x98,67, 0x99,67, 0,45, 0x80,
0x85, 0,8, 0x81, 0x86, 0,8, 0x82, 0x87, 0,8, 0x83, 0x84, 0x88, 0x89, 0,133, 0x90,53, 0x91,41,
0x92,57, 0x93,69, 0x94,69, 0x95,53, 0x96,41, 0x97,57, 0x98,69, 0x99,69, 0,54, 0x80, 0x85, 0x81,
0x86, 0,8, 0x82, 0x87, 0,16, 0x83, 0x84, 0x88, 0x89, 0,120, 0x90,65, 0x91,65, 0x92,65, 0x93,65,
0,62, 0x80, 0x81, 0x82, 0x83, 0,37, 0x90,69, 0x91,69, 0x92,69, 0x93,69, 0,62, 0x80, 0x81, 0x82,
0x83, 0,41, 0x90,36, 0x91,72, 0x92,72, 0x93,36, 0x94,72, 0x95,72, 0,104, 0x80, 0x83, 0,95,
0x90,52, 0x93,60, 0x96,58, 0x97,52, 0x98,60, 0x99,58, 0,37, 0x80, 0x87, 0,8, 0x83, 0x88, 0,8,
0x86, 0x89, 0,50, 0x90,52, 0x93,60, 0x96,58, 0x97,52, 0x98,60, 0x99,58, 0,33, 0x80, 0x87, 0,8,
0x83, 0x88, 0,8, 0x86, 0x89, 0,50, 0x90,52, 0x93,58, 0x96,60, 0x97,36, 0x98,52, 0x99,58, 0,62,
0x80, 0x88, 0,12, 0x83, 0x89, 0,4, 0x86, 0,20, 0x90,70, 0x93,70, 0x96,70, 0x98,70, 0,16,
0x87, 0,37, 0x81, 0x82, 0x84, 0x85, 0,20, 0x80, 0x83, 0x86, 0x88, 0,29, 0x90,69, 0x91,69, 0x92,69,
0x93,69, 0,91, 0x80, 0x81, 0x82, 0x83, 0,8, 0x90,67, 0x91,67, 0x92,67, 0x93,67, 0,95, 0x80,
0x81, 0x82, 0x83, 0,4, 0x90,53, 0x91,41, 0x92,57, 0x93,65, 0x94,65, 0x95,53, 0x96,41, 0x97,57,
0x98,65, 0x99,65, 0,66, 0x80, 0x85, 0,4, 0x81, 0x86, 0,8, 0x82, 0x87, 0,66, 0x83, 0x84, 0x88,
0x89, 0,58, 0x90,60, 0x91,41, 0x92,69, 0x93,69, 0x94,60, 0x95,41, 0x96,69, 0x97,69, 0,54,
0x80, 0x84, 0x82, 0x83, 0x86, 0x87, 0,16, 0x81, 0x85, 0,129, 0x90,41, 0x91,53, 0x92,57, 0x93,65, 0x94,65,
0x95,41, 0x96,53, 0x97,57, 0x98,65, 0x99,65, 0,91, 0x83, 0x84, 0x88, 0x89, 0x80, 0x85, 0x81, 0x86, 0,8,
0x82, 0x87, 0,104, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,54, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,72,
0x91,72, 0x92,72, 0x93,72, 0,50, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,41, 0x91,57, 0x92,53, 0x93,72,
0x94,72, 0x95,41, 0x96,57, 0x97,53, 0x98,72, 0x99,72, 0,58, 0x80, 0x85, 0x81, 0x86, 0,8, 0x82,
0x87, 0,4, 0x83, 0x84, 0x88, 0x89, 0,129, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,50, 0x80, 0x81,
0x82, 0x83, 0,54, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,45, 0x80, 0x81, 0x82, 0x83, 0,54, 0x90,57,
0x91,53, 0x92,41, 0x93,72, 0x94,72, 0x95,57, 0x96,53, 0x97,41, 0x98,72, 0x99,72, 0,75, 0x80,
0x85, 0x83, 0x84, 0x88, 0x89, 0,4, 0x81, 0x86, 0x82, 0x87, 0,125, 0x90,72, 0x91,72, 0x92,72, 0x93,72,
0,45, 0x80, 0x81, 0x82, 0x83, 0,54, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,58, 0x80, 0x81, 0x82,
0x83, 0,41, 0x90,57, 0x91,41, 0x92,53, 0x93,77, 0x94,77, 0x95,57, 0x96,41, 0x97,53, 0x98,77,
0x99,77, 0,62, 0x80, 0x85, 0,4, 0x81, 0x86, 0x82, 0x87, 0,25, 0x83, 0x84, 0x88, 0x89, 0,112, 0x90,53,
0x91,57, 0x92,41, 0x93,79, 0x94,79, 0x95,53, 0x96,57, 0x97,41, 0x98,79, 0x99,79, 0,54, 0x80,
0x85, 0,8, 0x81, 0x86, 0,4, 0x82, 0x87, 0,12, 0x83, 0x84, 0x88, 0x89, 0,125, 0x90,57, 0x91,53,
0x92,41, 0x93,81, 0x94,81, 0x95,57, 0x96,53, 0x97,41, 0x98,81, 0x99,81, 0,50, 0x80, 0x85, 0,8,
0x81, 0x86, 0,8, 0x82, 0x87, 0,41, 0x83, 0x84, 0x88, 0x89, 0,91, 0x90,72, 0x91,72, 0x92,72, 0x93,72,
0,58, 0x80, 0x81, 0x82, 0x83, 0,45, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,37, 0x80, 0x81, 0x82,
0x83, 0,62, 0x90,53, 0x91,57, 0x92,41, 0x93,72, 0x94,72, 0x95,53, 0x96,57, 0x97,41, 0x98,72,
0x99,72, 0,54, 0x80, 0x85, 0,4, 0x81, 0x86, 0,8, 0x82, 0x87, 0,4, 0x83, 0x84, 0x88, 0x89, 0,133,
0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,41, 0x80, 0x81, 0x82, 0x83, 0,58, 0x90,72, 0x91,72, 0x92,72,
0x93,72, 0,62, 0x80, 0x81, 0x82, 0x83, 0,37, 0x90,53, 0x91,57, 0x92,41, 0x93,77, 0x94,77, 0x95,53,
0x96,57, 0x97,41, 0x98,77, 0x99,77, 0,62, 0x80, 0x85, 0,4, 0x81, 0x86, 0x82, 0x87, 0,12, 0x83,
0x84, 0x88, 0x89, 0,125, 0x90,81, 0x91,81, 0x92,81, 0x93,81, 0,45, 0x80, 0x81, 0x82, 0x83, 0,54,
0x90,81, 0x91,81, 0x92,81, 0x93,81, 0,70, 0x80, 0x81, 0x82, 0x83, 0,33, 0x90,48, 0x91,36, 0x92,52,
0x93,55, 0x94,79, 0x95,79, 0x96,48, 0x97,36, 0x98,52, 0x99,55, 0,45, 0x80, 0x86, 0,16, 0x81,
0x87, 0x82, 0x88, 0x83, 0x89, 0,20, 0x84, 0x85, 0,116, 0x90,48, 0x91,52, 0x92,55, 0x93,36, 0x94,76,
0x95,76, 0x96,48, 0x97,52, 0x98,55, 0x99,36, 0,41, 0x80, 0x86, 0,20, 0x81, 0x87, 0x82, 0x88, 0,4,
0x83, 0x89, 0,4, 0x84, 0x85, 0,133, 0x90,48, 0x91,52, 0x92,55, 0x93,36, 0x94,72, 0x95,72, 0x96,48,
0x97,52, 0x98,55, 0x99,36, 0,50, 0x80, 0x86, 0,4, 0x81, 0x87, 0,20, 0x82, 0x88, 0x83, 0x89, 0,12,
0x84, 0x85, 0,116, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,45, 0x80, 0x81, 0x82, 0x83, 0,54, 0x90,72,
0x91,72, 0x92,72, 0x93,72, 0,62, 0x80, 0x81, 0x82, 0x83, 0,37, 0x90,53, 0x91,57, 0x92,41, 0x93,72,
0x94,72, 0x95,53, 0x96,57, 0x97,41, 0x98,72, 0x99,72, 0,58, 0x80, 0x85, 0,12, 0x81, 0x86, 0,8,
0x82, 0x87, 0,12, 0x83, 0x84, 0x88, 0x89, 0,112, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,62, 0x80,
0x81, 0x82, 0x83, 0,37, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,62, 0x80, 0x81, 0x82, 0x83, 0,41,
0x90,53, 0x91,57, 0x92,41, 0x93,72, 0x94,72, 0x95,53, 0x96,57, 0x97,41, 0x98,72, 0x99,72, 0,50,
0x80, 0x85, 0,8, 0x81, 0x86, 0,8, 0x82, 0x87, 0,8, 0x83, 0x84, 0x88, 0x89, 0,125, 0x90,72, 0x91,72,
0x92,72, 0x93,72, 0,41, 0x80, 0x81, 0x82, 0x83, 0,58, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,70,
0x80, 0x81, 0x82, 0x83, 0,33, 0x90,53, 0x91,57, 0x92,41, 0x93,77, 0x94,77, 0x95,53, 0x96,57, 0x97,41,
0x98,77, 0x99,77, 0,54, 0x80, 0x85, 0,8, 0x81, 0x86, 0x82, 0x87, 0,25, 0x83, 0x84, 0x88, 0x89, 0,116,
0x90,53, 0x91,41, 0x92,57, 0x93,79, 0x94,79, 0x95,53, 0x96,41, 0x97,57, 0x98,79, 0x99,79, 0,45,
0x80, 0x85, 0,4, 0x81, 0x86, 0,12, 0x82, 0x87, 0,16, 0x83, 0x84, 0x88, 0x89, 0,120, 0x90,53, 0x91,41,
0x92,57, 0x93,81, 0x94,81, 0x95,53, 0x96,41, 0x97,57, 0x98,81, 0x99,81, 0,58, 0x80, 0x85, 0x81,
0x86, 0,4, 0x82, 0x87, 0,4, 0x83, 0x84, 0x88, 0x89, 0,137, 0x90,77, 0x91,77, 0x92,77, 0x93,77,
0,87, 0x80, 0x81, 0x82, 0x83, 0,12, 0x90,81, 0x91,81, 0x92,81, 0x93,81, 0,75, 0x80, 0x81, 0x82,
0x83, 0,29, 0x90,36, 0x91,84, 0x92,84, 0x93,36, 0x94,84, 0x95,84, 0,104, 0x80, 0x83, 0,95,
0x90,52, 0x93,60, 0x96,58, 0x97,52, 0x98,60, 0x99,58, 0,37, 0x80, 0x87, 0,8, 0x83, 0x88, 0,8,
0x86, 0x89, 0,45, 0x90,52, 0x93,60, 0x96,58, 0x97,52, 0x98,60, 0x99,58, 0,33, 0x80, 0x87, 0,8,
0x83, 0x88, 0,8, 0x86, 0x89, 0,54, 0x90,52, 0x93,58, 0x96,60, 0x97,36, 0x98,52, 0x99,58, 0,62,
0x80, 0x88, 0,12, 0x83, 0x89, 0,4, 0x86, 0,20, 0x90,82, 0x93,82, 0x96,82, 0x98,82, 0,16,
0x87, 0,37, 0x81, 0x82, 0x84, 0x85, 0,29, 0x80, 0x83, 0x86, 0x88, 0,20, 0x90,81, 0x91,81, 0x92,81,
0x93,81, 0,100, 0x94,79, 0x95,79, 0x96,79, 0x97,79, 0,16, 0x80, 0x81, 0x82, 0x83, 0,75, 0x84,
0x85, 0x86, 0x87, 0,8, 0x90,53, 0x91,41, 0x92,57, 0x93,77, 0x94,77, 0x95,53, 0x96,41, 0x97,57,
0x98,77, 0x99,77, 0,66, 0x80, 0x85, 0x81, 0x86, 0,12, 0x82, 0x87, 0,70, 0x83, 0x84, 0x88, 0x89, 0,54,
0x90,60, 0x91,41, 0x92,81, 0x93,81, 0x94,60, 0x95,41, 0x96,81, 0x97,81, 0,50, 0x80, 0x84, 0,20,
0x81, 0x85, 0,129, 0x90,41, 0x91,53, 0x94,57, 0x95,77, 0x98,77, 0x99,41, 0,8, 0x82, 0x83, 0x86,
0x87, 0,83, 0x85, 0x88, 0x80, 0x89, 0x81, 0,8, 0x84, 0,104, 0x90,81, 0x91,77, 0x92,81, 0x93,77,
0x94,81, 0x95,77, 0x96,81, 0x97,77, 0,45, 0x80, 0x82, 0x84, 0x86, 0x81, 0x83, 0x85, 0x87, 0,54, 0x90,77,
0x91,81, 0x92,77, 0x93,81, 0x94,77, 0x95,81, 0x96,77, 0x97,81, 0,45, 0x80, 0x82, 0x84, 0x86, 0,4,
0x81, 0x83, 0x85, 0x87, 0,54, 0x90,62, 0x91,57, 0x92,53, 0x93,50, 0x94,38, 0x95,77, 0x96,81, 0x97,77,
0x98,81, 0x99,62, 0,66, 0x80, 0x89, 0x81, 0x82, 0x83, 0x84, 0,8, 0x85, 0x87, 0,8, 0x86, 0x88, 0,116,
0x90,81, 0x91,77, 0x92,81, 0x93,77, 0x94,81, 0x95,77, 0x96,81, 0x97,77, 0,54, 0x80, 0x82, 0x84,
0x86, 0x81, 0x83, 0x85, 0x87, 0,50, 0x90,77, 0x91,81, 0x92,77, 0x93,81, 0x94,77, 0x95,81, 0x96,77,
0x97,81, 0,41, 0x80, 0x82, 0x84, 0x86, 0x81, 0x83, 0x85, 0x87, 0,58, 0x90,62, 0x91,57, 0x92,53, 0x93,50,
0x94,38, 0x95,77, 0x96,81, 0x97,77, 0x98,81, 0x99,62, 0,62, 0x85, 0x87, 0,4, 0x80, 0x89, 0x81,
0x82, 0x83, 0x84, 0,8, 0x86, 0x88, 0,125, 0x90,77, 0x91,81, 0x92,77, 0x93,81, 0x94,77, 0x95,81,
0x96,77, 0x97,81, 0,41, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81, 0x83, 0x85, 0x87, 0,58, 0x90,77, 0x91,81,
0x92,77, 0x93,81, 0x94,77, 0x95,81, 0x96,77, 0x97,81, 0,41, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81,
0x83, 0x85, 0x87, 0,54, 0x90,62, 0x91,57, 0x92,53, 0x93,50, 0x94,38, 0x95,81, 0x96,77, 0x97,81,
0x98,77, 0x99,62, 0,70, 0x80, 0x89, 0x81, 0x82, 0x83, 0x84, 0,25, 0x85, 0x87, 0,8, 0x86, 0x88, 0,100,
0x90,86, 0x91,86, 0x92,86, 0x93,86, 0,83, 0x80, 0x81, 0x82, 0x83, 0,116, 0x90,53, 0x91,62, 0x92,57,
0x93,50, 0x94,38, 0x95,77, 0x96,81, 0x97,77, 0x98,81, 0x99,53, 0,70, 0x80, 0x89, 0x81, 0x82, 0x83,
0x84, 0,12, 0x85, 0x87, 0x86, 0x88, 0,120, 0x90,86, 0x91,86, 0x92,86, 0x93,86, 0,83, 0x80, 0x81,
0x82, 0x83, 0,120, 0x90,38, 0x91,50, 0x92,57, 0x93,62, 0x94,53, 0x95,81, 0x96,77, 0x97,81, 0x98,77,
0x99,38, 0,75, 0x80, 0x89, 0x81, 0,8, 0x85, 0x87, 0,4, 0x82, 0x86, 0x88, 0,4, 0x83, 0,8,
0x84, 0,100, 0x90,86, 0x91,86, 0x92,86, 0x93,86, 0,95, 0x80, 0x81, 0x82, 0x83, 0,108, 0x90,38,
0x91,62, 0x92,50, 0x93,57, 0x94,53, 0x95,77, 0x96,81, 0x97,77, 0x98,81, 0x99,38, 0,79, 0x80,
0x89, 0,4, 0x81, 0,4, 0x85, 0x87, 0,16, 0x82, 0x83, 0,8, 0x84, 0x86, 0x88, 0,91, 0x90,79,
0x91,76, 0x92,79, 0x93,76, 0x94,79, 0x95,76, 0x96,79, 0x97,76, 0,75, 0x80, 0x82, 0x84, 0x86, 0,8,
0x81, 0x83, 0x85, 0x87, 0,116, 0x90,38, 0x91,50, 0x92,74, 0x93,77, 0x94,74, 0x95,77, 0x96,38, 0x97,50,
0x98,74, 0x99,77, 0,79, 0x82, 0x84, 0x88, 0x80, 0x86, 0,8, 0x81, 0x87, 0x83, 0x85, 0x89, 0,116, 0x90,58,
0x91,55, 0x92,73, 0x93,76, 0x94,73, 0x95,76, 0x96,58, 0x97,55, 0x98,73, 0x99,76, 0,75, 0x82,
0x84, 0x88, 0,4, 0x80, 0x86, 0,20, 0x81, 0x87, 0x83, 0x85, 0x89, 0,104, 0x90,38, 0x91,57, 0x92,53,
0x93,74, 0x94,74, 0x95,38, 0x96,57, 0x97,53, 0x98,74, 0x99,74, 0,79, 0x83, 0x84, 0x88, 0x89, 0,4,
0x80, 0x85, 0,8, 0x81, 0x86, 0,16, 0x82, 0x87, 0,91, 0x90,77, 0x91,81, 0x92,77, 0x93,81, 0x94,77,
0x95,81, 0x96,77, 0x97,81, 0,58, 0x80, 0x82, 0x84, 0x86, 0x81, 0x83, 0x85, 0x87, 0,45, 0x90,81, 0x91,77,
0x92,81, 0x93,77, 0x94,81, 0x95,77, 0x96,81, 0x97,77, 0,37, 0x80, 0x82, 0x84, 0x86, 0,29, 0x81,
0x83, 0x85, 0x87, 0,33, 0x90,50, 0x91,38, 0x92,57, 0x93,62, 0x94,53, 0x95,81, 0x96,77, 0x97,81,
0x98,77, 0x99,50, 0,37, 0x85, 0x87, 0,33, 0x86, 0x88, 0,4, 0x80, 0x89, 0,4, 0x81, 0,20,
0x82, 0,4, 0x83, 0,4, 0x84, 0,95, 0x90,77, 0x91,81, 0x92,77, 0x93,81, 0x94,77, 0x95,81,
0x96,77, 0x97,81, 0,45, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81, 0x83, 0x85, 0x87, 0,50, 0x90,81, 0x91,77,
0x92,81, 0x93,77, 0x94,81, 0x95,77, 0x96,81, 0x97,77, 0,37, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81,
0x83, 0x85, 0x87, 0,58, 0x90,50, 0x91,53, 0x92,38, 0x93,57, 0x94,62, 0x95,81, 0x96,77, 0x97,81,
0x98,77, 0x99,50, 0,66, 0x85, 0x87, 0,4, 0x86, 0x88, 0,12, 0x80, 0x89, 0,4, 0x81, 0,4,
0x82, 0,8, 0x83, 0,4, 0x84, 0,100, 0x90,77, 0x91,81, 0x92,77, 0x93,81, 0x94,77, 0x95,81,
0x96,77, 0x97,81, 0,33, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81, 0x83, 0x85, 0x87, 0,62, 0x90,81, 0x91,77,
0x92,81, 0x93,77, 0x94,81, 0x95,77, 0x96,81, 0x97,77, 0,37, 0x80, 0x82, 0x84, 0x86, 0x81, 0x83, 0x85,
0x87, 0,66, 0x90,50, 0x91,38, 0x92,53, 0x93,62, 0x94,57, 0x95,81, 0x96,77, 0x97,81, 0x98,77,
0x99,50, 0,70, 0x80, 0x89, 0x85, 0x87, 0,4, 0x81, 0,4, 0x86, 0x88, 0,12, 0x82, 0x83, 0,4,
0x84, 0,104, 0x90,86, 0x91,86, 0x92,86, 0x93,86, 0,75, 0x80, 0x81, 0x82, 0x83, 0,129, 0x90,50,
0x91,38, 0x92,57, 0x93,62, 0x94,53, 0x95,81, 0x96,77, 0x97,81, 0x98,77, 0x99,50, 0,66, 0x80,
0x89, 0x85, 0x87, 0,4, 0x86, 0x88, 0,4, 0x81, 0,8, 0x82, 0,4, 0x83, 0,8, 0x84, 0,108,
0x90,86, 0x91,86, 0x92,86, 0x93,86, 0,83, 0x80, 0x81, 0x82, 0x83, 0,116, 0x90,50, 0x91,57, 0x92,38,
0x93,53, 0x94,62, 0x95,77, 0x96,81, 0x97,77, 0x98,81, 0x99,50, 0,50, 0x80, 0x89, 0,8, 0x81,
0,20, 0x82, 0,4, 0x83, 0x85, 0x87, 0,4, 0x86, 0x88, 0,12, 0x84, 0,104, 0x90,86, 0x91,86,
0x92,86, 0x93,86, 0,95, 0x80, 0x81, 0x82, 0x83, 0,108, 0x90,55, 0x91,60, 0x92,43, 0x93,76, 0x94,84,
0x95,76, 0x96,84, 0x97,55, 0x98,60, 0x99,43, 0,58, 0x83, 0x85, 0,33, 0x84, 0x86, 0,41, 0x80,
0x87, 0,4, 0x81, 0x88, 0,62, 0x90,62, 0x91,55, 0x93,77, 0x94,83, 0x95,77, 0x96,83, 0x97,62,
0x98,55, 0,12, 0x82, 0x89, 0,41, 0x80, 0x87, 0,12, 0x81, 0x88, 0,8, 0x83, 0x85, 0,25, 0x84,
0x86, 0,104, 0x90,55, 0x91,43, 0x92,60, 0x93,76, 0x94,84, 0x95,76, 0x96,84, 0x97,55, 0x98,43,
0x99,60, 0,70, 0x83, 0x85, 0,29, 0x84, 0x86, 0,4, 0x80, 0x87, 0,20, 0x81, 0x88, 0x82, 0x89, 0,79,
0x90,55, 0x91,62, 0x92,77, 0x93,83, 0x94,77, 0x95,83, 0x96,55, 0x97,62, 0x98,77, 0x99,83, 0,66,
0x80, 0x86, 0,4, 0x82, 0x84, 0x88, 0,4, 0x81, 0x87, 0,12, 0x83, 0x85, 0x89, 0,112, 0x90,60, 0x91,55,
0x92,36, 0x93,76, 0x94,84, 0x95,76, 0x96,84, 0x97,60, 0x98,55, 0x99,36, 0,62, 0x83, 0x85, 0,29,
0x84, 0x86, 0,75, 0x80, 0x87, 0,4, 0x81, 0x88, 0,33, 0x82, 0x89, 0x90,81, 0x91,77, 0x92,81, 0x93,77,
0x94,81, 0x95,77, 0x96,81, 0x97,77, 0,41, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81, 0x83, 0x85, 0x87, 0,54,
0x90,77, 0x91,81, 0x92,77, 0x93,81, 0x94,77, 0x95,81, 0x96,77, 0x97,81, 0,37, 0x80, 0x82, 0x84,
0x86, 0,12, 0x81, 0x83, 0x85, 0x87, 0,50, 0x90,50, 0x91,38, 0x92,57, 0x93,53, 0x94,62, 0x95,77,
0x96,81, 0x97,77, 0x98,81, 0x99,50, 0,62, 0x80, 0x89, 0x85, 0x87, 0,4, 0x86, 0x88, 0,29, 0x81,
0,12, 0x82, 0,4, 0x83, 0,8, 0x84, 0,83, 0x90,81, 0x91,77, 0x92,81, 0x93,77, 0x94,81,
0x95,77, 0x96,81, 0x97,77, 0,50, 0x80, 0x82, 0x84, 0x86, 0x81, 0x83, 0x85, 0x87, 0,50, 0x90,77, 0x91,81,
0x92,77, 0x93,81, 0x94,77, 0x95,81, 0x96,77, 0x97,81, 0,41, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81,
0x83, 0x85, 0x87, 0,58, 0x90,50, 0x91,38, 0x92,57, 0x93,62, 0x94,53, 0x95,77, 0x96,81, 0x97,77,
0x98,81, 0x99,50, 0,62, 0x85, 0x87, 0,8, 0x80, 0x89, 0,4, 0x86, 0x88, 0,8, 0x81, 0,20,
0x82, 0x83, 0,8, 0x84, 0,87, 0x90,77, 0x91,81, 0x92,77, 0x93,81, 0x94,77, 0x95,81, 0x96,77,
0x97,81, 0,37, 0x80, 0x82, 0x84, 0x86, 0,8, 0x81, 0x83, 0x85, 0x87, 0,58, 0x90,77, 0x91,81, 0x92,77,
0x93,81, 0x94,77, 0x95,81, 0x96,77, 0x97,81, 0,41, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81, 0x83, 0x85,
0x87, 0,54, 0x90,50, 0x91,38, 0x92,57, 0x93,62, 0x94,53, 0x95,81, 0x96,77, 0x97,81, 0x98,77,
0x99,50, 0,62, 0x80, 0x89, 0,16, 0x81, 0,16, 0x85, 0x87, 0,4, 0x82, 0,4, 0x83, 0x86, 0x88,
0,8, 0x84, 0,91, 0x90,86, 0x91,86, 0x92,86, 0x93,86, 0,83, 0x80, 0x81, 0x82, 0x83, 0,116,
0x90,50, 0x91,38, 0x92,57, 0x93,62, 0x94,53, 0x95,77, 0x96,81, 0x97,77, 0x98,81, 0x99,50, 0,70,
0x80, 0x89, 0,8, 0x81, 0x85, 0x87, 0x86, 0x88, 0,16, 0x82, 0,8, 0x83, 0,12, 0x84, 0,87, 0x90,86,
0x91,86, 0x92,86, 0x93,86, 0,83, 0x80, 0x81, 0x82, 0x83, 0,116, 0x90,38, 0x91,50, 0x92,57, 0x93,62,
0x94,53, 0x95,81, 0x96,77, 0x97,81, 0x98,77, 0x99,38, 0,83, 0x80, 0x89, 0x85, 0x87, 0,8, 0x81,
0x86, 0x88, 0,20, 0x82, 0,4, 0x83, 0x84, 0,87, 0x90,86, 0x91,86, 0x92,86, 0x93,86, 0,95,
0x80, 0x81, 0x82, 0x83, 0,108, 0x90,50, 0x91,38, 0x92,57, 0x93,62, 0x94,53, 0x95,77, 0x96,81, 0x97,77,
0x98,81, 0x99,50, 0,79, 0x80, 0x89, 0,8, 0x85, 0x87, 0,4, 0x81, 0,8, 0x82, 0,8, 0x86,
0x88, 0,4, 0x83, 0,16, 0x84, 0,70, 0x90,79, 0x91,76, 0x92,79, 0x93,76, 0x94,79, 0x95,76,
0x96,79, 0x97,76, 0,75, 0x80, 0x82, 0x84, 0x86, 0,12, 0x81, 0x83, 0x85, 0x87, 0,116, 0x90,50, 0x91,38,
0x92,74, 0x93,77, 0x94,74, 0x95,77, 0x96,50, 0x97,38, 0x98,74, 0x99,77, 0,79, 0x82, 0x84, 0x88,
0x80, 0x86, 0,8, 0x81, 0x87, 0x83, 0x85, 0x89, 0,116, 0x90,58, 0x91,55, 0x92,73, 0x93,76, 0x94,73,
0x95,76, 0x96,58, 0x97,55, 0x98,73, 0x99,76, 0,75, 0x82, 0x84, 0x88, 0,25, 0x83, 0x85, 0x89, 0,4,
0x80, 0x86, 0,4, 0x81, 0x87, 0,91, 0x90,53, 0x91,57, 0x92,74, 0x93,74, 0x94,53, 0x95,57, 0x96,74,
0x97,74, 0,83, 0x82, 0x83, 0x86, 0x87, 0,8, 0x80, 0x84, 0,12, 0x81, 0x85, 0,100, 0x90,77, 0x91,81,
0x92,77, 0x93,81, 0x94,77, 0x95,81, 0x96,77, 0x97,81, 0,54, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81,
0x83, 0x85, 0x87, 0,45, 0x90,81, 0x91,77, 0x92,81, 0x93,77, 0x94,81, 0x95,77, 0x96,81, 0x97,77,
0,37, 0x80, 0x82, 0x84, 0x86, 0,29, 0x81, 0x83, 0x85, 0x87, 0,33, 0x90,50, 0x91,38, 0x92,57, 0x93,53,
0x94,62, 0x95,81, 0x96,77, 0x97,81, 0x98,77, 0x99,50, 0,33, 0x85, 0x87, 0,33, 0x86, 0x88, 0,8,
0x80, 0x89, 0,8, 0x81, 0,12, 0x82, 0,16, 0x83, 0x84, 0,87, 0x90,77, 0x91,81, 0x92,77, 0x93,81,
0x94,77, 0x95,81, 0x96,77, 0x97,81, 0,50, 0x80, 0x82, 0x84, 0x86, 0x81, 0x83, 0x85, 0x87, 0,54, 0x90,81,
0x91,77, 0x92,81, 0x93,77, 0x94,81, 0x95,77, 0x96,81, 0x97,77, 0,37, 0x80, 0x82, 0x84, 0x86, 0,4,
0x81, 0x83, 0x85, 0x87, 0,58, 0x90,38, 0x91,50, 0x92,57, 0x93,62, 0x94,53, 0x95,81, 0x96,77, 0x97,81,
0x98,77, 0x99,38, 0,62, 0x85, 0x87, 0,8, 0x86, 0x88, 0,8, 0x80, 0x89, 0x81, 0,29, 0x82, 0,4,
0x83, 0,4, 0x84, 0,87, 0x90,77, 0x91,81, 0x92,77, 0x93,81, 0x94,77, 0x95,81, 0x96,77, 0x97,81,
0,33, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81, 0x83, 0x85, 0x87, 0,62, 0x90,81, 0x91,77, 0x92,81, 0x93,77,
0x94,81, 0x95,77, 0x96,81, 0x97,77, 0,37, 0x80, 0x82, 0x84, 0x86, 0x81, 0x83, 0x85, 0x87, 0,62, 0x90,50,
0x91,38, 0x92,57, 0x93,62, 0x94,53, 0x95,81, 0x96,77, 0x97,81, 0x98,77, 0x99,50, 0,75, 0x85,
0x87, 0,4, 0x80, 0x89, 0,4, 0x81, 0x86, 0x88, 0,12, 0x82, 0,4, 0x83, 0,4, 0x84, 0,100,
0x90,86, 0x91,86, 0x92,86, 0x93,86, 0,75, 0x80, 0x81, 0x82, 0x83, 0,129, 0x90,50, 0x91,38, 0x92,62,
0x93,57, 0x94,53, 0x95,81, 0x96,77, 0x97,81, 0x98,77, 0x99,50, 0,62, 0x85, 0x87, 0,4, 0x80,
0x89, 0,4, 0x86, 0x88, 0,4, 0x81, 0,16, 0x82, 0x83, 0,8, 0x84, 0,100, 0x90,86, 0x91,86,
0x92,86, 0x93,86, 0,87, 0x80, 0x81, 0x82, 0x83, 0,116, 0x90,50, 0x91,57, 0x92,38, 0x93,53, 0x94,62,
0x95,77, 0x96,81, 0x97,77, 0x98,81, 0x99,50, 0,58, 0x80, 0x89, 0,4, 0x81, 0,8, 0x82, 0,12,
0x85, 0x87, 0x83, 0,4, 0x86, 0x88, 0,16, 0x84, 0,100, 0x90,86, 0x91,86, 0x92,86, 0x93,86, 0,91,
0x80, 0x81, 0x82, 0x83, 0,108, 0x90,55, 0x91,60, 0x92,43, 0x93,76, 0x94,84, 0x95,76, 0x96,84, 0x97,55,
0x98,60, 0x99,43, 0,58, 0x83, 0x85, 0,12, 0x80, 0x87, 0,8, 0x81, 0x88, 0,12, 0x84, 0x86, 0,29,
0x82, 0x89, 0,83, 0x90,55, 0x91,62, 0x92,77, 0x93,83, 0x94,77, 0x95,83, 0x96,55, 0x97,62, 0x98,77,
0x99,83, 0,66, 0x80, 0x86, 0,4, 0x81, 0x87, 0,4, 0x82, 0x84, 0x88, 0,20, 0x83, 0x85, 0x89, 0,108,
0x90,60, 0x91,36, 0x92,76, 0x93,84, 0x94,76, 0x95,84, 0x96,60, 0x97,36, 0x98,76, 0x99,84, 0,70,
0x82, 0x84, 0x88, 0,8, 0x80, 0x86, 0,12, 0x81, 0x87, 0,4, 0x83, 0x85, 0x89, 2,0, 0x90,67, 0x91,60,
0x92,67, 0x93,60, 0x94,67, 0x95,60, 0x96,67, 0x97,60, 0,41, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81,
0x83, 0x85, 0x87, 0,54, 0x90,60, 0x91,67, 0x92,60, 0x93,67, 0x94,60, 0x95,67, 0x96,60, 0x97,67,
0,33, 0x80, 0x82, 0x84, 0x86, 0,16, 0x81, 0x83, 0x85, 0x87, 0,50, 0x90,60, 0x91,67, 0x92,60, 0x93,67,
0x94,60, 0x95,67, 0x96,60, 0x97,67, 0,66, 0x80, 0x82, 0x84, 0x86, 0,8, 0x81, 0x83, 0x85, 0x87, 0,129,
0x90,60, 0x91,67, 0x92,60, 0x93,67, 0x94,60, 0x95,67, 0x96,60, 0x97,67, 0,50, 0x80, 0x82, 0x84,
0x86, 0x81, 0x83, 0x85, 0x87, 0,50, 0x90,60, 0x91,67, 0x92,60, 0x93,67, 0x94,60, 0x95,67, 0x96,60,
0x97,67, 0,45, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81, 0x83, 0x85, 0x87, 0,54, 0x90,60, 0x91,67, 0x92,60,
0x93,67, 0x94,60, 0x95,67, 0x96,60, 0x97,67, 0,58, 0x80, 0x82, 0x84, 0x86, 0,12, 0x81, 0x83, 0x85,
0x87, 0,129, 0x90,69, 0x91,65, 0x92,69, 0x93,65, 0x94,69, 0x95,65, 0x96,69, 0x97,65, 0,58,
0x80, 0x82, 0x84, 0x86, 0,4, 0x81, 0x83, 0x85, 0x87, 0,141, 0x90,67, 0x91,70, 0x92,67, 0x93,70, 0x94,67,
0x95,70, 0x96,67, 0x97,70, 0,58, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81, 0x83, 0x85, 0x87, 0,137, 0x90,48,
0x91,67, 0x92,60, 0x93,67, 0x94,60, 0x95,48, 0x96,67, 0x97,60, 0x98,67, 0x99,60, 0,45, 0x80,
0x85, 0,158, 0x90,50, 0x95,50, 0,41, 0x81, 0x83, 0x86, 0x88, 0x80, 0x85, 0,16, 0x82, 0x84, 0x87, 0x89,
0,145, 0x90,52, 0x91,67, 0x92,70, 0x93,67, 0x94,70, 0x95,52, 0x96,67, 0x97,70, 0x98,67, 0x99,70,
0,33, 0x80, 0x85, 0,37, 0x81, 0x83, 0x86, 0x88, 0x82, 0x84, 0x87, 0x89, 0,129, 0x90,53, 0x91,69, 0x92,65,
0x93,69, 0x94,65, 0x95,53, 0x96,69, 0x97,65, 0x98,69, 0x99,65, 0,45, 0x80, 0x85, 0,33, 0x81,
0x83, 0x86, 0x88, 0,4, 0x82, 0x84, 0x87, 0x89, 0,120, 0x90,55, 0x91,65, 0x92,65, 0x93,55, 0x94,65,
0x95,65, 0,54, 0x80, 0x83, 0,150, 0x90,57, 0x93,57, 0,45, 0x80, 0x83, 0,8, 0x81, 0x82, 0x84,
0x85, 0,145, 0x90,59, 0x91,69, 0x92,65, 0x93,69, 0x94,65, 0x95,59, 0x96,69, 0x97,65, 0x98,69,
0x99,65, 0,45, 0x80, 0x85, 0,16, 0x81, 0x83, 0x86, 0x88, 0,8, 0x82, 0x84, 0x87, 0x89, 0,133, 0x90,60,
0x91,64, 0x92,67, 0x93,64, 0x94,67, 0x95,60, 0x96,64, 0x97,67, 0x98,64, 0x99,67, 0,58, 0x80,
0x85, 0,8, 0x81, 0x83, 0x86, 0x88, 0x82, 0x84, 0x87, 0x89, 0,133, 0x90,48, 0x91,67, 0x92,64, 0x93,67,
0x94,64, 0x95,48, 0x96,67, 0x97,64, 0x98,67, 0x99,64, 0,41, 0x80, 0x85, 0,25, 0x81, 0x83, 0x86,
0x88, 0,4, 0x82, 0x84, 0x87, 0x89, 0,133, 0x90,60, 0x91,64, 0x92,67, 0x93,64, 0x94,67, 0x95,60,
0x96,64, 0x97,67, 0x98,64, 0x99,67, 0,45, 0x80, 0x85, 0,16, 0x81, 0x83, 0x86, 0x88, 0x82, 0x84, 0x87,
0x89, 0,141, 0x90,60, 0x91,67, 0x92,60, 0x93,67, 0x94,60, 0x95,67, 0x96,60, 0x97,67, 0,58,
0x80, 0x82, 0x84, 0x86, 0,4, 0x81, 0x83, 0x85, 0x87, 0,37, 0x90,60, 0x91,67, 0x92,60, 0x93,67, 0x94,60,
0x95,67, 0x96,60, 0x97,67, 0,37, 0x80, 0x82, 0x84, 0x86, 0,16, 0x81, 0x83, 0x85, 0x87, 0,45, 0x90,60,
0x91,67, 0x92,60, 0x93,67, 0x94,60, 0x95,67, 0x96,60, 0x97,67, 0,58, 0x80, 0x82, 0x84, 0x86, 0,16,
0x81, 0x83, 0x85, 0x87, 0,129, 0x90,60, 0x91,67, 0x92,60, 0x93,67, 0x94,60, 0x95,67, 0x96,60, 0x97,67,
0,45, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81, 0x83, 0x85, 0x87, 0,54, 0x90,60, 0x91,67, 0x92,60, 0x93,67,
0x94,60, 0x95,67, 0x96,60, 0x97,67, 0,37, 0x80, 0x82, 0x84, 0x86, 0,12, 0x81, 0x83, 0x85, 0x87, 0,50,
0x90,60, 0x91,67, 0x92,60, 0x93,67, 0x94,60, 0x95,67, 0x96,60, 0x97,67, 0,50, 0x80, 0x82, 0x84,
0x86, 0,16, 0x81, 0x83, 0x85, 0x87, 0,133, 0x90,65, 0x91,69, 0x92,65, 0x93,69, 0x94,65, 0x95,69,
0x96,65, 0x97,69, 0,58, 0x80, 0x82, 0x84, 0x86, 0x81, 0x83, 0x85, 0x87, 0,145, 0x90,67, 0x91,70, 0x92,67,
0x93,70, 0x94,67, 0x95,70, 0x96,67, 0x97,70, 0,58, 0x80, 0x82, 0x84, 0x86, 0,4, 0x81, 0x83, 0x85,
0x87, 0,141, 0x90,48, 0x91,67, 0x92,60, 0x93,67, 0x94,60, 0x95,48, 0x96,67, 0x97,60, 0x98,67,
0x99,60, 0,50, 0x80, 0x85, 0,150, 0x90,50, 0x95,50, 0,50, 0x80, 0x85, 0,12, 0x81, 0x83, 0x86,
0x88, 0,4, 0x82, 0x84, 0x87, 0x89, 0,137, 0x90,52, 0x91,67, 0x92,70, 0x93,67, 0x94,70, 0x95,52,
0x96,67, 0x97,70, 0x98,67, 0x99,70, 0,37, 0x80, 0x85, 0,33, 0x81, 0x83, 0x86, 0x88, 0,4, 0x82,
0x84, 0x87, 0x89, 0,129, 0x90,53, 0x91,65, 0x92,69, 0x93,65, 0x94,69, 0x95,53, 0x96,65, 0x97,69,
0x98,65, 0x99,69, 0,41, 0x80, 0x85, 0,16, 0x81, 0x83, 0x86, 0x88, 0x82, 0x84, 0x87, 0x89, 0,141, 0x90,55,
0x91,65, 0x92,65, 0x93,55, 0x94,65, 0x95,65, 0,58, 0x80, 0x83, 0,145, 0x90,57, 0x93,57, 0,20,
0x81, 0x82, 0x84, 0x85, 0,33, 0x80, 0x83, 0,150, 0x90,59, 0x91,69, 0x92,65, 0x93,69, 0x94,65, 0x95,59,
0x96,69, 0x97,65, 0x98,69, 0x99,65, 0,45, 0x80, 0x85, 0x81, 0x83, 0x86, 0x88, 0,12, 0x82, 0x84, 0x87,
0x89, 0,141, 0x90,60, 0x91,67, 0x92,64, 0x93,67, 0x94,64, 0x95,60, 0x96,67, 0x97,64, 0x98,67,
0x99,64, 0,50, 0x80, 0x85, 0,154, 0x90,48, 0x95,48, 0,37, 0x80, 0x85, 0,87, 0x81, 0x83, 0x86,
0x88, 0,4, 0x82, 0x84, 0x87, 0x89, 0,75, 0x90,60, 0x91,60, 0,41, 0x80, 0x81, 0,158, 0x90,60,
0x91,60, 0x92,60, 0x93,60, 0,58, 0x80, 0x81, 0x82, 0x83, 0,41, 0x90,60, 0x91,60, 0x92,60, 0x93,60,
0,54, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,41, 0x91,57, 0x92,53, 0x93,60, 0x94,60, 0x95,41, 0x96,57,
0x97,53, 0x98,60, 0x99,60, 0,54, 0x80, 0x85, 0,8, 0x81, 0x86, 0,4, 0x82, 0x87, 0,16, 0x83,
0x84, 0x88, 0x89, 0,120, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,45, 0x80, 0x81, 0x82, 0x83, 0,54,
0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,58, 0x80, 0x81, 0x82, 0x83, 0,41, 0x90,57, 0x91,53, 0x92,41,
0x93,60, 0x94,60, 0x95,57, 0x96,53, 0x97,41, 0x98,60, 0x99,60, 0,75, 0x80, 0x85, 0x83, 0x84, 0x88,
0x89, 0x81, 0x86, 0,4, 0x82, 0x87, 0,125, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,41, 0x80, 0x81,
0x82, 0x83, 0,58, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,66, 0x80, 0x81, 0x82, 0x83, 0,37, 0x90,57,
0x91,41, 0x92,53, 0x93,65, 0x94,65, 0x95,57, 0x96,41, 0x97,53, 0x98,65, 0x99,65, 0,58, 0x80,
0x85, 0,4, 0x81, 0x86, 0x82, 0x87, 0,8, 0x83, 0x84, 0x88, 0x89, 0,129, 0x90,53, 0x91,57, 0x92,41,
0x93,67, 0x94,67, 0x95,53, 0x96,57, 0x97,41, 0x98,67, 0x99,67, 0,54, 0x80, 0x85, 0,8, 0x81,
0x86, 0,4, 0x82, 0x87, 0,16, 0x83, 0x84, 0x88, 0x89, 0,120, 0x90,57, 0x91,53, 0x92,41, 0x93,69,
0x94,69, 0x95,57, 0x96,53, 0x97,41, 0x98,69, 0x99,69, 0,54, 0x80, 0x85, 0x81, 0x86, 0,16, 0x82,
0x87, 0x83, 0x84, 0x88, 0x89, 0,133, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,41, 0x80, 0x81, 0x82, 0x83,
0,58, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,50, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,53, 0x91,57,
0x92,41, 0x93,60, 0x94,60, 0x95,53, 0x96,57, 0x97,41, 0x98,60, 0x99,60, 0,54, 0x80, 0x85, 0,4,
0x81, 0x86, 0,8, 0x82, 0x87, 0,4, 0x83, 0x84, 0x88, 0x89, 0,133, 0x90,60, 0x91,60, 0x92,60, 0x93,60,
0,45, 0x80, 0x81, 0x82, 0x83, 0,54, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,62, 0x80, 0x81, 0x82,
0x83, 0,37, 0x90,53, 0x91,57, 0x92,41, 0x93,65, 0x94,65, 0x95,53, 0x96,57, 0x97,41, 0x98,65,
0x99,65, 0,62, 0x80, 0x85, 0x81, 0x86, 0,8, 0x82, 0x87, 0,16, 0x83, 0x84, 0x88, 0x89, 0,116, 0x90,69,
0x91,69, 0x92,69, 0x93,69, 0,45, 0x80, 0x81, 0x82, 0x83, 0,54, 0x90,69, 0x91,69, 0x92,69, 0x93,69,
0,66, 0x80, 0x81, 0x82, 0x83, 0,37, 0x90,48, 0x91,36, 0x92,52, 0x93,55, 0x94,67, 0x95,67, 0x96,48,
0x97,36, 0x98,52, 0x99,55, 0,45, 0x80, 0x86, 0,16, 0x81, 0x87, 0x82, 0x88, 0x83, 0x89, 0,4, 0x84,
0x85, 0,133, 0x90,48, 0x91,52, 0x92,55, 0x93,36, 0x94,64, 0x95,64, 0x96,48, 0x97,52, 0x98,55,
0x99,36, 0,41, 0x80, 0x86, 0,20, 0x81, 0x87, 0x82, 0x88, 0,4, 0x83, 0x89, 0,4, 0x84, 0x85, 0,133,
0x90,48, 0x91,52, 0x92,55, 0x93,36, 0x94,60, 0x95,60, 0x96,48, 0x97,52, 0x98,55, 0x99,36, 0,50,
0x80, 0x86, 0,4, 0x81, 0x87, 0,20, 0x82, 0x88, 0x83, 0x89, 0,4, 0x84, 0x85, 0,125, 0x90,60, 0x91,60,
0x92,60, 0x93,60, 0,45, 0x80, 0x81, 0x82, 0x83, 0,54, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,58,
0x80, 0x81, 0x82, 0x83, 0,41, 0x90,53, 0x91,57, 0x92,41, 0x93,60, 0x94,60, 0x95,53, 0x96,57, 0x97,41,
0x98,60, 0x99,60, 0,58, 0x80, 0x85, 0,12, 0x81, 0x86, 0,8, 0x82, 0x87, 0x83, 0x84, 0x88, 0x89, 0,125,
0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,50, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,60, 0x91,60, 0x92,60,
0x93,60, 0,58, 0x80, 0x81, 0x82, 0x83, 0,41, 0x90,53, 0x91,57, 0x92,41, 0x93,60, 0x94,60, 0x95,53,
0x96,57, 0x97,41, 0x98,60, 0x99,60, 0,54, 0x80, 0x85, 0,8, 0x83, 0x84, 0x88, 0x89, 0x81, 0x86, 0,8,
0x82, 0x87, 0,133, 0x90,60, 0x91,60, 0x92,60, 0x93,60, 0,50, 0x80, 0x81, 0x82, 0x83, 0,54, 0x90,60,
0x91,60, 0x92,60, 0x93,60, 0,41, 0x80, 0x81, 0x82, 0x83, 0,58, 0x90,53, 0x91,57, 0x92,41, 0x93,65,
0x94,65, 0x95,53, 0x96,57, 0x97,41, 0x98,65, 0x99,65, 0,50, 0x80, 0x85, 0,12, 0x81, 0x86, 0x82,
0x87, 0,16, 0x83, 0x84, 0x88, 0x89, 0,120, 0x90,53, 0x91,41, 0x92,57, 0x93,67, 0x94,67, 0x95,53,
0x96,41, 0x97,57, 0x98,67, 0x99,67, 0,50, 0x80, 0x85, 0,4, 0x81, 0x86, 0,12, 0x82, 0x87, 0,4,
0x83, 0x84, 0x88, 0x89, 0,133, 0x90,53, 0x91,41, 0x92,57, 0x93,69, 0x94,69, 0x95,53, 0x96,41, 0x97,57,
0x98,69, 0x99,69, 0,58, 0x80, 0x85, 0x81, 0x86, 0,4, 0x82, 0x87, 0,20, 0x83, 0x84, 0x88, 0x89, 0,120,
0x90,65, 0x91,65, 0x92,65, 0x93,65, 0,58, 0x80, 0x81, 0x82, 0x83, 0,41, 0x90,69, 0x91,69, 0x92,69,
0x93,69, 0,62, 0x80, 0x81, 0x82, 0x83, 0,37, 0x90,36, 0x91,72, 0x92,72, 0x93,36, 0x94,72, 0x95,72,
0,108, 0x80, 0x83, 0,95, 0x90,52, 0x93,60, 0x96,58, 0x97,52, 0x98,60, 0x99,58, 0,37, 0x80,
0x87, 0,8, 0x83, 0x88, 0,8, 0x86, 0x89, 0,50, 0x90,52, 0x93,60, 0x96,58, 0x97,52, 0x98,60,
0x99,58, 0,33, 0x80, 0x87, 0,8, 0x83, 0x88, 0,8, 0x86, 0x89, 0,50, 0x90,52, 0x93,58, 0x96,60,
0x97,36, 0x98,52, 0x99,58, 0,58, 0x80, 0x88, 0,16, 0x83, 0x89, 0x86, 0,25, 0x90,70, 0x93,70,
0x96,70, 0x98,70, 0,16, 0x87, 0,37, 0x81, 0x82, 0x84, 0x85, 0,20, 0x80, 0x83, 0x86, 0x88, 0,25,
0x90,69, 0x91,69, 0x92,69, 0x93,69, 0,95, 0x80, 0x81, 0x82, 0x83, 0,8, 0x90,67, 0x91,67, 0x92,67,
0x93,67, 0,95, 0x80, 0x81, 0x82, 0x83, 0,4, 0x90,53, 0x91,41, 0x92,57, 0x93,65, 0x94,65, 0x95,53,
0x96,41, 0x97,57, 0x98,65, 0x99,65, 0,66, 0x80, 0x85, 0x81, 0x86, 0,12, 0x82, 0x87, 0,66, 0x83,
0x84, 0x88, 0x89, 0,58, 0x90,60, 0x91,41, 0x92,69, 0x93,69, 0x94,60, 0x95,41, 0x96,69, 0x97,69,
0,50, 0x80, 0x84, 0,4, 0x82, 0x83, 0x86, 0x87, 0,12, 0x81, 0x85, 0,133, 0x90,41, 0x91,53, 0x92,57,
0x93,65, 0x94,65, 0x95,41, 0x96,53, 0x97,57, 0x98,65, 0x99,65, 0,91, 0x83, 0x84, 0x88, 0x89, 0x80,
0x85, 0x81, 0x86, 0,8, 0x82, 0x87, 0,104, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,66, 0x80, 0x81,
0x82, 0x83, 0,33, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,70, 0x80, 0x81, 0x82, 0x83, 0,33, 0x90,41,
0x91,57, 0x92,53, 0x93,72, 0x94,72, 0x95,41, 0x96,57, 0x97,53, 0x98,72, 0x99,72, 0,54, 0x80,
0x85, 0,4, 0x81, 0x86, 0,8, 0x82, 0x87, 0x83, 0x84, 0x88, 0x89, 0,133, 0x90,72, 0x91,72, 0x92,72,
0x93,72, 0,50, 0x80, 0x81, 0x82, 0x83, 0,54, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,45, 0x80,
0x81, 0x82, 0x83, 0,54, 0x90,57, 0x91,53, 0x92,41, 0x93,72, 0x94,72, 0x95,57, 0x96,53, 0x97,41,
0x98,72, 0x99,72, 0,75, 0x80, 0x85, 0x83, 0x84, 0x88, 0x89, 0x81, 0x86, 0,4, 0x82, 0x87, 0,125, 0x90,72,
0x91,72, 0x92,72, 0x93,72, 0,45, 0x80, 0x81, 0x82, 0x83, 0,54, 0x90,72, 0x91,72, 0x92,72, 0x93,72,
0,58, 0x80, 0x81, 0x82, 0x83, 0,41, 0x90,57, 0x91,41, 0x92,53, 0x93,77, 0x94,77, 0x95,57, 0x96,41,
0x97,53, 0x98,77, 0x99,77, 0,62, 0x80, 0x85, 0,4, 0x81, 0x86, 0x82, 0x87, 0,25, 0x83, 0x84, 0x88,
0x89, 0,112, 0x90,53, 0x91,57, 0x92,41, 0x93,79, 0x94,79, 0x95,53, 0x96,57, 0x97,41, 0x98,79,
0x99,79, 0,54, 0x80, 0x85, 0,8, 0x81, 0x86, 0,4, 0x82, 0x87, 0,12, 0x83, 0x84, 0x88, 0x89, 0,125,
0x90,57, 0x91,53, 0x92,41, 0x93,81, 0x94,81, 0x95,57, 0x96,53, 0x97,41, 0x98,81, 0x99,81, 0,50,
0x80, 0x85, 0,4, 0x81, 0x86, 0,12, 0x82, 0x87, 0,41, 0x83, 0x84, 0x88, 0x89, 0,91, 0x90,72, 0x91,72,
0x92,72, 0x93,72, 0,58, 0x80, 0x81, 0x82, 0x83, 0,41, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,41,
0x80, 0x81, 0x82, 0x83, 0,62, 0x90,53, 0x91,57, 0x92,41, 0x93,72, 0x94,72, 0x95,53, 0x96,57, 0x97,41,
0x98,72, 0x99,72, 0,54, 0x80, 0x85, 0,4, 0x81, 0x86, 0,8, 0x82, 0x87, 0,4, 0x83, 0x84, 0x88,
0x89, 0,133, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,41, 0x80, 0x81, 0x82, 0x83, 0,58, 0x90,72,
0x91,72, 0x92,72, 0x93,72, 0,62, 0x80, 0x81, 0x82, 0x83, 0,37, 0x90,53, 0x91,57, 0x92,41, 0x93,77,
0x94,77, 0x95,53, 0x96,57, 0x97,41, 0x98,77, 0x99,77, 0,62, 0x80, 0x85, 0x81, 0x86, 0,4, 0x82,
0x87, 0,8, 0x83, 0x84, 0x88, 0x89, 0,129, 0x90,81, 0x91,81, 0x92,81, 0x93,81, 0,45, 0x80, 0x81,
0x82, 0x83, 0,54, 0x90,81, 0x91,81, 0x92,81, 0x93,81, 0,70, 0x80, 0x81, 0x82, 0x83, 0,33, 0x90,48,
0x91,36, 0x92,52, 0x93,55, 0x94,79, 0x95,79, 0x96,48, 0x97,36, 0x98,52, 0x99,55, 0,41, 0x80,
0x86, 0,20, 0x81, 0x87, 0x82, 0x88, 0x83, 0x89, 0,20, 0x84, 0x85, 0,116, 0x90,48, 0x91,52, 0x92,55,
0x93,36, 0x94,76, 0x95,76, 0x96,48, 0x97,52, 0x98,55, 0x99,36, 0,41, 0x80, 0x86, 0,20, 0x81,
0x87, 0x82, 0x88, 0,4, 0x83, 0x89, 0,4, 0x84, 0x85, 0,133, 0x90,48, 0x91,52, 0x92,55, 0x93,36,
0x94,72, 0x95,72, 0x96,48, 0x97,52, 0x98,55, 0x99,36, 0,45, 0x80, 0x86, 0,8, 0x81, 0x87, 0,20,
0x82, 0x88, 0x83, 0x89, 0,12, 0x84, 0x85, 0,112, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,50, 0x80,
0x81, 0x82, 0x83, 0,54, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,62, 0x80, 0x81, 0x82, 0x83, 0,37,
0x90,53, 0x91,57, 0x92,41, 0x93,72, 0x94,72, 0x95,53, 0x96,57, 0x97,41, 0x98,72, 0x99,72, 0,58,
0x80, 0x85, 0,12, 0x81, 0x86, 0,8, 0x82, 0x87, 0,8, 0x83, 0x84, 0x88, 0x89, 0,116, 0x90,72, 0x91,72,
0x92,72, 0x93,72, 0,58, 0x80, 0x81, 0x82, 0x83, 0,41, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,58,
0x80, 0x81, 0x82, 0x83, 0,41, 0x90,53, 0x91,57, 0x92,41, 0x93,72, 0x94,72, 0x95,53, 0x96,57, 0x97,41,
0x98,72, 0x99,72, 0,54, 0x80, 0x85, 0,8, 0x81, 0x86, 0,8, 0x82, 0x87, 0,8, 0x83, 0x84, 0x88,
0x89, 0,125, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,41, 0x80, 0x81, 0x82, 0x83, 0,58, 0x90,72,
0x91,72, 0x92,72, 0x93,72, 0,70, 0x80, 0x81, 0x82, 0x83, 0,33, 0x90,53, 0x91,57, 0x92,41, 0x93,77,
0x94,77, 0x95,53, 0x96,57, 0x97,41, 0x98,77, 0x99,77, 0,50, 0x80, 0x85, 0,12, 0x81, 0x86, 0x82,
0x87, 0,25, 0x83, 0x84, 0x88, 0x89, 0,112, 0x90,53, 0x91,41, 0x92,57, 0x93,79, 0x94,79, 0x95,53,
0x96,41, 0x97,57, 0x98,79, 0x99,79, 0,50, 0x80, 0x85, 0,4, 0x81, 0x86, 0,12, 0x82, 0x87, 0,16,
0x83, 0x84, 0x88, 0x89, 0,120, 0x90,53, 0x91,41, 0x92,57, 0x93,81, 0x94,81, 0x95,53, 0x96,41, 0x97,57,
0x98,81, 0x99,81, 0,58, 0x80, 0x85, 0x81, 0x86, 0,4, 0x82, 0x87, 0,4, 0x83, 0x84, 0x88, 0x89, 0,133,
0x90,77, 0x91,77, 0x92,77, 0x93,77, 0,91, 0x80, 0x81, 0x82, 0x83, 0,12, 0x90,81, 0x91,81, 0x92,81,
0x93,81, 0,75, 0x80, 0x81, 0x82, 0x83, 0,25, 0x90,36, 0x91,84, 0x92,84, 0x93,36, 0x94,84, 0x95,84,
0,108, 0x80, 0x83, 0,95, 0x90,52, 0x93,60, 0x96,58, 0x97,52, 0x98,60, 0x99,58, 0,33, 0x80,
0x87, 0,8, 0x83, 0x88, 0,12, 0x86, 0x89, 0,45, 0x90,52, 0x93,60, 0x96,58, 0x97,52, 0x98,60,
0x99,58, 0,33, 0x80, 0x87, 0,8, 0x83, 0x88, 0,8, 0x86, 0x89, 0,50, 0x90,52, 0x93,58, 0x96,60,
0x97,36, 0x98,52, 0x99,58, 0,62, 0x80, 0x88, 0,16, 0x83, 0x89, 0x86, 0,25, 0x90,82, 0x93,82,
0x96,82, 0x98,82, 0,12, 0x87, 0,41, 0x81, 0x82, 0x84, 0x85, 0,29, 0x80, 0x83, 0x86, 0x88, 0,16,
0x90,81, 0x91,81, 0x92,81, 0x93,81, 0,104, 0x94,79, 0x95,79, 0x96,79, 0x97,79, 0,16, 0x80,
0x81, 0x82, 0x83, 0,75, 0x84, 0x85, 0x86, 0x87, 0,8, 0x90,53, 0x91,41, 0x92,57, 0x93,77, 0x94,77,
0x95,53, 0x96,41, 0x97,57, 0x98,77, 0x99,77, 0,66, 0x80, 0x85, 0x81, 0x86, 0,8, 0x82, 0x87, 0,70,
0x83, 0x84, 0x88, 0x89, 0,54, 0x90,60, 0x91,41, 0x92,81, 0x93,81, 0x94,60, 0x95,41, 0x96,81, 0x97,81,
0,54, 0x80, 0x84, 0,16, 0x81, 0x85, 0,133, 0x90,41, 0x91,53, 0x94,57, 0x95,77, 0x98,77, 0x99,41,
0,8, 0x82, 0x83, 0x86, 0x87, 0,79, 0x85, 0x88, 0,4, 0x80, 0x89, 0x81, 0,8, 0x84, 0,104, 0x90,72,
0x91,72, 0x92,72, 0x93,72, 0,66, 0x80, 0x81, 0x82, 0x83, 0,33, 0x90,76, 0x91,76, 0x92,76, 0x93,76,
0,66, 0x80, 0x81, 0x82, 0x83, 0,33, 0x90,53, 0x91,57, 0x92,60, 0x93,41, 0x94,77, 0x95,77, 0x96,53,
0x97,57, 0x98,60, 0x99,41, 0,62, 0x80, 0x86, 0,16, 0x81, 0x87, 0,4, 0x82, 0x88, 0,12, 0x84,
0x85, 0,108, 0x90,53, 0x91,57, 0x92,60, 0x94,77, 0x95,77, 0x96,53, 0x97,57, 0x98,60, 0,50,
0x80, 0x86, 0,8, 0x84, 0x85, 0,4, 0x81, 0x87, 0x82, 0x88, 0,25, 0x83, 0x89, 0,12, 0x90,77, 0x91,77,
0x92,77, 0x93,77, 0,50, 0x80, 0x81, 0x82, 0x83, 0,54, 0x90,53, 0x91,57, 0x92,60, 0x93,41, 0x94,77,
0x95,77, 0x96,53, 0x97,57, 0x98,60, 0x99,41, 0,58, 0x80, 0x86, 0,8, 0x81, 0x87, 0,8, 0x82,
0x88, 0x84, 0x85, 0,125, 0x90,53, 0x91,60, 0x92,57, 0x94,77, 0x95,77, 0x96,53, 0x97,60, 0x98,57,
0,58, 0x84, 0x85, 0,16, 0x80, 0x86, 0,12, 0x81, 0x87, 0x83, 0x89, 0,4, 0x82, 0x88, 0,112, 0x90,53,
0x91,61, 0x92,57, 0x93,41, 0x94,81, 0x95,73, 0x96,81, 0x97,73, 0x98,53, 0x99,61, 0,87, 0x80,
0x88, 0,12, 0x81, 0x89, 0,16, 0x82, 0,87, 0x90,53, 0x91,57, 0x92,61, 0x98,53, 0x99,57, 0,45,
0x80, 0x88, 0,20, 0x81, 0x89, 0,4, 0x82, 0,8, 0x83, 0,120, 0x90,53, 0x91,57, 0x92,61, 0x93,41,
0x98,53, 0x99,57, 0,50, 0x80, 0x88, 0,20, 0x81, 0x89, 0,4, 0x82, 0,62, 0x84, 0x86, 0,66,
0x90,53, 0x91,57, 0x92,61, 0x94,79, 0x96,79, 0x98,53, 0x99,57, 0,20, 0x85, 0x87, 0,29, 0x84,
0x86, 0,4, 0x80, 0x88, 0,4, 0x83, 0,4, 0x81, 0x89, 0,8, 0x82, 0,133, 0x90,57, 0x91,53,
0x92,62, 0x93,41, 0x94,77, 0x95,69, 0x96,77, 0x97,69, 0x98,57, 0x99,53, 0x80, 0x88, 0,100, 0x81,
0x89, 0,8, 0x82, 0,91, 0x90,53, 0x91,61, 0x92,76, 0x98,76, 0x99,53, 0,37, 0x84, 0x86, 0,29,
0x80, 0x89, 0,16, 0x81, 0,8, 0x83, 0,112, 0x90,53, 0x91,62, 0x93,41, 0x94,77, 0x96,77, 0x99,53,
0,4, 0x82, 0x88, 0,58, 0x80, 0x89, 0,33, 0x81, 0,108, 0x90,53, 0x91,58, 0x92,74, 0x98,74,
0x99,53, 0,16, 0x85, 0x87, 0,37, 0x84, 0x86, 0,8, 0x82, 0x88, 0,8, 0x80, 0x89, 0,16, 0x81,
0,20, 0x83, 0,91, 0x90,53, 0x91,57, 0x92,41, 0x93,72, 0x94,72, 0x95,53, 0x96,57, 0x97,41,
0x98,72, 0x99,72, 0,45, 0x83, 0x84, 0x88, 0x89, 0,54, 0x93,74, 0x94,74, 0x98,74, 0x99,74, 0,41,
0x83, 0x84, 0x88, 0x89, 0,62, 0x93,72, 0x94,72, 0x98,72, 0x99,72, 0,16, 0x80, 0x85, 0,12, 0x81,
0x86, 0,16, 0x82, 0x87, 0x83, 0x84, 0x88, 0x89, 0,54, 0x90,74, 0x91,74, 0x92,74, 0x93,74, 0,54,
0x80, 0x81, 0x82, 0x83, 0,50, 0x90,41, 0x91,57, 0x92,53, 0x93,72, 0x94,72, 0x95,41, 0x96,57, 0x97,53,
0x98,72, 0x99,72, 0,41, 0x83, 0x84, 0x88, 0x89, 0,58, 0x93,74, 0x94,74, 0x98,74, 0x99,74, 0,50,
0x83, 0x84, 0x88, 0x89, 0,20, 0x80, 0x85, 0,29, 0x90,76, 0x93,76, 0x94,76, 0x95,76, 0,8, 0x81,
0x86, 0,4, 0x82, 0x87, 0,41, 0x80, 0x83, 0x84, 0x85, 0,45, 0x90,77, 0x91,77, 0x92,77, 0x93,77,
0,37, 0x80, 0x81, 0x82, 0x83, 0,66, 0x90,52, 0x91,55, 0x92,36, 0x93,70, 0x94,70, 0x95,52, 0x96,55,
0x97,36, 0x98,70, 0x99,70, 0,62, 0x83, 0x84, 0x88, 0x89, 0,29, 0x80, 0x85, 0,8, 0x90,72, 0x93,72,
0x94,72, 0x95,72, 0,12, 0x81, 0x86, 0,29, 0x80, 0x83, 0x84, 0x85, 0,12, 0x82, 0x87, 0,50, 0x90,70,
0x91,70, 0x92,70, 0x93,70, 0,54, 0x80, 0x81, 0x82, 0x83, 0,45, 0x90,72, 0x91,72, 0x92,72, 0x93,72,
0,50, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,52, 0x91,36, 0x92,55, 0x93,70, 0x94,70, 0x95,52, 0x96,36,
0x97,55, 0x98,70, 0x99,70, 0,62, 0x83, 0x84, 0x88, 0x89, 0,25, 0x80, 0x85, 0,12, 0x81, 0x86, 0x82,
0x87, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,54, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,74, 0x91,74,
0x92,74, 0x93,74, 0,54, 0x80, 0x81, 0x82, 0x83, 0,45, 0x90,76, 0x91,76, 0x92,76, 0x93,76, 0,54,
0x80, 0x81, 0x82, 0x83, 0,45, 0x90,53, 0x91,57, 0x92,41, 0x93,69, 0x94,69, 0x95,53, 0x96,57, 0x97,41,
0x98,69, 0x99,69, 0,91, 0x83, 0x84, 0x88, 0x89, 0,12, 0x93,70, 0x94,70, 0x98,70, 0x99,70, 0,8,
0x80, 0x85, 0,4, 0x81, 0x86, 0,25, 0x82, 0x87, 0,62, 0x83, 0x84, 0x88, 0x89, 0x90,69, 0x91,69, 0x92,69,
0x93,69, 0,100, 0x94,70, 0x95,70, 0x96,70, 0x97,70, 0,29, 0x80, 0x81, 0x82, 0x83, 0,75, 0x90,57,
0x91,41, 0x92,53, 0x93,69, 0x98,69, 0x99,57, 0,16, 0x84, 0x85, 0x86, 0x87, 0,79, 0x80, 0x89, 0,4,
0x90,70, 0x94,70, 0x95,70, 0x96,70, 0,12, 0x81, 0,4, 0x82, 0x83, 0x88, 0,79, 0x80, 0x84, 0x85,
0x86, 0,4, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,104, 0x94,74, 0x95,74, 0x96,74, 0x97,74,
0,8, 0x80, 0x81, 0x82, 0x83, 0,58, 0x84, 0x85, 0x86, 0x87, 0,33, 0x90,55, 0x91,50, 0x92,46, 0x93,67,
0x94,67, 0x95,55, 0x96,50, 0x97,46, 0x98,67, 0x99,67, 0,100, 0,4, 0x80, 0x85, 0,12, 0x81,
0x86, 0x82, 0x87, 0,4, 0x83, 0x84, 0x88, 0x89, 0,83, 0x90,67, 0x91,67, 0x92,67, 0x93,67, 0,4,
0,91, 0x80, 0x81, 0x82, 0x83, 0,4, 0x90,69, 0x91,69, 0x92,69, 0x93,69, 0,100, 0x94,46, 0x95,50,
0x96,55, 0x97,67, 0x98,67, 0x99,46, 0,4, 0x80, 0x81, 0x82, 0x83, 0,100, 0x87, 0x88, 0x90,69, 0x91,69,
0x92,69, 0x93,69, 0,29, 0x84, 0x89, 0,8, 0x85, 0,16, 0x86, 0,45, 0x94,67, 0x95,67, 0x96,67,
0x97,67, 0,8, 0x80, 0x81, 0x82, 0x83, 0,91, 0x84, 0x85, 0x86, 0x87, 0x90,69, 0x91,69, 0x92,69, 0x93,69,
0,100, 0x80, 0x81, 0x82, 0x83, 0x90,48, 0x91,55, 0x92,52, 0x93,67, 0x94,67, 0x95,48, 0x96,55, 0x97,52,
0x98,67, 0x99,67, 0,104, 0,4, 0x83, 0x84, 0x88, 0x89, 0,25, 0x80, 0x85, 0,8, 0x81, 0x86, 0,8,
0x82, 0x87, 0,37, 0,16, 0x90,67, 0x91,67, 0x92,67, 0x93,67, 0,104, 0x94,69, 0x95,69, 0x96,69,
0x97,69, 0,8, 0x80, 0x81, 0x82, 0x83, 0,91, 0x90,67, 0x91,67, 0x92,67, 0x93,67, 0,4, 0x84,
0x85, 0x86, 0x87, 0,91, 0x80, 0x81, 0x82, 0x83, 0,4, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,91,
0x80, 0x81, 0x82, 0x83, 0,8, 0x90,74, 0x91,74, 0x92,74, 0x93,74, 0,91, 0x80, 0x81, 0x82, 0x83, 0,12,
0x90,76, 0x91,76, 0x92,76, 0x93,76, 0,75, 0x80, 0x81, 0x82, 0x83, 0,25, 0x90,53, 0x91,57, 0x92,60,
0x93,41, 0x94,77, 0x95,77, 0x96,53, 0x97,57, 0x98,60, 0x99,41, 0,58, 0x80, 0x86, 0,12, 0x84,
0x85, 0,8, 0x81, 0x87, 0x82, 0x88, 0,125, 0x90,53, 0x91,57, 0x92,60, 0x94,77, 0x95,77, 0x96,53,
0x97,57, 0x98,60, 0,50, 0x80, 0x86, 0,4, 0x84, 0x85, 0,4, 0x81, 0x87, 0,4, 0x82, 0x88, 0,25,
0x83, 0x89, 0,12, 0x90,77, 0x91,77, 0x92,77, 0x93,77, 0,50, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,53,
0x91,57, 0x92,60, 0x93,41, 0x94,77, 0x95,77, 0x96,53, 0x97,57, 0x98,60, 0x99,41, 0,58, 0x80,
0x86, 0,12, 0x81, 0x87, 0x84, 0x85, 0,8, 0x82, 0x88, 0,125, 0x90,53, 0x91,60, 0x92,57, 0x94,77,
0x95,77, 0x96,53, 0x97,60, 0x98,57, 0,58, 0x84, 0x85, 0,12, 0x80, 0x86, 0,12, 0x81, 0x87, 0,4,
0x83, 0x89, 0,4, 0x82, 0x88, 0,112, 0x90,53, 0x91,61, 0x92,57, 0x93,41, 0x94,81, 0x95,73, 0x96,81,
0x97,73, 0x98,53, 0x99,61, 0,83, 0x80, 0x88, 0,16, 0x81, 0x89, 0,16, 0x82, 0,83, 0x90,53,
0x91,57, 0x92,61, 0x98,53, 0x99,57, 0,50, 0x80, 0x88, 0,20, 0x81, 0x89, 0,4, 0x82, 0,8,
0x83, 0,120, 0x90,53, 0x91,57, 0x92,61, 0x93,41, 0x98,53, 0x99,57, 0,50, 0x80, 0x88, 0,20,
0x81, 0x89, 0x82, 0,125, 0x84, 0x86, 0,8, 0x90,53, 0x91,57, 0x92,61, 0x94,79, 0x96,79, 0x98,53,
0x99,57, 0,16, 0x85, 0x87, 0,37, 0x80, 0x88, 0x83, 0,4, 0x81, 0x89, 0,8, 0x84, 0x86, 0,4,
0x82, 0,129, 0x90,57, 0x91,53, 0x92,62, 0x93,41, 0x94,77, 0x95,69, 0x96,77, 0x97,69, 0x98,57,
0x99,53, 0,4, 0x80, 0x88, 0,100, 0x81, 0x89, 0,8, 0x82, 0,91, 0x90,53, 0x91,61, 0x92,76,
0x98,76, 0x99,53, 0,8, 0x84, 0x86, 0,58, 0x80, 0x89, 0,12, 0x81, 0,12, 0x83, 0,87, 0x82,
0x88, 0,25, 0x90,53, 0x91,62, 0x92,41, 0x93,77, 0x94,77, 0x96,53, 0x98,62, 0x99,41, 0,58,
0x80, 0x86, 0,37, 0x81, 0x88, 0,95, 0x83, 0x84, 0,8, 0x90,53, 0x91,58, 0x93,74, 0x94,74, 0x96,53,
0x98,58, 0,33, 0x85, 0x87, 0,41, 0x80, 0x86, 0,16, 0x81, 0x88, 0,20, 0x82, 0x89, 0,54, 0x83,
0x84, 0,37, 0x90,53, 0x91,57, 0x92,41, 0x93,72, 0x94,72, 0x95,53, 0x96,57, 0x97,41, 0x98,72,
0x99,72, 0,54, 0x83, 0x84, 0x88, 0x89, 0,45, 0x93,74, 0x94,74, 0x98,74, 0x99,74, 0,41, 0x83,
0x84, 0x88, 0x89, 0,62, 0x93,72, 0x94,72, 0x98,72, 0x99,72, 0,16, 0x80, 0x85, 0,12, 0x81, 0x86,
0,12, 0x83, 0x84, 0x88, 0x89, 0,4, 0x82, 0x87, 0,54, 0x90,74, 0x91,74, 0x92,74, 0x93,74, 0,50,
0x80, 0x81, 0x82, 0x83, 0,50, 0x90,41, 0x91,57, 0x92,53, 0x93,72, 0x94,72, 0x95,41, 0x96,57, 0x97,53,
0x98,72, 0x99,72, 0,50, 0x83, 0x84, 0x88, 0x89, 0,50, 0x93,74, 0x94,74, 0x98,74, 0x99,74, 0,54,
0x83, 0x84, 0x88, 0x89, 0,20, 0x80, 0x85, 0,29, 0x90,76, 0x93,76, 0x94,76, 0x95,76, 0,8, 0x81,
0x86, 0,4, 0x82, 0x87, 0,41, 0x80, 0x83, 0x84, 0x85, 0,45, 0x90,77, 0x91,77, 0x92,77, 0x93,77,
0,41, 0x80, 0x81, 0x82, 0x83, 0,62, 0x90,52, 0x91,55, 0x92,36, 0x93,70, 0x94,70, 0x95,52, 0x96,55,
0x97,36, 0x98,70, 0x99,70, 0,45, 0x83, 0x84, 0x88, 0x89, 0,45, 0x80, 0x85, 0,8, 0x90,72, 0x93,72,
0x94,72, 0x95,72, 0,12, 0x81, 0x86, 0,37, 0x82, 0x87, 0,8, 0x80, 0x83, 0x84, 0x85, 0,41, 0x90,70,
0x91,70, 0x92,70, 0x93,70, 0,58, 0x80, 0x81, 0x82, 0x83, 0,41, 0x90,72, 0x91,72, 0x92,72, 0x93,72,
0,58, 0x80, 0x81, 0x82, 0x83, 0,45, 0x90,52, 0x91,36, 0x92,55, 0x93,70, 0x94,70, 0x95,52, 0x96,36,
0x97,55, 0x98,70, 0x99,70, 0,62, 0x83, 0x84, 0x88, 0x89, 0,25, 0x80, 0x85, 0,8, 0x81, 0x86, 0,4,
0x82, 0x87, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,58, 0x80, 0x81, 0x82, 0x83, 0,45, 0x90,74, 0x91,74,
0x92,74, 0x93,74, 0,50, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,76, 0x91,76, 0x92,76, 0x93,76, 0,58,
0x80, 0x81, 0x82, 0x83, 0,41, 0x90,53, 0x91,57, 0x92,41, 0x93,69, 0x94,69, 0x95,53, 0x96,57, 0x97,41,
0x98,69, 0x99,69, 0,62, 0x83, 0x84, 0x88, 0x89, 0,37, 0x93,70, 0x94,70, 0x98,70, 0x99,70, 0,8,
0x80, 0x85, 0,8, 0x81, 0x86, 0,25, 0x82, 0x87, 0,20, 0x83, 0x84, 0x88, 0x89, 0,41, 0x90,69, 0x91,69,
0x92,69, 0x93,69, 0,54, 0x80, 0x81, 0x82, 0x83, 0,45, 0x90,70, 0x91,70, 0x92,70, 0x93,70, 0,62,
0x80, 0x81, 0x82, 0x83, 0,41, 0x90,57, 0x91,41, 0x92,53, 0x93,69, 0x94,69, 0x95,57, 0x96,41, 0x97,53,
0x98,69, 0x99,69, 0,66, 0x83, 0x84, 0x88, 0x89, 0,25, 0x80, 0x85, 0,8, 0x90,70, 0x93,70, 0x94,70,
0x95,70, 0,12, 0x81, 0x86, 0,4, 0x82, 0x87, 0,50, 0x80, 0x83, 0x84, 0x85, 0,33, 0x90,72, 0x91,72,
0x92,72, 0x93,72, 0,62, 0x80, 0x81, 0x82, 0x83, 0,37, 0x90,74, 0x91,74, 0x92,74, 0x93,74, 0,41,
0x80, 0x81, 0x82, 0x83, 0,62, 0x90,55, 0x91,50, 0x92,46, 0x93,67, 0x94,67, 0x95,55, 0x96,50, 0x97,46,
0x98,67, 0x99,67, 0,62, 0x83, 0x84, 0x88, 0x89, 0,37, 0x93,69, 0x94,69, 0x98,69, 0x99,69, 0,4,
0x80, 0x85, 0,12, 0x81, 0x86, 0x82, 0x87, 0,41, 0x83, 0x84, 0x88, 0x89, 0,41, 0x90,67, 0x91,67, 0x92,67,
0x93,67, 0,58, 0x80, 0x81, 0x82, 0x83, 0,45, 0x90,69, 0x91,69, 0x92,69, 0x93,69, 0,58, 0x80,
0x81, 0x82, 0x83, 0,41, 0x90,48, 0x91,55, 0x92,52, 0x93,67, 0x94,67, 0x95,48, 0x96,55, 0x97,52,
0x98,67, 0x99,67, 0,62, 0x83, 0x84, 0x88, 0x89, 0,37, 0x93,70, 0x94,70, 0x98,70, 0x99,70, 0,33,
0x80, 0x85, 0,8, 0x81, 0x86, 0,4, 0x82, 0x87, 0,37, 0x83, 0x84, 0x88, 0x89, 0,20, 0x90,69, 0x91,69,
0x92,69, 0x93,69, 0,87, 0x80, 0x81, 0x82, 0x83, 0,12, 0x90,67, 0x91,67, 0x92,67, 0x93,67, 0,83,
0x80, 0x81, 0x82, 0x83, 0,16, 0x90,57, 0x91,53, 0x92,41, 0x93,65, 0x94,65, 0x95,57, 0x96,53, 0x97,41,
0x98,65, 0x99,65, 0,104, 0,29, 0x83, 0x84, 0x88, 0x89, 0,70, 0x93,65, 0x94,65, 0x98,65, 0x99,65,
0,8, 0,91, 0,8, 0x83, 0x84, 0x88, 0x89, 0,87, 0,8, 0x93,65, 0x94,65, 0x98,65, 0x99,65,
0,66, 0x83, 0x84, 0x88, 0x89, 0,133, 0x80, 0x85, 0x81, 0x86, 0x82, 0x87, 0x90,72, 0x91,72, 0x92,72, 0x93,72,
0,45, 0x80, 0x81, 0x82, 0x83, 0,58, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,37, 0x80, 0x81, 0x82,
0x83, 0,62, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,79, 0x80, 0x81, 0x82, 0x83, 0,120, 0x90,72,
0x91,72, 0x92,72, 0x93,72, 0,54, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,72, 0x91,72, 0x92,72, 0x93,72,
0,58, 0x80, 0x81, 0x82, 0x83, 0,41, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,70, 0x80, 0x81, 0x82,
0x83, 0,133, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,54, 0x80, 0x81, 0x82, 0x83, 0,45, 0x90,72,
0x91,72, 0x92,72, 0x93,72, 0,41, 0x80, 0x81, 0x82, 0x83, 0,58, 0x90,53, 0x91,65, 0x92,77, 0x93,65,
0x94,77, 0x95,53, 0x96,65, 0x97,77, 0x98,65, 0x99,77, 0,50, 0x81, 0x83, 0x86, 0x88, 0,4, 0x82,
0x84, 0x87, 0x89, 0,12, 0x80, 0x85, 0,137, 0x90,55, 0x91,67, 0x92,79, 0x93,67, 0x94,79, 0x95,55,
0x96,67, 0x97,79, 0x98,67, 0x99,79, 0,50, 0x81, 0x83, 0x86, 0x88, 0,4, 0x82, 0x84, 0x87, 0x89, 0,8,
0x80, 0x85, 0,141, 0x90,57, 0x91,81, 0x92,69, 0x93,81, 0x94,69, 0x95,57, 0x96,81, 0x97,69, 0x98,81,
0x99,69, 0,100, 0x81, 0x83, 0x86, 0x88, 0,25, 0x82, 0x84, 0x87, 0x89, 0,75, 0x91,72, 0x92,72, 0x93,72,
0x94,72, 0,4, 0x80, 0x85, 0,66, 0x81, 0x82, 0x83, 0x84, 0,33, 0x90,72, 0x91,72, 0x92,72, 0x93,72,
0,66, 0x80, 0x81, 0x82, 0x83, 0,33, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,104, 0x80, 0x81, 0x82,
0x83, 0,100, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,37, 0x80, 0x81, 0x82, 0x83, 0,62, 0x90,72,
0x91,72, 0x92,72, 0x93,72, 0,50, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,72, 0x91,72, 0x92,72, 0x93,72,
0,62, 0x80, 0x81, 0x82, 0x83, 0,141, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,41, 0x80, 0x81, 0x82,
0x83, 0,58, 0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,20, 0x80, 0x81, 0x82, 0x83, 0,83, 0x90,57,
0x91,69, 0x92,81, 0x93,69, 0x94,81, 0x95,57, 0x96,69, 0x97,81, 0x98,69, 0x99,81, 0,54, 0x81,
0x83, 0x86, 0x88, 0x82, 0x84, 0x87, 0x89, 0,20, 0x80, 0x85, 0,125, 0x90,58, 0x91,70, 0x92,82, 0x93,70,
0x94,82, 0x95,58, 0x96,70, 0x97,82, 0x98,70, 0x99,82, 0,50, 0x81, 0x83, 0x86, 0x88, 0,20, 0x82,
0x84, 0x87, 0x89, 0,4, 0x80, 0x85, 0,129, 0x90,60, 0x91,72, 0x92,84, 0x93,72, 0x94,84, 0x95,60,
0x96,72, 0x97,84, 0x98,72, 0x99,84, 0,204, 0x80, 0x85, 0,4, 0x81, 0x83, 0x86, 0x88, 0,29, 0x82,
0x84, 0x87, 0x89, 0,166, 0x90,53, 0x91,77, 0x92,65, 0x93,77, 0x94,65, 0x95,53, 0x96,77, 0x97,65,
0x98,77, 0x99,65, 0,58, 0x81, 0x83, 0x86, 0x88, 0,8, 0x80, 0x85, 0,4, 0x82, 0x84, 0x87, 0x89, 0,133,
0x90,55, 0x91,67, 0x92,79, 0x93,67, 0x94,79, 0x95,55, 0x96,67, 0x97,79, 0x98,67, 0x99,79, 0,50,
0x81, 0x83, 0x86, 0x88, 0,8, 0x82, 0x84, 0x87, 0x89, 0x80, 0x85, 0,145, 0x90,57, 0x91,69, 0x92,81, 0x93,69,
0x94,81, 0x95,57, 0x96,69, 0x97,81, 0x98,69, 0x99,81, 0,216, 0x81, 0x83, 0x86, 0x88, 0,8, 0x80,
0x85, 0x82, 0x84, 0x87, 0x89, 0,179, 0x90,45, 0x91,57, 0x92,69, 0x93,57, 0x94,69, 0x95,45, 0x96,57,
0x97,69, 0x98,57, 0x99,69, 0,54, 0x81, 0x83, 0x86, 0x88, 0,12, 0x82, 0x84, 0x87, 0x89, 0,4, 0x80,
0x85, 0,133, 0x90,46, 0x91,58, 0x92,70, 0x93,58, 0x94,70, 0x95,46, 0x96,58, 0x97,70, 0x98,58,
0x99,70, 0,54, 0x81, 0x83, 0x86, 0x88, 0,12, 0x80, 0x85, 0,4, 0x82, 0x84, 0x87, 0x89, 0,129, 0x90,48,
0x91,60, 0x92,72, 0x93,60, 0x94,72, 0x95,48, 0x96,60, 0x97,72, 0x98,60, 0x99,72, 0,204, 0x80,
0x85, 0,20, 0x81, 0x83, 0x86, 0x88, 0,8, 0x82, 0x84, 0x87, 0x89, 0,175, 0x90,53, 0x91,41, 0x92,65,
0x93,77, 0x94,77, 0x95,53, 0x96,41, 0x97,65, 0x98,77, 0x99,77, 0,54, 0x83, 0x84, 0x88, 0x89, 0,16,
0x80, 0x85, 0,12, 0x81, 0x86, 0,8, 0x82, 0x87, 0,108, 0x90,53, 0x91,41, 0x92,65, 0x93,77, 0x94,77,
0x95,53, 0x96,41, 0x97,65, 0x98,77, 0x99,77, 0,45, 0x83, 0x84, 0x88, 0x89, 0,12, 0x80, 0x85, 0,4,
0x81, 0x86, 0,12, 0x82, 0x87, 0,25, 0x90,77, 0x91,77, 0x92,77, 0x93,77, 0,50, 0x80, 0x81, 0x82,
0x83, 0,54, 0x90,53, 0x91,65, 0x92,41, 0x93,77, 0x94,77, 0x95,53, 0x96,65, 0x97,41, 0x98,77,
0x99,77, 0,66, 0x80, 0x85, 0,4, 0x81, 0x86, 0,8, 0x82, 0x87, 0x83, 0x84, 0x88, 0x89, 0,125, 0x90,53,
0x91,65, 0x92,41, 0x93,77, 0x94,77, 0x95,53, 0x96,65, 0x97,41, 0x98,77, 0x99,77, 0,62, 0x83,
0x84, 0x88, 0x89, 0,8, 0x80, 0x85, 0x81, 0x86, 0,4, 0x82, 0x87, 0,125, 0x90,53, 0x91,65, 0x92,41,
0x93,77, 0x94,77, 0x95,53, 0x96,65, 0x97,41, 0x98,77, 0x99,77, 0,54, 0x80, 0x85, 0,25, 0x81,
0x86, 0x82, 0x87, 0,91, 0x83, 0x84, 0x88, 0x89, 0,33, 0x90,60, 0x91,48, 0x92,72, 0x93,72, 0x94,60,
0x95,48, 0x96,72, 0x97,72, 0,45, 0x82, 0x83, 0x86, 0x87, 0,33, 0x80, 0x84, 0,8, 0x81, 0x85, 0,12,
0x90,72, 0x91,72, 0x92,72, 0x93,72, 0,54, 0x80, 0x81, 0x82, 0x83, 0,45, 0x90,60, 0x91,48, 0x92,72,
0x93,72, 0x94,60, 0x95,48, 0x96,72, 0x97,72, 0,62, 0x82, 0x83, 0x86, 0x87, 0,16, 0x80, 0x84, 0x81,
0x85, 0,125, 0x90,48, 0x91,60, 0x92,72, 0x93,72, 0x94,48, 0x95,60, 0x96,72, 0x97,72, 0,62,
0x82, 0x83, 0x86, 0x87, 0,12, 0x80, 0x84, 0,4, 0x81, 0x85, 0,125, 0x90,53, 0x91,65, 0x92,72, 0x93,72,
0x94,53, 0x95,65, 0x96,72, 0x97,72, 0,87, 0x80, 0x84, 0,16, 0x81, 0x85, 0,95, 0x82, 0x83, 0x86,
0x87, 0x90,57, 0x91,45, 0x92,69, 0x93,69, 0x94,57, 0x95,45, 0x96,69, 0x97,69, 0,62, 0x82, 0x83,
0x86, 0x87, 0,16, 0x80, 0x84, 0x81, 0x85, 0,25, 0x90,69, 0x91,69, 0x92,69, 0x93,69, 0,41, 0x80,
0x81, 0x82, 0x83, 0,58, 0x90,45, 0x91,57, 0x92,69, 0x93,69, 0x94,45, 0x95,57, 0x96,69, 0x97,69,
0,66, 0x82, 0x83, 0x86, 0x87, 0,8, 0x80, 0x84, 0x81, 0x85, 0,129, 0x90,45, 0x91,57, 0x92,69, 0x93,69,
0x94,45, 0x95,57, 0x96,69, 0x97,69, 0,58, 0x82, 0x83, 0x86, 0x87, 0,20, 0x80, 0x84, 0,8, 0x81,
0x85, 0,112, 0x90,57, 0x91,45, 0x92,69, 0x93,69, 0x94,57, 0x95,45, 0x96,69, 0x97,69, 0,150,
0x80, 0x84, 0,4, 0x81, 0x85, 0,41, 0x82, 0x83, 0x86, 0x87, 0,8, 0x90,53, 0x91,41, 0x92,65, 0x93,65,
0x94,53, 0x95,41, 0x96,65, 0x97,65, 0,50, 0x82, 0x83, 0x86, 0x87, 0,41, 0x80, 0x84, 0,4, 0x81,
0x85, 0,4, 0x90,65, 0x91,65, 0x92,65, 0x93,65, 0,50, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,53,
0x91,41, 0x92,65, 0x93,65, 0x94,53, 0x95,41, 0x96,65, 0x97,65, 0,66, 0x82, 0x83, 0x86, 0x87, 0,12,
0x80, 0x84, 0x81, 0x85, 0,125, 0x90,41, 0x91,53, 0x92,65, 0x93,65, 0x94,41, 0x95,53, 0x96,65, 0x97,65,
0,62, 0x80, 0x84, 0x82, 0x83, 0x86, 0x87, 0,8, 0x81, 0x85, 0,133, 0x90,41, 0x91,53, 0x92,65, 0x93,65,
0x94,41, 0x95,53, 0x96,65, 0x97,65, 0,62, 0x82, 0x83, 0x86, 0x87, 0,137, 0x92,60, 0x93,60, 0x96,60,
0x97,60, 0,25, 0x80, 0x84, 0,8, 0x81, 0x85, 0,33, 0x82, 0x83, 0x86, 0x87, 0,137, 0x90,41, 0x91,53,
0x92,65, 0x93,65, 0x94,41, 0x95,53, 0x96,65, 0x97,65, 0,58, 0x82, 0x83, 0x86, 0x87, 0,145, 0x92,60,
0x93,60, 0x96,60, 0x97,60, 0,29, 0x80, 0x84, 0,29, 0x82, 0x83, 0x86, 0x87, 0,16, 0x81, 0x85, 0,125,
0x90,45, 0x91,57, 0x92,69, 0x93,69, 0x94,45, 0x95,57, 0x96,69, 0x97,69, 0,62, 0x82, 0x83, 0x86,
0x87, 0,129, 0x80, 0x84, 0,12, 0x90,65, 0x92,65, 0x93,65, 0x94,65, 0,4, 0x81, 0x85, 0,58,
0x80, 0x82, 0x83, 0x84, 0,141, 0x90,48, 0x91,60, 0x92,72, 0x93,72, 0x94,48, 0x95,60, 0x96,72, 0x97,72,
0,58, 0x82, 0x83, 0x86, 0x87, 0,141, 0x92,69, 0x93,69, 0x96,69, 0x97,69, 0,4, 0x80, 0x84, 0,20,
0x81, 0x85, 0,37, 0x82, 0x83, 0x86, 0x87, 0,141, 0x90,53, 0x91,41, 0x92,77, 0x93,77, 0x94,53, 0x95,41,
0x96,77, 0x97,77, 0,50, 0x82, 0x83, 0x86, 0x87, 0,62, 0x80, 0x84, 0,91, 0x81, 0x85, 0x90,72, 0x91,72,
0x92,72, 0x93,72, 0,58, 0x80, 0x81, 0x82, 0x83, 0,141, 0x90,53, 0x91,41, 0x92,77, 0x93,77, 0x94,53,
0x95,41, 0x96,77, 0x97,77, 0,50, 0x82, 0x83, 0x86, 0x87, 0,91, 0x80, 0x84, 0,62, 0x90,72, 0x92,72,
0x93,72, 0x94,72, 0,8, 0x81, 0x85, 0,66, 0x80, 0x82, 0x83, 0x84, 0,129, 0x90,45, 0x91,57, 0x92,81,
0x93,81, 0x94,45, 0x95,57, 0x96,81, 0x97,81, 0,62, 0x82, 0x83, 0x86, 0x87, 0,83, 0x80, 0x84, 0,12,
0x81, 0x85, 0,41, 0x90,77, 0x91,77, 0x92,77, 0x93,77, 0,75, 0x80, 0x81, 0x82, 0x83, 0,129, 0x90,48,
0x91,60, 0x92,84, 0x93,84, 0x94,48, 0x95,60, 0x96,84, 0x97,84, 0,75, 0x82, 0x83, 0x86, 0x87, 0,54,
0x80, 0x84, 0,16, 0x81, 0x85, 0,58, 0x90,81, 0x91,81, 0x92,81, 0x93,81, 0,66, 0x80, 0x81, 0x82,
0x83, 0,133, 0x90,53, 0x91,41, 0x92,77, 0x93,77, 0x94,53, 0x95,41, 0x96,77, 0x97,77, 0,233,
0x80, 0x84, 0,25, 0x81, 0x85, 0,100, 0x82, 0x83, 0x86, 0x87, 0,250, 0x90,77, 0x91,77, 0x92,77, 0x93,77,
0,50, 0x80, 0x81, 0x82, 0x83, 0,50, 0x90,77, 0x91,77, 0x92,77, 0x93,77, 0,54, 0x80, 0x81, 0x82,
0x83, 0,50, 0x90,53, 0x91,41, 0x92,77, 0x93,77, 0x94,53, 0x95,41, 0x96,77, 0x97,77, 0,58,
0x82, 0x83, 0x86, 0x87, 0,45, 0x80, 0x84, 0,4, 0x81, 0x85, 0,95, 0x90,53, 0x91,41, 0x92,77, 0x93,77,
0x94,53, 0x95,41, 0x96,77, 0x97,77, 0,54, 0x82, 0x83, 0x86, 0x87, 0,41, 0x80, 0x84, 0x81, 0x85, 0,104,
0x90,41, 0x91,53, 0x92,77, 0x93,77, 0x94,41, 0x95,53, 0x96,77, 0x97,77, 0,62, 0x82, 0x83, 0x86,
0x87, 0,29, 0x80, 0x84, 0x81, 0x85, 0,112, 0x90,41, 0x91,53, 0x92,77, 0x93,77, 0x94,41, 0x95,53,
0x96,77, 0x97,77, 0,62, 0x82, 0x83, 0x86, 0x87, 0,25, 0x80, 0x84, 0x81, 0x85, 0,116, 0x90,41, 0x91,53,
0x92,77, 0x93,77, 0x94,41, 0x95,53, 0x96,77, 0x97,77, 1,164, 0x82, 0x83, 0x86, 0x87, 0,25, 0x80,
0x84, 0x81, 0x85, 0,158, 0x90,53, 0x91,41, 0x92,77, 0x93,69, 0x94,72, 0x95,77, 0x96,69, 0x97,72,
0x98,53, 0x99,41, 0,29, 0x82, 0x85, 0x83, 0x86, 0x84, 0x87, 0,33, 0x80, 0x88, 0,4, 0x81, 0x89, 0,137,
0x90,41, 0x91,53, 0x92,77, 0x93,69, 0x94,72, 0x95,77, 0x96,69, 0x97,72, 0x98,41, 0x99,53, 1,131,
0x82, 0x85, 0,4, 0x83, 0x86, 0,8, 0x84, 0x87, 0,41, 0x80, 0x88, 0x81, 0x89, 0,166, 0x90,41, 0x91,48,
0x92,53, 0x93,65, 0x94,57, 0x95,65, 0x96,57, 0x97,41, 0x98,48, 0x99,53, 0,45, 0x80, 0x87, 0x83,
0x85, 0,4, 0x81, 0x88, 0x84, 0x86, 0x82, 0x89, 0,154, 0x90,53, 0x91,48, 0x92,41, 0x93,57, 0x94,65,
0x95,57, 0x96,65, 0x97,53, 0x98,48, 0x99,41, 4,180, 0x80, 0x87, 0,112, 0x83, 0x85, 0,33, 0x84,
0x86, 0,95, 0x81, 0x88, 0,12, 0x82, 0x89, 0xf0};
// This score contains 13513 bytes, and 10 tone generators are used.
// 421 notes had to be skipped.

+ 0
- 17
examples/Synthesis/PlaySynthMusic/PlaySynthMusic.h View File

@@ -4,22 +4,6 @@
// Generated from Excel by =ROUND(2*440/32*(2^((x-9)/12)),0) for 0<x<128
// The lowest notes might not work, depending on the Arduino clock frequency

#ifdef ORIGINAL_TABLE
const unsigned int tune_frequencies2_PGM[128] =
{
16,17,18,19,21,22,23,24,26,28,29,31,33,35,37,39,41,
44,46,49,52,55,58,62,65,69,73,78,82,87,92,98,104,110,
117,123,131,139,147,156,165,175,185,196,208,220,233,
247,262,277,294,311,330,349,370,392,415,440,466,494,
523,554,587,622,659,698,740,784,831,880,932,988,1047,
1109,1175,1245,1319,1397,1480,1568,1661,1760,1865,1976,
2093,2217,2349,2489,2637,2794,2960,3136,3322,3520,3729,
3951,4186,4435,4699,4978,5274,5588,5920,6272,6645,7040,
7459,7902,8372,8870,9397,9956,10548,11175,11840,12544,
13290,14080,14917,15804,16744,17740,18795,19912,21096,
22351,23680,25088
};
#else
// This is for the Teensy Audio library which specifies
// frequencies as floating point. See make_notetab.xlsx
const float tune_frequencies2_PGM[128] =
@@ -41,7 +25,6 @@ const float tune_frequencies2_PGM[128] =
5274.0409, 5587.6517, 5919.9108, 6271.9270, 6644.8752, 7040.0000, 7458.6202, 7902.1328,
8372.0181, 8869.8442, 9397.2726, 9956.0635, 10548.0818, 11175.3034, 11839.8215, 12543.8540
};
#endif

#define CMD_PLAYNOTE 0x90 /* play a note: low nibble is generator #, note is next byte */
#define CMD_STOPNOTE 0x80 /* stop a note: low nibble is generator # */

+ 147
- 74
examples/Synthesis/PlaySynthMusic/PlaySynthMusic.ino View File

@@ -1,77 +1,125 @@
// Implement the midi player inside the Audio library.
// This uses the new version of the waveform generator code
// See PlayMidiTones for code which uses the old version
// Implement a 16 note polyphonic midi player :-)
//
// Music data is read from memory. The "Miditones" program is used to
// convert from a MIDI file to this compact format.
//
// This example code is in the public domain.
#include <Audio.h>
#include <Wire.h>
//#include <WM8731.h>
#include <SD.h>
#include <SPI.h>
#include "arm_math.h"

#include "PlaySynthMusic.h"

unsigned char *sp = score;

#define AMPLITUDE (0.4)


// The midi file has more than 8 channels
// Those above 7 will be mapped to 0, 1 etc.
AudioSynthWaveform sine0;
AudioSynthWaveform sine1;
AudioSynthWaveform sine2;
AudioSynthWaveform sine3;
AudioSynthWaveform sine4;
AudioSynthWaveform sine5;
AudioSynthWaveform sine6;
AudioSynthWaveform sine7;
AudioSynthWaveform *waves[8] = {
&sine0,
&sine1,
&sine2,
&sine3,
&sine4,
&sine5,
&sine6,
&sine7,
#define AMPLITUDE (0.2)

// Create 16 waveforms, one for each MIDI channel
AudioSynthWaveform sine0, sine1, sine2, sine3;
AudioSynthWaveform sine4, sine5, sine6, sine7;
AudioSynthWaveform sine8, sine9, sine10, sine11;
AudioSynthWaveform sine12, sine13, sine14, sine15;
AudioSynthWaveform *waves[16] = {
&sine0, &sine1, &sine2, &sine3,
&sine4, &sine5, &sine6, &sine7,
&sine8, &sine9, &sine10, &sine11,
&sine12, &sine13, &sine14, &sine15
};

// allocate a wave type to each channel.
// The types used and their order is purely arbitrary.
short wave_type[8] = {
TONE_TYPE_SINE,
TONE_TYPE_SQUARE,
TONE_TYPE_SAWTOOTH,
TONE_TYPE_TRIANGLE,
TONE_TYPE_SINE,
TONE_TYPE_SQUARE,
TONE_TYPE_SAWTOOTH,
TONE_TYPE_TRIANGLE,
short wave_type[16] = {
WAVEFORM_SINE,
WAVEFORM_SQUARE,
WAVEFORM_SAWTOOTH,
WAVEFORM_TRIANGLE,
WAVEFORM_SINE,
WAVEFORM_SQUARE,
WAVEFORM_SAWTOOTH,
WAVEFORM_TRIANGLE,
WAVEFORM_SINE,
WAVEFORM_SQUARE,
WAVEFORM_SAWTOOTH,
WAVEFORM_TRIANGLE,
WAVEFORM_SINE,
WAVEFORM_SQUARE,
WAVEFORM_SAWTOOTH,
WAVEFORM_TRIANGLE
};

// Two mixers are needed to handle the 8 channels of music
AudioMixer4 mixer1;
AudioMixer4 mixer2;
AudioOutputI2S audioOut;

// Mix the first four channels into mixer1
AudioConnection c0(sine0, 0, mixer1, 0);
AudioConnection c1(sine1, 0, mixer1, 1);
AudioConnection c2(sine2, 0, mixer1, 2);
AudioConnection c3(sine3, 0, mixer1, 3);

// and the last 4 channels into mixer2
AudioConnection c4(sine4, 0, mixer2, 0);
AudioConnection c5(sine5, 0, mixer2, 1);
AudioConnection c6(sine6, 0, mixer2, 2);
AudioConnection c7(sine7, 0, mixer2, 3);
// Each waveform will be shaped by an envelope
AudioEffectEnvelope env0, env1, env2, env3;
AudioEffectEnvelope env4, env5, env6, env7;
AudioEffectEnvelope env8, env9, env10, env11;
AudioEffectEnvelope env12, env13, env14, env15;
AudioEffectEnvelope *envs[16] = {
&env0, &env1, &env2, &env3,
&env4, &env5, &env6, &env7,
&env8, &env9, &env10, &env11,
&env12, &env13, &env14, &env15
};

// Output mixre1 to the left channel and mixer2 to the right
AudioConnection c11(mixer1, 0, audioOut, 0);
AudioConnection c12(mixer2, 0, audioOut, 1);
// Route each waveform through its own envelope effect
AudioConnection patchCord01(sine0, env0);
AudioConnection patchCord02(sine1, env1);
AudioConnection patchCord03(sine2, env2);
AudioConnection patchCord04(sine3, env3);
AudioConnection patchCord05(sine4, env4);
AudioConnection patchCord06(sine5, env5);
AudioConnection patchCord07(sine6, env6);
AudioConnection patchCord08(sine7, env7);
AudioConnection patchCord09(sine8, env8);
AudioConnection patchCord10(sine9, env9);
AudioConnection patchCord11(sine10, env10);
AudioConnection patchCord12(sine11, env11);
AudioConnection patchCord13(sine12, env12);
AudioConnection patchCord14(sine13, env13);
AudioConnection patchCord15(sine14, env14);
AudioConnection patchCord16(sine15, env15);

// Four mixers are needed to handle 16 channels of music
AudioMixer4 mixer1;
AudioMixer4 mixer2;
AudioMixer4 mixer3;
AudioMixer4 mixer4;

// Mix the 16 channels down to 4 audio streams
AudioConnection patchCord17(env0, 0, mixer1, 0);
AudioConnection patchCord18(env1, 0, mixer1, 1);
AudioConnection patchCord19(env2, 0, mixer1, 2);
AudioConnection patchCord20(env3, 0, mixer1, 3);
AudioConnection patchCord21(env4, 0, mixer2, 0);
AudioConnection patchCord22(env5, 0, mixer2, 1);
AudioConnection patchCord23(env6, 0, mixer2, 2);
AudioConnection patchCord24(env7, 0, mixer2, 3);
AudioConnection patchCord25(env8, 0, mixer3, 0);
AudioConnection patchCord26(env9, 0, mixer3, 1);
AudioConnection patchCord27(env10, 0, mixer3, 2);
AudioConnection patchCord28(env11, 0, mixer3, 3);
AudioConnection patchCord29(env12, 0, mixer4, 0);
AudioConnection patchCord30(env13, 0, mixer4, 1);
AudioConnection patchCord31(env14, 0, mixer4, 2);
AudioConnection patchCord32(env15, 0, mixer4, 3);

// Now create 2 mixers for the main output
AudioMixer4 mixerLeft;
AudioMixer4 mixerRight;
AudioOutputI2S audioOut;

// Mix all channels to both the outputs
AudioConnection patchCord33(mixer1, 0, mixerLeft, 0);
AudioConnection patchCord34(mixer2, 0, mixerLeft, 1);
AudioConnection patchCord35(mixer3, 0, mixerLeft, 2);
AudioConnection patchCord36(mixer4, 0, mixerLeft, 3);
AudioConnection patchCord37(mixer1, 0, mixerRight, 0);
AudioConnection patchCord38(mixer2, 0, mixerRight, 1);
AudioConnection patchCord39(mixer3, 0, mixerRight, 2);
AudioConnection patchCord40(mixer4, 0, mixerRight, 3);
AudioConnection patchCord41(mixerLeft, 0, audioOut, 0);
AudioConnection patchCord42(mixerRight, 0, audioOut, 1);

//AudioControl_WM8731 codec;
AudioControlSGTL5000 codec;

// Initial value of the volume control
@@ -80,8 +128,8 @@ int volume = 50;
void setup()
{
Serial.begin(115200);
while (!Serial) ;
delay(2000);
//while (!Serial) ; // wait for Arduino Serial Monitor
delay(200);
// http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
Serial.print("Begin ");
@@ -89,16 +137,38 @@ void setup()
// Proc = 12 (13), Mem = 2 (8)
// Audio connections require memory to work.
// The memory usage code indicates that 8 is the maximum
// so give it 10 just to be sure.
AudioMemory(10);
// The memory usage code indicates that 10 is the maximum
// so give it 12 just to be sure.
AudioMemory(18);
codec.enable();
codec.volume(0.5);
codec.volume(0.45);
// I want output on the line out too
// Comment this if you don't it
codec.unmuteLineout();

// reduce the gain on some channels, so half of the channels
// are "positioned" to the left, half to the right, but all
// are heard at least partially on both ears
mixerLeft.gain(1, 0.36);
mixerLeft.gain(3, 0.36);
mixerRight.gain(0, 0.36);
mixerRight.gain(2, 0.36);

// set envelope parameters, for pleasing sound :-)
for (int i=0; i<16; i++) {
envs[i]->attack(9.2);
envs[i]->hold(2.1);
envs[i]->decay(31.4);
envs[i]->sustain(0.6);
envs[i]->release(84.5);
// uncomment these to hear without envelope effects
//envs[i]->attack(0.0);
//envs[i]->hold(0.0);
//envs[i]->decay(0.0);
//envs[i]->release(0.0);
}

Serial.println("setup done");
// Initialize processor and memory measurements
@@ -115,10 +185,6 @@ void loop()
// Change this to if(1) for measurement output every 5 seconds
if(1) {
/*
For PlaySynthMusic this produces:
Proc = 20 (21), Mem = 2 (8)
*/
if(millis() - last_time >= 5000) {
Serial.print("Proc = ");
Serial.print(AudioProcessorUsage());
@@ -134,18 +200,19 @@ if(1) {
}

// Volume control
// uncomment if you have a volume pot soldered to your audio shield
/*
int n = analogRead(15);
if (n != volume) {
volume = n;
codec.volume((float)n / 1023);
}
*/
// read the next note from the table
c = *sp++;
opcode = c & 0xf0;
// was 0x0f but I'm only handling 8 channels
// This will map Ch 8->Ch 0, Ch 9->Ch 1, etc.
chan = c & 0x07;
opcode = c & 0xF0;
chan = c & 0x0F;

if(c < 0x80) {
// Delay
@@ -154,6 +221,10 @@ if(1) {
return;
}
if(*sp == CMD_STOP) {
for (chan=0; chan<10; chan++) {
envs[chan]->noteOff();
waves[chan]->amplitude(0);
}
Serial.println("DONE");
while(1);
}
@@ -162,15 +233,17 @@ if(1) {
// Stop the note on 'chan'
if(opcode == CMD_STOPNOTE) {
waves[chan]->amplitude(0);
envs[chan]->noteOff();
return;
}
// Play the note on 'chan' - divide the frequency by two because the
// table of frequencies has been doubled.
// Play the note on 'chan'
if(opcode == CMD_PLAYNOTE) {
waves[chan]->begin(AMPLITUDE,tune_frequencies2_PGM[*sp++],
AudioNoInterrupts();
waves[chan]->begin(AMPLITUDE, tune_frequencies2_PGM[*sp++],
wave_type[chan]);
envs[chan]->noteOn();
AudioInterrupts();
return;
}


Loading…
Cancel
Save