From bf05baf171f44932175bc19b88bfd4d62fd8f7b7 Mon Sep 17 00:00:00 2001 From: Ruel Date: Mon, 12 Mar 2018 18:50:15 -0400 Subject: [PATCH] Initial commit --- delay.h | 15 +++ lcd.bin.hex | 96 +++++++++++++ lcd.c | 377 ++++++++++++++++++++++++++++++++++++++++++++++++++++ lcd.hex | 187 ++++++++++++++++++++++++++ 4 files changed, 675 insertions(+) create mode 100644 delay.h create mode 100644 lcd.bin.hex create mode 100644 lcd.c create mode 100644 lcd.hex diff --git a/delay.h b/delay.h new file mode 100644 index 0000000..5cedc97 --- /dev/null +++ b/delay.h @@ -0,0 +1,15 @@ +#define delay_ms(x) __mydelay_loop_((long) x*80) +//79.681 would be correct +#define delay_us(x) __mydelay_loop_((long) x) +//actually 12.55uS Temic 80c31 11.0592MHz + +//extern void __delay_loop_(signed long); +void __mydelay_loop_(signed long); + +void __mydelay_loop_(signed long val) +{ + for(;val;val--); +} + + + diff --git a/lcd.bin.hex b/lcd.bin.hex new file mode 100644 index 0000000..f2ba65b --- /dev/null +++ b/lcd.bin.hex @@ -0,0 +1,96 @@ +02000602028c75810d1209dee58260030200037900e94400601b7a00900b +40780175a000e493f2a308b8000205a0d9f4daf275a0ffe4787ff6d8fd78 +00e84400600a790175a000e4f309d8fc7800e84400600c7900900001e4f0 +a3d8fcd9fa020003ac82ad83aef0ffec4d4e4f600f1cbcff091dbdff051e +beff011f80eb22906d60e4f5f01200627590ff900640e4f5f01200627590 +137590039004b0e4f5f0120062759013759003900190e4f5f01200627590 +13759003900190e4f5f0120062759012759002900190e4f5f0020062e582 +ffc4540ffe53060f74104ef590900190e4f5f0c007c006120062d0068e90 +900190e4f5f0120062d00753070f74104ff5908f9022ad82ae83aff08d82 +8e838ff01209c2fc700122ecc4540f30e30244f0fc740f5c4430f5909000 +50e4f5f0c007c006c005120062d005d006d0078d828e838ff01209c2fcc4 +540f30e30244f0fc740f5c4420f590900050e4f5f0c007c006c005120062 +d005d006d0078d828e838ff01209c2fc740f5c4430f590900050e4f5f0c0 +07c006c005120062d005d006d0078d828e838ff01209c2fca3ad82ae8374 +0f5c4420f590900050e4f5f0c007c006c005120062d005d006d00702010c +7582281200d075820f1200d07582061200d07582011200d07582021200d0 +7582800200d07e8e7f0175088c75090f8e0a8f0b750c14750d0085088285 +0983c007c006120999a882a983d006d007e849605175b0558e028f037c00 +7d008a828b838cf0edc007c006c005c004c003c002c001c000120062d000 +d001d002d003d004d00575b0aa8a828b838cf0edc001c000120062d000d0 +01d006d00718b8ff011980ab1ebeff011fe50824fbf508e50934fff50915 +0a74ffb50a02150bc37402950ae4950b50030201f42212007f1201c29009 +e275f08012010690388075f001e41200621201c29009e275f08012010675 +b0ff90710075f002e41200627582801200d09009f275f08012010675b000 +90388075f001e412006275b0ff90388075f001e41200627582801200d090 +0a0375f08012010675b00090710075f002e41200627582c01200d0900a14 +75f08012010675b0aa90388075f001e41200627582c01200d0900a2575f0 +8012010675b05590388075f001e41200627582c01200d0900a3675f08012 +01067f6475b055900190e4f5f0c00712006275b0aa900190e4f5f0120062 +d007dfe27582c01200d0900a4875f0801201067f1875b055900fa0e4f5f0 +c00712006275b0aa900fa0e4f5f0120062d007dfe27f0a75b055900190e4 +f5f0c00712006275b0aa900190e4f5f0120062d007dfe27582c01200d090 +0a5975f0801201067fdc75b0559000fae4f5f0c00712006275b0aa9000fa +e4f5f0120062d007dfe27582c01200d0900a6a75f0801201067ef77f0075 +b0559000a1e4f5f0c007c00612006275b0aa9000a1e4f5f0120062d006d0 +071ebeff011fee4f70d77582c01200d0900a7b75f0801201067e067f0175 +b055900098e4f5f0c007c00612006275b0aa900098e4f5f0120062d006d0 +071ebeff011fee4f70d77582c01200d0900a8c75f0801201067e267f0175 +b055900088e4f5f0c007c00612006275b0aa900087e4f5f0120062d006d0 +071ebeff011fee4f70d77582c01200d0900a9c75f0801201067e497f0175 +b055900079e4f5f0c007c00612006275b0aa900079e4f5f0120062d006d0 +071ebeff011fee4f70d77582c01200d0900aac75f0801201067e727f0175 +b05590006ce4f5f0c007c00612006275b0aa90006be4f5f0120062d006d0 +071ebeff011fee4f70d77582c01200d0900abc75f0801201067e9f7f0175 +b055900060e4f5f0c007c00612006275b0aa900060e4f5f0120062d006d0 +071ebeff011fee4f70d77582c01200d0900acc75f0801201067eb87f0175 +b05590005be4f5f0c007c00612006275b0aa90005be4f5f0120062d006d0 +071ebeff011fee4f70d77582c01200d0900adc75f08012010675b000909c +40e4f5f01200627582c01200d0900aed75f0801201067ea17f1d75b05590 +0012e4f5f0c007c00612006275b0aa900012e4f5f0120062d006d0071ebe +ff011fee4f70d77582801200d0900afe75f0801201067582c01200d0900b +0e75f0801201067eb87f0175b05590005be4f5f0c007c00612006275b0aa +90005be4f5f0120062d006d0071ebeff011fee4f70d77e0b7f0275b05590 +004ce4f5f0c007c00612006275b0aa90004ce4f5f0120062d006d0071ebe +ff011fee4f70d77e937f0275b05590003ce4f5f0c007c00612006275b0aa +90003ce4f5f0120062d006d0071ebeff011fee4f70d77e707f0375b05590 +002ce4f5f0c007c00612006275b0aa90002ce4f5f0120062d006d0071ebe +ff011fee4f70d77e6eff75b05590005be4f5f0c007c00612006275b0aa90 +005be4f5f0120062d006d0071ebeff011fee4f70d77e83ff75b05590004c +e4f5f0c007c00612006275b0aa90004ce4f5f0120062d006d0071ebeff01 +1fee4f70d77ea5ff75b05590003ce4f5f0c007c00612006275b0aa90003c +e4f5f0120062d006d0071ebeff011fee4f70d77edcff75b05590002ce4f5 +f0c007c00612006275b0aa90002ce4f5f0120062d006d0071ebeff011fee +4f70d77e6eff75b05590005be4f5f0c007c00612006275b0aa90005be4f5 +f0120062d006d0071ebeff011fee4f70d77e83ff75b05590004ce4f5f0c0 +07c00612006275b0aa90004ce4f5f0120062d006d0071ebeff011fee4f70 +d77ea5ff75b05590003ce4f5f0c007c00612006275b0aa90003ce4f5f012 +0062d006d0071ebeff011fee4f70d77edcff75b05590002ce4f5f0c007c0 +0612006275b0aa90002ce4f5f0120062d006d0071ebeff011fee4f70d77e +6eff75b05590005be4f5f0c007c00612006275b0aa90005be4f5f0120062 +d006d0071ebeff011fee4f70d77e83ff75b05590004ce4f5f0c007c00612 +006275b0aa90004ce4f5f0120062d006d0071ebeff011fee4f70d77ea5ff +75b05590003ce4f5f0c007c00612006275b0aa90003ce4f5f0120062d006 +d0071ebeff011fee4f70d77edcff75b05590002ce4f5f0c007c006120062 +75b0aa90002ce4f5f0120062d006d0071ebeff011fee4f70d77e6eff75b0 +5590005be4f5f0c007c00612006275b0aa90005be4f5f0120062d006d007 +1ebeff011fee4f70d77e83ff75b05590004ce4f5f0c007c00612006275b0 +aa90004ce4f5f0120062d006d0071ebeff011fee4f70d77ea5ff75b05590 +003ce4f5f0c007c00612006275b0aa90003ce4f5f0120062d006d0071ebe +ff011fee4f70d77edcff75b05590002ce4f5f0c007c00612006275b0aa90 +002ce4f5f0120062d006d0071ebeff011fee4f70d77582801200d0900b1f +75f0801201067582c01200d0900b3075f0801201061201e602029b7a10e4 +fbfce58225e0f582e58333f583eb33fbec33fceb950cf5f0ec950d4006fc +abf0438201dadd2220f71430f6148883a88220f507e6a88375830022e280 +f7e49322e02275820022205b5275684e6574204c6162735d20005f496e74 +656c2038303531204d43555f003e4c45442f417564696f20546573743c00 +28506f72742050333a203078414129200028506f72742050333a20307835 +35292000503320726174653a207e313030487a202000503320726174653a +207e3130487a202000503320726174653a207e323230487a200050332072 +6174653a207e323437487a2000503320726174653a207e323632487a2000 +503320726174653a207e323934487a00503320726174653a207e33323948 +7a00503320726174653a207e333730487a00503320726174653a207e3431 +35487a00503320726174653a207e343430487a005761697420666f722069 +742e2e2e2020004672756974466c792032313637487a21007e43686f7264 +3a2041204d616a6f720041202d3e204323202d3e20452d3e204100467265 +7175656e63792053776565703a00313030487a207e7e7e2031306b487a00 diff --git a/lcd.c b/lcd.c new file mode 100644 index 0000000..5414ea5 --- /dev/null +++ b/lcd.c @@ -0,0 +1,377 @@ +//LCD 4 Bit Mode 8051 + +#include <8051.h> +#include "delay.h" +#define LCD P1 +#define ENABLE 0x10 +#define REG_SL 0x20 +/* + +LCD: DB4|DB5|DB6|DB7|EN |RS RW +P1: 0 1 2 3 4 5 GND + +*/ + +void lcd_reset() //Reset sequence as stated in the LCD datasheet +{ + delay_ms(350); + LCD = 0xFF; + delay_ms(20); + LCD = 0x03|ENABLE; + LCD = 0x03; + delay_ms(15); + LCD = 0x03|ENABLE; + LCD = 0x03; + delay_ms(5); + LCD = 0x03|ENABLE; + LCD = 0x03; + delay_ms(5); + LCD = 0x02|ENABLE; + LCD = 0x02; + delay_ms(5); +} + + +void lcd_cmd(unsigned char cmd) //Subroutine to send command +{ + LCD = ((cmd>>4)&0x0F)|ENABLE; //Sending higher nibble by shifting with Pulsing Enable high + delay_ms(5); + LCD = ((cmd>>4)&0x0F); + delay_ms(5); + LCD = (cmd & 0x0F)|ENABLE; //Sending lower nibble Enable low + LCD = (cmd & 0x0F); +} + + +void lcd_data (char *dat) //Subroutine to send data +{ + while(*dat != '\0') { + LCD = (((*dat>>4)&0x0F)|ENABLE|REG_SL); //Sending data by making RS=1 + delay_ms(1); + LCD = (((*dat>>4)&0x0F)|REG_SL); + delay_ms(1); + LCD = ((*dat & 0x0F)|ENABLE|REG_SL); + delay_ms(1); + LCD = ((*dat & 0x0F)|REG_SL); + delay_ms(1); + dat++; + } +} + + +void lcd_init () +{ + lcd_cmd(0x28); // 4-bit mode - 2 line - 5x7 font. + lcd_cmd(0x0F); // Display cursor with blink. + lcd_cmd(0x06); // Automatic Increment - No Display shift. + lcd_cmd(0x01); + lcd_cmd(0x02); //Clear screen and return home + lcd_cmd(0x80); // First row first column +} + + +void sweep(void) +{ +unsigned int freq; +unsigned int z; +unsigned int notes; +unsigned int cycles; + + freq=398; + z=3980; + for(notes=398;notes>2;notes--) { + for(cycles=z/20;cycles>0;cycles--) { + P3=0x55; + delay_us(freq); + P3=0xAA; + delay_us(freq); + } + freq--; + z=z-5; + } + +} + + + +void main() +{ + unsigned char x; + unsigned int y; + lcd_reset(); + lcd_init(); + lcd_data(" [RuhNet Labs] "); + while(1) { + delay_ms(1000); + lcd_init(); //Clear screen and return home + lcd_data(" [RuhNet Labs] "); + P3 = 0xFF; //turn all P3 outputs on + delay_ms(2000); + lcd_cmd(0x80); // First row first column + lcd_data("_Intel 8051 MCU_"); + P3 = 0x00; + delay_ms(1000); + P3 = 0xFF; + delay_ms(1000); + lcd_cmd(0x80); // First row first column + lcd_data(">LED/Audio Test<"); + P3 = 0x00; + delay_ms(2000); + lcd_cmd(0xC0); // Second row first column + lcd_data("(Port P3: 0xAA) "); + P3 = 0xAA; + delay_ms(1000); + lcd_cmd(0xC0); // Second row first column + lcd_data("(Port P3: 0x55) "); + P3 = 0x55; + delay_ms(1000); + + lcd_cmd(0xC0); // Second row first column + lcd_data("P3 rate: ~100Hz "); + for(x=100;x>0;x--) { //2 seconds, 100Hz + P3=0x55; + delay_ms(5); + P3=0xAA; + delay_ms(5); + } + lcd_cmd(0xC0); // Second row first column + lcd_data("P3 rate: ~10Hz "); + for (x=24;x>0;x--) { //4.8 seconds, 10Hz + P3=0x55; + delay_ms(50); + P3=0xAA; + delay_ms(50); + } + for(x=10;x>0;x--) { //0.2 seconds, + P3=0x55; + delay_ms(5); + P3=0xAA; + delay_ms(5); + } + lcd_cmd(0xC0); // Second row first column + lcd_data("P3 rate: ~220Hz "); + for(x=220;x>0;x--) { //2 sec, 200Hz + P3=0x55; + delay_us(250); + P3=0xAA; + delay_us(250); + } + lcd_cmd(0xC0); // Second row first column + lcd_data("P3 rate: ~247Hz "); + for(y=247;y>0;y--) { //2 sec, 250Hz + P3=0x55; + delay_us(161); + P3=0xAA; + delay_us(161); + } + lcd_cmd(0xC0); // Second row first column + lcd_data("P3 rate: ~262Hz "); + for(y=262;y>0;y--) { + P3=0x55; + delay_us(152); + P3=0xAA; + delay_us(152); + } + lcd_cmd(0xC0); + lcd_data("P3 rate: ~294Hz"); + for(y=294;y>0;y--) { + P3=0x55; + delay_us(136); + P3=0xAA; + delay_us(135); + } + lcd_cmd(0xC0); + lcd_data("P3 rate: ~329Hz"); + for(y=329;y>0;y--) { + P3=0x55; + delay_us(121); + P3=0xAA; + delay_us(121); + } + lcd_cmd(0xC0); + lcd_data("P3 rate: ~370Hz"); + for(y=370;y>0;y--) { + P3=0x55; + delay_us(108); + P3=0xAA; + delay_us(107); + } + lcd_cmd(0xC0); + lcd_data("P3 rate: ~415Hz"); + for(y=415;y>0;y--) { + P3=0x55; + delay_us(96); + P3=0xAA; + delay_us(96); + } + lcd_cmd(0xC0); + lcd_data("P3 rate: ~440Hz"); + for(y=440;y>0;y--) { + P3=0x55; + delay_us(91); + P3=0xAA; + delay_us(91); + } + + lcd_cmd(0xC0); + lcd_data("Wait for it... "); + P3=0x00; + delay_ms(500); + + lcd_cmd(0xC0); // Second row first column + lcd_data("FruitFly 2167Hz!"); + for(y=7585;y>0;y--) { + P3=0x55; + delay_us(18); + P3=0xAA; + delay_us(18); + } + lcd_cmd(0x80); + lcd_data("~Chord: A Major"); + lcd_cmd(0xC0); // Second row first column + lcd_data("A -> C# -> E-> A"); + for(y=440;y>0;y--) { //1 sec, A 440Hz + P3=0x55; + delay_us(91); + P3=0xAA; + delay_us(91); + } + for(y=523;y>0;y--) { //1 sec, C# 523Hz + P3=0x55; + delay_us(76); + P3=0xAA; + delay_us(76); + } + for(y=659;y>0;y--) { //1 sec, E 659Hz + P3=0x55; + delay_us(60); + P3=0xAA; + delay_us(60); + } + for(y=880;y>0;y--) { //1 sec, A 880Hz + P3=0x55; + delay_us(44); + P3=0xAA; + delay_us(44); + } + + + for(y=110;y>0;y--) { //0.25 sec, A 440Hz + P3=0x55; + delay_us(91); + P3=0xAA; + delay_us(91); + } + for(y=131;y>0;y--) { //0.25 sec, C# 523Hz + P3=0x55; + delay_us(76); + P3=0xAA; + delay_us(76); + } + for(y=165;y>0;y--) { //0.25 sec, E 659Hz + P3=0x55; + delay_us(60); + P3=0xAA; + delay_us(60); + } + for(y=220;y>0;y--) { //0.25 sec, A 880Hz + P3=0x55; + delay_us(44); + P3=0xAA; + delay_us(44); + } + + + for(y=110;y>0;y--) { //0.25 sec, A 440Hz + P3=0x55; + delay_us(91); + P3=0xAA; + delay_us(91); + } + for(y=131;y>0;y--) { //0.25 sec, C# 523Hz + P3=0x55; + delay_us(76); + P3=0xAA; + delay_us(76); + } + for(y=165;y>0;y--) { //0.25 sec, E 659Hz + P3=0x55; + delay_us(60); + P3=0xAA; + delay_us(60); + } + for(y=220;y>0;y--) { //0.25 sec, A 880Hz + P3=0x55; + delay_us(44); + P3=0xAA; + delay_us(44); + } + + + + for(y=110;y>0;y--) { //0.25 sec, A 440Hz + P3=0x55; + delay_us(91); + P3=0xAA; + delay_us(91); + } + for(y=131;y>0;y--) { //0.25 sec, C# 523Hz + P3=0x55; + delay_us(76); + P3=0xAA; + delay_us(76); + } + for(y=165;y>0;y--) { //0.25 sec, E 659Hz + P3=0x55; + delay_us(60); + P3=0xAA; + delay_us(60); + } + for(y=220;y>0;y--) { //0.25 sec, A 880Hz + P3=0x55; + delay_us(44); + P3=0xAA; + delay_us(44); + } + + + + for(y=110;y>0;y--) { //0.25 sec, A 440Hz + P3=0x55; + delay_us(91); + P3=0xAA; + delay_us(91); + } + for(y=131;y>0;y--) { //0.25 sec, C# 523Hz + P3=0x55; + delay_us(76); + P3=0xAA; + delay_us(76); + } + for(y=165;y>0;y--) { //0.25 sec, E 659Hz + P3=0x55; + delay_us(60); + P3=0xAA; + delay_us(60); + } + for(y=220;y>0;y--) { //0.25 sec, A 880Hz + P3=0x55; + delay_us(44); + P3=0xAA; + delay_us(44); + } + + + lcd_cmd(0x80); + lcd_data("Frequency Sweep:"); + lcd_cmd(0xC0); // Second row first column + lcd_data("100Hz ~~~ 10kHz "); + sweep(); + + + + + + + } +} diff --git a/lcd.hex b/lcd.hex new file mode 100644 index 0000000..b35eae4 --- /dev/null +++ b/lcd.hex @@ -0,0 +1,187 @@ +:03000000020006F5 +:03005F0002000399 +:0300030002028C6A +:10006200AC82AD83AEF0FFEC4D4E4F600F1CBCFF77 +:10007200091DBDFF051EBEFF011F80EB22906D60B2 +:10008200E4F5F01200627590FF900640E4F5F0127C +:1000920000627590137590039004B0E4F5F01200BD +:1000A20062759013759003900190E4F5F01200626E +:1000B200759013759003900190E4F5F0120062754B +:1000C2009012759002900190E4F5F0020062E582D0 +:1000D200FFC4540FFE53060F74104EF5909001901A +:1000E200E4F5F0C007C006120062D0068E909001BF +:1000F20090E4F5F0120062D00753070F74104FF529 +:10010200908F9022AD82AE83AFF08D828E838FF07E +:100112001209C2FC700122ECC4540F30E30244F015 +:10012200FC740F5C4430F590900050E4F5F0C00789 +:10013200C006C005120062D005D006D0078D828E9F +:10014200838FF01209C2FCC4540F30E30244F0FC66 +:10015200740F5C4420F590900050E4F5F0C007C0A5 +:1001620006C005120062D005D006D0078D828E83AC +:100172008FF01209C2FC740F5C4430F5909000506D +:10018200E4F5F0C007C006C005120062D005D00633 +:10019200D0078D828E838FF01209C2FCA3AD82AE8E +:1001A20083740F5C4420F590900050E4F5F0C00792 +:1001B200C006C005120062D005D006D00702010CAD +:1001C2007582281200D075820F1200D07582061235 +:1001D20000D07582011200D07582021200D07582A1 +:1001E200800200D07E8E7F0175088C75090F8E0A01 +:1001F2008F0B750C14750D00850882850983C00765 +:10020200C006120999A882A983D006D007E84960DE +:100212005175B0558E028F037C007D008A828B83DC +:100222008CF0EDC007C006C005C004C003C002C008 +:1002320001C000120062D000D001D002D003D0046D +:10024200D00575B0AA8A828B838CF0EDC001C00004 +:10025200120062D000D001D006D00718B8FF0119F1 +:1002620080AB1EBEFF011FE50824FBF508E509343B +:10027200FFF509150A74FFB50A02150BC37402953E +:100282000AE4950B50030201F42212007F1201C20C +:100292009009E275F08012010690388075F001E451 +:1002A2001200621201C29009E275F0801201067515 +:1002B200B0FF90710075F002E41200627582801244 +:1002C20000D09009F275F08012010675B0009038E6 +:1002D2008075F001E412006275B0FF90388075F00D +:1002E20001E41200627582801200D0900A0375F058 +:1002F2008012010675B00090710075F002E41200E0 +:10030200627582C01200D0900A1475F08012010644 +:1003120075B0AA90388075F001E41200627582C04F +:100322001200D0900A2575F08012010675B0559022 +:10033200388075F001E41200627582C01200D0901C +:100342000A3675F0801201067F6475B055900190EF +:10035200E4F5F0C00712006275B0AA900190E4F5CE +:10036200F0120062D007DFE27582C01200D0900A5C +:100372004875F0801201067F1875B055900FA0E401 +:10038200F5F0C00712006275B0AA900FA0E4F5F074 +:10039200120062D007DFE27F0A75B055900190E447 +:1003A200F5F0C00712006275B0AA900190E4F5F072 +:1003B200120062D007DFE27582C01200D0900A59A3 +:1003C20075F0801201067FDC75B0559000FAE4F5F5 +:1003D200F0C00712006275B0AA9000FAE4F5F012BC +:1003E2000062D007DFE27582C01200D0900A6A75FF +:1003F200F0801201067EF77F0075B0559000A1E4EF +:10040200F5F0C007C00612006275B0AA9000A1E420 +:10041200F5F0120062D006D0071EBEFF011FEE4F9C +:1004220070D77582C01200D0900A7B75F0801201DD +:10043200067E067F0175B055900098E4F5F0C0077E +:10044200C00612006275B0AA900098E4F5F012009E +:1004520062D006D0071EBEFF011FEE4F70D7758215 +:10046200C01200D0900A8C75F0801201067E267FA1 +:100472000175B055900088E4F5F0C007C00612007F +:100482006275B0AA900087E4F5F0120062D006D03F +:10049200071EBEFF011FEE4F70D77582C01200D03B +:1004A200900A9C75F0801201067E497F0175B05555 +:1004B200900079E4F5F0C007C00612006275B0AA98 +:1004C200900079E4F5F0120062D006D0071EBEFF5C +:1004D200011FEE4F70D77582C01200D0900AAC7522 +:1004E200F0801201067E727F0175B05590006CE4B7 +:1004F200F5F0C007C00612006275B0AA90006BE466 +:10050200F5F0120062D006D0071EBEFF011FEE4FAB +:1005120070D77582C01200D0900ABC75F0801201AB +:10052200067E9F7F0175B055900060E4F5F0C0072C +:10053200C00612006275B0AA900060E4F5F01200E5 +:1005420062D006D0071EBEFF011FEE4F70D7758224 +:10055200C01200D0900ACC75F0801201067EB87FDE +:100562000175B05590005BE4F5F0C007C0061200BB +:100572006275B0AA90005BE4F5F0120062D006D07A +:10058200071EBEFF011FEE4F70D77582C01200D04A +:10059200900ADC75F08012010675B000909C40E470 +:1005A200F5F01200627582C01200D0900AED75F06B +:1005B200801201067EA17F1D75B055900012E4F5F0 +:1005C200F0C007C00612006275B0AA900012E4F5EE +:1005D200F0120062D006D0071EBEFF011FEE4F7060 +:1005E200D77582801200D0900AFE75F08012010643 +:1005F2007582C01200D0900B0E75F0801201067E3B +:10060200B87F0175B05590005BE4F5F0C007C006F5 +:1006120012006275B0AA90005BE4F5F0120062D09D +:1006220006D0071EBEFF011FEE4F70D77E0B7F0262 +:1006320075B05590004CE4F5F0C007C00612006298 +:1006420075B0AA90004CE4F5F0120062D006D00713 +:100652001EBEFF011FEE4F70D77E937F0275B0550D +:1006620090003CE4F5F0C007C00612006275B0AA23 +:1006720090003CE4F5F0120062D006D0071EBEFFE7 +:10068200011FEE4F70D77E707F0375B05590002C1E +:10069200E4F5F0C007C00612006275B0AA90002C03 +:1006A200E4F5F0120062D006D0071EBEFF011FEE75 +:1006B2004F70D77E6EFF75B05590005BE4F5F0C0C9 +:1006C20007C00612006275B0AA90005BE4F5F01252 +:1006D2000062D006D0071EBEFF011FEE4F70D77E0C +:1006E20083FF75B05590004CE4F5F0C007C00612C8 +:1006F200006275B0AA90004CE4F5F0120062D006D8 +:10070200D0071EBEFF011FEE4F70D77EA5FF75B04A +:100712005590003CE4F5F0C007C00612006275B0C7 +:10072200AA90003CE4F5F0120062D006D0071EBE8B +:10073200FF011FEE4F70D77EDCFF75B05590002C85 +:10074200E4F5F0C007C00612006275B0AA90002C52 +:10075200E4F5F0120062D006D0071EBEFF011FEEC4 +:100762004F70D77E6EFF75B05590005BE4F5F0C018 +:1007720007C00612006275B0AA90005BE4F5F012A1 +:100782000062D006D0071EBEFF011FEE4F70D77E5B +:1007920083FF75B05590004CE4F5F0C007C0061217 +:1007A200006275B0AA90004CE4F5F0120062D00627 +:1007B200D0071EBEFF011FEE4F70D77EA5FF75B09A +:1007C2005590003CE4F5F0C007C00612006275B017 +:1007D200AA90003CE4F5F0120062D006D0071EBEDB +:1007E200FF011FEE4F70D77EDCFF75B05590002CD5 +:1007F200E4F5F0C007C00612006275B0AA90002CA2 +:10080200E4F5F0120062D006D0071EBEFF011FEE13 +:100812004F70D77E6EFF75B05590005BE4F5F0C067 +:1008220007C00612006275B0AA90005BE4F5F012F0 +:100832000062D006D0071EBEFF011FEE4F70D77EAA +:1008420083FF75B05590004CE4F5F0C007C0061266 +:10085200006275B0AA90004CE4F5F0120062D00676 +:10086200D0071EBEFF011FEE4F70D77EA5FF75B0E9 +:100872005590003CE4F5F0C007C00612006275B066 +:10088200AA90003CE4F5F0120062D006D0071EBE2A +:10089200FF011FEE4F70D77EDCFF75B05590002C24 +:1008A200E4F5F0C007C00612006275B0AA90002CF1 +:1008B200E4F5F0120062D006D0071EBEFF011FEE63 +:1008C2004F70D77E6EFF75B05590005BE4F5F0C0B7 +:1008D20007C00612006275B0AA90005BE4F5F01240 +:1008E2000062D006D0071EBEFF011FEE4F70D77EFA +:1008F20083FF75B05590004CE4F5F0C007C00612B6 +:10090200006275B0AA90004CE4F5F0120062D006C5 +:10091200D0071EBEFF011FEE4F70D77EA5FF75B038 +:100922005590003CE4F5F0C007C00612006275B0B5 +:10093200AA90003CE4F5F0120062D006D0071EBE79 +:10094200FF011FEE4F70D77EDCFF75B05590002C73 +:10095200E4F5F0C007C00612006275B0AA90002C40 +:10096200E4F5F0120062D006D0071EBEFF011FEEB2 +:100972004F70D77582801200D0900B1F75F08012D5 +:1009820001067582C01200D0900B3075F080120102 +:07099200061201E602029BC0 +:1009E200205B5275684E6574204C6162735D200015 +:1009F2005F496E74656C2038303531204D43555F48 +:100A0200003E4C45442F417564696F2054657374F0 +:100A12003C0028506F72742050333A2030784141A4 +:100A220029200028506F72742050333A20307835D4 +:100A320035292000503320726174653A207E3130AE +:100A420030487A202000503320726174653A207E4B +:100A52003130487A202000503320726174653A2088 +:100A62007E323230487A2000503320726174653A07 +:100A7200207E323437487A20005033207261746508 +:100A82003A207E323632487A200050332072617426 +:100A9200653A207E323934487A00503320726174CC +:100AA200653A207E333239487A00503320726174BD +:100AB200653A207E333730487A00503320726174B1 +:100AC200653A207E343135487A00503320726174A1 +:100AD200653A207E343430487A0057616974206662 +:100AE2006F722069742E2E2E202000467275697452 +:100AF200466C792032313637487A21007E43686F5E +:100B020072643A2041204D616A6F720041202D3E8D +:100B1200204323202D3E20452D3E20410046726574 +:100B22007175656E63792053776565703A0031306F +:0E0B320030487A207E7E7E2031306B487A007B +:100999007A10E4FBFCE58225E0F582E58333F583F3 +:1009A900EB33FBEC33FCEB950CF5F0EC950D4006C5 +:0909B900FCABF0438201DADD22FF +:06003500E4787FF6D8FD1F +:100013007900E94400601B7A00900B40780175A0D9 +:1000230000E493F2A308B8000205A0D9F4DAF2754C +:02003300A0FF2C +:10003B007800E84400600A790175A000E4F309D860 +:10004B00FC7800E84400600C7900900001E4F0A318 +:04005B00D8FCD9FAFA +:0D00060075810D1209DEE582600302000322 +:1009C20020F71430F6148883A88220F507E6A8835E +:1009D20075830022E280F7E49322E02275820022EE +:00000001FF