From ae12efd3cfbb958e29bb3ed45866fba8af5e44e6 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Thu, 1 Feb 2024 10:47:05 +0100 Subject: [PATCH] WIP: add test sketches --- .../Modulino_PlugNPlay/Modulino_PlugNPlay.ino | 191 +++ sketches/node_flasher_raw/fw.h | 1058 +++++++++++++++++ .../node_flasher_raw/node_flasher_raw.ino | 233 ++++ 3 files changed, 1482 insertions(+) create mode 100644 sketches/Modulino_PlugNPlay/Modulino_PlugNPlay.ino create mode 100644 sketches/node_flasher_raw/fw.h create mode 100644 sketches/node_flasher_raw/node_flasher_raw.ino diff --git a/sketches/Modulino_PlugNPlay/Modulino_PlugNPlay.ino b/sketches/Modulino_PlugNPlay/Modulino_PlugNPlay.ino new file mode 100644 index 0000000..5c1debd --- /dev/null +++ b/sketches/Modulino_PlugNPlay/Modulino_PlugNPlay.ino @@ -0,0 +1,191 @@ +#include "Wire.h" +#include + +#define Wire Wire1 + +class Module { + public: + Module(uint8_t address = 0xFF) : address(address) {} + bool begin() { + if (address == 0xFF) { + //find possible matches + } + } + bool read(uint8_t* buf, int howmany) { + if (address == 0xFF) { + return false; + } + Wire.requestFrom(address, howmany); + auto start = millis(); + while ((Wire.available() == 0) && (millis() - start < 100)) { + delay(1); + } + if (Wire.available() < howmany) { + return false; + } + for (int i = 0; i < howmany; i++) { + buf[i] = Wire.read(); + } + return true; + } + bool write(uint8_t* buf, int howmany) { + if (address == 0xFF) { + return false; + } + Wire.beginTransmission(address); + for (int i = 0; i < howmany; i++) { + Wire.write(buf[i]); + } + Wire.endTransmission(); + return true; + } + private: + uint8_t address; +}; + +class Buttons : public Module { + public: + Buttons(uint8_t address = 0xFF) : Module(address) {} + bool get(bool& a, bool& b, bool& c) { + uint8_t buf[3]; + auto res = read((uint8_t*)buf, 3); + a = buf[0]; b = buf[1]; c = buf[2]; + auto ret = res && (a != last_a || b != last_b || c != last_c); + last_a = a; last_b = b; last_c = c; + return ret; + } + private: + bool last_a, last_b, last_c; +}; + +class Tone : public Module { + public: + Tone(uint8_t address = 0xFF) : Module(address) {} + void tone(size_t freq, size_t len_ms) { + uint8_t buf[8]; + memcpy(&buf[0], &freq, 4); + memcpy(&buf[4], &len_ms, 4); + write(buf, 8); + } + void noTone() { + uint8_t buf[8]; + memset(&buf[0], 0, 8); + write(buf, 8); + } +}; + +class Color { + public: + Color(uint8_t r, uint8_t g, uint8_t b) : r(r), g(g), b(b) {} + operator uint32_t() { + return (b << 8 | g << 16 | r << 24); + } + private: + uint8_t r, g, b; +}; + +Color RED(255, 0, 0); +Color BLUE(0, 0, 255); +Color GREEN(0, 255, 0); +Color VIOLET(255, 0, 255); + +class LEDS : public Module { + public: + LEDS(uint8_t address = 0xFF) : Module(address) { + memset(data, 0xEF, 40); + } + bool begin() { + show(); + } + void set(int idx, uint8_t brightness, Color rgb) { + data[idx] = (uint32_t)rgb | brightness | 0xE0; + } + void show() { + write((uint8_t*)data, 10 * 4); + } + private: + uint32_t data[10]; +}; + + +class Encoder : public Module { + public: + Encoder(uint8_t address = 0xFF) : Module(address) {} + int16_t get() { + uint8_t buf[3]; + auto res = read(buf, 3); + if (res == false) { + return 0; + } + _pressed = (buf[2] != 0); + int16_t ret; + memcpy(&ret, &buf[0], 2); + return ret; + } + bool pressed() { + get(); + return _pressed; + } + private: + bool _pressed = false; +}; + +std::vector findModules() { + + std::vector modules; + for (int i = 8; i < 127; i++) { + Wire.beginTransmission(i); + auto ret = Wire.endTransmission(); + if (ret != 2) { + Serial.println(String(i) + ":" + String(ret)); + } + } + return modules; +} + +Buttons button(62); +Tone _tone(30); +LEDS leds(54); +Encoder encoder(58); + +void setup() { + Wire.begin(); + Wire.setClock(100000); + Serial.begin(115200); + findModules(); + leds.begin(); +} + +int skip = 0; +void loop() { + bool a; bool b; bool c; + + if (encoder.pressed()) { + skip = (skip+1)%5; + } + + auto pitch = encoder.get(); + Serial.println(pitch); + + if (button.get(a, b, c)) { + if (a) { + leds.set(1+skip, 15, RED); + _tone.tone(440+pitch, 1000); + } else { + leds.set(1+skip, 0, RED); + } + if (b) { + leds.set(2+skip, 15, BLUE); + _tone.tone(880+pitch, 1000); + } else { + leds.set(2+skip, 0, BLUE); + } + if (c) { + leds.set(3+skip, 15, GREEN); + _tone.tone(1240+pitch, 1000); + } else { + leds.set(3+skip, 0, GREEN); + } + leds.show(); + } +} diff --git a/sketches/node_flasher_raw/fw.h b/sketches/node_flasher_raw/fw.h new file mode 100644 index 0000000..1c876cc --- /dev/null +++ b/sketches/node_flasher_raw/fw.h @@ -0,0 +1,1058 @@ +const uint8_t node_base_bin[] = { + 0x00, 0x18, 0x00, 0x20, 0x0d, 0x2f, 0x00, 0x08, 0x55, 0x08, 0x00, 0x08, + 0x57, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x08, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x08, 0x00, 0x08, + 0x5d, 0x08, 0x00, 0x08, 0x5d, 0x2f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x5d, 0x2f, 0x00, 0x08, 0x5d, 0x2f, 0x00, 0x08, 0x5d, 0x2f, 0x00, 0x08, + 0x5d, 0x2f, 0x00, 0x08, 0x5d, 0x2f, 0x00, 0x08, 0x5d, 0x2f, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0x2f, 0x00, 0x08, 0x5d, 0x2f, 0x00, 0x08, + 0x5d, 0x2f, 0x00, 0x08, 0x5d, 0x2f, 0x00, 0x08, 0x5d, 0x2f, 0x00, 0x08, + 0x5d, 0x2f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x2f, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x2f, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0x2f, 0x00, 0x08, 0x5d, 0x2f, 0x00, 0x08, + 0x65, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x2f, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x5d, 0x2f, 0x00, 0x08, 0x5d, 0x2f, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x29, 0x34, 0xd0, 0x01, 0x23, 0x00, 0x22, 0x10, 0xb4, 0x88, 0x42, + 0x2c, 0xd3, 0x01, 0x24, 0x24, 0x07, 0xa1, 0x42, 0x04, 0xd2, 0x81, 0x42, + 0x02, 0xd2, 0x09, 0x01, 0x1b, 0x01, 0xf8, 0xe7, 0xe4, 0x00, 0xa1, 0x42, + 0x04, 0xd2, 0x81, 0x42, 0x02, 0xd2, 0x49, 0x00, 0x5b, 0x00, 0xf8, 0xe7, + 0x88, 0x42, 0x01, 0xd3, 0x40, 0x1a, 0x1a, 0x43, 0x4c, 0x08, 0xa0, 0x42, + 0x02, 0xd3, 0x00, 0x1b, 0x5c, 0x08, 0x22, 0x43, 0x8c, 0x08, 0xa0, 0x42, + 0x02, 0xd3, 0x00, 0x1b, 0x9c, 0x08, 0x22, 0x43, 0xcc, 0x08, 0xa0, 0x42, + 0x02, 0xd3, 0x00, 0x1b, 0xdc, 0x08, 0x22, 0x43, 0x00, 0x28, 0x03, 0xd0, + 0x1b, 0x09, 0x01, 0xd0, 0x09, 0x09, 0xe3, 0xe7, 0x10, 0x00, 0x10, 0xbc, + 0x70, 0x47, 0x01, 0xb5, 0x00, 0x20, 0x00, 0xf0, 0x0b, 0xf8, 0x02, 0xbd, + 0x00, 0x29, 0xf8, 0xd0, 0x03, 0xb5, 0xff, 0xf7, 0xc1, 0xff, 0x0e, 0xbc, + 0x42, 0x43, 0x89, 0x1a, 0x18, 0x47, 0xc0, 0x46, 0x70, 0x47, 0xc0, 0x46, + 0x10, 0xb5, 0x06, 0x4c, 0x23, 0x78, 0x00, 0x2b, 0x07, 0xd1, 0x05, 0x4b, + 0x00, 0x2b, 0x02, 0xd0, 0x04, 0x48, 0x00, 0xe0, 0x00, 0xbf, 0x01, 0x23, + 0x23, 0x70, 0x10, 0xbd, 0x0c, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0xb8, 0x2f, 0x00, 0x08, 0x04, 0x4b, 0x10, 0xb5, 0x00, 0x2b, 0x03, 0xd0, + 0x03, 0x49, 0x04, 0x48, 0x00, 0xe0, 0x00, 0xbf, 0x10, 0xbd, 0xc0, 0x46, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0xb8, 0x2f, 0x00, 0x08, + 0x84, 0xb0, 0x11, 0x4b, 0x59, 0x6b, 0x01, 0x22, 0x11, 0x43, 0x59, 0x63, + 0x59, 0x6b, 0x0a, 0x40, 0x00, 0x92, 0x00, 0x9a, 0x59, 0x6b, 0x02, 0x22, + 0x11, 0x43, 0x59, 0x63, 0x59, 0x6b, 0x0a, 0x40, 0x01, 0x92, 0x01, 0x9a, + 0x59, 0x6b, 0x04, 0x22, 0x11, 0x43, 0x59, 0x63, 0x59, 0x6b, 0x0a, 0x40, + 0x02, 0x92, 0x02, 0x9a, 0x59, 0x6b, 0x20, 0x22, 0x11, 0x43, 0x59, 0x63, + 0x5b, 0x6b, 0x1a, 0x40, 0x03, 0x92, 0x03, 0x9b, 0x04, 0xb0, 0x70, 0x47, + 0x00, 0x10, 0x02, 0x40, 0x70, 0xb5, 0x06, 0x00, 0x07, 0x24, 0x14, 0xe0, + 0x33, 0x00, 0x23, 0x41, 0x01, 0x22, 0x1a, 0x40, 0xa0, 0x25, 0xed, 0x05, + 0x01, 0x21, 0x28, 0x00, 0x01, 0xf0, 0xe7, 0xf8, 0x01, 0x22, 0x02, 0x21, + 0x28, 0x00, 0x01, 0xf0, 0xe2, 0xf8, 0x00, 0x22, 0x02, 0x21, 0x28, 0x00, + 0x01, 0xf0, 0xdd, 0xf8, 0x01, 0x3c, 0x00, 0x2c, 0xe8, 0xda, 0x70, 0xbd, + 0xf0, 0xb5, 0x87, 0xb0, 0x14, 0x22, 0x00, 0x21, 0x01, 0xa8, 0x02, 0xf0, + 0x9a, 0xfe, 0xe0, 0x23, 0x5b, 0x00, 0x01, 0x93, 0xbf, 0x3b, 0xff, 0x3b, + 0x03, 0x93, 0xa0, 0x27, 0xff, 0x05, 0x01, 0xa9, 0x38, 0x00, 0x00, 0xf0, + 0xe7, 0xff, 0xc0, 0x23, 0x1b, 0x02, 0x01, 0x93, 0x1c, 0x4e, 0x01, 0xa9, + 0x30, 0x00, 0x00, 0xf0, 0xdf, 0xff, 0x04, 0x23, 0x01, 0x93, 0x1a, 0x4d, + 0x01, 0xa9, 0x28, 0x00, 0x00, 0xf0, 0xd8, 0xff, 0x40, 0x21, 0x38, 0x00, + 0x01, 0xf0, 0xac, 0xf8, 0x04, 0x00, 0x80, 0x21, 0x38, 0x00, 0x01, 0xf0, + 0xa7, 0xf8, 0xa4, 0x01, 0x40, 0x01, 0x04, 0x43, 0x64, 0xb2, 0x80, 0x21, + 0x49, 0x00, 0x38, 0x00, 0x01, 0xf0, 0x9e, 0xf8, 0x00, 0x01, 0x04, 0x43, + 0x64, 0xb2, 0x80, 0x21, 0xc9, 0x01, 0x30, 0x00, 0x01, 0xf0, 0x96, 0xf8, + 0xc0, 0x00, 0x04, 0x43, 0x64, 0xb2, 0x80, 0x21, 0x09, 0x02, 0x30, 0x00, + 0x01, 0xf0, 0x8e, 0xf8, 0x80, 0x00, 0x04, 0x43, 0x64, 0xb2, 0x04, 0x21, + 0x28, 0x00, 0x01, 0xf0, 0x87, 0xf8, 0x40, 0x00, 0x20, 0x43, 0xc0, 0xb2, + 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x08, 0x00, 0x50, 0x00, 0x14, 0x00, 0x50, + 0x10, 0xb5, 0x00, 0x22, 0x00, 0x21, 0x17, 0x20, 0x00, 0xf0, 0x3c, 0xfc, + 0x17, 0x20, 0x00, 0xf0, 0x3d, 0xfc, 0x10, 0xbd, 0x10, 0xb5, 0x72, 0xb6, + 0x0e, 0x4b, 0x00, 0x22, 0x1a, 0x60, 0x00, 0xf0, 0x45, 0xfc, 0x00, 0x23, + 0x0b, 0xe0, 0x0c, 0x49, 0x1a, 0x00, 0x20, 0x32, 0x92, 0x00, 0x01, 0x20, + 0x40, 0x42, 0x50, 0x50, 0x1a, 0x00, 0x60, 0x32, 0x92, 0x00, 0x50, 0x50, + 0x01, 0x33, 0x04, 0x2b, 0xf1, 0xd9, 0x62, 0xb6, 0x05, 0x4b, 0x1b, 0x68, + 0x05, 0x4a, 0x12, 0x68, 0x82, 0xf3, 0x08, 0x88, 0x98, 0x47, 0xfe, 0xe7, + 0x10, 0xe0, 0x00, 0xe0, 0x00, 0xe1, 0x00, 0xe0, 0x04, 0x00, 0xff, 0x1f, + 0x00, 0x00, 0xff, 0x1f, 0x70, 0xb5, 0x18, 0x4b, 0x1b, 0x78, 0x76, 0x2b, + 0x04, 0xd0, 0x12, 0xd8, 0x6c, 0x2b, 0x26, 0xd0, 0x74, 0x2b, 0x25, 0xd1, + 0x14, 0x4b, 0x1b, 0x68, 0x5b, 0x6a, 0x14, 0x4c, 0x23, 0x80, 0xa0, 0x20, + 0x04, 0x21, 0xc0, 0x05, 0x01, 0xf0, 0x38, 0xf8, 0x43, 0x42, 0x58, 0x41, + 0xa0, 0x70, 0x03, 0x20, 0x16, 0xe0, 0x7c, 0x2b, 0x14, 0xd1, 0xa0, 0x25, + 0xed, 0x05, 0x01, 0x21, 0x28, 0x00, 0x01, 0xf0, 0x2b, 0xf8, 0x0a, 0x4c, + 0x20, 0x70, 0x02, 0x21, 0x28, 0x00, 0x01, 0xf0, 0x25, 0xf8, 0x60, 0x70, + 0x04, 0x21, 0x28, 0x00, 0x01, 0xf0, 0x20, 0xf8, 0xa0, 0x70, 0x03, 0x20, + 0x00, 0xe0, 0x28, 0x20, 0x70, 0xbd, 0xc0, 0x46, 0x28, 0x00, 0x00, 0x20, + 0xb0, 0x00, 0x00, 0x20, 0x2c, 0x00, 0x00, 0x20, 0x0b, 0x4b, 0x1b, 0x78, + 0x74, 0x2b, 0x0c, 0xd0, 0x05, 0xd8, 0x3c, 0x2b, 0x0b, 0xd0, 0x6c, 0x2b, + 0x06, 0xd1, 0x28, 0x20, 0x04, 0xe0, 0x76, 0x2b, 0x07, 0xd0, 0x7c, 0x2b, + 0x00, 0xd1, 0x03, 0x20, 0x70, 0x47, 0x04, 0x20, 0xfc, 0xe7, 0x08, 0x20, + 0xfa, 0xe7, 0x04, 0x20, 0xf8, 0xe7, 0xc0, 0x46, 0x28, 0x00, 0x00, 0x20, + 0x70, 0x47, 0x00, 0x00, 0x01, 0x4b, 0x01, 0x22, 0x1a, 0x70, 0x70, 0x47, + 0xac, 0x00, 0x00, 0x20, 0x10, 0xb5, 0x01, 0x29, 0x0a, 0xd0, 0xff, 0xf7, + 0xd9, 0xff, 0x02, 0x00, 0x80, 0x23, 0x09, 0x49, 0x09, 0x4c, 0x9b, 0x04, + 0x20, 0x00, 0x01, 0xf0, 0xc3, 0xf9, 0x10, 0xbd, 0xff, 0xf7, 0x96, 0xff, + 0x02, 0x00, 0x80, 0x23, 0x03, 0x49, 0x04, 0x4c, 0x9b, 0x04, 0x20, 0x00, + 0x01, 0xf0, 0x48, 0xf9, 0xf3, 0xe7, 0xc0, 0x46, 0x2c, 0x00, 0x00, 0x20, + 0x0c, 0x01, 0x00, 0x20, 0x10, 0xb5, 0x02, 0x48, 0x01, 0xf0, 0x20, 0xfa, + 0x10, 0xbd, 0xc0, 0x46, 0x0c, 0x01, 0x00, 0x20, 0x72, 0xb6, 0xfe, 0xe7, + 0x10, 0xb5, 0x02, 0x00, 0x12, 0x4b, 0x13, 0x49, 0x18, 0x00, 0x19, 0x60, + 0x12, 0x4b, 0x43, 0x60, 0x82, 0x60, 0x01, 0x23, 0xc3, 0x60, 0x00, 0x23, + 0x03, 0x61, 0x80, 0x22, 0x12, 0x03, 0xc2, 0x61, 0x03, 0x62, 0x01, 0xf0, + 0xb7, 0xf8, 0x00, 0x28, 0x0c, 0xd1, 0x09, 0x48, 0x00, 0x21, 0x01, 0xf0, + 0xf9, 0xff, 0x00, 0x28, 0x08, 0xd1, 0x06, 0x48, 0x00, 0x21, 0x02, 0xf0, + 0x1f, 0xf8, 0x00, 0x28, 0x04, 0xd1, 0x10, 0xbd, 0xff, 0xf7, 0xda, 0xff, + 0xff, 0xf7, 0xd8, 0xff, 0xff, 0xf7, 0xd6, 0xff, 0x0c, 0x01, 0x00, 0x20, + 0x00, 0x54, 0x00, 0x40, 0x13, 0x04, 0x10, 0x00, 0x10, 0xb5, 0x07, 0x48, + 0x07, 0x4b, 0x03, 0x60, 0x00, 0x23, 0x43, 0x60, 0x06, 0x4b, 0xc3, 0x60, + 0x83, 0x60, 0x02, 0xf0, 0x37, 0xf8, 0x00, 0x28, 0x00, 0xd1, 0x10, 0xbd, + 0xff, 0xf7, 0xc0, 0xff, 0xfc, 0x00, 0x00, 0x20, 0x00, 0x30, 0x00, 0x40, + 0xff, 0x0f, 0x00, 0x00, 0x00, 0xb5, 0x99, 0xb0, 0x0c, 0x22, 0x00, 0x21, + 0x15, 0xa8, 0x02, 0xf0, 0x4e, 0xfd, 0x1c, 0x22, 0x00, 0x21, 0x0e, 0xa8, + 0x02, 0xf0, 0x49, 0xfd, 0x34, 0x22, 0x00, 0x21, 0x01, 0xa8, 0x02, 0xf0, + 0x44, 0xfd, 0x27, 0x48, 0x27, 0x4b, 0x03, 0x60, 0x00, 0x23, 0x43, 0x60, + 0x83, 0x60, 0x26, 0x4a, 0xc2, 0x60, 0x03, 0x61, 0x43, 0x61, 0x83, 0x61, + 0x02, 0xf0, 0xa8, 0xf9, 0x00, 0x28, 0x36, 0xd1, 0x00, 0x23, 0x15, 0x93, + 0x16, 0x93, 0x17, 0x93, 0x1d, 0x48, 0x15, 0xa9, 0x02, 0xf0, 0x66, 0xfc, + 0x00, 0x28, 0x2e, 0xd1, 0x60, 0x23, 0x0e, 0x93, 0x00, 0x23, 0x0f, 0x93, + 0x10, 0x93, 0x11, 0x93, 0x12, 0x93, 0x13, 0x93, 0x14, 0x93, 0x16, 0x48, + 0x00, 0x22, 0x0e, 0xa9, 0x02, 0xf0, 0x58, 0xfa, 0x00, 0x28, 0x20, 0xd1, + 0x00, 0x23, 0x01, 0x93, 0x02, 0x93, 0x03, 0x93, 0x04, 0x93, 0x05, 0x93, + 0x80, 0x22, 0x92, 0x01, 0x06, 0x92, 0x07, 0x93, 0x08, 0x93, 0x09, 0x93, + 0x80, 0x22, 0x92, 0x04, 0x0a, 0x92, 0x0b, 0x93, 0x0c, 0x93, 0x0d, 0x93, + 0x09, 0x48, 0x01, 0xa9, 0x02, 0xf0, 0x76, 0xfc, 0x00, 0x28, 0x0a, 0xd1, + 0x06, 0x48, 0x00, 0xf0, 0x39, 0xfa, 0x19, 0xb0, 0x00, 0xbd, 0xff, 0xf7, + 0x61, 0xff, 0xff, 0xf7, 0x5f, 0xff, 0xff, 0xf7, 0x5d, 0xff, 0xff, 0xf7, + 0x5b, 0xff, 0xc0, 0x46, 0xb0, 0x00, 0x00, 0x20, 0x00, 0x2c, 0x01, 0x40, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xb5, 0x8d, 0xb0, 0x24, 0x22, 0x00, 0x21, + 0x03, 0xa8, 0x02, 0xf0, 0xe8, 0xfc, 0x0c, 0x22, 0x00, 0x21, 0x68, 0x46, + 0x02, 0xf0, 0xe3, 0xfc, 0x11, 0x48, 0x12, 0x4b, 0x03, 0x60, 0x00, 0x23, + 0x43, 0x60, 0x83, 0x60, 0x10, 0x4a, 0xc2, 0x60, 0x03, 0x61, 0x43, 0x61, + 0x83, 0x61, 0x01, 0x33, 0x03, 0x93, 0x05, 0x93, 0x09, 0x93, 0x03, 0xa9, + 0x02, 0xf0, 0x72, 0xf9, 0x00, 0x28, 0x0b, 0xd1, 0x00, 0x23, 0x00, 0x93, + 0x01, 0x93, 0x02, 0x93, 0x05, 0x48, 0x69, 0x46, 0x02, 0xf0, 0x00, 0xfc, + 0x00, 0x28, 0x03, 0xd1, 0x0d, 0xb0, 0x00, 0xbd, 0xff, 0xf7, 0x26, 0xff, + 0xff, 0xf7, 0x24, 0xff, 0xb0, 0x00, 0x00, 0x20, 0x00, 0x2c, 0x01, 0x40, + 0xff, 0xff, 0x00, 0x00, 0x10, 0xb5, 0x86, 0xb0, 0x14, 0x22, 0x00, 0x21, + 0x01, 0xa8, 0x02, 0xf0, 0xb2, 0xfc, 0x1c, 0x4b, 0x1b, 0x78, 0x74, 0x2b, + 0x26, 0xd0, 0x13, 0xd8, 0x3c, 0x2b, 0x20, 0xd0, 0x6c, 0x2b, 0x1c, 0xd1, + 0x07, 0x23, 0x01, 0x93, 0x06, 0x3b, 0x02, 0x93, 0xa0, 0x24, 0xe4, 0x05, + 0x01, 0xa9, 0x20, 0x00, 0x00, 0xf0, 0xf8, 0xfd, 0x01, 0x22, 0x04, 0x21, + 0x20, 0x00, 0x00, 0xf0, 0xd2, 0xfe, 0x0c, 0xe0, 0x76, 0x2b, 0x0f, 0xd0, + 0x7c, 0x2b, 0x08, 0xd1, 0x75, 0x3b, 0x01, 0x93, 0x06, 0x3b, 0x02, 0x93, + 0xa0, 0x20, 0x01, 0xa9, 0xc0, 0x05, 0x00, 0xf0, 0xe5, 0xfd, 0x06, 0xb0, + 0x10, 0xbd, 0xff, 0xf7, 0x33, 0xff, 0xfa, 0xe7, 0x04, 0x23, 0x01, 0x93, + 0xa0, 0x20, 0x01, 0xa9, 0xc0, 0x05, 0x00, 0xf0, 0xd9, 0xfd, 0xff, 0xf7, + 0x8f, 0xff, 0x03, 0x48, 0x3c, 0x21, 0x02, 0xf0, 0x4f, 0xfb, 0xec, 0xe7, + 0x28, 0x00, 0x00, 0x20, 0xb0, 0x00, 0x00, 0x20, 0x10, 0xb5, 0x01, 0xf0, + 0xe9, 0xfe, 0x04, 0x28, 0x00, 0xd1, 0x10, 0xbd, 0xff, 0xf7, 0xd2, 0xfe, + 0x00, 0xb5, 0x8d, 0xb0, 0x1c, 0x22, 0x00, 0x21, 0x05, 0xa8, 0x02, 0xf0, + 0x66, 0xfc, 0x14, 0x22, 0x00, 0x21, 0x68, 0x46, 0x02, 0xf0, 0x61, 0xfc, + 0x0a, 0x23, 0x05, 0x93, 0xf6, 0x33, 0x08, 0x93, 0x80, 0x23, 0x5b, 0x01, + 0x09, 0x93, 0x40, 0x23, 0x0a, 0x93, 0x3f, 0x3b, 0x0b, 0x93, 0x05, 0xa8, + 0x00, 0xf0, 0xbc, 0xfa, 0x00, 0x28, 0x0e, 0xd1, 0x07, 0x23, 0x00, 0x93, + 0x00, 0x23, 0x01, 0x93, 0x02, 0x93, 0x03, 0x93, 0x04, 0x93, 0x00, 0x21, + 0x68, 0x46, 0x00, 0xf0, 0x3d, 0xfc, 0x00, 0x28, 0x03, 0xd1, 0x0d, 0xb0, + 0x00, 0xbd, 0xff, 0xf7, 0xa5, 0xfe, 0xff, 0xf7, 0xa3, 0xfe, 0x00, 0x00, + 0x70, 0xb5, 0x00, 0xf0, 0xc5, 0xf9, 0xff, 0xf7, 0xcb, 0xff, 0xff, 0xf7, + 0x53, 0xfd, 0xff, 0xf7, 0x93, 0xfd, 0x4f, 0x4b, 0x18, 0x70, 0xff, 0xf7, + 0x97, 0xfe, 0xff, 0xf7, 0xc3, 0xfe, 0xff, 0xf7, 0xdf, 0xfd, 0xff, 0xf7, + 0x71, 0xff, 0x4b, 0x48, 0x01, 0xf0, 0xa8, 0xf8, 0x00, 0x24, 0x03, 0xe0, + 0x49, 0x4b, 0x1b, 0x78, 0x00, 0x2b, 0x0e, 0xd1, 0x48, 0x48, 0x01, 0xf0, + 0x29, 0xff, 0x00, 0x2c, 0xf6, 0xd0, 0x00, 0xf0, 0xbd, 0xf9, 0xa0, 0x42, + 0xf2, 0xd9, 0x45, 0x48, 0x00, 0x21, 0x02, 0xf0, 0x91, 0xfa, 0x00, 0x24, + 0xec, 0xe7, 0x43, 0x4b, 0x1a, 0x78, 0x44, 0x2a, 0x0b, 0xd0, 0x3c, 0x4b, + 0x1b, 0x78, 0x6c, 0x2b, 0x3e, 0xd0, 0x7c, 0x2b, 0x0e, 0xd0, 0x3c, 0x2b, + 0x27, 0xd0, 0x3a, 0x4b, 0x00, 0x22, 0x1a, 0x70, 0xe0, 0xe7, 0x5b, 0x78, + 0x49, 0x2b, 0xf0, 0xd1, 0x39, 0x4b, 0x9b, 0x78, 0x45, 0x2b, 0xec, 0xd1, + 0xff, 0xf7, 0xb6, 0xfd, 0x53, 0x1e, 0x9a, 0x41, 0xd2, 0xb2, 0xa0, 0x25, + 0xed, 0x05, 0x01, 0x21, 0x28, 0x00, 0x00, 0xf0, 0x28, 0xfe, 0x32, 0x4e, + 0x72, 0x78, 0x53, 0x1e, 0x9a, 0x41, 0xd2, 0xb2, 0x02, 0x21, 0x28, 0x00, + 0x00, 0xf0, 0x1f, 0xfe, 0xb2, 0x78, 0x53, 0x1e, 0x9a, 0x41, 0xd2, 0xb2, + 0x04, 0x21, 0x28, 0x00, 0x00, 0xf0, 0x17, 0xfe, 0xd7, 0xe7, 0x29, 0x4b, + 0x1d, 0x68, 0x5c, 0x68, 0x00, 0xf0, 0x7c, 0xf9, 0x04, 0x19, 0x29, 0x00, + 0x26, 0x48, 0xff, 0xf7, 0x85, 0xfc, 0x26, 0x4b, 0xd8, 0x62, 0x40, 0x08, + 0x58, 0x63, 0x21, 0x48, 0x00, 0x21, 0x02, 0xf0, 0xb7, 0xf9, 0xc4, 0xe7, + 0xa0, 0x25, 0xed, 0x05, 0x00, 0x22, 0x01, 0x21, 0x28, 0x00, 0x00, 0xf0, + 0xfc, 0xfd, 0x00, 0x22, 0x02, 0x21, 0x28, 0x00, 0x00, 0xf0, 0xf7, 0xfd, + 0x00, 0x20, 0xff, 0xf7, 0xff, 0xfc, 0x00, 0x20, 0xff, 0xf7, 0xfc, 0xfc, + 0x00, 0x20, 0xff, 0xf7, 0xf9, 0xfc, 0x00, 0x20, 0xff, 0xf7, 0xf6, 0xfc, + 0x00, 0x25, 0x04, 0xe0, 0x12, 0x4b, 0x58, 0x5d, 0xff, 0xf7, 0xf0, 0xfc, + 0x01, 0x35, 0x27, 0x2d, 0xf8, 0xdd, 0x00, 0x25, 0x00, 0x2d, 0x0c, 0xdd, + 0xa0, 0x25, 0xed, 0x05, 0x00, 0x22, 0x01, 0x21, 0x28, 0x00, 0x00, 0xf0, + 0xd8, 0xfd, 0x00, 0x22, 0x02, 0x21, 0x28, 0x00, 0x00, 0xf0, 0xd3, 0xfd, + 0x93, 0xe7, 0x00, 0x20, 0xff, 0xf7, 0xda, 0xfc, 0x01, 0x35, 0xeb, 0xe7, + 0x28, 0x00, 0x00, 0x20, 0x0c, 0x01, 0x00, 0x20, 0xac, 0x00, 0x00, 0x20, + 0xfc, 0x00, 0x00, 0x20, 0xb0, 0x00, 0x00, 0x20, 0x2c, 0x00, 0x00, 0x20, + 0x4c, 0xff, 0xb3, 0x00, 0x00, 0x2c, 0x01, 0x40, 0xfe, 0xe7, 0xfe, 0xe7, + 0x70, 0x47, 0x70, 0x47, 0x10, 0xb5, 0x00, 0xf0, 0x15, 0xf9, 0x10, 0xbd, + 0x10, 0xb5, 0x07, 0x4b, 0x1b, 0x68, 0x9a, 0x69, 0xe0, 0x23, 0xdb, 0x00, + 0x1a, 0x42, 0x03, 0xd0, 0x03, 0x48, 0x01, 0xf0, 0xab, 0xfd, 0x10, 0xbd, + 0x01, 0x48, 0x01, 0xf0, 0x03, 0xf8, 0xfa, 0xe7, 0x0c, 0x01, 0x00, 0x20, + 0x82, 0xb0, 0x0a, 0x4b, 0x19, 0x6c, 0x01, 0x22, 0x11, 0x43, 0x19, 0x64, + 0x19, 0x6c, 0x0a, 0x40, 0x00, 0x92, 0x00, 0x9a, 0xda, 0x6b, 0x80, 0x21, + 0x49, 0x05, 0x0a, 0x43, 0xda, 0x63, 0xdb, 0x6b, 0x0b, 0x40, 0x01, 0x93, + 0x01, 0x9b, 0x02, 0xb0, 0x70, 0x47, 0xc0, 0x46, 0x00, 0x10, 0x02, 0x40, + 0x10, 0xb5, 0x8e, 0xb0, 0x04, 0x00, 0x14, 0x22, 0x00, 0x21, 0x09, 0xa8, + 0x02, 0xf0, 0x4b, 0xfb, 0x1c, 0x22, 0x00, 0x21, 0x02, 0xa8, 0x02, 0xf0, + 0x46, 0xfb, 0x22, 0x68, 0x17, 0x4b, 0x9a, 0x42, 0x01, 0xd0, 0x0e, 0xb0, + 0x10, 0xbd, 0x40, 0x23, 0x02, 0x93, 0x02, 0xa8, 0x00, 0xf0, 0xfa, 0xfb, + 0x00, 0x28, 0x1f, 0xd1, 0x12, 0x4c, 0x62, 0x6b, 0x02, 0x23, 0x1a, 0x43, + 0x62, 0x63, 0x62, 0x6b, 0x13, 0x40, 0x00, 0x93, 0x00, 0x9b, 0xc0, 0x23, + 0x09, 0x93, 0xae, 0x3b, 0x0a, 0x93, 0x00, 0x23, 0x0b, 0x93, 0x0c, 0x93, + 0x06, 0x33, 0x0d, 0x93, 0x09, 0xa9, 0x0a, 0x48, 0x00, 0xf0, 0x7c, 0xfc, + 0xe3, 0x6b, 0x80, 0x22, 0x92, 0x03, 0x13, 0x43, 0xe3, 0x63, 0xe3, 0x6b, + 0x13, 0x40, 0x01, 0x93, 0x01, 0x9b, 0xd6, 0xe7, 0xff, 0xf7, 0x7c, 0xfd, + 0xdc, 0xe7, 0xc0, 0x46, 0x00, 0x54, 0x00, 0x40, 0x00, 0x10, 0x02, 0x40, + 0x00, 0x04, 0x00, 0x50, 0x10, 0xb5, 0x88, 0xb0, 0x04, 0x00, 0x14, 0x22, + 0x00, 0x21, 0x03, 0xa8, 0x02, 0xf0, 0x07, 0xfb, 0x22, 0x68, 0x12, 0x4b, + 0x9a, 0x42, 0x01, 0xd0, 0x08, 0xb0, 0x10, 0xbd, 0x10, 0x4b, 0x1a, 0x6c, + 0x80, 0x21, 0x09, 0x01, 0x0a, 0x43, 0x1a, 0x64, 0x1a, 0x6c, 0x0a, 0x40, + 0x01, 0x92, 0x01, 0x9a, 0x59, 0x6b, 0x01, 0x22, 0x11, 0x43, 0x59, 0x63, + 0x5b, 0x6b, 0x13, 0x40, 0x02, 0x93, 0x02, 0x9b, 0x03, 0x23, 0x03, 0x93, + 0x01, 0x3b, 0x04, 0x93, 0x05, 0x92, 0x03, 0x33, 0x07, 0x93, 0xa0, 0x20, + 0x03, 0xa9, 0xc0, 0x05, 0x00, 0xf0, 0x3c, 0xfc, 0xde, 0xe7, 0xc0, 0x46, + 0x00, 0x2c, 0x01, 0x40, 0x00, 0x10, 0x02, 0x40, 0x82, 0xb0, 0x02, 0x68, + 0x07, 0x4b, 0x9a, 0x42, 0x01, 0xd0, 0x02, 0xb0, 0x70, 0x47, 0x06, 0x4b, + 0x1a, 0x6c, 0x80, 0x21, 0x09, 0x01, 0x0a, 0x43, 0x1a, 0x64, 0x1b, 0x6c, + 0x0b, 0x40, 0x01, 0x93, 0x01, 0x9b, 0xf2, 0xe7, 0x00, 0x2c, 0x01, 0x40, + 0x00, 0x10, 0x02, 0x40, 0x10, 0xb5, 0x86, 0xb0, 0x04, 0x00, 0x14, 0x22, + 0x00, 0x21, 0x01, 0xa8, 0x02, 0xf0, 0xbf, 0xfa, 0x22, 0x68, 0x0c, 0x4b, + 0x9a, 0x42, 0x01, 0xd0, 0x06, 0xb0, 0x10, 0xbd, 0x0a, 0x4a, 0x51, 0x6b, + 0x01, 0x23, 0x19, 0x43, 0x51, 0x63, 0x52, 0x6b, 0x1a, 0x40, 0x00, 0x92, + 0x00, 0x9a, 0x01, 0x93, 0x01, 0x33, 0x02, 0x93, 0x03, 0x33, 0x05, 0x93, + 0xa0, 0x20, 0x01, 0xa9, 0xc0, 0x05, 0x00, 0xf0, 0xff, 0xfb, 0xe9, 0xe7, + 0x00, 0x2c, 0x01, 0x40, 0x00, 0x10, 0x02, 0x40, 0x10, 0xb5, 0x04, 0x00, + 0x11, 0x4b, 0x19, 0x78, 0x00, 0x29, 0x01, 0xd1, 0x01, 0x20, 0x10, 0xbd, + 0xfa, 0x20, 0x80, 0x00, 0xff, 0xf7, 0x46, 0xfb, 0x01, 0x00, 0x0d, 0x4b, + 0x18, 0x68, 0xff, 0xf7, 0x41, 0xfb, 0x00, 0xf0, 0x93, 0xf8, 0x00, 0x28, + 0x0d, 0xd1, 0x03, 0x2c, 0x01, 0xd9, 0x01, 0x20, 0xed, 0xe7, 0x01, 0x30, + 0x00, 0x22, 0x21, 0x00, 0x40, 0x42, 0x00, 0xf0, 0x77, 0xf8, 0x05, 0x4b, + 0x1c, 0x60, 0x00, 0x20, 0xe3, 0xe7, 0x01, 0x20, 0xe1, 0xe7, 0xc0, 0x46, + 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, + 0x10, 0xb5, 0x03, 0x20, 0xff, 0xf7, 0xd0, 0xff, 0x04, 0x1e, 0x02, 0xd0, + 0x01, 0x24, 0x20, 0x00, 0x10, 0xbd, 0xff, 0xf7, 0xff, 0xfe, 0xfa, 0xe7, + 0x03, 0x4b, 0x1b, 0x78, 0x03, 0x4a, 0x11, 0x68, 0x5b, 0x18, 0x13, 0x60, + 0x70, 0x47, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x20, 0x60, 0x01, 0x00, 0x20, + 0x01, 0x4b, 0x18, 0x68, 0x70, 0x47, 0xc0, 0x46, 0x60, 0x01, 0x00, 0x20, + 0x70, 0xb5, 0x00, 0x28, 0x11, 0xdb, 0x83, 0x08, 0x13, 0x4d, 0xc0, 0x33, + 0x9b, 0x00, 0x5c, 0x59, 0x03, 0x22, 0x10, 0x40, 0xc0, 0x00, 0xfc, 0x32, + 0x16, 0x00, 0x86, 0x40, 0xb4, 0x43, 0x89, 0x01, 0x0a, 0x40, 0x82, 0x40, + 0x22, 0x43, 0x5a, 0x51, 0x70, 0xbd, 0x0f, 0x23, 0x03, 0x40, 0x08, 0x3b, + 0x9b, 0x08, 0x06, 0x33, 0x9b, 0x00, 0x09, 0x4a, 0x94, 0x46, 0x63, 0x44, + 0x5c, 0x68, 0x03, 0x22, 0x10, 0x40, 0xc0, 0x00, 0xfc, 0x32, 0x15, 0x00, + 0x85, 0x40, 0xac, 0x43, 0x89, 0x01, 0x0a, 0x40, 0x82, 0x40, 0x22, 0x43, + 0x5a, 0x60, 0xe7, 0xe7, 0x00, 0xe1, 0x00, 0xe0, 0x00, 0xed, 0x00, 0xe0, + 0x01, 0x38, 0x80, 0x23, 0x5b, 0x04, 0x98, 0x42, 0x0f, 0xd2, 0x09, 0x4a, + 0x50, 0x60, 0x09, 0x48, 0x03, 0x6a, 0x1b, 0x02, 0x1b, 0x0a, 0xc0, 0x21, + 0x09, 0x06, 0x0b, 0x43, 0x03, 0x62, 0x00, 0x23, 0x93, 0x60, 0x07, 0x33, + 0x13, 0x60, 0x00, 0x20, 0x70, 0x47, 0x01, 0x20, 0xfc, 0xe7, 0xc0, 0x46, + 0x10, 0xe0, 0x00, 0xe0, 0x00, 0xed, 0x00, 0xe0, 0x10, 0xb5, 0xff, 0xf7, + 0xb1, 0xff, 0x10, 0xbd, 0x00, 0x28, 0x05, 0xdb, 0x1f, 0x22, 0x02, 0x40, + 0x01, 0x23, 0x93, 0x40, 0x01, 0x4a, 0x13, 0x60, 0x70, 0x47, 0xc0, 0x46, + 0x00, 0xe1, 0x00, 0xe0, 0x10, 0xb5, 0xff, 0xf7, 0xd1, 0xff, 0x10, 0xbd, + 0x70, 0xb5, 0xff, 0xf7, 0x97, 0xff, 0x04, 0x00, 0x26, 0x4a, 0x11, 0x68, + 0x80, 0x23, 0x5b, 0x00, 0x0b, 0x43, 0x13, 0x60, 0x23, 0x4b, 0x1b, 0x68, + 0x5b, 0x05, 0x06, 0xd4, 0xff, 0xf7, 0x8a, 0xff, 0x00, 0x1b, 0x02, 0x28, + 0xf6, 0xd9, 0x03, 0x20, 0x70, 0xbd, 0x1e, 0x4d, 0x80, 0x23, 0xdb, 0x01, + 0x6b, 0x60, 0xff, 0xf7, 0x7f, 0xff, 0x04, 0x00, 0x00, 0x23, 0xab, 0x60, + 0x19, 0x4b, 0x9b, 0x68, 0x38, 0x22, 0x1a, 0x42, 0x07, 0xd0, 0xff, 0xf7, + 0x75, 0xff, 0x00, 0x1b, 0x16, 0x4b, 0x98, 0x42, 0xf4, 0xd9, 0x03, 0x20, + 0xe8, 0xe7, 0xff, 0xf7, 0x6d, 0xff, 0x04, 0x00, 0x11, 0x4a, 0x13, 0x68, + 0x12, 0x49, 0x0b, 0x40, 0x13, 0x60, 0x0f, 0x4b, 0x1b, 0x68, 0x9b, 0x03, + 0x06, 0xd5, 0xff, 0xf7, 0x61, 0xff, 0x00, 0x1b, 0x64, 0x28, 0xf6, 0xd9, + 0x03, 0x20, 0xd5, 0xe7, 0x09, 0x4b, 0x1a, 0x68, 0x0b, 0x49, 0x0a, 0x40, + 0x1a, 0x60, 0x00, 0x22, 0x9a, 0x61, 0x01, 0x3a, 0x1a, 0x62, 0x09, 0x4b, + 0x09, 0x4a, 0x1a, 0x60, 0x09, 0x4b, 0x18, 0x68, 0xff, 0xf7, 0x08, 0xff, + 0x00, 0x28, 0xc3, 0xd0, 0x01, 0x20, 0xc1, 0xe7, 0x00, 0x10, 0x02, 0x40, + 0x88, 0x13, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, + 0x08, 0x00, 0x00, 0x20, 0x00, 0x6c, 0xdc, 0x02, 0x04, 0x00, 0x00, 0x20, + 0x70, 0xb5, 0x04, 0x1e, 0x00, 0xd1, 0x39, 0xe1, 0x03, 0x68, 0xdb, 0x07, + 0x2c, 0xd5, 0xa1, 0x4b, 0x9a, 0x68, 0x38, 0x23, 0x13, 0x40, 0x08, 0x2b, + 0x22, 0xd0, 0x43, 0x68, 0x80, 0x22, 0x52, 0x02, 0x93, 0x42, 0x2e, 0xd0, + 0xa0, 0x22, 0xd2, 0x02, 0x93, 0x42, 0x31, 0xd0, 0x99, 0x4b, 0x1a, 0x68, + 0x99, 0x49, 0x0a, 0x40, 0x1a, 0x60, 0x1a, 0x68, 0x98, 0x49, 0x0a, 0x40, + 0x1a, 0x60, 0x63, 0x68, 0x00, 0x2b, 0x31, 0xd0, 0xff, 0xf7, 0x16, 0xff, + 0x05, 0x00, 0x92, 0x4b, 0x1b, 0x68, 0x9b, 0x03, 0x0a, 0xd4, 0xff, 0xf7, + 0x0f, 0xff, 0x40, 0x1b, 0x64, 0x28, 0xf6, 0xd9, 0x03, 0x20, 0x0e, 0xe1, + 0x43, 0x68, 0x00, 0x2b, 0x00, 0xd1, 0x0b, 0xe1, 0x23, 0x68, 0x9b, 0x07, + 0x47, 0xd5, 0x89, 0x4b, 0x9b, 0x68, 0x38, 0x22, 0x1a, 0x42, 0x61, 0xd1, + 0xe3, 0x68, 0x00, 0x2b, 0x22, 0xd1, 0x01, 0x20, 0xfd, 0xe0, 0x84, 0x4a, + 0x11, 0x68, 0x80, 0x23, 0x5b, 0x02, 0x0b, 0x43, 0x13, 0x60, 0xd6, 0xe7, + 0x80, 0x4b, 0x19, 0x68, 0x80, 0x22, 0xd2, 0x02, 0x0a, 0x43, 0x1a, 0x60, + 0x19, 0x68, 0x80, 0x22, 0x52, 0x02, 0x0a, 0x43, 0x1a, 0x60, 0xca, 0xe7, + 0xff, 0xf7, 0xe4, 0xfe, 0x05, 0x00, 0x79, 0x4b, 0x1b, 0x68, 0x9b, 0x03, + 0xd8, 0xd5, 0xff, 0xf7, 0xdd, 0xfe, 0x40, 0x1b, 0x64, 0x28, 0xf6, 0xd9, + 0x03, 0x20, 0xdc, 0xe0, 0x73, 0x4b, 0x5a, 0x68, 0x75, 0x49, 0x0a, 0x40, + 0x61, 0x69, 0x09, 0x02, 0x0a, 0x43, 0x5a, 0x60, 0x1a, 0x68, 0x73, 0x49, + 0x0a, 0x40, 0x21, 0x69, 0x0a, 0x43, 0x1a, 0x60, 0x1b, 0x68, 0xdb, 0x0a, + 0x07, 0x22, 0x1a, 0x40, 0x6f, 0x4b, 0xd3, 0x40, 0x6f, 0x4a, 0x13, 0x60, + 0x6f, 0x4b, 0x18, 0x68, 0xff, 0xf7, 0x7a, 0xfe, 0x00, 0x28, 0x00, 0xd0, + 0xc2, 0xe0, 0x23, 0x68, 0x1b, 0x07, 0x57, 0xd5, 0x63, 0x4b, 0x9a, 0x68, + 0x38, 0x23, 0x13, 0x40, 0x18, 0x2b, 0x4e, 0xd0, 0xa3, 0x69, 0x00, 0x2b, + 0x77, 0xd0, 0x5f, 0x4a, 0x13, 0x6e, 0x01, 0x21, 0x0b, 0x43, 0x13, 0x66, + 0xff, 0xf7, 0xa8, 0xfe, 0x05, 0x00, 0x5b, 0x4b, 0x1b, 0x6e, 0x9b, 0x07, + 0x42, 0xd4, 0xff, 0xf7, 0xa1, 0xfe, 0x40, 0x1b, 0x02, 0x28, 0xf6, 0xd9, + 0x03, 0x20, 0xa0, 0xe0, 0xe3, 0x68, 0x00, 0x2b, 0x22, 0xd0, 0x54, 0x4a, + 0x13, 0x68, 0x57, 0x49, 0x0b, 0x40, 0x21, 0x69, 0x0b, 0x43, 0x13, 0x60, + 0x11, 0x68, 0x80, 0x23, 0x5b, 0x00, 0x0b, 0x43, 0x13, 0x60, 0xff, 0xf7, + 0x8b, 0xfe, 0x05, 0x00, 0x4c, 0x4b, 0x1b, 0x68, 0x5b, 0x05, 0x06, 0xd4, + 0xff, 0xf7, 0x84, 0xfe, 0x40, 0x1b, 0x02, 0x28, 0xf6, 0xd9, 0x03, 0x20, + 0x83, 0xe0, 0x47, 0x49, 0x4b, 0x68, 0x49, 0x4a, 0x13, 0x40, 0x62, 0x69, + 0x12, 0x02, 0x13, 0x43, 0x4b, 0x60, 0xba, 0xe7, 0x42, 0x4a, 0x13, 0x68, + 0x49, 0x49, 0x0b, 0x40, 0x13, 0x60, 0xff, 0xf7, 0x6f, 0xfe, 0x05, 0x00, + 0x3e, 0x4b, 0x1b, 0x68, 0x5b, 0x05, 0xae, 0xd5, 0xff, 0xf7, 0x68, 0xfe, + 0x40, 0x1b, 0x02, 0x28, 0xf6, 0xd9, 0x03, 0x20, 0x67, 0xe0, 0xa3, 0x69, + 0x00, 0x2b, 0x69, 0xd0, 0x23, 0x68, 0x5b, 0x07, 0x68, 0xd5, 0x36, 0x4b, + 0x9a, 0x68, 0x38, 0x23, 0x13, 0x40, 0x20, 0x2b, 0x32, 0xd0, 0xa3, 0x68, + 0x01, 0x2b, 0x34, 0xd0, 0x05, 0x2b, 0x38, 0xd0, 0x30, 0x4b, 0xda, 0x6d, + 0x01, 0x21, 0x8a, 0x43, 0xda, 0x65, 0xda, 0x6d, 0x03, 0x31, 0x8a, 0x43, + 0xda, 0x65, 0xa3, 0x68, 0x00, 0x2b, 0x38, 0xd0, 0xff, 0xf7, 0x44, 0xfe, + 0x04, 0x00, 0x29, 0x4b, 0xdb, 0x6d, 0x9b, 0x07, 0x2f, 0xd4, 0xff, 0xf7, + 0x3d, 0xfe, 0x00, 0x1b, 0x2e, 0x4b, 0x98, 0x42, 0xf5, 0xd9, 0x03, 0x20, + 0x3b, 0xe0, 0x23, 0x4a, 0x13, 0x6e, 0x01, 0x21, 0x8b, 0x43, 0x13, 0x66, + 0xff, 0xf7, 0x30, 0xfe, 0x05, 0x00, 0x1f, 0x4b, 0x1b, 0x6e, 0x9b, 0x07, + 0xca, 0xd5, 0xff, 0xf7, 0x29, 0xfe, 0x40, 0x1b, 0x02, 0x28, 0xf6, 0xd9, + 0x03, 0x20, 0x28, 0xe0, 0xa3, 0x68, 0x00, 0x2b, 0x2e, 0xd0, 0x00, 0x20, + 0x23, 0xe0, 0x17, 0x4a, 0xd3, 0x6d, 0x01, 0x21, 0x0b, 0x43, 0xd3, 0x65, + 0xcf, 0xe7, 0x14, 0x4b, 0xda, 0x6d, 0x04, 0x21, 0x0a, 0x43, 0xda, 0x65, + 0xda, 0x6d, 0x03, 0x39, 0x0a, 0x43, 0xda, 0x65, 0xc5, 0xe7, 0x00, 0x20, + 0x11, 0xe0, 0xff, 0xf7, 0x0b, 0xfe, 0x04, 0x00, 0x0c, 0x4b, 0xdb, 0x6d, + 0x9b, 0x07, 0x07, 0xd5, 0xff, 0xf7, 0x04, 0xfe, 0x00, 0x1b, 0x12, 0x4b, + 0x98, 0x42, 0xf5, 0xd9, 0x03, 0x20, 0x02, 0xe0, 0x00, 0x20, 0x00, 0xe0, + 0x01, 0x20, 0x70, 0xbd, 0x01, 0x20, 0xfc, 0xe7, 0x01, 0x20, 0xfa, 0xe7, + 0x01, 0x20, 0xf8, 0xe7, 0x00, 0x20, 0xf6, 0xe7, 0x01, 0x20, 0xf4, 0xe7, + 0x00, 0x10, 0x02, 0x40, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xff, + 0xff, 0x80, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0x00, 0x6c, 0xdc, 0x02, + 0x08, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 0xff, 0xfe, 0xff, 0xff, + 0x88, 0x13, 0x00, 0x00, 0x14, 0x4b, 0x9b, 0x68, 0x38, 0x22, 0x1a, 0x42, + 0x07, 0xd1, 0x12, 0x4b, 0x1a, 0x68, 0xd2, 0x0a, 0x07, 0x23, 0x13, 0x40, + 0x10, 0x48, 0xd8, 0x40, 0x70, 0x47, 0x0e, 0x4b, 0x9a, 0x68, 0x38, 0x23, + 0x13, 0x40, 0x08, 0x2b, 0x10, 0xd0, 0x0b, 0x4b, 0x9a, 0x68, 0x38, 0x23, + 0x13, 0x40, 0x20, 0x2b, 0x0c, 0xd0, 0x08, 0x4b, 0x9a, 0x68, 0x38, 0x23, + 0x13, 0x40, 0x18, 0x2b, 0x01, 0xd0, 0x00, 0x20, 0xea, 0xe7, 0xfa, 0x20, + 0xc0, 0x01, 0xe7, 0xe7, 0x04, 0x48, 0xe5, 0xe7, 0x80, 0x20, 0x00, 0x02, + 0xe2, 0xe7, 0xc0, 0x46, 0x00, 0x10, 0x02, 0x40, 0x00, 0x6c, 0xdc, 0x02, + 0x00, 0x12, 0x7a, 0x00, 0x70, 0xb5, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x28, + 0x00, 0xd1, 0xaa, 0xe0, 0x57, 0x4b, 0x1a, 0x68, 0x07, 0x23, 0x13, 0x40, + 0x8b, 0x42, 0x28, 0xd3, 0x23, 0x68, 0x9a, 0x07, 0x10, 0xd5, 0x5b, 0x07, + 0x07, 0xd5, 0x53, 0x49, 0x8a, 0x68, 0x53, 0x4b, 0x1a, 0x40, 0xb0, 0x23, + 0x1b, 0x01, 0x13, 0x43, 0x8b, 0x60, 0x4f, 0x4a, 0x93, 0x68, 0x50, 0x49, + 0x0b, 0x40, 0xe1, 0x68, 0x0b, 0x43, 0x93, 0x60, 0x23, 0x68, 0xdb, 0x07, + 0x52, 0xd5, 0x4a, 0x4a, 0x13, 0x68, 0x1c, 0x21, 0x8b, 0x43, 0xa1, 0x68, + 0x0b, 0x43, 0x13, 0x60, 0x63, 0x68, 0x01, 0x2b, 0x1e, 0xd0, 0x00, 0x2b, + 0x38, 0xd1, 0x44, 0x4a, 0x12, 0x68, 0x52, 0x05, 0x1b, 0xd4, 0x01, 0x20, + 0x63, 0xe0, 0x40, 0x4a, 0x13, 0x68, 0x07, 0x21, 0x8b, 0x43, 0x2b, 0x43, + 0x13, 0x60, 0xff, 0xf7, 0x6f, 0xfd, 0x06, 0x00, 0x3b, 0x4b, 0x1a, 0x68, + 0x07, 0x23, 0x13, 0x40, 0xab, 0x42, 0xc7, 0xd0, 0xff, 0xf7, 0x66, 0xfd, + 0x80, 0x1b, 0x3b, 0x4a, 0x90, 0x42, 0xf3, 0xd9, 0x03, 0x20, 0x4c, 0xe0, + 0x12, 0x68, 0x92, 0x03, 0x63, 0xd5, 0x34, 0x49, 0x8a, 0x68, 0x07, 0x20, + 0x82, 0x43, 0x13, 0x43, 0x8b, 0x60, 0xff, 0xf7, 0x55, 0xfd, 0x06, 0x00, + 0x2f, 0x4b, 0x9b, 0x68, 0x38, 0x22, 0x1a, 0x40, 0x63, 0x68, 0xdb, 0x00, + 0x9a, 0x42, 0x15, 0xd0, 0xff, 0xf7, 0x4a, 0xfd, 0x80, 0x1b, 0x2d, 0x4b, + 0x98, 0x42, 0xf1, 0xd9, 0x03, 0x20, 0x30, 0xe0, 0x03, 0x2b, 0x05, 0xd0, + 0x26, 0x4a, 0xd2, 0x6d, 0x92, 0x07, 0xe0, 0xd4, 0x01, 0x20, 0x28, 0xe0, + 0x23, 0x4a, 0x12, 0x6e, 0x92, 0x07, 0xda, 0xd4, 0x01, 0x20, 0x22, 0xe0, + 0x1f, 0x4b, 0x1a, 0x68, 0x07, 0x23, 0x13, 0x40, 0xab, 0x42, 0x1d, 0xd8, + 0x23, 0x68, 0x5b, 0x07, 0x06, 0xd5, 0x1c, 0x4a, 0x93, 0x68, 0x1f, 0x49, + 0x0b, 0x40, 0x21, 0x69, 0x0b, 0x43, 0x93, 0x60, 0xff, 0xf7, 0x48, 0xff, + 0x17, 0x4b, 0x9a, 0x68, 0x12, 0x0a, 0x0f, 0x23, 0x13, 0x40, 0x1a, 0x4a, + 0x9b, 0x00, 0x9a, 0x58, 0x1f, 0x23, 0x13, 0x40, 0xd8, 0x40, 0x18, 0x4b, + 0x18, 0x60, 0x18, 0x4b, 0x18, 0x68, 0xff, 0xf7, 0xcf, 0xfc, 0x70, 0xbd, + 0x0d, 0x4a, 0x13, 0x68, 0x07, 0x21, 0x8b, 0x43, 0x2b, 0x43, 0x13, 0x60, + 0xff, 0xf7, 0x0a, 0xfd, 0x06, 0x00, 0x09, 0x4b, 0x1a, 0x68, 0x07, 0x23, + 0x13, 0x40, 0xab, 0x42, 0xd2, 0xd0, 0xff, 0xf7, 0x01, 0xfd, 0x80, 0x1b, + 0x08, 0x4b, 0x98, 0x42, 0xf3, 0xd9, 0x03, 0x20, 0xe7, 0xe7, 0x01, 0x20, + 0xe5, 0xe7, 0x01, 0x20, 0xe3, 0xe7, 0xc0, 0x46, 0x00, 0x20, 0x02, 0x40, + 0x00, 0x10, 0x02, 0x40, 0xff, 0x84, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, + 0x88, 0x13, 0x00, 0x00, 0xff, 0x8f, 0xff, 0xff, 0xf8, 0x2f, 0x00, 0x08, + 0x08, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x20, 0x70, 0xb5, 0x82, 0xb0, + 0x04, 0x00, 0x03, 0x68, 0x9b, 0x03, 0x4e, 0xd5, 0x42, 0x4b, 0xdb, 0x6b, + 0xdb, 0x00, 0x35, 0xd4, 0x40, 0x4b, 0xda, 0x6b, 0x80, 0x21, 0x49, 0x05, + 0x0a, 0x43, 0xda, 0x63, 0xdb, 0x6b, 0x0b, 0x40, 0x01, 0x93, 0x01, 0x9b, + 0x01, 0x25, 0x3b, 0x4b, 0xd9, 0x6d, 0xc0, 0x22, 0x92, 0x00, 0x0b, 0x00, + 0x13, 0x40, 0x11, 0x42, 0x10, 0xd0, 0xa2, 0x69, 0x9a, 0x42, 0x0d, 0xd0, + 0x35, 0x4a, 0xd3, 0x6d, 0x35, 0x49, 0x0b, 0x40, 0xd0, 0x6d, 0x80, 0x21, + 0x49, 0x02, 0x01, 0x43, 0xd1, 0x65, 0xd1, 0x6d, 0x32, 0x48, 0x01, 0x40, + 0xd1, 0x65, 0xd3, 0x65, 0xdb, 0x07, 0x11, 0xd4, 0x2d, 0x4a, 0xd3, 0x6d, + 0x2d, 0x49, 0x0b, 0x40, 0xa1, 0x69, 0x0b, 0x43, 0xd3, 0x65, 0x00, 0x20, + 0x01, 0x2d, 0x1b, 0xd1, 0x28, 0x4a, 0xd3, 0x6b, 0x2a, 0x49, 0x0b, 0x40, + 0xd3, 0x63, 0x15, 0xe0, 0x00, 0x25, 0xd2, 0xe7, 0xff, 0xf7, 0xa0, 0xfc, + 0x06, 0x00, 0x23, 0x4b, 0xdb, 0x6d, 0x9b, 0x07, 0x07, 0xd4, 0xff, 0xf7, + 0x99, 0xfc, 0x80, 0x1b, 0x23, 0x4b, 0x98, 0x42, 0xf5, 0xd9, 0x03, 0x20, + 0x00, 0xe0, 0x00, 0x20, 0x00, 0x28, 0xe3, 0xd1, 0xda, 0xe7, 0x00, 0x20, + 0x23, 0x68, 0xdb, 0x07, 0x06, 0xd5, 0x19, 0x4a, 0x53, 0x6d, 0x03, 0x21, + 0x8b, 0x43, 0xa1, 0x68, 0x0b, 0x43, 0x53, 0x65, 0x23, 0x68, 0x5b, 0x06, + 0x06, 0xd5, 0x14, 0x4a, 0x53, 0x6d, 0x18, 0x49, 0x0b, 0x40, 0xe1, 0x68, + 0x0b, 0x43, 0x53, 0x65, 0x23, 0x68, 0x5b, 0x04, 0x06, 0xd5, 0x0f, 0x4a, + 0x53, 0x6d, 0x9b, 0x00, 0x9b, 0x08, 0x61, 0x69, 0x0b, 0x43, 0x53, 0x65, + 0x23, 0x68, 0x1b, 0x05, 0x06, 0xd5, 0x0a, 0x4a, 0x53, 0x6d, 0x0f, 0x49, + 0x0b, 0x40, 0x21, 0x69, 0x0b, 0x43, 0x53, 0x65, 0x23, 0x68, 0x00, 0x2b, + 0x01, 0xdb, 0x02, 0xb0, 0x70, 0xbd, 0x04, 0x4a, 0x13, 0x68, 0xe0, 0x21, + 0x8b, 0x43, 0x61, 0x68, 0x0b, 0x43, 0x13, 0x60, 0xf5, 0xe7, 0xc0, 0x46, + 0x00, 0x10, 0x02, 0x40, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, + 0xff, 0xff, 0xff, 0xef, 0x88, 0x13, 0x00, 0x00, 0xff, 0xcf, 0xff, 0xff, + 0xff, 0x3f, 0xff, 0xff, 0xf0, 0xb5, 0xd6, 0x46, 0x4f, 0x46, 0x46, 0x46, + 0xc0, 0xb5, 0x00, 0x23, 0x3b, 0xe0, 0x05, 0x25, 0x00, 0xe0, 0x00, 0x25, + 0xa5, 0x40, 0x2c, 0x00, 0x3c, 0x43, 0x61, 0x4d, 0x18, 0x32, 0x92, 0x00, + 0x54, 0x51, 0x80, 0x22, 0xaf, 0x58, 0x4a, 0x46, 0xd2, 0x43, 0x3d, 0x00, + 0x4c, 0x46, 0xa5, 0x43, 0x4c, 0x68, 0xe4, 0x03, 0x02, 0xd5, 0x3d, 0x00, + 0x4c, 0x46, 0x25, 0x43, 0x58, 0x4c, 0x80, 0x27, 0xe5, 0x51, 0x84, 0x25, + 0x67, 0x59, 0x3d, 0x00, 0x15, 0x40, 0x4c, 0x68, 0xa4, 0x03, 0x02, 0xd5, + 0x3d, 0x00, 0x4c, 0x46, 0x25, 0x43, 0x52, 0x4c, 0x84, 0x27, 0xe5, 0x51, + 0x27, 0x68, 0x3d, 0x00, 0x15, 0x40, 0x4c, 0x68, 0xe4, 0x02, 0x02, 0xd5, + 0x3d, 0x00, 0x4c, 0x46, 0x25, 0x43, 0x4c, 0x4c, 0x25, 0x60, 0x65, 0x68, + 0x2a, 0x40, 0x4c, 0x68, 0xa4, 0x02, 0x01, 0xd5, 0x4a, 0x46, 0x2a, 0x43, + 0x47, 0x4c, 0x62, 0x60, 0x01, 0x33, 0x0c, 0x68, 0x22, 0x00, 0xda, 0x40, + 0x00, 0xd1, 0x81, 0xe0, 0x01, 0x22, 0x9a, 0x40, 0x26, 0x00, 0x16, 0x40, + 0xb1, 0x46, 0x14, 0x42, 0xf2, 0xd0, 0x4c, 0x68, 0x02, 0x2c, 0x01, 0xd0, + 0x12, 0x2c, 0x18, 0xd1, 0xdd, 0x08, 0x08, 0x35, 0xad, 0x00, 0x2c, 0x58, + 0xa4, 0x46, 0x07, 0x27, 0x1f, 0x40, 0xbf, 0x00, 0x0f, 0x24, 0xa2, 0x46, + 0x26, 0x00, 0xbe, 0x40, 0xb0, 0x46, 0x66, 0x46, 0x44, 0x46, 0xa6, 0x43, + 0xb4, 0x46, 0x0c, 0x69, 0x56, 0x46, 0x26, 0x40, 0x34, 0x00, 0xbc, 0x40, + 0x66, 0x46, 0x34, 0x43, 0x2c, 0x50, 0x04, 0x68, 0xa4, 0x46, 0x5d, 0x00, + 0x03, 0x24, 0xa2, 0x46, 0x27, 0x00, 0xaf, 0x40, 0xb8, 0x46, 0xff, 0x43, + 0x66, 0x46, 0x44, 0x46, 0xa6, 0x43, 0xb4, 0x46, 0x4c, 0x68, 0x56, 0x46, + 0x26, 0x40, 0x34, 0x00, 0xac, 0x40, 0x66, 0x46, 0x34, 0x43, 0x04, 0x60, + 0x4c, 0x68, 0x66, 0x1e, 0x01, 0x2e, 0x03, 0xd9, 0x11, 0x2c, 0x01, 0xd0, + 0x12, 0x2c, 0x12, 0xd1, 0x84, 0x68, 0x3c, 0x40, 0xa4, 0x46, 0xcc, 0x68, + 0xac, 0x40, 0x66, 0x46, 0x34, 0x43, 0x84, 0x60, 0x44, 0x68, 0x94, 0x43, + 0x4a, 0x68, 0x12, 0x09, 0x94, 0x46, 0x01, 0x22, 0x66, 0x46, 0x32, 0x40, + 0x9a, 0x40, 0x22, 0x43, 0x42, 0x60, 0x4a, 0x68, 0x03, 0x2a, 0x05, 0xd0, + 0xc4, 0x68, 0x3c, 0x40, 0x8a, 0x68, 0xaa, 0x40, 0x22, 0x43, 0xc2, 0x60, + 0x4a, 0x68, 0xd2, 0x00, 0x98, 0xd5, 0x9a, 0x08, 0x14, 0x00, 0x18, 0x34, + 0xa4, 0x00, 0x11, 0x4d, 0x67, 0x59, 0x03, 0x24, 0x1c, 0x40, 0xe4, 0x00, + 0x0f, 0x25, 0xa5, 0x40, 0xaf, 0x43, 0xa0, 0x25, 0xed, 0x05, 0xa8, 0x42, + 0x00, 0xd1, 0x4e, 0xe7, 0x0b, 0x4d, 0xa8, 0x42, 0x08, 0xd0, 0x0b, 0x4d, + 0xa8, 0x42, 0x07, 0xd0, 0x0a, 0x4d, 0xa8, 0x42, 0x00, 0xd1, 0x42, 0xe7, + 0x06, 0x25, 0x43, 0xe7, 0x01, 0x25, 0x41, 0xe7, 0x02, 0x25, 0x3f, 0xe7, + 0xe0, 0xbc, 0xba, 0x46, 0xb1, 0x46, 0xa8, 0x46, 0xf0, 0xbd, 0xc0, 0x46, + 0x00, 0x18, 0x02, 0x40, 0x00, 0x04, 0x00, 0x50, 0x00, 0x08, 0x00, 0x50, + 0x00, 0x14, 0x00, 0x50, 0x03, 0x69, 0x0b, 0x42, 0x01, 0xd0, 0x01, 0x20, + 0x70, 0x47, 0x00, 0x20, 0xfc, 0xe7, 0x00, 0x2a, 0x01, 0xd0, 0x81, 0x61, + 0x70, 0x47, 0x81, 0x62, 0xfc, 0xe7, 0x00, 0x00, 0x70, 0xb5, 0x24, 0x23, + 0x00, 0x22, 0xc2, 0x54, 0x01, 0x32, 0xc2, 0x54, 0x01, 0x33, 0xc3, 0x5c, + 0x02, 0x2b, 0x03, 0xd0, 0x04, 0x23, 0xc3, 0x63, 0x01, 0x20, 0x70, 0xbd, + 0x02, 0x68, 0x13, 0x68, 0x0e, 0x21, 0x8b, 0x43, 0x13, 0x60, 0x01, 0x68, + 0x0a, 0x68, 0x01, 0x23, 0x9a, 0x43, 0x0a, 0x60, 0x41, 0x6c, 0x0a, 0x68, + 0x12, 0x4c, 0x22, 0x40, 0x0a, 0x60, 0x12, 0x4c, 0x62, 0x68, 0x05, 0x6c, + 0x1c, 0x21, 0x29, 0x40, 0x8b, 0x40, 0x13, 0x43, 0x63, 0x60, 0x83, 0x6c, + 0xc2, 0x6c, 0x5a, 0x60, 0x03, 0x6d, 0x00, 0x2b, 0x06, 0xd0, 0x1a, 0x68, + 0x09, 0x49, 0x0a, 0x40, 0x1a, 0x60, 0x43, 0x6d, 0x82, 0x6d, 0x5a, 0x60, + 0x25, 0x23, 0x01, 0x22, 0xc2, 0x54, 0x01, 0x3b, 0x00, 0x22, 0xc2, 0x54, + 0x83, 0x6b, 0x00, 0x2b, 0x02, 0xd0, 0x98, 0x47, 0x00, 0x20, 0xce, 0xe7, + 0x00, 0x20, 0xcc, 0xe7, 0xff, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x02, 0x40, + 0x25, 0x23, 0xc0, 0x5c, 0xc0, 0xb2, 0x70, 0x47, 0x02, 0x68, 0x93, 0x69, + 0x9b, 0x07, 0x01, 0xd5, 0x00, 0x23, 0x93, 0x62, 0x03, 0x68, 0x9a, 0x69, + 0xd2, 0x07, 0x03, 0xd4, 0x9a, 0x69, 0x01, 0x21, 0x0a, 0x43, 0x9a, 0x61, + 0x70, 0x47, 0x00, 0x00, 0x10, 0xb5, 0x89, 0x05, 0x89, 0x0d, 0x12, 0x04, + 0x11, 0x43, 0x19, 0x43, 0x02, 0x9b, 0x19, 0x43, 0x49, 0x00, 0x49, 0x08, + 0x04, 0x68, 0x62, 0x68, 0x5b, 0x0d, 0x80, 0x20, 0xc0, 0x00, 0x03, 0x40, + 0x03, 0x48, 0x03, 0x43, 0x9a, 0x43, 0x13, 0x00, 0x0b, 0x43, 0x63, 0x60, + 0x10, 0xbd, 0xc0, 0x46, 0xff, 0x63, 0xff, 0x03, 0x43, 0x6b, 0x21, 0x4a, + 0x93, 0x42, 0x1d, 0xd0, 0x20, 0x4a, 0x93, 0x42, 0x1a, 0xd0, 0x20, 0x4a, + 0x93, 0x42, 0x17, 0xd0, 0x0b, 0xb2, 0x00, 0x2b, 0x0f, 0xdb, 0x00, 0x23, + 0xca, 0x07, 0x01, 0xd5, 0xf2, 0x22, 0x13, 0x43, 0x8a, 0x07, 0x01, 0xd5, + 0xf4, 0x22, 0x13, 0x43, 0x10, 0x29, 0x06, 0xd0, 0x20, 0x29, 0x19, 0xd1, + 0x20, 0x22, 0x13, 0x43, 0x16, 0xe0, 0xb8, 0x23, 0xee, 0xe7, 0x90, 0x22, + 0x13, 0x43, 0xf5, 0xe7, 0x0b, 0xb2, 0x00, 0x2b, 0x13, 0xdb, 0x00, 0x23, + 0xca, 0x07, 0x01, 0xd5, 0xf2, 0x22, 0x13, 0x43, 0x8a, 0x07, 0x01, 0xd5, + 0xf4, 0x22, 0x13, 0x43, 0x10, 0x29, 0x0a, 0xd0, 0x20, 0x29, 0x0b, 0xd0, + 0x40, 0x29, 0x0c, 0xd0, 0x01, 0x68, 0x0a, 0x68, 0x13, 0x43, 0x0b, 0x60, + 0x70, 0x47, 0xb8, 0x23, 0xea, 0xe7, 0x90, 0x22, 0x13, 0x43, 0xf1, 0xe7, + 0x60, 0x22, 0x13, 0x43, 0xf0, 0xe7, 0x40, 0x22, 0x13, 0x43, 0xef, 0xe7, + 0x95, 0x22, 0x00, 0x08, 0x65, 0x21, 0x00, 0x08, 0xc9, 0x1f, 0x00, 0x08, + 0x30, 0xb5, 0xcb, 0x07, 0x09, 0xd5, 0x41, 0x23, 0xc3, 0x5c, 0x28, 0x22, + 0x13, 0x40, 0x28, 0x2b, 0x01, 0xd0, 0xf2, 0x23, 0x02, 0xe0, 0x1a, 0x33, + 0x00, 0xe0, 0x00, 0x23, 0x8a, 0x07, 0x09, 0xd5, 0x44, 0x24, 0x1c, 0x43, + 0x41, 0x22, 0x82, 0x5c, 0x28, 0x25, 0x2a, 0x40, 0x28, 0x2a, 0x0f, 0xd0, + 0xf4, 0x22, 0x13, 0x43, 0x0a, 0xb2, 0x00, 0x2a, 0x0c, 0xdb, 0x10, 0x29, + 0x0d, 0xd0, 0x20, 0x29, 0x0e, 0xd0, 0x40, 0x29, 0x0f, 0xd0, 0x01, 0x68, + 0x0a, 0x68, 0x9a, 0x43, 0x0a, 0x60, 0x30, 0xbd, 0x23, 0x00, 0xef, 0xe7, + 0xb8, 0x22, 0x13, 0x43, 0xef, 0xe7, 0x90, 0x22, 0x13, 0x43, 0xee, 0xe7, + 0x20, 0x22, 0x13, 0x43, 0xed, 0xe7, 0x40, 0x22, 0x13, 0x43, 0xec, 0xe7, + 0x10, 0xb5, 0x04, 0x1e, 0x60, 0xd0, 0x41, 0x23, 0xc3, 0x5c, 0x00, 0x2b, + 0x48, 0xd0, 0x41, 0x23, 0x24, 0x22, 0xe2, 0x54, 0x22, 0x68, 0x13, 0x68, + 0x01, 0x21, 0x8b, 0x43, 0x13, 0x60, 0x63, 0x68, 0x22, 0x68, 0x2a, 0x49, + 0x0b, 0x40, 0x13, 0x61, 0x22, 0x68, 0x93, 0x68, 0x28, 0x49, 0x0b, 0x40, + 0x93, 0x60, 0xe3, 0x68, 0x01, 0x2b, 0x39, 0xd0, 0xa1, 0x68, 0x22, 0x68, + 0x84, 0x23, 0x1b, 0x02, 0x0b, 0x43, 0x93, 0x60, 0xe3, 0x68, 0x02, 0x2b, + 0x37, 0xd0, 0x22, 0x68, 0x53, 0x68, 0x21, 0x49, 0x0b, 0x40, 0x53, 0x60, + 0x22, 0x68, 0x51, 0x68, 0x1f, 0x4b, 0x0b, 0x43, 0x53, 0x60, 0x22, 0x68, + 0xd3, 0x68, 0x1b, 0x49, 0x0b, 0x40, 0xd3, 0x60, 0x23, 0x69, 0x62, 0x69, + 0x13, 0x43, 0xa2, 0x69, 0x12, 0x02, 0x21, 0x68, 0x13, 0x43, 0xcb, 0x60, + 0xe3, 0x69, 0x21, 0x6a, 0x22, 0x68, 0x0b, 0x43, 0x13, 0x60, 0x22, 0x68, + 0x13, 0x68, 0x01, 0x21, 0x0b, 0x43, 0x13, 0x60, 0x00, 0x23, 0x63, 0x64, + 0x41, 0x22, 0x1f, 0x31, 0xa1, 0x54, 0x23, 0x63, 0x01, 0x32, 0xa3, 0x54, + 0x00, 0x20, 0x10, 0xbd, 0x40, 0x33, 0x00, 0x22, 0xc2, 0x54, 0xff, 0xf7, + 0x27, 0xf9, 0xb0, 0xe7, 0xa1, 0x68, 0x22, 0x68, 0x80, 0x23, 0x1b, 0x02, + 0x0b, 0x43, 0x93, 0x60, 0xc4, 0xe7, 0x22, 0x68, 0x51, 0x68, 0x80, 0x23, + 0x1b, 0x01, 0x0b, 0x43, 0x53, 0x60, 0xc5, 0xe7, 0x01, 0x20, 0xe8, 0xe7, + 0xff, 0xff, 0xff, 0xf0, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, + 0x00, 0x80, 0x00, 0x02, 0xf8, 0xb5, 0x04, 0x00, 0x0d, 0x00, 0x16, 0x00, + 0x1f, 0x00, 0x41, 0x23, 0xc3, 0x5c, 0x28, 0x22, 0x13, 0x40, 0x28, 0x2b, + 0x58, 0xd1, 0x00, 0x29, 0x01, 0xd0, 0x00, 0x2e, 0x04, 0xd1, 0x80, 0x23, + 0x9b, 0x00, 0x63, 0x64, 0x01, 0x20, 0x50, 0xe0, 0x29, 0x49, 0xff, 0xf7, + 0x45, 0xff, 0x40, 0x23, 0xe3, 0x5c, 0x01, 0x2b, 0x4a, 0xd0, 0x40, 0x23, + 0x01, 0x22, 0xe2, 0x54, 0x01, 0x33, 0xe3, 0x5c, 0x2a, 0x2b, 0x27, 0xd0, + 0x41, 0x23, 0x29, 0x22, 0xe2, 0x54, 0x01, 0x33, 0x09, 0x3a, 0xe2, 0x54, + 0x00, 0x23, 0x63, 0x64, 0x22, 0x68, 0x53, 0x68, 0x1e, 0x49, 0x0b, 0x40, + 0x53, 0x60, 0x65, 0x62, 0x66, 0x85, 0x63, 0x8d, 0x23, 0x85, 0xe7, 0x62, + 0x1b, 0x4b, 0x63, 0x63, 0x22, 0x68, 0x91, 0x69, 0x08, 0x23, 0x0b, 0x40, + 0x91, 0x69, 0xc9, 0x03, 0x03, 0xd5, 0x00, 0x2b, 0x01, 0xd0, 0x08, 0x23, + 0xd3, 0x61, 0x40, 0x23, 0x00, 0x22, 0xe2, 0x54, 0x11, 0x49, 0x20, 0x00, + 0xff, 0xf7, 0xca, 0xfe, 0x00, 0x20, 0x1a, 0xe0, 0x02, 0x21, 0x20, 0x00, + 0xff, 0xf7, 0x0e, 0xff, 0x22, 0x68, 0x13, 0x68, 0x1b, 0x04, 0xcf, 0xd5, + 0x13, 0x68, 0x0b, 0x49, 0x0b, 0x40, 0x13, 0x60, 0xe3, 0x6b, 0x00, 0x2b, + 0xc8, 0xd0, 0x0a, 0x4a, 0x9a, 0x63, 0xe0, 0x6b, 0xff, 0xf7, 0x42, 0xfe, + 0x00, 0x28, 0xc1, 0xd0, 0xe0, 0x6b, 0x83, 0x6b, 0x98, 0x47, 0xbd, 0xe7, + 0x01, 0x20, 0xf8, 0xbd, 0x02, 0x20, 0xfc, 0xe7, 0x01, 0x80, 0x00, 0x00, + 0xff, 0x7f, 0xff, 0xff, 0x65, 0x1d, 0x00, 0x08, 0x2f, 0x24, 0x00, 0x08, + 0xf8, 0xb5, 0x04, 0x00, 0x0d, 0x00, 0x16, 0x00, 0x1f, 0x00, 0x41, 0x23, + 0xc3, 0x5c, 0x28, 0x22, 0x13, 0x40, 0x28, 0x2b, 0x58, 0xd1, 0x00, 0x29, + 0x01, 0xd0, 0x00, 0x2e, 0x04, 0xd1, 0x80, 0x23, 0x9b, 0x00, 0x63, 0x64, + 0x01, 0x20, 0x50, 0xe0, 0x29, 0x49, 0xff, 0xf7, 0xd5, 0xfe, 0x40, 0x23, + 0xe3, 0x5c, 0x01, 0x2b, 0x4a, 0xd0, 0x40, 0x23, 0x01, 0x22, 0xe2, 0x54, + 0x01, 0x33, 0xe3, 0x5c, 0x29, 0x2b, 0x27, 0xd0, 0x41, 0x23, 0x2a, 0x22, + 0xe2, 0x54, 0x01, 0x33, 0x0a, 0x3a, 0xe2, 0x54, 0x00, 0x23, 0x63, 0x64, + 0x22, 0x68, 0x53, 0x68, 0x1e, 0x49, 0x0b, 0x40, 0x53, 0x60, 0x65, 0x62, + 0x66, 0x85, 0x63, 0x8d, 0x23, 0x85, 0xe7, 0x62, 0x1b, 0x4b, 0x63, 0x63, + 0x22, 0x68, 0x91, 0x69, 0x08, 0x23, 0x0b, 0x40, 0x91, 0x69, 0xc9, 0x03, + 0x03, 0xd4, 0x00, 0x2b, 0x01, 0xd0, 0x08, 0x23, 0xd3, 0x61, 0x40, 0x23, + 0x00, 0x22, 0xe2, 0x54, 0x11, 0x49, 0x20, 0x00, 0xff, 0xf7, 0x5a, 0xfe, + 0x00, 0x20, 0x1a, 0xe0, 0x01, 0x21, 0x20, 0x00, 0xff, 0xf7, 0x9e, 0xfe, + 0x22, 0x68, 0x13, 0x68, 0x5b, 0x04, 0xcf, 0xd5, 0x13, 0x68, 0x0d, 0x49, + 0x0b, 0x40, 0x13, 0x60, 0xa3, 0x6b, 0x00, 0x2b, 0xc8, 0xd0, 0x0b, 0x4a, + 0x9a, 0x63, 0xa0, 0x6b, 0xff, 0xf7, 0xd2, 0xfd, 0x00, 0x28, 0xc1, 0xd0, + 0xa0, 0x6b, 0x83, 0x6b, 0x98, 0x47, 0xbd, 0xe7, 0x01, 0x20, 0xf8, 0xbd, + 0x02, 0x20, 0xfc, 0xe7, 0x02, 0x80, 0x00, 0x00, 0xff, 0x7f, 0xff, 0xff, + 0x65, 0x1d, 0x00, 0x08, 0xff, 0xbf, 0xff, 0xff, 0x2f, 0x24, 0x00, 0x08, + 0x10, 0xb5, 0x41, 0x23, 0xc3, 0x5c, 0x20, 0x2b, 0x01, 0xd0, 0x02, 0x20, + 0x10, 0xbd, 0x21, 0x33, 0x28, 0x22, 0xc2, 0x54, 0x03, 0x4b, 0x43, 0x63, + 0x80, 0x21, 0x09, 0x02, 0xff, 0xf7, 0x20, 0xfe, 0x00, 0x20, 0xf3, 0xe7, + 0x65, 0x1d, 0x00, 0x08, 0x10, 0xb5, 0x03, 0x68, 0x99, 0x69, 0x1a, 0x68, + 0x43, 0x6b, 0x00, 0x2b, 0x00, 0xd0, 0x98, 0x47, 0x10, 0xbd, 0x70, 0x47, + 0x70, 0x47, 0x70, 0xb5, 0x04, 0x00, 0x42, 0x23, 0x00, 0x22, 0xc2, 0x54, + 0x01, 0x3b, 0xc3, 0x5c, 0x21, 0x2b, 0x0f, 0xd0, 0x41, 0x23, 0x20, 0x22, + 0xc2, 0x54, 0x2f, 0x3b, 0x03, 0x63, 0x00, 0x25, 0x45, 0x63, 0x02, 0x21, + 0xff, 0xf7, 0x48, 0xfe, 0x40, 0x23, 0xe5, 0x54, 0x20, 0x00, 0xff, 0xf7, + 0xe7, 0xff, 0x70, 0xbd, 0x20, 0x33, 0x20, 0x32, 0xc2, 0x54, 0x30, 0x3b, + 0x03, 0x63, 0x00, 0x25, 0x45, 0x63, 0x01, 0x21, 0xff, 0xf7, 0x38, 0xfe, + 0x40, 0x23, 0xe5, 0x54, 0x20, 0x00, 0xff, 0xf7, 0xd6, 0xff, 0xee, 0xe7, + 0x10, 0xb5, 0x04, 0x00, 0x03, 0x68, 0x1a, 0x68, 0x42, 0x21, 0x00, 0x20, + 0x60, 0x54, 0x51, 0x04, 0x0c, 0xd5, 0x1a, 0x68, 0x19, 0x49, 0x0a, 0x40, + 0x1a, 0x60, 0x41, 0x23, 0xe3, 0x5c, 0x29, 0x2b, 0x0b, 0xd0, 0x41, 0x23, + 0xe3, 0x5c, 0x2a, 0x2b, 0x17, 0xd0, 0x10, 0xbd, 0x12, 0x04, 0xf4, 0xd5, + 0x1a, 0x68, 0x13, 0x49, 0x0a, 0x40, 0x1a, 0x60, 0xef, 0xe7, 0x18, 0x33, + 0x28, 0x22, 0xe2, 0x54, 0x20, 0x3b, 0x23, 0x63, 0x01, 0x21, 0x20, 0x00, + 0xff, 0xf7, 0x0c, 0xfe, 0x40, 0x23, 0x00, 0x22, 0xe2, 0x54, 0x20, 0x00, + 0xfe, 0xf7, 0x42, 0xfd, 0xe7, 0xe7, 0x17, 0x33, 0x28, 0x22, 0xe2, 0x54, + 0x1f, 0x3b, 0x23, 0x63, 0x02, 0x21, 0x20, 0x00, 0xff, 0xf7, 0xfc, 0xfd, + 0x40, 0x23, 0x00, 0x22, 0xe2, 0x54, 0x20, 0x00, 0xfe, 0xf7, 0x34, 0xfd, + 0xd7, 0xe7, 0xc0, 0x46, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, + 0xf8, 0xb5, 0x04, 0x00, 0x41, 0x23, 0xc3, 0x5c, 0x28, 0x22, 0x13, 0x40, + 0x28, 0x2b, 0x06, 0xd0, 0x03, 0x68, 0x08, 0x22, 0xda, 0x61, 0x40, 0x23, + 0x00, 0x22, 0xc2, 0x54, 0xf8, 0xbd, 0x00, 0x68, 0x85, 0x69, 0x2d, 0x0c, + 0x27, 0x3b, 0x1d, 0x40, 0x86, 0x69, 0x36, 0x0c, 0xfe, 0x21, 0x0e, 0x40, + 0x83, 0x68, 0x9b, 0x05, 0x9b, 0x0d, 0xc7, 0x68, 0x0f, 0x40, 0xe2, 0x68, + 0x02, 0x2a, 0x24, 0xd1, 0xda, 0x09, 0x72, 0x40, 0xf8, 0x39, 0x11, 0x42, + 0x11, 0xd1, 0xa2, 0x6c, 0x01, 0x32, 0xa2, 0x64, 0xa2, 0x6c, 0x02, 0x2a, + 0xe2, 0xd1, 0x00, 0x22, 0xa2, 0x64, 0x02, 0x31, 0xc1, 0x61, 0x38, 0x31, + 0x62, 0x54, 0x1a, 0x00, 0x29, 0x00, 0x20, 0x00, 0xfe, 0xf7, 0xfe, 0xfc, + 0xd6, 0xe7, 0x80, 0x21, 0x09, 0x02, 0x20, 0x00, 0xff, 0xf7, 0xb4, 0xfd, + 0x40, 0x23, 0x00, 0x22, 0xe2, 0x54, 0x3a, 0x00, 0x29, 0x00, 0x20, 0x00, + 0xfe, 0xf7, 0xf0, 0xfc, 0xc8, 0xe7, 0x80, 0x21, 0x09, 0x02, 0x20, 0x00, + 0xff, 0xf7, 0xa6, 0xfd, 0x40, 0x23, 0x00, 0x22, 0xe2, 0x54, 0x32, 0x00, + 0x29, 0x00, 0x20, 0x00, 0xfe, 0xf7, 0xe2, 0xfc, 0xba, 0xe7, 0x00, 0x00, + 0x10, 0xb5, 0x04, 0x00, 0x16, 0x4b, 0xc3, 0x62, 0x00, 0x23, 0x03, 0x63, + 0x41, 0x22, 0x20, 0x20, 0xa0, 0x54, 0x01, 0x32, 0xa3, 0x54, 0x63, 0x63, + 0x49, 0x07, 0x13, 0xd5, 0x23, 0x68, 0x5a, 0x6a, 0x63, 0x6a, 0x1a, 0x70, + 0x63, 0x6a, 0x01, 0x33, 0x63, 0x62, 0x23, 0x8d, 0x00, 0x2b, 0x09, 0xd0, + 0x01, 0x3b, 0x23, 0x85, 0x63, 0x8d, 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, + 0x63, 0x6c, 0x04, 0x22, 0x13, 0x43, 0x63, 0x64, 0x07, 0x49, 0x20, 0x00, + 0xff, 0xf7, 0x76, 0xfd, 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, 0x40, 0x23, + 0x00, 0x22, 0xe2, 0x54, 0x20, 0x00, 0xfe, 0xf7, 0xcf, 0xfc, 0x10, 0xbd, + 0x00, 0x00, 0xff, 0xff, 0x03, 0x80, 0x00, 0x00, 0x70, 0x47, 0x70, 0x47, + 0x70, 0x47, 0x10, 0xb5, 0x41, 0x23, 0xc3, 0x5c, 0x60, 0x2b, 0x06, 0xd0, + 0x00, 0x23, 0x03, 0x63, 0x40, 0x22, 0x83, 0x54, 0xfe, 0xf7, 0xea, 0xfd, + 0x10, 0xbd, 0x1f, 0x3b, 0x20, 0x22, 0xc2, 0x54, 0x00, 0x23, 0x03, 0x63, + 0x20, 0x32, 0x83, 0x54, 0xff, 0xf7, 0xea, 0xff, 0xf4, 0xe7, 0x00, 0x00, + 0x10, 0xb5, 0x04, 0x00, 0x41, 0x23, 0xc3, 0x5c, 0x00, 0x22, 0x42, 0x20, + 0x22, 0x54, 0x43, 0x48, 0xe0, 0x62, 0x62, 0x85, 0x62, 0x6c, 0x0a, 0x43, + 0x62, 0x64, 0x28, 0x3b, 0xdb, 0xb2, 0x02, 0x2b, 0x1b, 0xd8, 0x03, 0x21, + 0x20, 0x00, 0xff, 0xf7, 0x39, 0xfd, 0x41, 0x23, 0x28, 0x22, 0xe2, 0x54, + 0x3b, 0x4b, 0x63, 0x63, 0x23, 0x6b, 0xa2, 0x6b, 0x00, 0x2a, 0x03, 0xd0, + 0x11, 0x2b, 0x2d, 0xd0, 0x21, 0x2b, 0x2b, 0xd0, 0xe2, 0x6b, 0x00, 0x2a, + 0x03, 0xd0, 0x12, 0x2b, 0x46, 0xd0, 0x22, 0x2b, 0x44, 0xd0, 0x20, 0x00, + 0xff, 0xf7, 0xbd, 0xff, 0x10, 0xbd, 0x32, 0x49, 0x20, 0x00, 0xff, 0xf7, + 0x1d, 0xfd, 0x20, 0x00, 0xff, 0xf7, 0xa6, 0xfc, 0x41, 0x23, 0xe3, 0x5c, + 0x60, 0x2b, 0x12, 0xd0, 0x20, 0x23, 0x41, 0x22, 0xa3, 0x54, 0x22, 0x68, + 0x91, 0x69, 0x0b, 0x42, 0x0b, 0xd0, 0x93, 0x69, 0xdb, 0x06, 0x05, 0xd5, + 0x10, 0x23, 0xd3, 0x61, 0x63, 0x6c, 0x04, 0x22, 0x13, 0x43, 0x63, 0x64, + 0x23, 0x68, 0x20, 0x22, 0xda, 0x61, 0x00, 0x23, 0x63, 0x63, 0xcb, 0xe7, + 0x22, 0x68, 0x13, 0x68, 0x5b, 0x04, 0x03, 0xd5, 0x13, 0x68, 0x20, 0x49, + 0x0b, 0x40, 0x13, 0x60, 0xa0, 0x6b, 0xff, 0xf7, 0x7d, 0xfc, 0x01, 0x28, + 0x0e, 0xd0, 0xa3, 0x6b, 0x1c, 0x4a, 0x9a, 0x63, 0x40, 0x23, 0x00, 0x22, + 0xe2, 0x54, 0xa0, 0x6b, 0xff, 0xf7, 0x2e, 0xfc, 0x00, 0x28, 0xc5, 0xd0, + 0xa0, 0x6b, 0x83, 0x6b, 0x98, 0x47, 0xc1, 0xe7, 0x20, 0x00, 0xff, 0xf7, + 0x7c, 0xff, 0xbd, 0xe7, 0x23, 0x68, 0x1a, 0x68, 0x12, 0x04, 0x03, 0xd5, + 0x1a, 0x68, 0x12, 0x49, 0x0a, 0x40, 0x1a, 0x60, 0xe0, 0x6b, 0xff, 0xf7, + 0x5d, 0xfc, 0x01, 0x28, 0x0e, 0xd0, 0xe3, 0x6b, 0x0c, 0x4a, 0x9a, 0x63, + 0x40, 0x23, 0x00, 0x22, 0xe2, 0x54, 0xe0, 0x6b, 0xff, 0xf7, 0x0e, 0xfc, + 0x00, 0x28, 0xa5, 0xd0, 0xe0, 0x6b, 0x83, 0x6b, 0x98, 0x47, 0xa1, 0xe7, + 0x20, 0x00, 0xff, 0xf7, 0x5c, 0xff, 0x9d, 0xe7, 0x00, 0x00, 0xff, 0xff, + 0x65, 0x1d, 0x00, 0x08, 0x03, 0x80, 0x00, 0x00, 0xff, 0xbf, 0xff, 0xff, + 0x2f, 0x24, 0x00, 0x08, 0xff, 0x7f, 0xff, 0xff, 0x70, 0xb5, 0x04, 0x00, + 0x0d, 0x00, 0x02, 0x68, 0x16, 0x68, 0x41, 0x23, 0xc3, 0x5c, 0x20, 0x21, + 0xd1, 0x61, 0x21, 0x3b, 0xda, 0xb2, 0x09, 0x2a, 0x08, 0xd8, 0x93, 0x00, + 0x4e, 0x4a, 0xd3, 0x58, 0x9f, 0x46, 0x4e, 0x49, 0xff, 0xf7, 0xa0, 0xfc, + 0x21, 0x23, 0x23, 0x63, 0x22, 0x68, 0x51, 0x68, 0x80, 0x23, 0x1b, 0x02, + 0x0b, 0x43, 0x53, 0x60, 0x22, 0x68, 0x53, 0x68, 0x48, 0x49, 0x0b, 0x40, + 0x53, 0x60, 0x20, 0x00, 0xff, 0xf7, 0x1c, 0xfc, 0x73, 0x04, 0x4d, 0xd5, + 0x22, 0x68, 0x13, 0x68, 0x44, 0x49, 0x0b, 0x40, 0x13, 0x60, 0xa3, 0x6b, + 0x00, 0x2b, 0x03, 0xd0, 0x1b, 0x68, 0x5b, 0x68, 0x9b, 0xb2, 0x63, 0x85, + 0x6b, 0x07, 0x11, 0xd5, 0x04, 0x23, 0x9d, 0x43, 0x23, 0x68, 0x5a, 0x6a, + 0x63, 0x6a, 0x1a, 0x70, 0x63, 0x6a, 0x01, 0x33, 0x63, 0x62, 0x23, 0x8d, + 0x00, 0x2b, 0x05, 0xd0, 0x01, 0x3b, 0x23, 0x85, 0x63, 0x8d, 0x01, 0x3b, + 0x9b, 0xb2, 0x63, 0x85, 0x63, 0x8d, 0x9b, 0xb2, 0x00, 0x2b, 0x03, 0xd0, + 0x63, 0x6c, 0x04, 0x22, 0x13, 0x43, 0x63, 0x64, 0x00, 0x23, 0x42, 0x22, + 0xa3, 0x54, 0x63, 0x63, 0x63, 0x6c, 0x00, 0x2b, 0x2d, 0xd1, 0xe2, 0x6a, + 0x2e, 0x4b, 0x9a, 0x42, 0x36, 0xd1, 0x41, 0x23, 0xe3, 0x5c, 0x22, 0x2b, + 0x42, 0xd0, 0x41, 0x23, 0x20, 0x22, 0xe2, 0x54, 0x00, 0x23, 0x23, 0x63, + 0x20, 0x32, 0xa3, 0x54, 0x20, 0x00, 0xfe, 0xf7, 0x89, 0xfb, 0x36, 0xe0, + 0x26, 0x49, 0xff, 0xf7, 0x49, 0xfc, 0x22, 0x23, 0x23, 0x63, 0xa7, 0xe7, + 0x24, 0x49, 0xff, 0xf7, 0x43, 0xfc, 0x00, 0x23, 0x23, 0x63, 0xa1, 0xe7, + 0x36, 0x04, 0xbb, 0xd5, 0x22, 0x68, 0x13, 0x68, 0x20, 0x49, 0x0b, 0x40, + 0x13, 0x60, 0xe3, 0x6b, 0x00, 0x2b, 0xb3, 0xd0, 0x1b, 0x68, 0x5b, 0x68, + 0x9b, 0xb2, 0x63, 0x85, 0xae, 0xe7, 0x61, 0x6c, 0x20, 0x00, 0xff, 0xf7, + 0xdf, 0xfe, 0x41, 0x23, 0xe3, 0x5c, 0x28, 0x2b, 0x13, 0xd1, 0x29, 0x00, + 0x20, 0x00, 0xff, 0xf7, 0x89, 0xfe, 0x0e, 0xe0, 0x20, 0x00, 0xff, 0xf7, + 0xef, 0xfd, 0x10, 0x4b, 0xe3, 0x62, 0x41, 0x23, 0x20, 0x22, 0xe2, 0x54, + 0x00, 0x23, 0x23, 0x63, 0x20, 0x32, 0xa3, 0x54, 0x20, 0x00, 0xfe, 0xf7, + 0x77, 0xfb, 0x70, 0xbd, 0x1f, 0x33, 0x20, 0x22, 0xe2, 0x54, 0x00, 0x23, + 0x23, 0x63, 0x20, 0x32, 0xa3, 0x54, 0x20, 0x00, 0xfe, 0xf7, 0x48, 0xfb, + 0xf3, 0xe7, 0xc0, 0x46, 0xd0, 0x2f, 0x00, 0x08, 0x01, 0x80, 0x00, 0x00, + 0x00, 0xe8, 0x00, 0xfe, 0xff, 0xbf, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0x02, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0xff, 0x7f, 0xff, 0xff, + 0xf8, 0xb5, 0x04, 0x00, 0x0d, 0x00, 0x16, 0x00, 0xc7, 0x6a, 0x40, 0x23, + 0xc3, 0x5c, 0x01, 0x2b, 0x00, 0xd1, 0x96, 0xe0, 0x01, 0x23, 0x40, 0x22, + 0x83, 0x54, 0x4a, 0x09, 0x13, 0x42, 0x01, 0xd0, 0xb3, 0x06, 0x17, 0xd4, + 0xeb, 0x06, 0x40, 0xd5, 0xf3, 0x06, 0x3e, 0xd5, 0x63, 0x8d, 0x9b, 0xb2, + 0x00, 0x2b, 0x28, 0xd1, 0x41, 0x33, 0xe3, 0x5c, 0x28, 0x2b, 0x0e, 0xd0, + 0x41, 0x23, 0xe3, 0x5c, 0x29, 0x2b, 0x13, 0xd0, 0x23, 0x68, 0x10, 0x22, + 0xda, 0x61, 0x40, 0x23, 0x00, 0x22, 0xe2, 0x54, 0x00, 0x20, 0xf8, 0xbd, + 0xff, 0xf7, 0x18, 0xff, 0xe4, 0xe7, 0x80, 0x23, 0x9b, 0x04, 0x9f, 0x42, + 0xec, 0xd1, 0x29, 0x00, 0x20, 0x00, 0xff, 0xf7, 0x27, 0xfe, 0xee, 0xe7, + 0x36, 0x4b, 0x9f, 0x42, 0xe8, 0xd0, 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, + 0x20, 0x00, 0xff, 0xf7, 0x45, 0xfb, 0x20, 0x00, 0xff, 0xf7, 0x84, 0xfd, + 0xe1, 0xe7, 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, 0x63, 0x6c, 0x0c, 0x3a, + 0x13, 0x43, 0x63, 0x64, 0x00, 0x2f, 0x03, 0xd0, 0x80, 0x23, 0x5b, 0x04, + 0x9f, 0x42, 0xd4, 0xd1, 0x61, 0x6c, 0x20, 0x00, 0xff, 0xf7, 0x56, 0xfe, + 0xcf, 0xe7, 0x6b, 0x07, 0x1e, 0xd5, 0x73, 0x07, 0x1c, 0xd5, 0x63, 0x8d, + 0x9b, 0xb2, 0x00, 0x2b, 0x0d, 0xd0, 0x23, 0x68, 0x5a, 0x6a, 0x63, 0x6a, + 0x1a, 0x70, 0x63, 0x6a, 0x01, 0x33, 0x63, 0x62, 0x23, 0x8d, 0x01, 0x3b, + 0x23, 0x85, 0x63, 0x8d, 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, 0x63, 0x8d, + 0x9b, 0xb2, 0x00, 0x2b, 0xb5, 0xd1, 0x1a, 0x4b, 0x9f, 0x42, 0xb2, 0xd0, + 0x20, 0x00, 0xff, 0xf7, 0x51, 0xfd, 0xae, 0xe7, 0x2b, 0x07, 0x01, 0xd5, + 0x33, 0x07, 0x16, 0xd4, 0xad, 0x07, 0xa8, 0xd5, 0xb6, 0x07, 0xa6, 0xd5, + 0x63, 0x8d, 0x9b, 0xb2, 0x00, 0x2b, 0x13, 0xd0, 0x62, 0x6a, 0x23, 0x68, + 0x12, 0x78, 0x9a, 0x62, 0x63, 0x6a, 0x01, 0x33, 0x63, 0x62, 0x63, 0x8d, + 0x01, 0x3b, 0x9b, 0xb2, 0x63, 0x85, 0x23, 0x8d, 0x01, 0x3b, 0x23, 0x85, + 0x93, 0xe7, 0x29, 0x00, 0x20, 0x00, 0xff, 0xf7, 0x73, 0xfd, 0x8e, 0xe7, + 0x80, 0x23, 0x5b, 0x04, 0x9f, 0x42, 0x02, 0xd0, 0x00, 0x2f, 0x00, 0xd0, + 0x87, 0xe7, 0x20, 0x00, 0xff, 0xf7, 0x26, 0xfd, 0x83, 0xe7, 0x02, 0x20, + 0x85, 0xe7, 0xc0, 0x46, 0x00, 0x00, 0xff, 0xff, 0x30, 0xb5, 0x83, 0xb0, + 0x04, 0x00, 0x0d, 0x00, 0x03, 0x68, 0x20, 0x22, 0xda, 0x61, 0x41, 0x23, + 0xc3, 0x5c, 0x21, 0x2b, 0x29, 0xd0, 0x41, 0x23, 0xc3, 0x5c, 0x22, 0x2b, + 0x2b, 0xd0, 0x22, 0x68, 0x53, 0x68, 0x3b, 0x49, 0x0b, 0x40, 0x53, 0x60, + 0x00, 0x23, 0x63, 0x63, 0x39, 0x4b, 0xe3, 0x62, 0xeb, 0x06, 0x06, 0xd5, + 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, 0x63, 0x6c, 0x0c, 0x3a, 0x13, 0x43, + 0x63, 0x64, 0x41, 0x23, 0xe3, 0x5c, 0x60, 0x2b, 0x1b, 0xd0, 0x20, 0x00, + 0xff, 0xf7, 0xb6, 0xfa, 0x62, 0x6c, 0x41, 0x23, 0xe3, 0x5c, 0x60, 0x2b, + 0x01, 0xd0, 0x00, 0x2a, 0x1a, 0xd0, 0x61, 0x6c, 0x20, 0x00, 0xff, 0xf7, + 0xd1, 0xfd, 0x03, 0xb0, 0x30, 0xbd, 0x01, 0x21, 0xff, 0xf7, 0x1a, 0xfb, + 0x11, 0x23, 0x23, 0x63, 0xd3, 0xe7, 0x02, 0x21, 0xff, 0xf7, 0x14, 0xfb, + 0x12, 0x23, 0x23, 0x63, 0xcd, 0xe7, 0x6d, 0x07, 0xe1, 0xd5, 0x23, 0x68, + 0x5a, 0x6a, 0xff, 0x23, 0x13, 0x40, 0x01, 0x93, 0x01, 0x9b, 0xda, 0xe7, + 0x41, 0x23, 0xe3, 0x5c, 0x21, 0x2b, 0x15, 0xd0, 0x41, 0x23, 0xe3, 0x5c, + 0x22, 0x2b, 0xe0, 0xd1, 0x1f, 0x33, 0x20, 0x22, 0xe2, 0x54, 0x00, 0x23, + 0x23, 0x63, 0x42, 0x33, 0xe3, 0x5c, 0x40, 0x2b, 0x23, 0xd0, 0x00, 0x23, + 0x42, 0x22, 0xa3, 0x54, 0x02, 0x3a, 0xa3, 0x54, 0x20, 0x00, 0xff, 0xf7, + 0x93, 0xfc, 0xce, 0xe7, 0x20, 0x33, 0x20, 0x22, 0xe2, 0x54, 0x00, 0x23, + 0x23, 0x63, 0x42, 0x33, 0xe3, 0x5c, 0x40, 0x2b, 0x08, 0xd0, 0x00, 0x23, + 0x42, 0x22, 0xa3, 0x54, 0x02, 0x3a, 0xa3, 0x54, 0x20, 0x00, 0xff, 0xf7, + 0x80, 0xfc, 0xbc, 0xe7, 0x00, 0x23, 0x22, 0x32, 0xa3, 0x54, 0x02, 0x3a, + 0xa3, 0x54, 0x20, 0x00, 0xff, 0xf7, 0x6c, 0xfd, 0xb3, 0xe7, 0x00, 0x23, + 0x22, 0x32, 0xa3, 0x54, 0x02, 0x3a, 0xa3, 0x54, 0x20, 0x00, 0xff, 0xf7, + 0x64, 0xfd, 0xaa, 0xe7, 0x00, 0xe8, 0x00, 0xfe, 0x00, 0x00, 0xff, 0xff, + 0x10, 0xb5, 0x82, 0xb0, 0x04, 0x00, 0x40, 0x23, 0xc3, 0x5c, 0x01, 0x2b, + 0x00, 0xd1, 0xbe, 0xe0, 0x01, 0x23, 0x40, 0x20, 0x23, 0x54, 0x08, 0x09, + 0x03, 0x42, 0x01, 0xd0, 0xd3, 0x06, 0x0f, 0xd4, 0x8b, 0x07, 0x1c, 0xd5, + 0x93, 0x07, 0x1a, 0xd5, 0x23, 0x68, 0x22, 0x6d, 0x9a, 0x62, 0x01, 0x23, + 0x5b, 0x42, 0x23, 0x65, 0x40, 0x23, 0x00, 0x22, 0xe2, 0x54, 0x00, 0x20, + 0x02, 0xb0, 0x10, 0xbd, 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, 0x63, 0x6c, + 0x0c, 0x3a, 0x13, 0x43, 0x63, 0x64, 0x20, 0x21, 0x20, 0x00, 0xff, 0xf7, + 0x51, 0xfa, 0x20, 0x00, 0xff, 0xf7, 0x24, 0xfa, 0xea, 0xe7, 0x0b, 0x06, + 0x01, 0xd5, 0x53, 0x06, 0x0b, 0xd4, 0x4b, 0x06, 0x01, 0xd5, 0x53, 0x06, + 0x4d, 0xd4, 0x8b, 0x06, 0xe0, 0xd5, 0x92, 0x06, 0xde, 0xd5, 0x20, 0x00, + 0xff, 0xf7, 0x36, 0xff, 0xda, 0xe7, 0x01, 0x21, 0x20, 0x00, 0xff, 0xf7, + 0x83, 0xfa, 0x10, 0x21, 0x20, 0x00, 0xff, 0xf7, 0x35, 0xfa, 0x63, 0x8d, + 0x9b, 0xb2, 0x00, 0x2b, 0x34, 0xd0, 0x63, 0x8d, 0x9b, 0xb2, 0xff, 0x2b, + 0x1b, 0xd9, 0xff, 0x23, 0x23, 0x85, 0xe1, 0x6c, 0x7f, 0x3b, 0x89, 0xb2, + 0x00, 0x22, 0x00, 0x92, 0x5b, 0x04, 0xff, 0x32, 0x20, 0x00, 0xff, 0xf7, + 0x07, 0xfa, 0x63, 0x8d, 0x22, 0x8d, 0x9b, 0x1a, 0x9b, 0xb2, 0x63, 0x85, + 0x41, 0x23, 0xe3, 0x5c, 0x22, 0x2b, 0x14, 0xd0, 0x22, 0x68, 0x11, 0x68, + 0x80, 0x23, 0xdb, 0x01, 0x0b, 0x43, 0x13, 0x60, 0xae, 0xe7, 0x62, 0x8d, + 0x92, 0xb2, 0x22, 0x85, 0xe1, 0x6c, 0x80, 0x23, 0xd2, 0xb2, 0x89, 0xb2, + 0x00, 0x20, 0x00, 0x90, 0x9b, 0x04, 0x20, 0x00, 0xff, 0xf7, 0xea, 0xf9, + 0xe1, 0xe7, 0x22, 0x68, 0x11, 0x68, 0x80, 0x23, 0x1b, 0x02, 0x0b, 0x43, + 0x13, 0x60, 0x99, 0xe7, 0x40, 0x21, 0x20, 0x00, 0xff, 0xf7, 0xf4, 0xfc, + 0x94, 0xe7, 0x01, 0x21, 0x20, 0x00, 0xff, 0xf7, 0x3d, 0xfa, 0x10, 0x21, + 0x20, 0x00, 0xff, 0xf7, 0xef, 0xf9, 0x41, 0x23, 0xe3, 0x5c, 0x22, 0x2b, + 0x1f, 0xd0, 0x1c, 0x48, 0x63, 0x8d, 0x9b, 0xb2, 0xff, 0x2b, 0x1c, 0xd9, + 0xff, 0x23, 0x23, 0x85, 0xe1, 0x6c, 0x7f, 0x3b, 0x89, 0xb2, 0x00, 0x90, + 0x5b, 0x04, 0xff, 0x22, 0x20, 0x00, 0xff, 0xf7, 0xc1, 0xf9, 0x63, 0x8d, + 0x22, 0x8d, 0x9b, 0x1a, 0x9b, 0xb2, 0x63, 0x85, 0x41, 0x23, 0xe3, 0x5c, + 0x22, 0x2b, 0x15, 0xd0, 0x22, 0x68, 0x11, 0x68, 0x80, 0x23, 0xdb, 0x01, + 0x0b, 0x43, 0x13, 0x60, 0x68, 0xe7, 0x0d, 0x48, 0xde, 0xe7, 0x62, 0x8d, + 0x92, 0xb2, 0x22, 0x85, 0xe1, 0x6c, 0x80, 0x23, 0xd2, 0xb2, 0x89, 0xb2, + 0x00, 0x90, 0x9b, 0x04, 0x20, 0x00, 0xff, 0xf7, 0xa3, 0xf9, 0xe0, 0xe7, + 0x22, 0x68, 0x11, 0x68, 0x80, 0x23, 0x1b, 0x02, 0x0b, 0x43, 0x13, 0x60, + 0x52, 0xe7, 0x02, 0x20, 0x54, 0xe7, 0xc0, 0x46, 0x00, 0x20, 0x00, 0x80, + 0x00, 0x24, 0x00, 0x80, 0xf8, 0xb5, 0x04, 0x00, 0x0d, 0x00, 0x16, 0x00, + 0xc7, 0x6a, 0x40, 0x23, 0xc3, 0x5c, 0x01, 0x2b, 0x00, 0xd1, 0x89, 0xe0, + 0x01, 0x23, 0x40, 0x22, 0x83, 0x54, 0x4a, 0x09, 0x13, 0x42, 0x01, 0xd0, + 0xb3, 0x06, 0x1a, 0xd4, 0xeb, 0x06, 0x71, 0xd5, 0xf3, 0x06, 0x6f, 0xd5, + 0xb3, 0x0b, 0x01, 0x22, 0x10, 0x00, 0x18, 0x40, 0x1a, 0x42, 0x01, 0xd1, + 0x33, 0x04, 0x63, 0xd5, 0xe3, 0x6b, 0x00, 0x2b, 0x0e, 0xd0, 0xf6, 0x0b, + 0x01, 0x21, 0x0a, 0x00, 0x32, 0x40, 0x31, 0x42, 0x09, 0xd0, 0x1b, 0x68, + 0x5b, 0x68, 0x00, 0x2b, 0x2b, 0xd0, 0x00, 0x22, 0x03, 0xe0, 0xff, 0xf7, + 0x15, 0xfd, 0xe1, 0xe7, 0x00, 0x22, 0xa3, 0x6b, 0x00, 0x2b, 0x05, 0xd0, + 0x00, 0x28, 0x03, 0xd0, 0x1b, 0x68, 0x5b, 0x68, 0x00, 0x2b, 0x1e, 0xd0, + 0x01, 0x2a, 0x1c, 0xd0, 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, 0x63, 0x6c, + 0x0c, 0x3a, 0x13, 0x43, 0x63, 0x64, 0x41, 0x23, 0xe3, 0x5c, 0xdb, 0xb2, + 0x00, 0x2f, 0x03, 0xd0, 0x80, 0x22, 0x52, 0x04, 0x97, 0x42, 0x3d, 0xd1, + 0x21, 0x2b, 0x2c, 0xd0, 0x29, 0x2b, 0x2a, 0xd0, 0x22, 0x2b, 0x01, 0xd0, + 0x2a, 0x2b, 0x28, 0xd1, 0x22, 0x23, 0x23, 0x63, 0x25, 0xe0, 0x01, 0x22, + 0xd7, 0xe7, 0x41, 0x23, 0xe3, 0x5c, 0x28, 0x2b, 0x07, 0xd0, 0x41, 0x23, + 0xe3, 0x5c, 0x29, 0x2b, 0x0c, 0xd0, 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, + 0x24, 0xe0, 0x80, 0x23, 0x9b, 0x04, 0x9f, 0x42, 0xf3, 0xd1, 0x29, 0x00, + 0x20, 0x00, 0xff, 0xf7, 0xef, 0xfb, 0x1b, 0xe0, 0x13, 0x4b, 0x9f, 0x42, + 0xef, 0xd0, 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, 0x20, 0x00, 0xff, 0xf7, + 0x0d, 0xf9, 0x20, 0x00, 0xff, 0xf7, 0x4c, 0xfb, 0x0e, 0xe0, 0x21, 0x23, + 0x23, 0x63, 0x61, 0x6c, 0x20, 0x00, 0xff, 0xf7, 0x29, 0xfc, 0x07, 0xe0, + 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, 0x03, 0xe0, 0x2b, 0x07, 0x01, 0xd5, + 0x36, 0x07, 0x04, 0xd4, 0x40, 0x23, 0x00, 0x22, 0xe2, 0x54, 0x00, 0x20, + 0xf8, 0xbd, 0x29, 0x00, 0x20, 0x00, 0xff, 0xf7, 0x75, 0xfb, 0xf5, 0xe7, + 0x02, 0x20, 0xf7, 0xe7, 0x00, 0x00, 0xff, 0xff, 0x10, 0xb5, 0x82, 0xb0, + 0x04, 0x00, 0x40, 0x23, 0xc3, 0x5c, 0x01, 0x2b, 0x00, 0xd1, 0x91, 0xe0, + 0x01, 0x23, 0x40, 0x20, 0x23, 0x54, 0x08, 0x09, 0x03, 0x42, 0x01, 0xd0, + 0xd3, 0x06, 0x2f, 0xd4, 0x0b, 0x06, 0x60, 0xd5, 0x53, 0x06, 0x5e, 0xd5, + 0x22, 0x68, 0x13, 0x68, 0x40, 0x21, 0x8b, 0x43, 0x13, 0x60, 0x63, 0x8d, + 0x9b, 0xb2, 0x00, 0x2b, 0x48, 0xd0, 0x23, 0x68, 0x59, 0x68, 0x89, 0x05, + 0x89, 0x0d, 0x63, 0x8d, 0x9b, 0xb2, 0xff, 0x2b, 0x2e, 0xd9, 0xff, 0x23, + 0x23, 0x85, 0x80, 0x23, 0x5b, 0x04, 0x22, 0x8d, 0xd2, 0xb2, 0x00, 0x20, + 0x00, 0x90, 0x20, 0x00, 0xff, 0xf7, 0xcc, 0xf8, 0x63, 0x8d, 0x22, 0x8d, + 0x9b, 0x1a, 0x9b, 0xb2, 0x63, 0x85, 0x41, 0x23, 0xe3, 0x5c, 0x22, 0x2b, + 0x25, 0xd0, 0x22, 0x68, 0x11, 0x68, 0x80, 0x23, 0xdb, 0x01, 0x0b, 0x43, + 0x13, 0x60, 0x0d, 0xe0, 0x23, 0x68, 0x10, 0x22, 0xda, 0x61, 0x63, 0x6c, + 0x0c, 0x3a, 0x13, 0x43, 0x63, 0x64, 0x20, 0x21, 0x20, 0x00, 0xff, 0xf7, + 0xcb, 0xf8, 0x20, 0x00, 0xff, 0xf7, 0x9e, 0xf8, 0x40, 0x23, 0x00, 0x22, + 0xe2, 0x54, 0x00, 0x20, 0x02, 0xb0, 0x10, 0xbd, 0x63, 0x8d, 0x23, 0x85, + 0xe2, 0x6a, 0x22, 0x4b, 0x9a, 0x42, 0x01, 0xd0, 0xe3, 0x6a, 0xcc, 0xe7, + 0x80, 0x23, 0x9b, 0x04, 0xc9, 0xe7, 0x22, 0x68, 0x11, 0x68, 0x80, 0x23, + 0x1b, 0x02, 0x0b, 0x43, 0x13, 0x60, 0xe7, 0xe7, 0x23, 0x68, 0x5b, 0x68, + 0x9b, 0x01, 0x03, 0xd4, 0x20, 0x00, 0xff, 0xf7, 0x98, 0xfa, 0xdf, 0xe7, + 0x40, 0x21, 0x20, 0x00, 0xff, 0xf7, 0xa0, 0xfb, 0xda, 0xe7, 0x4b, 0x06, + 0x1c, 0xd5, 0x53, 0x06, 0x1a, 0xd5, 0x63, 0x8d, 0x9b, 0xb2, 0x00, 0x2b, + 0x11, 0xd1, 0x22, 0x68, 0x53, 0x68, 0x9b, 0x01, 0xce, 0xd4, 0xe1, 0x6a, + 0x0d, 0x4b, 0x99, 0x42, 0x05, 0xd1, 0x51, 0x68, 0x80, 0x23, 0xdb, 0x01, + 0x0b, 0x43, 0x53, 0x60, 0xc4, 0xe7, 0x20, 0x00, 0xff, 0xf7, 0x79, 0xfa, + 0xc0, 0xe7, 0x40, 0x21, 0x20, 0x00, 0xff, 0xf7, 0x81, 0xfb, 0xbb, 0xe7, + 0x8b, 0x06, 0xb9, 0xd5, 0x92, 0x06, 0xb7, 0xd5, 0x20, 0x00, 0xff, 0xf7, + 0x75, 0xfd, 0xb3, 0xe7, 0x02, 0x20, 0xb5, 0xe7, 0x00, 0x00, 0xff, 0xff, + 0x70, 0xb5, 0x02, 0x68, 0x93, 0x69, 0x11, 0x68, 0xdc, 0x05, 0x08, 0xd5, + 0x0c, 0x06, 0x06, 0xd5, 0x44, 0x6c, 0x01, 0x25, 0x2c, 0x43, 0x44, 0x64, + 0x80, 0x24, 0x64, 0x00, 0xd4, 0x61, 0x5a, 0x05, 0x09, 0xd5, 0x0a, 0x06, + 0x07, 0xd5, 0x42, 0x6c, 0x08, 0x24, 0x22, 0x43, 0x42, 0x64, 0x02, 0x68, + 0x80, 0x24, 0xe4, 0x00, 0xd4, 0x61, 0x9b, 0x05, 0x09, 0xd5, 0x09, 0x06, + 0x07, 0xd5, 0x43, 0x6c, 0x02, 0x22, 0x13, 0x43, 0x43, 0x64, 0x03, 0x68, + 0xff, 0x32, 0xff, 0x32, 0xda, 0x61, 0x41, 0x6c, 0x0b, 0x23, 0x0b, 0x42, + 0x00, 0xd1, 0x70, 0xbd, 0xff, 0xf7, 0x46, 0xfb, 0xfb, 0xe7, 0x10, 0xb5, + 0x80, 0x6a, 0x83, 0x6b, 0x00, 0x2b, 0x01, 0xd0, 0x00, 0x22, 0x9a, 0x63, + 0xc3, 0x6b, 0x00, 0x2b, 0x01, 0xd0, 0x00, 0x22, 0x9a, 0x63, 0xff, 0xf7, + 0x20, 0xfb, 0x10, 0xbd, 0x40, 0x6c, 0x70, 0x47, 0xf0, 0xb5, 0x41, 0x23, + 0xc3, 0x5c, 0x20, 0x2b, 0x20, 0xd1, 0x20, 0x33, 0xc3, 0x5c, 0x01, 0x2b, + 0x1e, 0xd0, 0x40, 0x24, 0x01, 0x22, 0x02, 0x55, 0x41, 0x25, 0x24, 0x23, + 0x43, 0x55, 0x06, 0x68, 0x33, 0x68, 0x93, 0x43, 0x33, 0x60, 0x06, 0x68, + 0x33, 0x68, 0x0a, 0x4f, 0x3b, 0x40, 0x33, 0x60, 0x06, 0x68, 0x33, 0x68, + 0x0b, 0x43, 0x33, 0x60, 0x01, 0x68, 0x0b, 0x68, 0x13, 0x43, 0x0b, 0x60, + 0x20, 0x23, 0x43, 0x55, 0x00, 0x23, 0x03, 0x55, 0x00, 0x20, 0xf0, 0xbd, + 0x02, 0x20, 0xfc, 0xe7, 0x02, 0x20, 0xfa, 0xe7, 0xff, 0xef, 0xff, 0xff, + 0xf0, 0xb5, 0x41, 0x23, 0xc3, 0x5c, 0x20, 0x2b, 0x1e, 0xd1, 0x20, 0x33, + 0xc3, 0x5c, 0x01, 0x2b, 0x1c, 0xd0, 0x40, 0x24, 0x01, 0x22, 0x02, 0x55, + 0x41, 0x25, 0x24, 0x23, 0x43, 0x55, 0x06, 0x68, 0x33, 0x68, 0x93, 0x43, + 0x33, 0x60, 0x06, 0x68, 0x33, 0x68, 0x09, 0x4f, 0x3b, 0x40, 0x09, 0x02, + 0x19, 0x43, 0x31, 0x60, 0x01, 0x68, 0x0b, 0x68, 0x13, 0x43, 0x0b, 0x60, + 0x20, 0x23, 0x43, 0x55, 0x00, 0x23, 0x03, 0x55, 0x00, 0x20, 0xf0, 0xbd, + 0x02, 0x20, 0xfc, 0xe7, 0x02, 0x20, 0xfa, 0xe7, 0xff, 0xf0, 0xff, 0xff, + 0x02, 0x4b, 0x80, 0x22, 0x12, 0x05, 0x9a, 0x60, 0x70, 0x47, 0xc0, 0x46, + 0x00, 0xed, 0x00, 0xe0, 0x70, 0xb5, 0x04, 0x1e, 0x28, 0xd0, 0x03, 0x68, + 0x14, 0x4a, 0x1a, 0x60, 0x03, 0x68, 0x14, 0x4a, 0x1a, 0x60, 0x03, 0x68, + 0x42, 0x68, 0x5a, 0x60, 0x03, 0x68, 0x82, 0x68, 0x9a, 0x60, 0xfe, 0xf7, + 0xbb, 0xfa, 0x05, 0x00, 0x22, 0x68, 0xd3, 0x68, 0x5b, 0x07, 0x0a, 0xd0, + 0xfe, 0xf7, 0xb4, 0xfa, 0x40, 0x1b, 0x31, 0x28, 0xf6, 0xd9, 0x23, 0x68, + 0xdb, 0x68, 0x5b, 0x07, 0xf2, 0xd0, 0x03, 0x20, 0x0b, 0xe0, 0x11, 0x69, + 0xe3, 0x68, 0x99, 0x42, 0x02, 0xd0, 0x13, 0x61, 0x00, 0x20, 0x04, 0xe0, + 0x04, 0x4b, 0x13, 0x60, 0x00, 0x20, 0x00, 0xe0, 0x01, 0x20, 0x70, 0xbd, + 0xcc, 0xcc, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, + 0x03, 0x68, 0x02, 0x4a, 0x1a, 0x60, 0x00, 0x20, 0x70, 0x47, 0xc0, 0x46, + 0xaa, 0xaa, 0x00, 0x00, 0x30, 0xb5, 0x05, 0x6a, 0x03, 0x6a, 0x01, 0x22, + 0x93, 0x43, 0x03, 0x62, 0x42, 0x68, 0x83, 0x69, 0x16, 0x4c, 0x23, 0x40, + 0x0c, 0x68, 0x1c, 0x43, 0x02, 0x23, 0x9d, 0x43, 0x8b, 0x68, 0x2b, 0x43, + 0x13, 0x4d, 0xa8, 0x42, 0x05, 0xd0, 0x13, 0x4d, 0xa8, 0x42, 0x02, 0xd0, + 0x12, 0x4d, 0xa8, 0x42, 0x06, 0xd1, 0x08, 0x25, 0xab, 0x43, 0x1d, 0x00, + 0xcb, 0x68, 0x2b, 0x43, 0x04, 0x25, 0xab, 0x43, 0x0b, 0x4d, 0xa8, 0x42, + 0x05, 0xd0, 0x0b, 0x4d, 0xa8, 0x42, 0x02, 0xd0, 0x0a, 0x4d, 0xa8, 0x42, + 0x05, 0xd1, 0x0a, 0x4d, 0x2a, 0x40, 0x4d, 0x69, 0x15, 0x43, 0x8a, 0x69, + 0x2a, 0x43, 0x42, 0x60, 0x84, 0x61, 0x4a, 0x68, 0x42, 0x63, 0x03, 0x62, + 0x30, 0xbd, 0xc0, 0x46, 0x8c, 0xff, 0xfe, 0xff, 0x00, 0x2c, 0x01, 0x40, + 0x00, 0x44, 0x01, 0x40, 0x00, 0x48, 0x01, 0x40, 0xff, 0xfc, 0xff, 0xff, + 0x30, 0xb5, 0x04, 0x6a, 0x03, 0x6a, 0x16, 0x4a, 0x13, 0x40, 0x03, 0x62, + 0x42, 0x68, 0xc3, 0x69, 0x14, 0x4d, 0x2b, 0x40, 0x0d, 0x68, 0x1d, 0x43, + 0x13, 0x4b, 0x1c, 0x40, 0x8b, 0x68, 0x1b, 0x02, 0x23, 0x43, 0x12, 0x4c, + 0xa0, 0x42, 0x06, 0xd0, 0x11, 0x4c, 0xa0, 0x42, 0x0a, 0xd0, 0x11, 0x4c, + 0xa0, 0x42, 0x0f, 0xd1, 0x06, 0xe0, 0x10, 0x4c, 0x1c, 0x40, 0xcb, 0x68, + 0x1b, 0x02, 0x23, 0x43, 0x0e, 0x4c, 0x23, 0x40, 0x0e, 0x4c, 0x22, 0x40, + 0x4c, 0x69, 0x24, 0x01, 0x14, 0x43, 0x8a, 0x69, 0x12, 0x01, 0x22, 0x43, + 0x42, 0x60, 0xc5, 0x61, 0x4a, 0x68, 0xc2, 0x63, 0x03, 0x62, 0x30, 0xbd, + 0xff, 0xfe, 0xff, 0xff, 0x8c, 0xff, 0xfe, 0xff, 0xff, 0xfd, 0xff, 0xff, + 0x00, 0x2c, 0x01, 0x40, 0x00, 0x44, 0x01, 0x40, 0x00, 0x48, 0x01, 0x40, + 0xff, 0xf7, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, + 0x30, 0xb5, 0x04, 0x6a, 0x03, 0x6a, 0x11, 0x4a, 0x13, 0x40, 0x03, 0x62, + 0x45, 0x68, 0xc3, 0x69, 0x0f, 0x4a, 0x13, 0x40, 0x0a, 0x68, 0x12, 0x02, + 0x1a, 0x43, 0x0e, 0x4b, 0x1c, 0x40, 0x8b, 0x68, 0x1b, 0x03, 0x23, 0x43, + 0x0c, 0x4c, 0xa0, 0x42, 0x05, 0xd0, 0x0c, 0x4c, 0xa0, 0x42, 0x02, 0xd0, + 0x0b, 0x4c, 0xa0, 0x42, 0x04, 0xd1, 0x0b, 0x4c, 0x2c, 0x40, 0x4d, 0x69, + 0xad, 0x01, 0x25, 0x43, 0x45, 0x60, 0xc2, 0x61, 0x4a, 0x68, 0x02, 0x64, + 0x03, 0x62, 0x30, 0xbd, 0xff, 0xef, 0xff, 0xff, 0xff, 0x8c, 0xff, 0xfe, + 0xff, 0xdf, 0xff, 0xff, 0x00, 0x2c, 0x01, 0x40, 0x00, 0x44, 0x01, 0x40, + 0x00, 0x48, 0x01, 0x40, 0xff, 0xbf, 0xff, 0xff, 0x30, 0xb5, 0x04, 0x6a, + 0x03, 0x6a, 0x11, 0x4a, 0x13, 0x40, 0x03, 0x62, 0x42, 0x68, 0x43, 0x6d, + 0x0f, 0x4d, 0x2b, 0x40, 0x0d, 0x68, 0x1d, 0x43, 0x0e, 0x4b, 0x1c, 0x40, + 0x8b, 0x68, 0x1b, 0x04, 0x23, 0x43, 0x0d, 0x4c, 0xa0, 0x42, 0x05, 0xd0, + 0x0c, 0x4c, 0xa0, 0x42, 0x02, 0xd0, 0x0c, 0x4c, 0xa0, 0x42, 0x04, 0xd1, + 0x05, 0x4c, 0x14, 0x40, 0x4a, 0x69, 0x12, 0x02, 0x22, 0x43, 0x42, 0x60, + 0x45, 0x65, 0x4a, 0x68, 0x82, 0x65, 0x03, 0x62, 0x30, 0xbd, 0xc0, 0x46, + 0xff, 0xff, 0xfe, 0xff, 0x8f, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, + 0x00, 0x2c, 0x01, 0x40, 0x00, 0x44, 0x01, 0x40, 0x00, 0x48, 0x01, 0x40, + 0x30, 0xb5, 0x04, 0x6a, 0x03, 0x6a, 0x11, 0x4a, 0x13, 0x40, 0x03, 0x62, + 0x45, 0x68, 0x43, 0x6d, 0x0f, 0x4a, 0x13, 0x40, 0x0a, 0x68, 0x12, 0x02, + 0x1a, 0x43, 0x0e, 0x4b, 0x1c, 0x40, 0x8b, 0x68, 0x1b, 0x05, 0x23, 0x43, + 0x0c, 0x4c, 0xa0, 0x42, 0x05, 0xd0, 0x0c, 0x4c, 0xa0, 0x42, 0x02, 0xd0, + 0x0b, 0x4c, 0xa0, 0x42, 0x04, 0xd1, 0x0b, 0x4c, 0x2c, 0x40, 0x4d, 0x69, + 0xad, 0x02, 0x25, 0x43, 0x45, 0x60, 0x42, 0x65, 0x4a, 0x68, 0xc2, 0x65, + 0x03, 0x62, 0x30, 0xbd, 0xff, 0xff, 0xef, 0xff, 0xff, 0x8f, 0xff, 0xfe, + 0xff, 0xff, 0xdf, 0xff, 0x00, 0x2c, 0x01, 0x40, 0x00, 0x44, 0x01, 0x40, + 0x00, 0x48, 0x01, 0x40, 0xff, 0xff, 0xfb, 0xff, 0x03, 0x68, 0x1a, 0x4a, + 0x90, 0x42, 0x02, 0xd0, 0x19, 0x4a, 0x90, 0x42, 0x03, 0xd1, 0x70, 0x22, + 0x93, 0x43, 0x4a, 0x68, 0x13, 0x43, 0x15, 0x4a, 0x90, 0x42, 0x0b, 0xd0, + 0x14, 0x4a, 0x90, 0x42, 0x08, 0xd0, 0x14, 0x4a, 0x90, 0x42, 0x05, 0xd0, + 0x13, 0x4a, 0x90, 0x42, 0x02, 0xd0, 0x13, 0x4a, 0x90, 0x42, 0x03, 0xd1, + 0x12, 0x4a, 0x13, 0x40, 0xca, 0x68, 0x13, 0x43, 0x80, 0x22, 0x93, 0x43, + 0x4a, 0x69, 0x13, 0x43, 0x03, 0x60, 0x8b, 0x68, 0xc3, 0x62, 0x0b, 0x68, + 0x83, 0x62, 0x07, 0x4b, 0x98, 0x42, 0x05, 0xd0, 0x08, 0x4b, 0x98, 0x42, + 0x02, 0xd0, 0x08, 0x4b, 0x98, 0x42, 0x01, 0xd1, 0x0b, 0x69, 0x03, 0x63, + 0x01, 0x23, 0x43, 0x61, 0x70, 0x47, 0xc0, 0x46, 0x00, 0x2c, 0x01, 0x40, + 0x00, 0x04, 0x00, 0x40, 0x00, 0x20, 0x00, 0x40, 0x00, 0x44, 0x01, 0x40, + 0x00, 0x48, 0x01, 0x40, 0xff, 0xfc, 0xff, 0xff, 0x70, 0xb5, 0x04, 0x1e, + 0x2a, 0xd0, 0x3d, 0x23, 0xc3, 0x5c, 0x00, 0x2b, 0x20, 0xd0, 0x3d, 0x25, + 0x02, 0x23, 0x63, 0x55, 0x21, 0x00, 0x01, 0xc9, 0xff, 0xf7, 0xb0, 0xff, + 0x01, 0x23, 0x48, 0x22, 0xa3, 0x54, 0x0a, 0x3a, 0xa3, 0x54, 0x01, 0x32, + 0xa3, 0x54, 0x01, 0x32, 0xa3, 0x54, 0x01, 0x32, 0xa3, 0x54, 0x01, 0x32, + 0xa3, 0x54, 0x01, 0x32, 0xa3, 0x54, 0x01, 0x32, 0xa3, 0x54, 0x01, 0x32, + 0xa3, 0x54, 0x01, 0x32, 0xa3, 0x54, 0x01, 0x32, 0xa3, 0x54, 0x63, 0x55, + 0x00, 0x20, 0x70, 0xbd, 0x3c, 0x33, 0x00, 0x22, 0xc2, 0x54, 0xfe, 0xf7, + 0x85, 0xf8, 0xd8, 0xe7, 0x01, 0x20, 0xf6, 0xe7, 0xf0, 0xb5, 0xc6, 0x46, + 0x00, 0xb5, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x28, 0x4d, 0xd0, 0x3d, 0x23, + 0xc3, 0x5c, 0x00, 0x2b, 0x43, 0xd0, 0x3d, 0x26, 0x02, 0x23, 0xa3, 0x55, + 0x22, 0x68, 0x93, 0x68, 0x23, 0x49, 0x0b, 0x40, 0x93, 0x60, 0x21, 0x00, + 0x01, 0xc9, 0xff, 0xf7, 0x77, 0xff, 0x21, 0x68, 0x8b, 0x68, 0x8a, 0x69, + 0x0f, 0x6a, 0x28, 0x68, 0x18, 0x43, 0x80, 0x46, 0x1d, 0x4b, 0x1a, 0x40, + 0xab, 0x68, 0xa8, 0x69, 0x00, 0x02, 0x03, 0x43, 0x13, 0x43, 0x1b, 0x4a, + 0x13, 0x40, 0xea, 0x68, 0xe8, 0x69, 0x00, 0x02, 0x02, 0x43, 0x1a, 0x43, + 0x2b, 0x69, 0x1b, 0x01, 0x28, 0x6a, 0x00, 0x03, 0x03, 0x43, 0x13, 0x43, + 0xaa, 0x22, 0x97, 0x43, 0x6a, 0x68, 0x6d, 0x69, 0x2d, 0x01, 0x2a, 0x43, + 0x3a, 0x43, 0x40, 0x46, 0x88, 0x60, 0x21, 0x68, 0x8b, 0x61, 0x23, 0x68, + 0x1a, 0x62, 0x01, 0x23, 0x48, 0x22, 0xa3, 0x54, 0x0a, 0x3a, 0xa3, 0x54, + 0x01, 0x32, 0xa3, 0x54, 0x05, 0x32, 0xa3, 0x54, 0x01, 0x32, 0xa3, 0x54, + 0xa3, 0x55, 0x00, 0x20, 0x80, 0xbc, 0xb8, 0x46, 0xf0, 0xbd, 0x3c, 0x33, + 0x00, 0x22, 0xc2, 0x54, 0xfd, 0xf7, 0xfc, 0xff, 0xb5, 0xe7, 0x01, 0x20, + 0xf4, 0xe7, 0xc0, 0x46, 0xf8, 0xbf, 0xfe, 0xff, 0xfc, 0xfc, 0xff, 0xff, + 0x03, 0x03, 0xff, 0xff, 0x70, 0xb5, 0x02, 0x6a, 0x03, 0x6a, 0x10, 0x24, + 0xa3, 0x43, 0x03, 0x62, 0x45, 0x68, 0x83, 0x69, 0x14, 0x4c, 0x23, 0x40, + 0x0c, 0x68, 0x24, 0x02, 0x1c, 0x43, 0x20, 0x23, 0x9a, 0x43, 0x8b, 0x68, + 0x1b, 0x01, 0x13, 0x43, 0x10, 0x4a, 0x90, 0x42, 0x06, 0xd0, 0x10, 0x4a, + 0x90, 0x42, 0x0b, 0xd0, 0x0f, 0x4a, 0x90, 0x42, 0x10, 0xd1, 0x07, 0xe0, + 0x80, 0x22, 0x93, 0x43, 0x1e, 0x00, 0xcb, 0x68, 0x1b, 0x01, 0x33, 0x43, + 0x40, 0x3a, 0x93, 0x43, 0x0a, 0x4a, 0x15, 0x40, 0x4a, 0x69, 0x92, 0x00, + 0x2a, 0x43, 0x8d, 0x69, 0xad, 0x00, 0x15, 0x43, 0x45, 0x60, 0x84, 0x61, + 0x4a, 0x68, 0x82, 0x63, 0x03, 0x62, 0x70, 0xbd, 0xff, 0x8c, 0xff, 0xfe, + 0x00, 0x2c, 0x01, 0x40, 0x00, 0x44, 0x01, 0x40, 0x00, 0x48, 0x01, 0x40, + 0xff, 0xf3, 0xff, 0xff, 0x70, 0xb5, 0x04, 0x00, 0x0d, 0x00, 0x3c, 0x23, + 0xc3, 0x5c, 0x01, 0x2b, 0x00, 0xd1, 0x92, 0xe0, 0x3c, 0x23, 0x01, 0x21, + 0xc1, 0x54, 0x14, 0x2a, 0x00, 0xd9, 0x87, 0xe0, 0x92, 0x00, 0x47, 0x4b, + 0x9b, 0x58, 0x9f, 0x46, 0x00, 0x68, 0x29, 0x00, 0xff, 0xf7, 0xc2, 0xfd, + 0x22, 0x68, 0x93, 0x69, 0x08, 0x21, 0x0b, 0x43, 0x93, 0x61, 0x22, 0x68, + 0x93, 0x69, 0x04, 0x39, 0x8b, 0x43, 0x93, 0x61, 0x22, 0x68, 0x93, 0x69, + 0x29, 0x69, 0x0b, 0x43, 0x93, 0x61, 0x00, 0x20, 0x6f, 0xe0, 0x00, 0x68, + 0x29, 0x00, 0xff, 0xf7, 0x99, 0xff, 0x22, 0x68, 0x91, 0x69, 0x80, 0x23, + 0x1b, 0x01, 0x0b, 0x43, 0x93, 0x61, 0x22, 0x68, 0x93, 0x69, 0x36, 0x49, + 0x0b, 0x40, 0x93, 0x61, 0x21, 0x68, 0x8b, 0x69, 0x2a, 0x69, 0x12, 0x02, + 0x13, 0x43, 0x8b, 0x61, 0x00, 0x20, 0x58, 0xe0, 0x00, 0x68, 0x29, 0x00, + 0xff, 0xf7, 0xd6, 0xfd, 0x22, 0x68, 0xd3, 0x69, 0x08, 0x21, 0x0b, 0x43, + 0xd3, 0x61, 0x22, 0x68, 0xd3, 0x69, 0x04, 0x39, 0x8b, 0x43, 0xd3, 0x61, + 0x22, 0x68, 0xd3, 0x69, 0x29, 0x69, 0x0b, 0x43, 0xd3, 0x61, 0x00, 0x20, + 0x43, 0xe0, 0x00, 0x68, 0x29, 0x00, 0xff, 0xf7, 0x03, 0xfe, 0x22, 0x68, + 0xd1, 0x69, 0x80, 0x23, 0x1b, 0x01, 0x0b, 0x43, 0xd3, 0x61, 0x22, 0x68, + 0xd3, 0x69, 0x20, 0x49, 0x0b, 0x40, 0xd3, 0x61, 0x21, 0x68, 0xcb, 0x69, + 0x2a, 0x69, 0x12, 0x02, 0x13, 0x43, 0xcb, 0x61, 0x00, 0x20, 0x2c, 0xe0, + 0x00, 0x68, 0x29, 0x00, 0xff, 0xf7, 0x20, 0xfe, 0x22, 0x68, 0x53, 0x6d, + 0x08, 0x21, 0x0b, 0x43, 0x53, 0x65, 0x22, 0x68, 0x53, 0x6d, 0x04, 0x39, + 0x8b, 0x43, 0x53, 0x65, 0x22, 0x68, 0x53, 0x6d, 0x29, 0x69, 0x0b, 0x43, + 0x53, 0x65, 0x00, 0x20, 0x17, 0xe0, 0x00, 0x68, 0x29, 0x00, 0xff, 0xf7, + 0x3d, 0xfe, 0x22, 0x68, 0x51, 0x6d, 0x80, 0x23, 0x1b, 0x01, 0x0b, 0x43, + 0x53, 0x65, 0x22, 0x68, 0x53, 0x6d, 0x0a, 0x49, 0x0b, 0x40, 0x53, 0x65, + 0x21, 0x68, 0x4b, 0x6d, 0x2a, 0x69, 0x12, 0x02, 0x13, 0x43, 0x4b, 0x65, + 0x00, 0x20, 0x00, 0xe0, 0x01, 0x20, 0x3c, 0x23, 0x00, 0x22, 0xe2, 0x54, + 0x70, 0xbd, 0x02, 0x20, 0xfc, 0xe7, 0xc0, 0x46, 0x38, 0x30, 0x00, 0x08, + 0xff, 0xfb, 0xff, 0xff, 0x10, 0xb5, 0x1f, 0x23, 0x19, 0x40, 0x01, 0x24, + 0x8c, 0x40, 0x03, 0x6a, 0xa3, 0x43, 0x03, 0x62, 0x03, 0x6a, 0x8a, 0x40, + 0x13, 0x43, 0x03, 0x62, 0x10, 0xbd, 0x00, 0x00, 0x10, 0xb5, 0x04, 0x00, + 0x10, 0x29, 0x2d, 0xd8, 0x8b, 0x00, 0x3f, 0x4a, 0xd3, 0x58, 0x9f, 0x46, + 0x3e, 0x23, 0xc3, 0x5c, 0x01, 0x3b, 0x5a, 0x1e, 0x93, 0x41, 0xdb, 0xb2, + 0x00, 0x2b, 0x6d, 0xd1, 0x10, 0x29, 0x59, 0xd8, 0x8b, 0x00, 0x39, 0x4a, + 0xd3, 0x58, 0x9f, 0x46, 0x3f, 0x23, 0xc3, 0x5c, 0x01, 0x3b, 0x5a, 0x1e, + 0x93, 0x41, 0xdb, 0xb2, 0xf0, 0xe7, 0x40, 0x23, 0xc3, 0x5c, 0x01, 0x3b, + 0x5a, 0x1e, 0x93, 0x41, 0xdb, 0xb2, 0xe9, 0xe7, 0x41, 0x23, 0xc3, 0x5c, + 0x01, 0x3b, 0x5a, 0x1e, 0x93, 0x41, 0xdb, 0xb2, 0xe2, 0xe7, 0x42, 0x23, + 0xc3, 0x5c, 0x01, 0x3b, 0x5a, 0x1e, 0x93, 0x41, 0xdb, 0xb2, 0xdb, 0xe7, + 0x43, 0x23, 0xe3, 0x5c, 0x01, 0x3b, 0x5a, 0x1e, 0x93, 0x41, 0xdb, 0xb2, + 0xd4, 0xe7, 0x3e, 0x23, 0x02, 0x22, 0xe2, 0x54, 0x20, 0x68, 0x01, 0x22, + 0xff, 0xf7, 0xb2, 0xff, 0x23, 0x68, 0x23, 0x4a, 0x93, 0x42, 0x05, 0xd0, + 0x22, 0x4a, 0x93, 0x42, 0x02, 0xd0, 0x22, 0x4a, 0x93, 0x42, 0x04, 0xd1, + 0x59, 0x6c, 0x80, 0x22, 0x12, 0x02, 0x0a, 0x43, 0x5a, 0x64, 0x23, 0x68, + 0x1b, 0x4a, 0x93, 0x42, 0x1c, 0xd0, 0x1d, 0x4a, 0x93, 0x42, 0x19, 0xd0, + 0x1a, 0x68, 0x01, 0x21, 0x0a, 0x43, 0x1a, 0x60, 0x00, 0x20, 0x22, 0xe0, + 0x3f, 0x23, 0x02, 0x22, 0xe2, 0x54, 0xdb, 0xe7, 0x40, 0x23, 0x02, 0x22, + 0xe2, 0x54, 0xd7, 0xe7, 0x41, 0x23, 0x02, 0x22, 0xe2, 0x54, 0xd3, 0xe7, + 0x42, 0x23, 0x02, 0x22, 0xe2, 0x54, 0xcf, 0xe7, 0x43, 0x23, 0x02, 0x22, + 0xe2, 0x54, 0xcb, 0xe7, 0x9a, 0x68, 0x0f, 0x49, 0x0a, 0x40, 0x06, 0x2a, + 0x0a, 0xd0, 0x07, 0x39, 0x8a, 0x42, 0x09, 0xd0, 0x1a, 0x68, 0x01, 0x21, + 0x0a, 0x43, 0x1a, 0x60, 0x00, 0x20, 0x00, 0xe0, 0x01, 0x20, 0x10, 0xbd, + 0x00, 0x20, 0xfc, 0xe7, 0x00, 0x20, 0xfa, 0xe7, 0x8c, 0x30, 0x00, 0x08, + 0xd0, 0x30, 0x00, 0x08, 0x00, 0x2c, 0x01, 0x40, 0x00, 0x44, 0x01, 0x40, + 0x00, 0x48, 0x01, 0x40, 0x00, 0x04, 0x00, 0x40, 0x07, 0x00, 0x01, 0x00, + 0x70, 0xb5, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x68, 0x00, 0x22, 0xff, 0xf7, + 0x59, 0xff, 0x23, 0x68, 0x20, 0x4a, 0x93, 0x42, 0x18, 0xd0, 0x20, 0x4a, + 0x93, 0x42, 0x15, 0xd0, 0x1f, 0x4a, 0x93, 0x42, 0x12, 0xd0, 0x23, 0x68, + 0x19, 0x6a, 0x1e, 0x4a, 0x11, 0x42, 0x07, 0xd1, 0x19, 0x6a, 0x1d, 0x4a, + 0x11, 0x42, 0x03, 0xd1, 0x1a, 0x68, 0x01, 0x21, 0x8a, 0x43, 0x1a, 0x60, + 0x10, 0x2d, 0x25, 0xd8, 0xad, 0x00, 0x19, 0x4b, 0x5b, 0x59, 0x9f, 0x46, + 0x19, 0x6a, 0x15, 0x4a, 0x11, 0x42, 0xe8, 0xd1, 0x19, 0x6a, 0x14, 0x4a, + 0x11, 0x42, 0xe4, 0xd1, 0x5a, 0x6c, 0x14, 0x49, 0x0a, 0x40, 0x5a, 0x64, + 0xdf, 0xe7, 0x3e, 0x23, 0x01, 0x22, 0xe2, 0x54, 0x00, 0x20, 0x70, 0xbd, + 0x3f, 0x23, 0x01, 0x22, 0xe2, 0x54, 0xf9, 0xe7, 0x40, 0x23, 0x01, 0x22, + 0xe2, 0x54, 0xf5, 0xe7, 0x41, 0x23, 0x01, 0x22, 0xe2, 0x54, 0xf1, 0xe7, + 0x42, 0x23, 0x01, 0x22, 0xe2, 0x54, 0xed, 0xe7, 0x43, 0x23, 0x01, 0x22, + 0xe2, 0x54, 0xe9, 0xe7, 0x00, 0x2c, 0x01, 0x40, 0x00, 0x44, 0x01, 0x40, + 0x00, 0x48, 0x01, 0x40, 0x11, 0x11, 0x00, 0x00, 0x44, 0x04, 0x00, 0x00, + 0x14, 0x31, 0x00, 0x08, 0xff, 0x7f, 0xff, 0xff, 0x70, 0xb5, 0x04, 0x00, + 0x3e, 0x23, 0xc0, 0x5c, 0xc0, 0xb2, 0x01, 0x33, 0xe3, 0x5c, 0xdb, 0xb2, + 0x44, 0x22, 0xa2, 0x5c, 0xd2, 0xb2, 0x45, 0x25, 0x65, 0x5d, 0xed, 0xb2, + 0x00, 0x29, 0x17, 0xd1, 0x01, 0x28, 0x45, 0xd1, 0x01, 0x2a, 0x44, 0xd1, + 0x02, 0x23, 0x3d, 0x32, 0xa3, 0x54, 0x06, 0x32, 0xa3, 0x54, 0x00, 0x29, + 0x2a, 0xd0, 0x04, 0x29, 0x34, 0xd0, 0x20, 0x68, 0x01, 0x22, 0x00, 0x21, + 0xff, 0xf7, 0xe6, 0xfe, 0x20, 0x68, 0x01, 0x22, 0x04, 0x21, 0xff, 0xf7, + 0xe1, 0xfe, 0x22, 0xe0, 0x04, 0x29, 0x11, 0xd0, 0x01, 0x28, 0x31, 0xd1, + 0x01, 0x2b, 0x2a, 0xd1, 0x01, 0x2a, 0x2f, 0xd1, 0x01, 0x2d, 0x2f, 0xd1, + 0x01, 0x33, 0x3d, 0x32, 0xa3, 0x54, 0x01, 0x32, 0xa3, 0x54, 0x05, 0x32, + 0xa3, 0x54, 0x01, 0x32, 0xa3, 0x54, 0xdc, 0xe7, 0x01, 0x2b, 0x1b, 0xd1, + 0x01, 0x2d, 0x1b, 0xd1, 0x01, 0x33, 0x3f, 0x22, 0xa3, 0x54, 0x06, 0x32, + 0xa3, 0x54, 0xd2, 0xe7, 0x20, 0x68, 0x01, 0x22, 0x00, 0x21, 0xff, 0xf7, + 0xbd, 0xfe, 0x22, 0x68, 0x13, 0x68, 0x01, 0x21, 0x0b, 0x43, 0x13, 0x60, + 0x00, 0x20, 0x06, 0xe0, 0x20, 0x68, 0x01, 0x22, 0x04, 0x21, 0xff, 0xf7, + 0xb1, 0xfe, 0xf2, 0xe7, 0x01, 0x20, 0x70, 0xbd, 0x01, 0x20, 0xfc, 0xe7, + 0x18, 0x00, 0xfa, 0xe7, 0x01, 0x20, 0xf8, 0xe7, 0x18, 0x00, 0xf6, 0xe7, + 0x10, 0x00, 0xf4, 0xe7, 0x30, 0xb5, 0x3c, 0x23, 0xc3, 0x5c, 0x01, 0x2b, + 0x29, 0xd0, 0x3c, 0x23, 0x01, 0x22, 0xc2, 0x54, 0x01, 0x33, 0x01, 0x32, + 0xc2, 0x54, 0x02, 0x68, 0x53, 0x68, 0x95, 0x68, 0x11, 0x4c, 0xa2, 0x42, + 0x18, 0xd0, 0x70, 0x24, 0xa3, 0x43, 0x0c, 0x68, 0x23, 0x43, 0x53, 0x60, + 0x03, 0x68, 0x0d, 0x4a, 0x93, 0x42, 0x02, 0xd0, 0x0c, 0x4a, 0x93, 0x42, + 0x04, 0xd1, 0x80, 0x22, 0x95, 0x43, 0x8a, 0x68, 0x2a, 0x43, 0x9a, 0x60, + 0x3d, 0x23, 0x01, 0x22, 0xc2, 0x54, 0x01, 0x3b, 0x00, 0x22, 0xc2, 0x54, + 0x00, 0x20, 0x30, 0xbd, 0x05, 0x4c, 0x23, 0x40, 0x4c, 0x68, 0x23, 0x43, + 0xe1, 0xe7, 0x02, 0x20, 0xf7, 0xe7, 0xc0, 0x46, 0x00, 0x2c, 0x01, 0x40, + 0x00, 0x04, 0x00, 0x40, 0xff, 0xff, 0x0f, 0xff, 0x10, 0xb5, 0x3c, 0x23, + 0xc3, 0x5c, 0x01, 0x2b, 0x44, 0xd0, 0x3c, 0x23, 0x01, 0x22, 0xc2, 0x54, + 0xcb, 0x68, 0x21, 0x4a, 0x13, 0x40, 0x8a, 0x68, 0x13, 0x43, 0x20, 0x4a, + 0x13, 0x40, 0x4a, 0x68, 0x13, 0x43, 0x1f, 0x4a, 0x13, 0x40, 0x0a, 0x68, + 0x13, 0x43, 0x1e, 0x4a, 0x13, 0x40, 0x0a, 0x69, 0x13, 0x43, 0x1d, 0x4a, + 0x13, 0x40, 0x4a, 0x69, 0x13, 0x43, 0x1c, 0x4a, 0x13, 0x40, 0x0a, 0x6b, + 0x13, 0x43, 0x1b, 0x4a, 0x13, 0x40, 0x8a, 0x69, 0x12, 0x04, 0x13, 0x43, + 0x02, 0x68, 0x19, 0x4c, 0xa2, 0x42, 0x08, 0xd0, 0x17, 0x4c, 0xa2, 0x42, + 0x0a, 0xd0, 0x53, 0x64, 0x3c, 0x23, 0x00, 0x22, 0xc2, 0x54, 0x00, 0x20, + 0x10, 0xbd, 0x14, 0x4c, 0x23, 0x40, 0xcc, 0x69, 0x23, 0x43, 0xf1, 0xe7, + 0x12, 0x4c, 0x23, 0x40, 0x8c, 0x6a, 0x24, 0x05, 0x23, 0x43, 0x11, 0x4c, + 0x23, 0x40, 0x0c, 0x6a, 0x23, 0x43, 0x10, 0x4c, 0x23, 0x40, 0x4c, 0x6a, + 0x23, 0x43, 0x0f, 0x4c, 0x23, 0x40, 0xc9, 0x6a, 0x0b, 0x43, 0xe2, 0xe7, + 0x02, 0x20, 0xe5, 0xe7, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, + 0xff, 0xf7, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, + 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0x00, 0x2c, 0x01, 0x40, + 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xdf, 0x0d, 0x48, 0x85, 0x46, + 0xff, 0xf7, 0xf4, 0xfa, 0x00, 0x21, 0x03, 0xe0, 0x0b, 0x4b, 0x5b, 0x58, + 0x43, 0x50, 0x04, 0x31, 0x0a, 0x48, 0x0b, 0x4b, 0x42, 0x18, 0x9a, 0x42, + 0xf6, 0xd3, 0x0a, 0x4a, 0x02, 0xe0, 0x00, 0x23, 0x13, 0x60, 0x04, 0x32, + 0x08, 0x4b, 0x9a, 0x42, 0xf9, 0xd3, 0x00, 0xf0, 0x19, 0xf8, 0xfd, 0xf7, + 0xd1, 0xfb, 0xfe, 0xe7, 0x00, 0x18, 0x00, 0x20, 0x60, 0x31, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x20, 0x0c, 0x00, 0x00, 0x20, 0x0c, 0x00, 0x00, 0x20, + 0x64, 0x01, 0x00, 0x20, 0xfe, 0xe7, 0x03, 0x00, 0x82, 0x18, 0x93, 0x42, + 0x00, 0xd1, 0x70, 0x47, 0x19, 0x70, 0x01, 0x33, 0xf9, 0xe7, 0x00, 0x00, + 0x70, 0xb5, 0x00, 0x26, 0x0c, 0x4c, 0x0d, 0x4d, 0x64, 0x1b, 0xa4, 0x10, + 0xa6, 0x42, 0x09, 0xd1, 0x00, 0x26, 0x00, 0xf0, 0x19, 0xf8, 0x0a, 0x4c, + 0x0a, 0x4d, 0x64, 0x1b, 0xa4, 0x10, 0xa6, 0x42, 0x05, 0xd1, 0x70, 0xbd, + 0xb3, 0x00, 0xeb, 0x58, 0x98, 0x47, 0x01, 0x36, 0xee, 0xe7, 0xb3, 0x00, + 0xeb, 0x58, 0x98, 0x47, 0x01, 0x36, 0xf2, 0xe7, 0x58, 0x31, 0x00, 0x08, + 0x58, 0x31, 0x00, 0x08, 0x5c, 0x31, 0x00, 0x08, 0x58, 0x31, 0x00, 0x08, + 0xf8, 0xb5, 0xc0, 0x46, 0xf8, 0xbc, 0x08, 0xbc, 0x9e, 0x46, 0x70, 0x47, + 0xf8, 0xb5, 0xc0, 0x46, 0xf8, 0xbc, 0x08, 0xbc, 0x9e, 0x46, 0x70, 0x47, + 0x0e, 0x1c, 0x00, 0x08, 0xbc, 0x1c, 0x00, 0x08, 0x18, 0x1c, 0x00, 0x08, + 0x18, 0x1c, 0x00, 0x08, 0x18, 0x1c, 0x00, 0x08, 0x18, 0x1c, 0x00, 0x08, + 0x18, 0x1c, 0x00, 0x08, 0xc8, 0x1c, 0x00, 0x08, 0x0e, 0x1c, 0x00, 0x08, + 0xbc, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xf8, 0x29, 0x00, 0x08, + 0x00, 0x2b, 0x00, 0x08, 0x00, 0x2b, 0x00, 0x08, 0x00, 0x2b, 0x00, 0x08, + 0x22, 0x2a, 0x00, 0x08, 0x00, 0x2b, 0x00, 0x08, 0x00, 0x2b, 0x00, 0x08, + 0x00, 0x2b, 0x00, 0x08, 0x50, 0x2a, 0x00, 0x08, 0x00, 0x2b, 0x00, 0x08, + 0x00, 0x2b, 0x00, 0x08, 0x00, 0x2b, 0x00, 0x08, 0x7a, 0x2a, 0x00, 0x08, + 0x00, 0x2b, 0x00, 0x08, 0x00, 0x2b, 0x00, 0x08, 0x00, 0x2b, 0x00, 0x08, + 0xa8, 0x2a, 0x00, 0x08, 0x00, 0x2b, 0x00, 0x08, 0x00, 0x2b, 0x00, 0x08, + 0x00, 0x2b, 0x00, 0x08, 0xd2, 0x2a, 0x00, 0x08, 0x44, 0x2b, 0x00, 0x08, + 0x98, 0x2b, 0x00, 0x08, 0x98, 0x2b, 0x00, 0x08, 0x98, 0x2b, 0x00, 0x08, + 0x60, 0x2b, 0x00, 0x08, 0x98, 0x2b, 0x00, 0x08, 0x98, 0x2b, 0x00, 0x08, + 0x98, 0x2b, 0x00, 0x08, 0x6e, 0x2b, 0x00, 0x08, 0x98, 0x2b, 0x00, 0x08, + 0x98, 0x2b, 0x00, 0x08, 0x98, 0x2b, 0x00, 0x08, 0x7c, 0x2b, 0x00, 0x08, + 0x98, 0x2b, 0x00, 0x08, 0x98, 0x2b, 0x00, 0x08, 0x98, 0x2b, 0x00, 0x08, + 0x8a, 0x2b, 0x00, 0x08, 0xa6, 0x2b, 0x00, 0x08, 0x0c, 0x2c, 0x00, 0x08, + 0x0c, 0x2c, 0x00, 0x08, 0x0c, 0x2c, 0x00, 0x08, 0xec, 0x2b, 0x00, 0x08, + 0x0c, 0x2c, 0x00, 0x08, 0x0c, 0x2c, 0x00, 0x08, 0x0c, 0x2c, 0x00, 0x08, + 0xf4, 0x2b, 0x00, 0x08, 0x0c, 0x2c, 0x00, 0x08, 0x0c, 0x2c, 0x00, 0x08, + 0x0c, 0x2c, 0x00, 0x08, 0xfc, 0x2b, 0x00, 0x08, 0x0c, 0x2c, 0x00, 0x08, + 0x0c, 0x2c, 0x00, 0x08, 0x0c, 0x2c, 0x00, 0x08, 0x04, 0x2c, 0x00, 0x08, + 0xba, 0x2c, 0x00, 0x08, 0xe4, 0x2c, 0x00, 0x08, 0xe4, 0x2c, 0x00, 0x08, + 0xe4, 0x2c, 0x00, 0x08, 0xc4, 0x2c, 0x00, 0x08, 0xe4, 0x2c, 0x00, 0x08, + 0xe4, 0x2c, 0x00, 0x08, 0xe4, 0x2c, 0x00, 0x08, 0xcc, 0x2c, 0x00, 0x08, + 0xe4, 0x2c, 0x00, 0x08, 0xe4, 0x2c, 0x00, 0x08, 0xe4, 0x2c, 0x00, 0x08, + 0xd4, 0x2c, 0x00, 0x08, 0xe4, 0x2c, 0x00, 0x08, 0xe4, 0x2c, 0x00, 0x08, + 0xe4, 0x2c, 0x00, 0x08, 0xdc, 0x2c, 0x00, 0x08, 0x79, 0x01, 0x00, 0x08, + 0x51, 0x01, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x6c, 0xdc, 0x02 +}; +unsigned int node_base_bin_len = 12652; diff --git a/sketches/node_flasher_raw/node_flasher_raw.ino b/sketches/node_flasher_raw/node_flasher_raw.ino new file mode 100644 index 0000000..6a30d42 --- /dev/null +++ b/sketches/node_flasher_raw/node_flasher_raw.ino @@ -0,0 +1,233 @@ +#include "Wire.h" +#include "fw.h" + +// https://www.st.com/resource/en/application_note/an4221-i2c-protocol-used-in-the-stm32-bootloader-stmicroelectronics.pdf + +int howmany; +int res; + + +int command_write_page(uint8_t opcode, uint8_t* buf_cmd, size_t len_cmd, const uint8_t* buf_fw, size_t len_fw) { + uint8_t cmd[2]; + cmd[0] = opcode; + cmd[1] = 0xFF ^ opcode; + Wire1.beginTransmission(100); + Wire1.write(cmd, 2); + if (len_cmd > 0) { + buf_cmd[len_cmd - 1] = 0; + for (int i = 0; i < len_cmd - 1; i++) { + buf_cmd[len_cmd - 1] ^= buf_cmd[i]; + } + Wire1.endTransmission(true); + Wire1.requestFrom(100, 1); + auto c = Wire1.read(); + if (c != 0x79) { + Serial.print("error first ack: "); + Serial.println(c, HEX); + return -1; + } + Wire1.beginTransmission(100); + Wire1.write(buf_cmd, len_cmd); + } + Wire1.endTransmission(true); + Wire1.requestFrom(100, 1); + auto c = Wire1.read(); + if (c != 0x79) { + while (c == 0x76) { + delay(10); + Wire1.requestFrom(100, 1); + c = Wire1.read(); + } + if (c != 0x79) { + Serial.print("error second ack: "); + Serial.println(c, HEX); + return -1; + } + } + uint8_t tmpbuf[len_fw + 2] = { len_fw - 1 }; + memcpy(&tmpbuf[1], buf_fw, len_fw); + for (int i = 0; i < len_fw + 1; i++) { + tmpbuf[len_fw + 1] ^= tmpbuf[i]; + } + Wire1.beginTransmission(100); + Wire1.write(tmpbuf, len_fw + 2); + Wire1.endTransmission(true); + Wire1.requestFrom(100, 1); + c = Wire1.read(); + if (c != 0x79) { + while (c == 0x76) { + delay(10); + Wire1.requestFrom(100, 1); + c = Wire1.read(); + } + if (c != 0x79) { + Serial.print("error: "); + Serial.println(c, HEX); + return -1; + } + } +final_ack: + return howmany + 1; +} + + +int command(uint8_t opcode, uint8_t* buf_cmd, size_t len_cmd, uint8_t* buf_resp, size_t len_resp) { + uint8_t cmd[2]; + cmd[0] = opcode; + cmd[1] = 0xFF ^ opcode; + Wire1.beginTransmission(100); + Wire1.write(cmd, 2); + if (len_cmd > 0) { + Wire1.endTransmission(true); + Wire1.requestFrom(100, 1); + auto c = Wire1.read(); + if (c != 0x79) { + Serial.print("error first ack: "); + Serial.println(c, HEX); + return -1; + } + Wire1.beginTransmission(100); + Wire1.write(buf_cmd, len_cmd); + } + Wire1.endTransmission(true); + Wire1.requestFrom(100, 1); + auto c = Wire1.read(); + if (c != 0x79) { + while (c == 0x76) { + delay(100); + Wire1.requestFrom(100, 1); + c = Wire1.read(); + Serial.print("retry"); + } + if (c != 0x79) { + Serial.print("error second ack: "); + Serial.println(c, HEX); + return -1; + } + } + int howmany = -1; + if (len_resp == 0) { + goto final_ack; + } + Wire1.requestFrom(100, len_resp); + howmany = Wire1.read(); + for (int j = 0; j < howmany + 1; j++) { + buf_resp[j] = Wire1.read(); + } + + Wire1.requestFrom(100, 1); + c = Wire1.read(); + if (c != 0x79) { + Serial.print("error: "); + Serial.println(c, HEX); + return -1; + } +final_ack: + return howmany + 1; +} + +int sendReset() { + uint8_t buf[3] = {'D', 'I', 'E'}; + Wire1.beginTransmission(62); + Wire1.write(buf, 3); + return Wire1.endTransmission(); +} + +void setup() { + Serial.begin(115200); + Wire1.begin(); + Wire1.setClock(400000); + + if (sendReset() != 0) { + Serial.println("Send reset failed"); + } + + uint8_t resp_buf[255]; + int resp; + Serial.println("GET_COMMAND"); + resp = command(0, nullptr, 0, resp_buf, 20); + + for (int i = 0; i < resp; i++) { + Serial.println(resp_buf[i], HEX); + } + + Serial.println("GET_ID"); + resp = command(2, nullptr, 0, resp_buf, 3); + for (int i = 0; i < resp; i++) { + Serial.println(resp_buf[i], HEX); + } + + Serial.println("GET_ID"); + resp = command(2, nullptr, 0, resp_buf, 3); + for (int i = 0; i < resp; i++) { + Serial.println(resp_buf[i], HEX); + } + + Serial.println("MASS_ERASE"); + uint8_t erase_buf[3] = {0xFF, 0xFF, 0x0}; + resp = command(0x44, erase_buf, 3, nullptr, 0); + for (int i = 0; i < resp; i++) { + Serial.println(resp_buf[i], HEX); + } + + for (int i = 0; i < node_base_bin_len; i += 128) { + Serial.print("WRITE_PAGE "); + Serial.println(i, HEX); + uint8_t write_buf[5] = {8, 0, i / 256, i % 256}; + resp = command_write_page(0x32, write_buf, 5, &node_base_bin[i], 128); + for (int i = 0; i < resp; i++) { + Serial.println(resp_buf[i], HEX); + } + delay(10); + } + + //Wire1.beginTransmission(100); + //if (Wire1.endTransmission() == 0) { + // Serial.println("Device found"); + //} + /* + + uint8_t buf[2] = {0, 0xFF}; + Wire1.beginTransmission(100); + Wire1.write(buf, 2); + Wire1.endTransmission(true); + Wire1.requestFrom(100, 1); + while (!Wire1.available()) { + delay(1); + } + uint8_t res = Wire1.read(); + Serial.println(res, HEX); + + Wire1.requestFrom(100, 20); + uint8_t howmany = Wire1.read(); + Serial.println(howmany); + for (int j = 0; j < howmany+1; j++) { + Serial.println(Wire1.read(), HEX); + } + delay(100); + buf[0] = 0x2; buf[1] = 0xFD; + Wire1.beginTransmission(100); + Wire1.write(buf, 2); + Wire1.endTransmission(true); + Wire1.requestFrom(100, 1); + res = Wire1.read(); + Serial.println(res, HEX); + if (res == 255) { + Serial.println("error"); + while (1); + } + + Wire1.requestFrom(100, 3); + howmany = Wire1.read(); + Serial.println(howmany); + for (int j = 0; j < howmany + 1; j++) { + Serial.println(Wire1.read(), HEX); + } + */ + +} + +void loop() { + // put your main code here, to run repeatedly: + +}