背景
電子部品販売代理店のマウザーエレクトロニクス様から、8/31の初音ミク誕生祭に関連した電子工作を作っていただけないか、と提案を受けて作りました。マウザー様のサイト内のForteという部品表作成ツールを使って部品を選定し、ご提供いただいたものを一部使用しています。
- キャパシタ 100uF
- オシレータ 4MHz
- Arduino Pro Mini
ちなみに音源ICとして使っているYMZ294はマウザー様のサイトでは見つからなかった(古いICだからね)ので、秋月電子から購入しています。(Aliexpressでも買えるけど、よくわからない互換品が届くゾ!)
https://akizukidenshi.com/catalog/g/gI-12141/
動画
YouTube
ニコニコ動画
解説
ヤマハ音源ICのYMZ294を使って音を鳴らしています。これは比較的シンプルなICで、ファミコンの様な音を3和音まで鳴らすことができ、本基板ではこのICを2つ使って6和音まで鳴らせるようにしています。このICの出力はアナログではなく、デジタル的な矩形波の周期を変えているようで、3和音+3和音の合成もそのまま出力をつなげれば良い…らしい。
アナログ回路は苦手なのだが、今回は割と素直に鳴ってくれた。可変抵抗(VR_Thin)で音量を変えて、スピーカーにはHT82V739というアンプICを使っている。このアンプはマイコンからON/OFFを切り替えられる他、手動のスイッチ(ジャンパ:JP2)でもON/OFFを切り替えられるようにしている。これはスピーカーを鳴らしたくない時にOFFにできる機能である(イヤホン経由では聞くことができる)。もう一つの特徴として、YMZ294は4MHzのオシレーターという一定の周波数を出す部品が必要なのだけど、秋月電子とかでは売っていない。もちろんマウザー様では買える(ヨイショ)のだが、Arduino Pro Miniが8MHz/16MHzで動作するので、オシレーターが無くてもこの周波数をそのままYMZ294に送れば良いじゃんということで、D9ピン信号を送れるようになっている(SJ1をショートさせる)。この回路で失敗したのはArduino Pro Mini のSPI出力(DP10,11,12,13)をYMZ294の制御用に使ってしまったことである。SPI出力をSDカードの読み込み用に使えば、長時間の再生にも対応できたのだが…。元々他のデバイスからI2C入力を送って演奏しようとしていたことからの失敗。
Arduinoコード
Arduinoコード本体
track0は「メルト」のMIDIコードである。また、上の配線と異なり、AD_PINとA0をつなぐところが実際はA3とつないでしまったため、そこをコード内では修正している。(どうやら使用したArduino Pro Miniのライブラリと実際のものが異なっていたようである)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
#include <YMZ294Kai.h> //https://wp.hrmux.com/?page_id=991 //YMZ294Kai.hはCSとWRを別のピンで指定するライブラリ。複数のYMZ294を繋ぐ用 #include <avr/pgmspace.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(A2, A1); // RX, TX // Output Pins const byte WR_PIN = 13; const byte CS1_PIN = 11; const byte CS2_PIN = 10; const byte AD_PIN = A3; const byte RESET_PIN = 8; const byte CLKOUT_PIN = 9; const byte AmpEn_PIN = 12; YMZ294 ymz1(WR_PIN, CS1_PIN, AD_PIN, RESET_PIN); YMZ294 ymz2(WR_PIN, CS2_PIN, AD_PIN, RESET_PIN); //MIDI Setting const byte ch = 6; uint32_t tick; uint32_t readPos; byte tones[ch]; byte volume = 10;//MAX15 const uint16_t resolution = 480; const uint32_t tempo = 375000; const char track0[7487] PROGMEM = {0x81,0x70,0x90,0x4e,0x64,0x00,0x90,0x3e,0x64,0x83,0x00,0x80,0x3e,0x00,0x60,0x90,0x39,0x64,0x60,0x80,0x4e,0x00,0x81,0x10,0x90,0x4c,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x4c,0x00,0x30,0x90,0x4a,0x64,0x00,0x90,0x40,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x40,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x39,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x39,0x00,0x60,0x90,0x4c,0x64,0x00,0x90,0x3d,0x64,0x83,0x00,0x80,0x4c,0x00,0x00,0x80,0x3d,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x39,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x39,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x3e,0x64,0x83,0x00,0x80,0x3e,0x00,0x60,0x90,0x39,0x64,0x82,0x20,0x80,0x4a,0x00,0x60,0x80,0x39,0x00,0x60,0x90,0x4e,0x64,0x00,0x90,0x3e,0x64,0x83,0x00,0x80,0x3e,0x00,0x60,0x90,0x39,0x64,0x60,0x80,0x4e,0x00,0x81,0x10,0x90,0x4c,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x4c,0x00,0x30,0x90,0x4a,0x64,0x00,0x90,0x40,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x40,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x39,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x39,0x00,0x60,0x90,0x4c,0x64,0x00,0x90,0x3d,0x64,0x83,0x00,0x80,0x4c,0x00,0x00,0x80,0x3d,0x00,0x60,0x90,0x51,0x64,0x00,0x90,0x34,0x64,0x83,0x00,0x80,0x51,0x00,0x00,0x80,0x34,0x00,0x60,0x90,0x4e,0x64,0x00,0x90,0x32,0x64,0x83,0x00,0x80,0x32,0x00,0x60,0x90,0x39,0x64,0x82,0x20,0x80,0x4e,0x00,0x60,0x80,0x39,0x00,0x60,0x90,0x4e,0x64,0x00,0x90,0x3e,0x64,0x83,0x00,0x80,0x3e,0x00,0x60,0x90,0x39,0x64,0x60,0x80,0x4e,0x00,0x81,0x10,0x90,0x4c,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x4c,0x00,0x30,0x90,0x4a,0x64,0x00,0x90,0x40,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x40,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x39,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x39,0x00,0x60,0x90,0x4c,0x64,0x00,0x90,0x3d,0x64,0x83,0x00,0x80,0x4c,0x00,0x00,0x80,0x3d,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x39,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x39,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x3e,0x64,0x83,0x00,0x80,0x4a,0x00,0x60,0x90,0x4a,0x64,0x81,0x40,0x80,0x4a,0x00,0x30,0x90,0x4c,0x64,0x30,0x80,0x3e,0x00,0x81,0x10,0x80,0x4c,0x00,0x30,0x90,0x4d,0x64,0x00,0x90,0x3d,0x64,0x83,0x00,0x80,0x3d,0x00,0x60,0x90,0x32,0x64,0x83,0x00,0x80,0x32,0x00,0x60,0x90,0x37,0x64,0x83,0x00,0x80,0x37,0x00,0x60,0x90,0x39,0x64,0x60,0x80,0x4d,0x00,0x82,0x20,0x80,0x39,0x00,0x60,0x90,0x4f,0x64,0x00,0x90,0x30,0x64,0x00,0x90,0x37,0x64,0x8c,0x00,0x80,0x4f,0x00,0x00,0x80,0x30,0x00,0x00,0x80,0x37,0x00,0x83,0x00,0x90,0x4e,0x64,0x00,0x90,0x2a,0x64,0x00,0x90,0x32,0x64,0x00,0x90,0x2d,0x64,0x84,0x40,0x80,0x4e,0x00,0x81,0x10,0x90,0x4c,0x64,0x30,0x80,0x2a,0x00,0x00,0x80,0x32,0x00,0x00,0x80,0x2d,0x00,0x81,0x10,0x80,0x4c,0x00,0x30,0x90,0x4a,0x64,0x00,0x90,0x2b,0x64,0x00,0x90,0x2f,0x64,0x00,0x90,0x32,0x64,0x83,0x00,0x80,0x4a,0x00,0x60,0x90,0x4a,0x64,0x82,0x20,0x80,0x2b,0x00,0x00,0x80,0x2f,0x00,0x00,0x80,0x32,0x00,0x60,0x80,0x4a,0x00,0x60,0x90,0x4c,0x64,0x00,0x90,0x2d,0x64,0x00,0x90,0x31,0x64,0x00,0x90,0x34,0x64,0x83,0x00,0x80,0x4c,0x00,0x60,0x90,0x4a,0x64,0x82,0x20,0x80,0x2d,0x00,0x00,0x80,0x31,0x00,0x00,0x80,0x34,0x00,0x60,0x80,0x4a,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x2f,0x64,0x00,0x90,0x36,0x64,0x00,0x90,0x32,0x64,0x86,0x00,0x80,0x4a,0x00,0x00,0x80,0x2f,0x00,0x00,0x80,0x36,0x00,0x00,0x80,0x32,0x00,0x81,0x40,0x90,0x4e,0x64,0x00,0x90,0x2a,0x64,0x00,0x90,0x32,0x64,0x00,0x90,0x2d,0x64,0x84,0x40,0x80,0x4e,0x00,0x81,0x10,0x90,0x4c,0x64,0x30,0x80,0x2a,0x00,0x00,0x80,0x32,0x00,0x00,0x80,0x2d,0x00,0x81,0x10,0x80,0x4c,0x00,0x30,0x90,0x4a,0x64,0x00,0x90,0x2b,0x64,0x00,0x90,0x2f,0x64,0x00,0x90,0x32,0x64,0x83,0x00,0x80,0x4a,0x00,0x60,0x90,0x4a,0x64,0x82,0x20,0x80,0x2b,0x00,0x00,0x80,0x2f,0x00,0x00,0x80,0x32,0x00,0x60,0x80,0x4a,0x00,0x60,0x90,0x4c,0x64,0x00,0x90,0x2d,0x64,0x00,0x90,0x31,0x64,0x00,0x90,0x34,0x64,0x83,0x00,0x80,0x4c,0x00,0x60,0x90,0x51,0x64,0x82,0x20,0x80,0x2d,0x00,0x00,0x80,0x31,0x00,0x00,0x80,0x34,0x00,0x60,0x80,0x51,0x00,0x60,0x90,0x4e,0x64,0x00,0x90,0x32,0x64,0x00,0x90,0x36,0x64,0x00,0x90,0x39,0x64,0x86,0x00,0x80,0x4e,0x00,0x00,0x80,0x32,0x00,0x00,0x80,0x36,0x00,0x00,0x80,0x39,0x00,0x81,0x40,0x90,0x4e,0x64,0x00,0x90,0x26,0x64,0x81,0x40,0x80,0x26,0x00,0x30,0x90,0x28,0x64,0x81,0x40,0x80,0x28,0x00,0x30,0x90,0x2a,0x64,0x60,0x80,0x4e,0x00,0x60,0x80,0x2a,0x00,0x30,0x90,0x4c,0x64,0x00,0x90,0x2b,0x64,0x81,0x40,0x80,0x4c,0x00,0x00,0x80,0x2b,0x00,0x30,0x90,0x4a,0x64,0x00,0x90,0x2d,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x2d,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x2b,0x64,0x81,0x40,0x80,0x2b,0x00,0x30,0x90,0x2d,0x64,0x81,0x10,0x80,0x4a,0x00,0x30,0x80,0x2d,0x00,0x30,0x90,0x4c,0x64,0x00,0x90,0x2f,0x64,0x83,0x00,0x80,0x4c,0x00,0x00,0x80,0x2f,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x31,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x31,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x32,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x32,0x00,0x60,0x90,0x4a,0x64,0x81,0x40,0x80,0x4a,0x00,0x30,0x90,0x4c,0x64,0x81,0x40,0x80,0x4c,0x00,0x30,0x90,0x4d,0x64,0x00,0x90,0x22,0x64,0x81,0x40,0x80,0x22,0x00,0x30,0x90,0x2e,0x64,0x81,0x40,0x80,0x2e,0x00,0x30,0x90,0x22,0x64,0x81,0x40,0x80,0x22,0x00,0x30,0x90,0x2e,0x64,0x81,0x40,0x80,0x2e,0x00,0x30,0x90,0x22,0x64,0x81,0x40,0x80,0x22,0x00,0x30,0x90,0x2e,0x64,0x81,0x40,0x80,0x2e,0x00,0x30,0x90,0x22,0x64,0x60,0x80,0x4d,0x00,0x60,0x80,0x22,0x00,0x30,0x90,0x2e,0x64,0x81,0x40,0x80,0x2e,0x00,0x30,0x90,0x4f,0x64,0x00,0x90,0x24,0x64,0x81,0x40,0x80,0x24,0x00,0x30,0x90,0x30,0x64,0x81,0x40,0x80,0x30,0x00,0x30,0x90,0x24,0x64,0x81,0x40,0x80,0x24,0x00,0x30,0x90,0x30,0x64,0x81,0x40,0x80,0x30,0x00,0x30,0x90,0x39,0x64,0x3c,0x90,0x37,0x64,0x3c,0x80,0x39,0x00,0x00,0x90,0x35,0x64,0x3c,0x80,0x37,0x00,0x00,0x90,0x34,0x64,0x3c,0x80,0x35,0x00,0x00,0x90,0x32,0x64,0x3c,0x80,0x34,0x00,0x00,0x90,0x30,0x64,0x3c,0x80,0x32,0x00,0x00,0x90,0x2f,0x64,0x3c,0x80,0x30,0x00,0x00,0x90,0x2d,0x64,0x3c,0x80,0x2f,0x00,0x00,0x90,0x2b,0x64,0x3c,0x80,0x2d,0x00,0x00,0x90,0x29,0x64,0x24,0x80,0x4f,0x00,0x18,0x80,0x2b,0x00,0x00,0x90,0x28,0x64,0x3c,0x80,0x29,0x00,0x00,0x90,0x26,0x64,0x3c,0x80,0x28,0x00,0x3c,0x80,0x26,0x00,0x81,0x34,0x90,0x1a,0x64,0x83,0x00,0x80,0x1a,0x00,0x60,0x90,0x40,0x64,0x00,0x90,0x1a,0x64,0x83,0x00,0x80,0x40,0x00,0x00,0x80,0x1a,0x00,0x60,0x90,0x40,0x64,0x00,0x90,0x1a,0x64,0x83,0x00,0x80,0x40,0x00,0x00,0x80,0x1a,0x00,0x60,0x90,0x3e,0x64,0x00,0x90,0x1a,0x64,0x83,0x00,0x80,0x3e,0x00,0x00,0x80,0x1a,0x00,0x60,0x90,0x40,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x40,0x00,0x30,0x90,0x3e,0x64,0x81,0x10,0x80,0x1a,0x00,0x30,0x80,0x3e,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x1a,0x64,0x83,0x00,0x80,0x1a,0x00,0x60,0x90,0x1a,0x64,0x82,0x20,0x80,0x39,0x00,0x60,0x80,0x1a,0x00,0x60,0x90,0x39,0x64,0x00,0x90,0x1a,0x64,0x83,0x00,0x80,0x39,0x00,0x00,0x80,0x1a,0x00,0x60,0x90,0x39,0x64,0x00,0x90,0x1a,0x64,0x83,0x00,0x80,0x39,0x00,0x00,0x80,0x1a,0x00,0x60,0x90,0x3e,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x3e,0x00,0x30,0x90,0x40,0x64,0x81,0x10,0x80,0x1a,0x00,0x30,0x80,0x40,0x00,0x30,0x90,0x40,0x64,0x00,0x90,0x1a,0x64,0x83,0x00,0x80,0x40,0x00,0x00,0x80,0x1a,0x00,0x60,0x90,0x3e,0x64,0x00,0x90,0x1a,0x64,0x83,0x00,0x80,0x3e,0x00,0x00,0x80,0x1a,0x00,0x60,0x90,0x40,0x64,0x00,0x90,0x18,0x64,0x83,0x00,0x80,0x40,0x00,0x00,0x80,0x18,0x00,0x60,0x90,0x42,0x64,0x00,0x90,0x18,0x64,0x83,0x00,0x80,0x42,0x00,0x00,0x80,0x18,0x00,0x60,0x90,0x43,0x64,0x00,0x90,0x18,0x64,0x83,0x00,0x80,0x43,0x00,0x00,0x80,0x18,0x00,0x60,0x90,0x40,0x64,0x00,0x90,0x18,0x64,0x83,0x00,0x80,0x40,0x00,0x00,0x80,0x18,0x00,0x60,0x90,0x42,0x64,0x00,0x90,0x3e,0x64,0x00,0x90,0x22,0x64,0x81,0x40,0x80,0x22,0x00,0x30,0x90,0x22,0x64,0x81,0x40,0x80,0x22,0x00,0x30,0x90,0x22,0x64,0x81,0x40,0x80,0x22,0x00,0x30,0x90,0x22,0x64,0x30,0x80,0x42,0x00,0x00,0x80,0x3e,0x00,0x81,0x10,0x80,0x22,0x00,0x30,0x90,0x40,0x64,0x00,0x90,0x3c,0x64,0x00,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x30,0x80,0x40,0x00,0x00,0x80,0x3c,0x00,0x81,0x10,0x80,0x21,0x00,0x30,0x90,0x3b,0x64,0x00,0x90,0x3e,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x30,0x80,0x3b,0x00,0x00,0x80,0x3e,0x00,0x81,0x10,0x80,0x1f,0x00,0x30,0x90,0x3d,0x64,0x00,0x90,0x39,0x64,0x00,0x90,0x1d,0x64,0x81,0x40,0x80,0x1d,0x00,0x30,0x90,0x1d,0x64,0x81,0x40,0x80,0x1d,0x00,0x30,0x90,0x1d,0x64,0x60,0x80,0x3d,0x00,0x00,0x80,0x39,0x00,0x60,0x80,0x1d,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x1d,0x64,0x81,0x40,0x80,0x39,0x00,0x00,0x80,0x1d,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x60,0x80,0x39,0x00,0x60,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x21,0x64,0x85,0x50,0x90,0x39,0x64,0x81,0x40,0x80,0x39,0x00,0x30,0x90,0x40,0x64,0x81,0x40,0x80,0x40,0x00,0x30,0x90,0x45,0x64,0x81,0x40,0x80,0x45,0x00,0x81,0x10,0x80,0x21,0x00,0x83,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x1a,0x00,0x30,0x90,0x26,0x64,0x81,0x40,0x80,0x26,0x00,0x30,0x90,0x34,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x1a,0x00,0x30,0x90,0x26,0x64,0x81,0x10,0x80,0x34,0x00,0x30,0x80,0x26,0x00,0x30,0x90,0x34,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x1a,0x00,0x30,0x90,0x26,0x64,0x81,0x10,0x80,0x34,0x00,0x30,0x80,0x26,0x00,0x30,0x90,0x36,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x1a,0x00,0x30,0x90,0x26,0x64,0x81,0x10,0x80,0x36,0x00,0x30,0x80,0x26,0x00,0x30,0x90,0x37,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x37,0x00,0x00,0x80,0x1a,0x00,0x30,0x90,0x36,0x64,0x00,0x90,0x26,0x64,0x81,0x40,0x80,0x36,0x00,0x00,0x80,0x26,0x00,0x30,0x90,0x32,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x1a,0x00,0x30,0x90,0x26,0x64,0x81,0x40,0x80,0x26,0x00,0x30,0x90,0x1a,0x64,0x81,0x40,0x80,0x1a,0x00,0x30,0x90,0x26,0x64,0x30,0x80,0x32,0x00,0x81,0x10,0x80,0x26,0x00,0x30,0x90,0x1a,0x64,0x81,0x40,0x80,0x1a,0x00,0x30,0x90,0x2d,0x64,0x00,0x90,0x26,0x64,0x81,0x40,0x80,0x2d,0x00,0x00,0x80,0x26,0x00,0x30,0x90,0x2d,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x1a,0x00,0x30,0x90,0x26,0x64,0x81,0x10,0x80,0x2d,0x00,0x30,0x80,0x26,0x00,0x30,0x90,0x32,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x32,0x00,0x00,0x80,0x1a,0x00,0x30,0x90,0x34,0x64,0x00,0x90,0x26,0x64,0x81,0x40,0x80,0x34,0x00,0x00,0x80,0x26,0x00,0x30,0x90,0x34,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x1a,0x00,0x30,0x90,0x26,0x64,0x81,0x10,0x80,0x34,0x00,0x30,0x80,0x26,0x00,0x30,0x90,0x32,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x1a,0x00,0x30,0x90,0x26,0x64,0x81,0x10,0x80,0x32,0x00,0x30,0x80,0x26,0x00,0x30,0x90,0x34,0x64,0x00,0x90,0x19,0x64,0x81,0x40,0x80,0x19,0x00,0x30,0x90,0x25,0x64,0x81,0x10,0x80,0x34,0x00,0x30,0x80,0x25,0x00,0x30,0x90,0x36,0x64,0x00,0x90,0x19,0x64,0x81,0x40,0x80,0x19,0x00,0x30,0x90,0x25,0x64,0x81,0x10,0x80,0x36,0x00,0x30,0x80,0x25,0x00,0x30,0x90,0x37,0x64,0x00,0x90,0x19,0x64,0x81,0x40,0x80,0x19,0x00,0x30,0x90,0x25,0x64,0x81,0x10,0x80,0x37,0x00,0x30,0x80,0x25,0x00,0x30,0x90,0x34,0x64,0x00,0x90,0x19,0x64,0x81,0x40,0x80,0x19,0x00,0x30,0x90,0x25,0x64,0x81,0x10,0x80,0x34,0x00,0x30,0x80,0x25,0x00,0x30,0x90,0x36,0x64,0x00,0x90,0x32,0x64,0x00,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x2a,0x64,0x81,0x40,0x80,0x2a,0x00,0x30,0x90,0x2f,0x64,0x81,0x40,0x80,0x2f,0x00,0x30,0x90,0x2a,0x64,0x30,0x80,0x36,0x00,0x00,0x80,0x32,0x00,0x81,0x10,0x80,0x2a,0x00,0x30,0x90,0x34,0x64,0x00,0x90,0x31,0x64,0x00,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x28,0x64,0x81,0x40,0x80,0x28,0x00,0x30,0x90,0x2d,0x64,0x81,0x40,0x80,0x2d,0x00,0x30,0x90,0x28,0x64,0x30,0x80,0x34,0x00,0x00,0x80,0x31,0x00,0x81,0x10,0x80,0x28,0x00,0x30,0x90,0x2f,0x64,0x00,0x90,0x32,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x26,0x64,0x81,0x40,0x80,0x26,0x00,0x30,0x90,0x2b,0x64,0x81,0x40,0x80,0x2b,0x00,0x30,0x90,0x26,0x64,0x30,0x80,0x2f,0x00,0x00,0x80,0x32,0x00,0x81,0x10,0x80,0x26,0x00,0x30,0x90,0x31,0x64,0x00,0x90,0x2d,0x64,0x00,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x25,0x64,0x81,0x40,0x80,0x25,0x00,0x30,0x90,0x2a,0x64,0x60,0x80,0x31,0x00,0x00,0x80,0x2d,0x00,0x60,0x80,0x2a,0x00,0x30,0x90,0x2d,0x64,0x00,0x90,0x25,0x64,0x81,0x40,0x80,0x2d,0x00,0x00,0x80,0x25,0x00,0x30,0x90,0x2d,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x26,0x64,0x81,0x40,0x80,0x26,0x00,0x30,0x90,0x2b,0x64,0x81,0x40,0x80,0x2b,0x00,0x30,0x90,0x2f,0x64,0x83,0x00,0x80,0x2f,0x00,0x60,0x90,0x32,0x64,0x81,0x40,0x80,0x32,0x00,0x30,0x90,0x37,0x64,0x60,0x80,0x2d,0x00,0x60,0x80,0x37,0x00,0x30,0x90,0x3b,0x64,0x81,0x40,0x80,0x3b,0x00,0x30,0x90,0x21,0x64,0x00,0x90,0x2d,0x64,0x86,0x00,0x80,0x21,0x00,0x00,0x80,0x2d,0x00,0x81,0x40,0x90,0x22,0x64,0x00,0x90,0x2e,0x64,0x83,0x60,0x90,0x31,0x64,0x82,0x20,0x80,0x22,0x00,0x00,0x80,0x2e,0x00,0x60,0x80,0x31,0x00,0x60,0x90,0x32,0x64,0x00,0x90,0x17,0x64,0x81,0x40,0x80,0x17,0x00,0x30,0x90,0x1e,0x64,0x81,0x10,0x80,0x32,0x00,0x30,0x80,0x1e,0x00,0x30,0x90,0x2d,0x64,0x00,0x90,0x23,0x64,0x83,0x00,0x80,0x2d,0x00,0x00,0x80,0x23,0x00,0x60,0x90,0x34,0x64,0x00,0x90,0x19,0x64,0x81,0x40,0x80,0x19,0x00,0x30,0x90,0x1f,0x64,0x81,0x10,0x80,0x34,0x00,0x30,0x80,0x1f,0x00,0x30,0x90,0x2d,0x64,0x00,0x90,0x25,0x64,0x83,0x00,0x80,0x2d,0x00,0x00,0x80,0x25,0x00,0x60,0x90,0x36,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x1a,0x00,0x30,0x90,0x21,0x64,0x81,0x10,0x80,0x36,0x00,0x30,0x80,0x21,0x00,0x30,0x90,0x34,0x64,0x00,0x90,0x26,0x64,0x83,0x00,0x80,0x34,0x00,0x00,0x80,0x26,0x00,0x60,0x90,0x37,0x64,0x00,0x90,0x1f,0x64,0x83,0x00,0x80,0x37,0x00,0x60,0x90,0x37,0x64,0x81,0x40,0x80,0x37,0x00,0x30,0x90,0x36,0x64,0x30,0x80,0x1f,0x00,0x81,0x10,0x80,0x36,0x00,0x30,0x90,0x36,0x64,0x00,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x10,0x80,0x36,0x00,0x30,0x80,0x21,0x00,0x30,0x90,0x34,0x64,0x81,0x70,0x90,0x21,0x64,0x81,0x10,0x80,0x34,0x00,0x30,0x80,0x21,0x00,0x30,0x90,0x34,0x64,0x81,0x70,0x90,0x21,0x64,0x81,0x10,0x80,0x34,0x00,0x30,0x80,0x21,0x00,0x30,0x90,0x36,0x64,0x81,0x70,0x90,0x21,0x64,0x81,0x10,0x80,0x36,0x00,0x30,0x80,0x21,0x00,0x30,0x90,0x36,0x64,0x00,0x90,0x21,0x64,0x84,0x40,0x80,0x36,0x00,0x81,0x10,0x90,0x34,0x64,0x81,0x40,0x80,0x34,0x00,0x30,0x90,0x34,0x64,0x83,0x00,0x80,0x34,0x00,0x60,0x90,0x2d,0x64,0x60,0x80,0x21,0x00,0x60,0x80,0x2d,0x00,0x30,0x90,0x2d,0x64,0x81,0x40,0x80,0x2d,0x00,0x30,0x90,0x32,0x64,0x00,0x90,0x1e,0x64,0x00,0x90,0x2a,0x64,0x83,0x00,0x80,0x32,0x00,0x60,0x90,0x31,0x64,0x82,0x20,0x80,0x1e,0x00,0x00,0x80,0x2a,0x00,0x60,0x80,0x31,0x00,0x60,0x90,0x34,0x64,0x00,0x90,0x21,0x64,0x00,0x90,0x2d,0x64,0x83,0x00,0x80,0x34,0x00,0x60,0x90,0x32,0x64,0x82,0x20,0x80,0x21,0x00,0x00,0x80,0x2d,0x00,0x60,0x80,0x32,0x00,0x60,0x90,0x37,0x64,0x00,0x90,0x22,0x64,0x00,0x90,0x2e,0x64,0x86,0x00,0x80,0x2e,0x00,0x00,0x80,0x22,0x00,0x81,0x40,0x90,0x23,0x64,0x00,0x90,0x2f,0x64,0x81,0x40,0x80,0x37,0x00,0x82,0x20,0x90,0x36,0x64,0x81,0x40,0x80,0x36,0x00,0x30,0x90,0x34,0x64,0x30,0x80,0x23,0x00,0x00,0x80,0x2f,0x00,0x81,0x10,0x80,0x34,0x00,0x30,0x90,0x32,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x2b,0x64,0x81,0x40,0x80,0x2b,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x2b,0x64,0x81,0x40,0x80,0x2b,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x2b,0x64,0x81,0x40,0x80,0x2b,0x00,0x30,0x90,0x1f,0x64,0x60,0x80,0x32,0x00,0x60,0x80,0x1f,0x00,0x30,0x90,0x2b,0x64,0x81,0x40,0x80,0x2b,0x00,0x30,0x90,0x32,0x64,0x00,0x90,0x37,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x2b,0x64,0x81,0x10,0x80,0x32,0x00,0x00,0x80,0x37,0x00,0x30,0x80,0x2b,0x00,0x30,0x90,0x32,0x64,0x00,0x90,0x36,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x2b,0x64,0x81,0x10,0x80,0x32,0x00,0x00,0x80,0x36,0x00,0x30,0x80,0x2b,0x00,0x30,0x90,0x32,0x64,0x00,0x90,0x37,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x2b,0x64,0x81,0x10,0x80,0x32,0x00,0x00,0x80,0x37,0x00,0x30,0x80,0x2b,0x00,0x30,0x90,0x32,0x64,0x00,0x90,0x39,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x2b,0x64,0x81,0x10,0x80,0x32,0x00,0x00,0x80,0x39,0x00,0x30,0x80,0x2b,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x39,0x64,0x00,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x30,0x80,0x3e,0x00,0x00,0x80,0x39,0x00,0x81,0x10,0x80,0x21,0x00,0x30,0x90,0x3d,0x64,0x00,0x90,0x39,0x64,0x00,0x90,0x2d,0x64,0x81,0x40,0x80,0x2d,0x00,0x30,0x90,0x2d,0x64,0x81,0x40,0x80,0x2d,0x00,0x30,0x90,0x2d,0x64,0x81,0x40,0x80,0x2d,0x00,0x30,0x90,0x2d,0x64,0x30,0x80,0x3d,0x00,0x00,0x80,0x39,0x00,0x81,0x10,0x80,0x2d,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x39,0x64,0x00,0x90,0x2d,0x64,0x81,0x40,0x80,0x2d,0x00,0x81,0x40,0x80,0x3e,0x00,0x00,0x80,0x39,0x00,0x60,0x90,0x3d,0x64,0x83,0x00,0x80,0x3d,0x00,0x60,0x90,0x3e,0x64,0x83,0x00,0x80,0x3e,0x00,0x60,0x90,0x40,0x64,0x83,0x00,0x80,0x40,0x00,0x60,0x90,0x42,0x64,0x00,0x90,0x3b,0x64,0x00,0x90,0x3e,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x26,0x64,0x81,0x40,0x80,0x26,0x00,0x30,0x90,0x2b,0x64,0x60,0x80,0x42,0x00,0x00,0x80,0x3b,0x00,0x00,0x80,0x3e,0x00,0x60,0x80,0x2b,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x2f,0x64,0x81,0x40,0x80,0x3e,0x00,0x30,0x90,0x3e,0x64,0x81,0x10,0x80,0x2f,0x00,0x30,0x80,0x3e,0x00,0x30,0x90,0x32,0x64,0x81,0x40,0x80,0x32,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x31,0x64,0x81,0x40,0x80,0x31,0x00,0x30,0x90,0x2f,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x2f,0x00,0x30,0x90,0x43,0x64,0x00,0x90,0x37,0x64,0x83,0x00,0x80,0x43,0x00,0x00,0x80,0x37,0x00,0x60,0x90,0x42,0x64,0x00,0x90,0x36,0x64,0x83,0x00,0x80,0x42,0x00,0x00,0x80,0x36,0x00,0x60,0x90,0x40,0x64,0x00,0x90,0x34,0x64,0x83,0x00,0x80,0x40,0x00,0x00,0x80,0x34,0x00,0x60,0x90,0x3e,0x64,0x00,0x90,0x32,0x64,0x83,0x00,0x80,0x3e,0x00,0x00,0x80,0x32,0x00,0x60,0x90,0x40,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x1a,0x00,0x30,0x90,0x21,0x64,0x81,0x10,0x80,0x40,0x00,0x30,0x80,0x21,0x00,0x30,0x90,0x42,0x64,0x00,0x90,0x26,0x64,0x81,0x40,0x80,0x42,0x00,0x00,0x80,0x26,0x00,0x30,0x90,0x42,0x64,0x00,0x90,0x2a,0x64,0x83,0x00,0x80,0x2a,0x00,0x60,0x90,0x2d,0x64,0x81,0x40,0x80,0x2d,0x00,0x30,0x90,0x32,0x64,0x81,0x40,0x80,0x32,0x00,0x30,0x90,0x36,0x64,0x30,0x80,0x42,0x00,0x81,0x10,0x80,0x36,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x25,0x64,0x81,0x40,0x80,0x25,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x28,0x64,0x81,0x40,0x80,0x28,0x00,0x30,0x90,0x2d,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x2d,0x00,0x30,0x90,0x3e,0x64,0x83,0x00,0x80,0x3e,0x00,0x60,0x90,0x3d,0x64,0x83,0x00,0x80,0x3d,0x00,0x60,0x90,0x3e,0x64,0x00,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x2a,0x64,0x81,0x10,0x80,0x3e,0x00,0x30,0x80,0x2a,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x2f,0x64,0x81,0x40,0x80,0x39,0x00,0x00,0x80,0x2f,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x2a,0x64,0x81,0x40,0x80,0x39,0x00,0x00,0x80,0x2a,0x00,0x30,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x2a,0x64,0x81,0x40,0x80,0x2a,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x2f,0x64,0x81,0x40,0x80,0x2f,0x00,0x30,0x90,0x2a,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x2a,0x00,0x30,0x90,0x40,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x26,0x64,0x81,0x10,0x80,0x40,0x00,0x30,0x80,0x26,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x2b,0x64,0x81,0x40,0x80,0x3e,0x00,0x00,0x80,0x2b,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x26,0x64,0x81,0x40,0x80,0x3e,0x00,0x00,0x80,0x26,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x26,0x64,0x81,0x40,0x80,0x26,0x00,0x30,0x90,0x3d,0x64,0x00,0x90,0x2b,0x64,0x81,0x40,0x80,0x2b,0x00,0x30,0x90,0x26,0x64,0x81,0x10,0x80,0x3d,0x00,0x30,0x80,0x26,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x25,0x64,0x81,0x40,0x80,0x25,0x00,0x30,0x90,0x2a,0x64,0x81,0x40,0x80,0x2a,0x00,0x30,0x90,0x2d,0x64,0x30,0x80,0x3e,0x00,0x81,0x40,0x90,0x40,0x64,0x81,0x10,0x80,0x2d,0x00,0x60,0x90,0x31,0x64,0x81,0x40,0x80,0x31,0x00,0x30,0x90,0x34,0x64,0x82,0x20,0x80,0x40,0x00,0x60,0x80,0x34,0x00,0x60,0x90,0x3d,0x64,0x00,0x90,0x39,0x64,0x81,0x40,0x80,0x39,0x00,0x81,0x40,0x80,0x3d,0x00,0x60,0x90,0x3d,0x64,0x00,0x90,0x31,0x64,0x83,0x00,0x80,0x3d,0x00,0x00,0x80,0x31,0x00,0x60,0x90,0x3e,0x64,0x00,0x90,0x32,0x64,0x83,0x00,0x80,0x3e,0x00,0x00,0x80,0x32,0x00,0x60,0x90,0x40,0x64,0x00,0x90,0x34,0x64,0x83,0x00,0x80,0x40,0x00,0x00,0x80,0x34,0x00,0x60,0x90,0x42,0x64,0x00,0x90,0x3b,0x64,0x00,0x90,0x3e,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x26,0x64,0x81,0x40,0x80,0x26,0x00,0x30,0x90,0x2b,0x64,0x60,0x80,0x42,0x00,0x00,0x80,0x3b,0x00,0x00,0x80,0x3e,0x00,0x60,0x80,0x2b,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x2f,0x64,0x81,0x40,0x80,0x3e,0x00,0x30,0x90,0x3e,0x64,0x81,0x10,0x80,0x2f,0x00,0x30,0x80,0x3e,0x00,0x30,0x90,0x32,0x64,0x81,0x40,0x80,0x32,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x31,0x64,0x81,0x40,0x80,0x31,0x00,0x30,0x90,0x2f,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x2f,0x00,0x30,0x90,0x43,0x64,0x00,0x90,0x37,0x64,0x83,0x00,0x80,0x43,0x00,0x00,0x80,0x37,0x00,0x60,0x90,0x42,0x64,0x00,0x90,0x36,0x64,0x83,0x00,0x80,0x42,0x00,0x00,0x80,0x36,0x00,0x60,0x90,0x40,0x64,0x00,0x90,0x34,0x64,0x83,0x00,0x80,0x40,0x00,0x00,0x80,0x34,0x00,0x60,0x90,0x3e,0x64,0x00,0x90,0x32,0x64,0x83,0x00,0x80,0x3e,0x00,0x00,0x80,0x32,0x00,0x60,0x90,0x40,0x64,0x00,0x90,0x1a,0x64,0x81,0x40,0x80,0x1a,0x00,0x30,0x90,0x21,0x64,0x81,0x10,0x80,0x40,0x00,0x30,0x80,0x21,0x00,0x30,0x90,0x40,0x64,0x00,0x90,0x26,0x64,0x81,0x40,0x80,0x40,0x00,0x00,0x80,0x26,0x00,0x30,0x90,0x40,0x64,0x00,0x90,0x2a,0x64,0x83,0x00,0x80,0x2a,0x00,0x60,0x90,0x2d,0x64,0x81,0x40,0x80,0x2d,0x00,0x30,0x90,0x32,0x64,0x81,0x40,0x80,0x32,0x00,0x30,0x80,0x40,0x00,0x00,0x90,0x36,0x64,0x81,0x40,0x80,0x36,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x25,0x64,0x81,0x40,0x80,0x25,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x28,0x64,0x81,0x40,0x80,0x28,0x00,0x30,0x90,0x2d,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x2d,0x00,0x30,0x90,0x3e,0x64,0x83,0x00,0x80,0x3e,0x00,0x60,0x90,0x3d,0x64,0x83,0x00,0x80,0x3d,0x00,0x60,0x90,0x3e,0x64,0x00,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x2a,0x64,0x81,0x10,0x80,0x3e,0x00,0x30,0x80,0x2a,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x2f,0x64,0x81,0x40,0x80,0x39,0x00,0x00,0x80,0x2f,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x2a,0x64,0x81,0x40,0x80,0x39,0x00,0x00,0x80,0x2a,0x00,0x30,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x2a,0x64,0x81,0x40,0x80,0x2a,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x2f,0x64,0x81,0x40,0x80,0x2f,0x00,0x30,0x90,0x2a,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x2a,0x00,0x30,0x90,0x40,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x26,0x64,0x81,0x10,0x80,0x40,0x00,0x30,0x80,0x26,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x2b,0x64,0x81,0x40,0x80,0x3e,0x00,0x00,0x80,0x2b,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x26,0x64,0x81,0x40,0x80,0x3e,0x00,0x00,0x80,0x26,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x26,0x64,0x81,0x40,0x80,0x26,0x00,0x30,0x90,0x3d,0x64,0x00,0x90,0x2b,0x64,0x81,0x40,0x80,0x2b,0x00,0x30,0x90,0x26,0x64,0x81,0x10,0x80,0x3d,0x00,0x30,0x80,0x26,0x00,0x30,0x90,0x3d,0x64,0x00,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x25,0x64,0x81,0x40,0x80,0x25,0x00,0x30,0x90,0x2a,0x64,0x60,0x80,0x3d,0x00,0x60,0x80,0x2a,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x2d,0x64,0x83,0x00,0x80,0x2d,0x00,0x60,0x90,0x31,0x64,0x81,0x40,0x80,0x31,0x00,0x30,0x90,0x34,0x64,0x81,0x40,0x80,0x34,0x00,0x30,0x80,0x3e,0x00,0x00,0x90,0x39,0x64,0x81,0x40,0x80,0x39,0x00,0x30,0x90,0x3d,0x64,0x81,0x40,0x80,0x3d,0x00,0x89,0x60,0x90,0x3d,0x64,0x83,0x00,0x80,0x3d,0x00,0x60,0x90,0x3d,0x64,0x00,0x90,0x1c,0x64,0x81,0x40,0x80,0x1c,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x23,0x64,0x60,0x80,0x3d,0x00,0x60,0x80,0x23,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x28,0x64,0x83,0x00,0x80,0x28,0x00,0x60,0x90,0x2b,0x64,0x60,0x80,0x3e,0x00,0x60,0x80,0x2b,0x00,0x30,0x90,0x40,0x64,0x00,0x90,0x2f,0x64,0x81,0x40,0x80,0x2f,0x00,0x81,0x40,0x80,0x40,0x00,0x60,0x90,0x42,0x64,0x00,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x25,0x64,0x60,0x80,0x42,0x00,0x60,0x80,0x25,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x2a,0x64,0x83,0x00,0x80,0x2a,0x00,0x60,0x90,0x2d,0x64,0x60,0x80,0x3e,0x00,0x60,0x80,0x2d,0x00,0x30,0x90,0x3d,0x64,0x00,0x90,0x32,0x64,0x81,0x40,0x80,0x32,0x00,0x81,0x40,0x80,0x3d,0x00,0x60,0x90,0x3d,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x26,0x64,0x60,0x80,0x3d,0x00,0x60,0x80,0x26,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x2b,0x64,0x83,0x00,0x80,0x2b,0x00,0x60,0x90,0x2f,0x64,0x81,0x40,0x80,0x2f,0x00,0x30,0x90,0x32,0x64,0x81,0x40,0x80,0x32,0x00,0x30,0x80,0x3e,0x00,0x00,0x90,0x37,0x64,0x81,0x40,0x80,0x37,0x00,0x30,0x90,0x3b,0x64,0x83,0x00,0x80,0x3b,0x00,0x60,0x90,0x3e,0x64,0x83,0x00,0x80,0x3e,0x00,0x60,0x90,0x43,0x64,0x83,0x00,0x80,0x43,0x00,0x60,0x90,0x47,0x64,0x83,0x00,0x80,0x47,0x00,0x60,0x90,0x4a,0x64,0x83,0x00,0x80,0x4a,0x00,0x8c,0x00,0x90,0x21,0x64,0x83,0x00,0x80,0x21,0x00,0x82,0x50,0x90,0x32,0x64,0x81,0x40,0x80,0x32,0x00,0x30,0x90,0x37,0x64,0x81,0x40,0x80,0x37,0x00,0x30,0x90,0x36,0x64,0x81,0x40,0x80,0x36,0x00,0x30,0x90,0x32,0x64,0x83,0x00,0x80,0x32,0x00,0x82,0x50,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x10,0x80,0x3e,0x00,0x30,0x80,0x21,0x00,0x30,0x90,0x40,0x64,0x00,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x10,0x80,0x40,0x00,0x30,0x80,0x21,0x00,0x30,0x90,0x42,0x64,0x00,0x90,0x3b,0x64,0x00,0x90,0x3e,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x60,0x80,0x42,0x00,0x00,0x80,0x3b,0x00,0x00,0x80,0x3e,0x00,0x60,0x80,0x1f,0x00,0x30,0x90,0x3b,0x64,0x00,0x90,0x3e,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x60,0x80,0x3b,0x00,0x00,0x80,0x3e,0x00,0x60,0x80,0x1f,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x00,0x90,0x37,0x64,0x00,0x90,0x43,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x10,0x80,0x37,0x00,0x00,0x80,0x43,0x00,0x30,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x00,0x90,0x42,0x64,0x00,0x90,0x3b,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x21,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x60,0x80,0x42,0x00,0x00,0x80,0x3b,0x00,0x60,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x00,0x90,0x40,0x64,0x00,0x90,0x3b,0x64,0x81,0x40,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x10,0x80,0x40,0x00,0x00,0x80,0x3b,0x00,0x30,0x80,0x21,0x00,0x30,0x90,0x1e,0x64,0x00,0x90,0x36,0x64,0x00,0x90,0x39,0x64,0x00,0x90,0x3e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x30,0x80,0x36,0x00,0x00,0x80,0x39,0x00,0x00,0x80,0x3e,0x00,0x81,0x10,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x00,0x90,0x45,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x30,0x80,0x45,0x00,0x81,0x10,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x00,0x90,0x3c,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x60,0x80,0x3c,0x00,0x60,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x00,0x90,0x47,0x64,0x81,0x40,0x80,0x1e,0x00,0x00,0x80,0x47,0x00,0x30,0x90,0x1e,0x64,0x00,0x90,0x45,0x64,0x81,0x40,0x80,0x1e,0x00,0x00,0x80,0x45,0x00,0x30,0x90,0x1e,0x64,0x00,0x90,0x3e,0x64,0x81,0x40,0x80,0x1e,0x00,0x00,0x80,0x3e,0x00,0x30,0x90,0x1e,0x64,0x00,0x90,0x39,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x1e,0x00,0x30,0x90,0x40,0x64,0x00,0x90,0x3b,0x64,0x00,0x90,0x37,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x40,0x00,0x00,0x80,0x3b,0x00,0x00,0x80,0x37,0x00,0x00,0x80,0x1f,0x00,0x30,0x90,0x42,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x42,0x00,0x00,0x80,0x1f,0x00,0x30,0x90,0x42,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x42,0x00,0x00,0x80,0x1f,0x00,0x30,0x90,0x40,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x40,0x00,0x00,0x80,0x1f,0x00,0x30,0x90,0x3e,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x3e,0x00,0x00,0x80,0x1f,0x00,0x30,0x90,0x3d,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x3d,0x00,0x00,0x80,0x1f,0x00,0x30,0x90,0x39,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x39,0x00,0x00,0x80,0x1f,0x00,0x30,0x90,0x37,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x37,0x00,0x00,0x80,0x1f,0x00,0x30,0x90,0x36,0x64,0x00,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x10,0x80,0x36,0x00,0x30,0x80,0x1f,0x00,0x30,0x90,0x34,0x64,0x00,0x90,0x39,0x64,0x00,0x90,0x36,0x64,0x00,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x23,0x64,0x30,0x80,0x34,0x00,0x00,0x80,0x39,0x00,0x00,0x80,0x36,0x00,0x81,0x10,0x80,0x23,0x00,0x30,0x90,0x36,0x64,0x00,0x90,0x40,0x64,0x00,0x90,0x39,0x64,0x00,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x23,0x64,0x30,0x80,0x36,0x00,0x00,0x80,0x40,0x00,0x00,0x80,0x39,0x00,0x81,0x10,0x80,0x23,0x00,0x30,0x90,0x42,0x64,0x00,0x90,0x3b,0x64,0x00,0x90,0x3e,0x64,0x00,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x23,0x64,0x30,0x80,0x42,0x00,0x00,0x80,0x3b,0x00,0x00,0x80,0x3e,0x00,0x81,0x10,0x80,0x23,0x00,0x30,0x90,0x42,0x64,0x00,0x90,0x47,0x64,0x00,0x90,0x4c,0x64,0x00,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x23,0x64,0x81,0x40,0x80,0x23,0x00,0x30,0x90,0x23,0x64,0x30,0x80,0x42,0x00,0x00,0x80,0x47,0x00,0x00,0x80,0x4c,0x00,0x81,0x10,0x80,0x23,0x00,0x30,0x90,0x4c,0x64,0x3c,0x90,0x1f,0x64,0x81,0x04,0x80,0x4c,0x00,0x30,0x90,0x47,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x47,0x00,0x30,0x90,0x45,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x45,0x00,0x30,0x90,0x42,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x54,0x80,0x42,0x00,0x60,0x90,0x3e,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x24,0x80,0x3e,0x00,0x81,0x10,0x90,0x42,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x40,0x80,0x1f,0x00,0x24,0x80,0x42,0x00,0x0c,0x90,0x1f,0x64,0x81,0x34,0x90,0x34,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x21,0x64,0x81,0x04,0x80,0x34,0x00,0x30,0x90,0x39,0x64,0x0c,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x04,0x80,0x39,0x00,0x30,0x90,0x40,0x64,0x0c,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x04,0x80,0x40,0x00,0x30,0x90,0x45,0x64,0x0c,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x04,0x80,0x45,0x00,0x30,0x90,0x42,0x64,0x0c,0x80,0x21,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x54,0x80,0x42,0x00,0x60,0x90,0x39,0x64,0x0c,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x54,0x80,0x39,0x00,0x60,0x90,0x3e,0x64,0x0c,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x54,0x80,0x3e,0x00,0x60,0x90,0x45,0x64,0x0c,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x54,0x80,0x45,0x00,0x60,0x90,0x36,0x64,0x00,0x90,0x3d,0x64,0x00,0x90,0x39,0x64,0x0c,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x24,0x80,0x36,0x00,0x00,0x80,0x3d,0x00,0x00,0x80,0x39,0x00,0x0c,0x90,0x1e,0x64,0x81,0x34,0x90,0x36,0x64,0x00,0x90,0x3d,0x64,0x00,0x90,0x39,0x64,0x0c,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x30,0x90,0x1e,0x64,0x81,0x40,0x80,0x1e,0x00,0x24,0x80,0x36,0x00,0x00,0x80,0x3d,0x00,0x00,0x80,0x39,0x00,0x0c,0x90,0x1e,0x64,0x81,0x34,0x90,0x3d,0x64,0x0c,0x80,0x1e,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x3d,0x00,0x30,0x90,0x3b,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x3b,0x00,0x30,0x90,0x40,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x40,0x00,0x30,0x90,0x34,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x34,0x00,0x30,0x90,0x39,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x39,0x00,0x30,0x90,0x3e,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x3e,0x00,0x30,0x90,0x32,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x32,0x00,0x30,0x90,0x37,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x37,0x00,0x30,0x90,0x3d,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x3d,0x00,0x30,0x90,0x31,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x31,0x00,0x30,0x90,0x36,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x36,0x00,0x30,0x90,0x3b,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x1f,0x64,0x81,0x04,0x80,0x3b,0x00,0x30,0x90,0x2d,0x64,0x0c,0x80,0x1f,0x00,0x30,0x90,0x21,0x64,0x81,0x04,0x80,0x2d,0x00,0x30,0x90,0x34,0x64,0x0c,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x04,0x80,0x34,0x00,0x30,0x90,0x39,0x64,0x0c,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x04,0x80,0x39,0x00,0x30,0x90,0x3e,0x64,0x0c,0x80,0x21,0x00,0x30,0x90,0x21,0x64,0x81,0x04,0x80,0x3e,0x00,0x30,0x90,0x34,0x64,0x00,0x90,0x3d,0x64,0x0c,0x80,0x21,0x00,0x30,0x90,0x23,0x64,0x81,0x04,0x80,0x34,0x00,0x00,0x80,0x3d,0x00,0x3c,0x80,0x23,0x00,0x83,0x54,0x90,0x34,0x64,0x00,0x90,0x3d,0x64,0x3c,0x90,0x23,0x64,0x81,0x04,0x80,0x34,0x00,0x00,0x80,0x3d,0x00,0x3c,0x80,0x23,0x00,0x83,0x54,0x90,0x34,0x64,0x00,0x90,0x3d,0x64,0x3c,0x90,0x23,0x64,0x81,0x04,0x80,0x34,0x00,0x00,0x80,0x3d,0x00,0x3c,0x80,0x23,0x00,0x83,0x54,0x90,0x3d,0x64,0x00,0x90,0x34,0x64,0x3c,0x90,0x23,0x64,0x81,0x04,0x80,0x3d,0x00,0x00,0x80,0x34,0x00,0x3c,0x80,0x23,0x00,0x8b,0x14,0x90,0x4e,0x64,0x00,0x90,0x3e,0x64,0x83,0x00,0x80,0x3e,0x00,0x60,0x90,0x39,0x64,0x60,0x80,0x4e,0x00,0x81,0x10,0x90,0x4c,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x4c,0x00,0x30,0x90,0x4a,0x64,0x00,0x90,0x40,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x40,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x39,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x39,0x00,0x60,0x90,0x4c,0x64,0x00,0x90,0x3d,0x64,0x83,0x00,0x80,0x4c,0x00,0x00,0x80,0x3d,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x39,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x39,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x3e,0x64,0x83,0x00,0x80,0x3e,0x00,0x60,0x90,0x39,0x64,0x82,0x20,0x80,0x4a,0x00,0x60,0x80,0x39,0x00,0x60,0x90,0x4e,0x64,0x00,0x90,0x3e,0x64,0x83,0x00,0x80,0x3e,0x00,0x60,0x90,0x39,0x64,0x60,0x80,0x4e,0x00,0x81,0x10,0x90,0x4c,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x4c,0x00,0x30,0x90,0x4a,0x64,0x00,0x90,0x40,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x40,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x39,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x39,0x00,0x60,0x90,0x4c,0x64,0x00,0x90,0x3d,0x64,0x83,0x00,0x80,0x4c,0x00,0x00,0x80,0x3d,0x00,0x60,0x90,0x51,0x64,0x00,0x90,0x34,0x64,0x83,0x00,0x80,0x51,0x00,0x00,0x80,0x34,0x00,0x60,0x90,0x4e,0x64,0x00,0x90,0x32,0x64,0x83,0x00,0x80,0x32,0x00,0x60,0x90,0x39,0x64,0x82,0x20,0x80,0x4e,0x00,0x60,0x80,0x39,0x00,0x60,0x90,0x4e,0x64,0x00,0x90,0x3e,0x64,0x83,0x00,0x80,0x3e,0x00,0x60,0x90,0x39,0x64,0x60,0x80,0x4e,0x00,0x81,0x10,0x90,0x4c,0x64,0x81,0x10,0x80,0x39,0x00,0x30,0x80,0x4c,0x00,0x30,0x90,0x4a,0x64,0x00,0x90,0x40,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x40,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x39,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x39,0x00,0x60,0x90,0x4c,0x64,0x00,0x90,0x3d,0x64,0x83,0x00,0x80,0x4c,0x00,0x00,0x80,0x3d,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x39,0x64,0x83,0x00,0x80,0x4a,0x00,0x00,0x80,0x39,0x00,0x60,0x90,0x4a,0x64,0x00,0x90,0x3e,0x64,0x83,0x00,0x80,0x4a,0x00,0x60,0x90,0x4a,0x64,0x81,0x40,0x80,0x4a,0x00,0x30,0x90,0x4c,0x64,0x30,0x80,0x3e,0x00,0x81,0x10,0x80,0x4c,0x00,0x30,0x90,0x4d,0x64,0x00,0x90,0x2e,0x64,0x81,0x40,0x80,0x2e,0x00,0x30,0x90,0x32,0x64,0x81,0x40,0x80,0x32,0x00,0x30,0x90,0x35,0x64,0x81,0x40,0x80,0x35,0x00,0x30,0x90,0x3a,0x64,0x81,0x40,0x80,0x3a,0x00,0x30,0x90,0x3e,0x64,0x81,0x40,0x80,0x3e,0x00,0x30,0x90,0x41,0x64,0x81,0x40,0x80,0x41,0x00,0x30,0x90,0x46,0x64,0x60,0x80,0x4d,0x00,0x60,0x80,0x46,0x00,0x30,0x90,0x4a,0x64,0x81,0x40,0x80,0x4a,0x00,0x30,0x90,0x4f,0x64,0x00,0x90,0x30,0x64,0x81,0x40,0x80,0x30,0x00,0x30,0x90,0x34,0x64,0x81,0x40,0x80,0x34,0x00,0x30,0x90,0x37,0x64,0x81,0x40,0x80,0x37,0x00,0x30,0x90,0x3c,0x64,0x81,0x40,0x80,0x3c,0x00,0x30,0x90,0x40,0x64,0x81,0x40,0x80,0x40,0x00,0x30,0x90,0x43,0x64,0x81,0x40,0x80,0x43,0x00,0x30,0x90,0x48,0x64,0x60,0x80,0x4f,0x00,0x60,0x80,0x48,0x00,0x30,0x90,0x4c,0x64,0x81,0x40,0x80,0x4c,0x00,0x30,0x90,0x4e,0x64,0x00,0x90,0x32,0x64,0x60,0x80,0x4e,0x00,0x18,0x90,0x4f,0x64,0x48,0x80,0x32,0x00,0x18,0x80,0x4f,0x00,0x18,0x90,0x51,0x64,0x00,0x90,0x39,0x64,0x81,0x40,0x80,0x39,0x00,0x30,0x90,0x3e,0x64,0x81,0x40,0x80,0x3e,0x00,0x30,0x90,0x42,0x64,0x81,0x40,0x80,0x42,0x00,0x30,0x90,0x45,0x64,0x86,0x00,0x80,0x45,0x00,0x30,0x80,0x51,0x00,0x81,0x10,0x90,0x4a,0x64,0x8c,0x00,0x80,0x4a,0x00,0x83,0x00,0xff,0x2f,0x00}; void setup() { mySerial.begin(9600); delay(1000); DDRD = 0b11111111;//PORTDを全てOUTPUTに pinMode(WR_PIN, OUTPUT); pinMode(CS1_PIN, OUTPUT); pinMode(CS2_PIN, OUTPUT); pinMode(AD_PIN, OUTPUT); pinMode(RESET_PIN, OUTPUT); pinMode (CLKOUT_PIN, OUTPUT); pinMode (AmpEn_PIN, OUTPUT); digitalWrite(RESET_PIN,LOW);//AmpをDisable digitalWrite(AmpEn_PIN,HIGH);//AmpをDisable // set up Timer 1 TCCR1A = bit (COM1A0); // toggle OC1A on Compare Match TCCR1B = bit (WGM12) | bit (CS10); // CTC, no prescaling OCR1A = 1; // 0: 8MHz, 1: 4MHz (16MHz駆動の時) ymz1.Reset(); ymz1.SetMixer(0b111, 0b000);//ChA,B,Cともに楽音(トーン)を鳴らす(0b000) ymz1.SetFreqVol(CH_A, 0, 0);//ChAを消音 ymz1.SetFreqVol(CH_B, 0, 0);//ChBを消音 ymz1.SetFreqVol(CH_C, 0, 0);//ChCを消音 digitalWrite(CS1_PIN, LOW);//ymz1が"ymz2.Reset()"で再度リセットされるのを防止 //ymz2.Reset(); ymz2.SetMixer(0b111, 0b000);//ChA,B,Cともに楽音(トーン)を鳴らす(0b000) ymz2.SetFreqVol(CH_A, 0, 0);//ChAを消音 ymz2.SetFreqVol(CH_B, 0, 0);//ChBを消音 ymz2.SetFreqVol(CH_C, 0, 0);//ChCを消音 mySerial.println("Setup Done"); digitalWrite(AmpEn_PIN,LOW);//AmpをEnable } void loop() { volume = 10; midiRead(track0, tempo, resolution); delay(3000); } void midiRead(char *trk, uint32_t tmp, uint16_t res){ uint32_t tempoDelay = tmp/res; //mySerial.print("TempoDelay:"); //mySerial.println(tempoDelay); readPos = trk; for(int i=0;i<ch;i++){ tones[i] = 0x00; } //tick読み込み readTick(); bool enable = true; uint32_t t; while(enable){ t = micros(); if(tick == 0){ //コード読み込み readPos++; byte c = pgm_read_byte(readPos); switch(c){ case 0x80://Note Off readPos++; c = pgm_read_byte(readPos);//音程 //mySerial.print("tone OFF:"); //mySerial.print(c ,HEX); for(int i=0;i<ch;i++){ if(tones[i] == c){ readPos++; byte v = pgm_read_byte(readPos);//ボリューム if(i<3){ ymz1.SetFreqVol(i, 0, 0); } else{ ymz2.SetFreqVol(i-3, 0, 0); } tones[i] = 0x00; //mySerial.print(",CH"); //mySerial.print(i); //mySerial.print(",Volume:"); //mySerial.println(v); break; } } //LED OFF digitalWrite(13,LOW); break; case 0x90: readPos++; c = pgm_read_byte(readPos);//音程 //mySerial.print("tone ON:"); //mySerial.print(c ,HEX); for(int i=0;i<ch;i++){ if(tones[i] == 0x00){ readPos++; byte v = pgm_read_byte(readPos);//ボリューム if(i<3){ ymz1.SetFreqVol(i, noteFreq[c], (v>>3)); } else{ ymz2.SetFreqVol(i-3, noteFreq[c], (v>>3)); } tones[i] = c; //mySerial.print(",CH"); //mySerial.print(i); //mySerial.print(",Volume:"); //mySerial.println(v); break; } } break; case 0xff: readPos++; c = pgm_read_byte(readPos); if(c == 0x2f){ enable = false; } break; } //tick読み込み readPos++; readTick(); //mySerial.println(micros()-t); } if(tick>0){ while(t+tempoDelay*tick>=micros()){} tick = 0; } } } void readTick(){ tick = 0; uint32_t t = pgm_read_byte(readPos); //mySerial.print("t:"); //mySerial.println(t, HEX); while(t>=0x80){ readPos++; tick = (tick<<7) + t - 0x80; t = pgm_read_byte(readPos); //mySerial.print("t:"); //mySerial.println(t, HEX); } tick = (tick<<7) + t; //mySerial.print("tick:"); //mySerial.println(tick, HEX); } |
YMZ294Kaiライブラリ
元々のライブラリはhttps://wp.hrmux.com/?page_id=991に公開されているものを使用している。複数のYMZ294を制御できるようにするため、元のライブラリでWRとCSを同時に制御していた所を分離して使用している。YMZ294を定義する時の「YMZ294 ymz1(WR_PIN, CS1_PIN, AD_PIN, RESET_PIN);」WR_PINとCS1_PINを同じピン番号にすれば元のライブラリと同じような使い方ができるが、その場合はYMZ294は一つ分しか使えない。
今後
今回は初音ミク誕生祭に間に合わせるためにシンプルな電子オルゴールにしたのだが、元々はカメラでコードを読み取って演奏するようなデバイスを作ってみたいということが発端だったので、そっちのほうの検討も進めたい。
コメント