From 476f7db5c9aaabb1ebbdd36e73ef9bf1b5457955 Mon Sep 17 00:00:00 2001 From: Andrey Klimov Date: Fri, 3 May 2019 15:45:41 +0300 Subject: [PATCH 1/9] SmartMode added (when Relays can be associated with multiply DMX channels) --- README.md | 33 +- .../dmx_receiver_mos_relay_public.ino | 907 ++++++++++-------- 2 files changed, 530 insertions(+), 410 deletions(-) rename dmx_receiver_mos_relay_public.ino => dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino (72%) diff --git a/README.md b/README.md index 6050425..b8fdcb9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -DMXReceiver +# DMXReceiver Techinal Specifications Nominal Input Voltage (DC) 9 to 24 Vdc @@ -7,22 +7,45 @@ Output Current 2.5A Max/Ch Number of DMX Channels 4 Addressing DMX Range 1 to 509 -Setting Address +# Advanced features - Smart mode (Activated by turning Switch#10 on): + +Guidance to use + +1. Turn Switch #10 on, rest switches off and restart board +2. Put board in Learning mode by turning Switch #9 on +3. Turn off all DMX light +4. Turn on Switch#1 on and then use all lights, which you want to associate with Relay#1 +5. Turn off Switch1 and all DMX lights +6. Repeat learning for channels 2-4 (with appropriate switches 2-4) +7. Turn off Swithc#9 (Learning mode off, all changes will be written to EEPROM) + +* When Switch#9 off - Switches 1-8 will define delay, between all DMX channels, associated with Relay turned to off and Relay turned off +(Relay turnes on immediatelly when at least, 1 associated DMX channel using) + +[SmartMode designed to use togetger with LightHub Smarthome controller](https://github.com/anklimov/lighthub) + +* When Switch #10 turned off - the board will working as normal DMX relay + +* Setting Address + The DMX address is set using the first 9 switches of the DMX address switch. The address is set as a binary number (with switch 1 the LSB). As the unit is a 4 channel receiver, it will respond to data in the set address, and the following 3 addresses in the DMX data stream. -Using With DMX Input +* Using With DMX Input + In order to use the TinkerKit DMX to PWM Converter with a DMX feed, simply set the desired address and connect the DMX feed to the DMX input. Remember to terminate the DMX feed at the end of the chain with a 120Ω resistor between the DMX + and - lines. -Test Mode +* Test Mode + The TinkerKit set each individual output up to full brightness. This test mode is entered by setting the DMX address to 0 (all switches down). While in this mode, any incoming DMX data is ignored. Once the address is changed from 0, pressing the RESET button will return the device to normal operation. -The firmware allows you to use the DMX receiver module using a mosfet output or a relay one. +* The firmware allows you to use the DMX receiver module using a mosfet output or a relay one. The output mode can be selected changing the value of the define OUTPUT_MODE in this way: MOSFET for mosfet output RELAY for relay output. + diff --git a/dmx_receiver_mos_relay_public.ino b/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino similarity index 72% rename from dmx_receiver_mos_relay_public.ino rename to dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino index 45dbf03..936796e 100644 --- a/dmx_receiver_mos_relay_public.ino +++ b/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino @@ -1,405 +1,502 @@ -/* -- customization 20/09/2012 - - ATMEGA32u4 - - Board DMX Receiver V2 - TinkerKit - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define F_OSC 16000000 // Clock frequency -#define BAUD_RATE 250000 - -#define MOSFET 1 -#define RELAY 2 -/* -Here you have to select the output mode accordingly to the receiver type you are using. - Choose MOSFET or RELAY for OUTPUT_MODE - */ -//define OUTPUT_MODE RELAY -#define OUTPUT_MODE MOSFET -#define THR 20 //threshold for analogRead - -#if OUTPUT_MODE == RELAY - -#define PWMpin4 6 // PWM OUT4 -#define PWMpin1 10 // PWM OUT1 -#define PWMpin2 9 // PWM OUT2 -#define PWMpin3 5 // PWM OUT3 - -#else - -#define PWMpin1 6 // PWM OUT1 -#define PWMpin4 10 // PWM OUT4 -#define PWMpin3 9 // PWM OUT3 -#define PWMpin2 5 // PWM OUT2 - -#endif - - - -#define SW1 8 // DIP1 -#define SW2 12 // DIP2 -#define SW3 4 // DIP3 -#define SW4 11 // DIP4 -#define SW5 A0 // DIP5 -#define SW6 A1 // DIP6 -#define SW7 A2 // DIP7 -#define SW8 A3 // DIP8 -#define SW9 A4 // DIP9 -#define SW10 A5 // DIP10 - -#define DE 2 -#define LED 7 -enum { - BREAK, STARTB, STARTADD, DATA}; - -volatile unsigned int dmxStatus; -volatile unsigned int dmxStartAddress; -volatile unsigned int dmxCount = 0 ; -volatile unsigned int ch1,ch2,ch3,ch4; -volatile unsigned int MASTER; - -/*Initialization of USART*/ -void init_USART() -{ - UBRR1L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); //Set Baud rate at 250 kbit/s - UBRR1H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; // - UDR1 = 0; - UCSR1A = 0; // clear error flags, disable U2X and MPCM - UCSR1B = (1<= 509) //The receiver manages 4 channels, so you can't set a start address above 509; - dmxStartAddress = 509; - - digitalWrite(DE,LOW); - - sei(); //enable global interrupt - - for (;;) - { - // infinite loop, data will be updated throught interrupt - } - -} - -/*Demo function if dmxStartAddress = 0*/ -void demo() -{ - int bright; - if (OUTPUT_MODE == MOSFET) - { - for (;;) - { - - for (bright = 0; bright < 255; bright++) // infinite loop - { - analogWrite(PWMpin1,bright); - analogWrite(PWMpin2,bright); - analogWrite(PWMpin3,bright); - analogWrite(PWMpin4,bright); - delay(10); - } - - for (bright = 255; bright >= 0; bright--) // infinite loop - { - analogWrite(PWMpin1,bright); - analogWrite(PWMpin2,bright); - analogWrite(PWMpin3,bright); - analogWrite(PWMpin4,bright); - delay(10); - } - - analogWrite(PWMpin1,255); - analogWrite(PWMpin3,255); - delay(10); - analogWrite(PWMpin1,0); - analogWrite(PWMpin3,0); - analogWrite(PWMpin2,255); - analogWrite(PWMpin4,255); - delay(10); - } - } - else if (OUTPUT_MODE == RELAY) - { - for(;;) - { - analogWrite(PWMpin1,255); - analogWrite(PWMpin2,0); - analogWrite(PWMpin3,0); - analogWrite(PWMpin4,0); - delay(1000); - analogWrite(PWMpin1,0); - analogWrite(PWMpin2,255); - analogWrite(PWMpin3,0); - analogWrite(PWMpin4,0); - - delay(1000); - analogWrite(PWMpin1,0); - analogWrite(PWMpin2,0); - analogWrite(PWMpin3,255); - analogWrite(PWMpin4,0); - - delay(1000); - analogWrite(PWMpin1,0); - analogWrite(PWMpin2,0); - analogWrite(PWMpin3,0); - analogWrite(PWMpin4,255); - delay(1000); - } - } -} - - -SIGNAL(USART1_RX_vect) -{ - int temp = UCSR1A; - int dmxByte = UDR1; - - - if (temp&(1<wait for start byte - UCSR1A &= ~(1< the next byte is our first channel - else dmxStatus = STARTADD; // the FE WAS a BREAK -> wait for the right channel - dmxCount=1; - - - } - else - { - dmxStatus = BREAK; // wait for reset (BREAK) it was a framing error - } - goto tail; - break; - - case STARTADD: - - if (dmxCount == dmxStartAddress-1) //Is the next byte channel one? - { - dmxStatus = DATA; //Yes, so let's wait the data - } - dmxCount++; - - break; - - - case DATA: // HERE YOU SHOULD PROCESS THE CHOSEN DMX CHANNELS!!! - if (dmxCount == dmxStartAddress) - { - ch1=dmxByte; - dmxCount++; - } - else if (dmxCount == (dmxStartAddress+1)) - { - ch2=dmxByte; - dmxCount++; - } - else if (dmxCount == (dmxStartAddress+2)) - { - - ch3=dmxByte; - dmxCount++; - - - } - else if (dmxCount == (dmxStartAddress+3)) - { - ch4=dmxByte; - dmxCount=1; - dmxStatus = BREAK; // ALL CHANNELS RECEIVED - - if (OUTPUT_MODE == MOSFET) //Mosfet or Relay receiver? - { - analogWrite(PWMpin1,ch1); // update mosfet outputs - analogWrite(PWMpin2,ch2); - analogWrite(PWMpin3,ch3); - analogWrite(PWMpin4,ch4); - } - else if (OUTPUT_MODE == RELAY) - { - if(ch1 > 0) - { - analogWrite(PWMpin1,255); // update relay outputs - } - else - { - analogWrite(PWMpin1,0); - } - - if(ch2 > 0) - { - analogWrite(PWMpin2,255); - } - else - { - analogWrite(PWMpin2,0); - } - - if(ch3 > 0) - { - analogWrite(PWMpin3,255); - } - else - { - analogWrite(PWMpin3,0); - } - - if(ch4 > 0) - { - analogWrite(PWMpin4,255); - } - else - { - analogWrite(PWMpin4,0); - } - - } - - } - - } - -tail: - asm("nop"); -} \ No newline at end of file +/* +- customization 20/09/2012 + - ATMEGA32u4 + - Board DMX Receiver V2 - TinkerKit + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define F_OSC 16000000 // Clock frequency +#define BAUD_RATE 250000 + +#define MOSFET 1 +#define RELAY 2 +/* +Here you have to select the output mode accordingly to the receiver type you are using. + Choose MOSFET or RELAY for OUTPUT_MODE + */ +#define OUTPUT_MODE RELAY +//#define OUTPUT_MODE MOSFET +#define THR 20 //threshold for analogRead + +#if OUTPUT_MODE == RELAY + +#define PWMpin4 6 // PWM OUT4 +#define PWMpin1 10 // PWM OUT1 +#define PWMpin2 9 // PWM OUT2 +#define PWMpin3 5 // PWM OUT3 +#else + +#define PWMpin1 6 // PWM OUT1 +#define PWMpin4 10 // PWM OUT4 +#define PWMpin3 9 // PWM OUT3 +#define PWMpin2 5 // PWM OUT2 +#endif + +short outPins[4]={PWMpin1,PWMpin2,PWMpin3,PWMpin4}; + +#define SW1 8 // DIP1 +#define SW2 12 // DIP2 +#define SW3 4 // DIP3 +#define SW4 11 // DIP4 +#define SW5 A0 // DIP5 +#define SW6 A1 // DIP6 +#define SW7 A2 // DIP7 +#define SW8 A3 // DIP8 +#define SW9 A4 // DIP9 +#define SW10 A5 // DIP10 + +#define DE 2 +#define LED 7 + +enum { + BREAK, STARTB, STARTADD, DATA, SMART}; + +volatile unsigned int dmxStatus; +volatile unsigned int dmxStartAddress; +volatile unsigned int dmxCount = 0 ; +volatile unsigned int ch1,ch2,ch3,ch4; +volatile unsigned int MASTER; +volatile unsigned int smartMode; +volatile unsigned int offDelay; + + +bool learningMode; +byte dmxArray[512]; + + +#define CH_1 1 +#define CH_2 2 +#define CH_3 4 +#define CH_4 8 +#define CHANNELS 4 +volatile unsigned int chanDelay[CHANNELS]; + + +/*Initialization of USART*/ +void init_USART() +{ + UBRR1L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); //Set Baud rate at 250 kbit/s + UBRR1H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; // + UDR1 = 0; + UCSR1A = 0; // clear error flags, disable U2X and MPCM + UCSR1B = (1<= 509) //The receiver manages 4 channels, so you can't set a start address above 509; + dmxStartAddress = 509; + + + sei(); //enable global interrupt + + Serial.begin(9600); + delay(1000); + + learningMode = 0; + + if (smartMode) + { + Serial.println("Loading EEPROM data"); + EEPROM.get(0, dmxArray); + for (byte i=0;i THR) + { + Serial.println("Leaving learning mode, saving data to EEPROM"); + EEPROM.put(0,dmxArray); + learningMode = 0; + } + + } //SmartMode handler + else if (dmxStartAddress == 0){ //If all dipswitches are 0 + demo(); //call the demo function + } + +delay (1000); +digitalWrite(LED,LOW); + + + +} + +/*Demo function if dmxStartAddress = 0*/ +void demo() +{ + int bright; + if (OUTPUT_MODE == MOSFET) + { + for (;;) + { + + for (bright = 0; bright < 255; bright++) // infinite loop + { + analogWrite(PWMpin1,bright); + analogWrite(PWMpin2,bright); + analogWrite(PWMpin3,bright); + analogWrite(PWMpin4,bright); + delay(10); + } + + for (bright = 255; bright >= 0; bright--) // infinite loop + { + analogWrite(PWMpin1,bright); + analogWrite(PWMpin2,bright); + analogWrite(PWMpin3,bright); + analogWrite(PWMpin4,bright); + delay(10); + } + + analogWrite(PWMpin1,255); + analogWrite(PWMpin3,255); + delay(10); + analogWrite(PWMpin1,0); + analogWrite(PWMpin3,0); + analogWrite(PWMpin2,255); + analogWrite(PWMpin4,255); + delay(10); + } + } + else if (OUTPUT_MODE == RELAY) + { + for(;;) + { + Serial.println("Relay Demo"); + + analogWrite(PWMpin1,255); + analogWrite(PWMpin2,0); + analogWrite(PWMpin3,0); + analogWrite(PWMpin4,0); + delay(1000); + analogWrite(PWMpin1,0); + analogWrite(PWMpin2,255); + analogWrite(PWMpin3,0); + analogWrite(PWMpin4,0); + + delay(1000); + analogWrite(PWMpin1,0); + analogWrite(PWMpin2,0); + analogWrite(PWMpin3,255); + analogWrite(PWMpin4,0); + + delay(1000); + analogWrite(PWMpin1,0); + analogWrite(PWMpin2,0); + analogWrite(PWMpin3,0); + analogWrite(PWMpin4,255); + delay(1000); + } + } +} + + +SIGNAL(USART1_RX_vect) +{ + int temp = UCSR1A; + int dmxByte = UDR1; + + + if (temp&(1<wait for start byte + UCSR1A &= ~(1< the next byte is our first channel + else dmxStatus = STARTADD; // the FE WAS a BREAK -> wait for the right channel + dmxCount=1; + } + else + { + dmxStatus = BREAK; // wait for reset (BREAK) it was a framing error + } + goto tail; + break; + + case SMART: + if (dmxCount>512) break; + + digitalWrite(LED,HIGH); + if (learningMode) + { + if (dmxByte) // if light is on on appropriate channel - set bit + { + if (!digitalRead(SW1)) dmxArray[dmxCount] |= CH_1; + if (!digitalRead(SW2)) dmxArray[dmxCount] |= CH_2; + if (!digitalRead(SW3)) dmxArray[dmxCount] |= CH_3; + if (!digitalRead(SW4)) dmxArray[dmxCount] |= CH_4; + } + } + else //operating Mode + { + if (dmxByte) + for (byte i=0;i 0) + { + analogWrite(PWMpin1,255); // update relay outputs + } + else + { + analogWrite(PWMpin1,0); + } + + if(ch2 > 0) + { + analogWrite(PWMpin2,255); + } + else + { + analogWrite(PWMpin2,0); + } + + if(ch3 > 0) + { + analogWrite(PWMpin3,255); + } + else + { + analogWrite(PWMpin3,0); + } + + if(ch4 > 0) + { + analogWrite(PWMpin4,255); + } + else + { + analogWrite(PWMpin4,0); + } + + } + + } + + } + +tail: + asm("nop"); +} From 6b85b572c744fdc2de13c3d8b110faeb22d7329b Mon Sep 17 00:00:00 2001 From: Andrey Klimov Date: Fri, 3 May 2019 15:50:10 +0300 Subject: [PATCH 2/9] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b8fdcb9..c2cee44 100644 --- a/README.md +++ b/README.md @@ -15,14 +15,15 @@ Guidance to use 2. Put board in Learning mode by turning Switch #9 on 3. Turn off all DMX light 4. Turn on Switch#1 on and then use all lights, which you want to associate with Relay#1 -5. Turn off Switch1 and all DMX lights +5. Turn off Switch#1 and all DMX lights 6. Repeat learning for channels 2-4 (with appropriate switches 2-4) -7. Turn off Swithc#9 (Learning mode off, all changes will be written to EEPROM) +7. Turn off Switch#9 (Learning mode off, all changes will be written to EEPROM) -* When Switch#9 off - Switches 1-8 will define delay, between all DMX channels, associated with Relay turned to off and Relay turned off -(Relay turnes on immediatelly when at least, 1 associated DMX channel using) +* When Switch#9 off - Switches 1-8 will define delay, between all DMX channels, associated with Relay turned to off and Relay turned off (in 10th seconds) +* Relay turnes on immediatelly when at least, 1 associated DMX channel in use [SmartMode designed to use togetger with LightHub Smarthome controller](https://github.com/anklimov/lighthub) +Recommeded for control AC power of LED transformers * When Switch #10 turned off - the board will working as normal DMX relay From 2f9311d54e37be80caa8ca7f0b0943b60c375c74 Mon Sep 17 00:00:00 2001 From: Andrey Klimov Date: Fri, 14 Jun 2019 18:11:01 +0300 Subject: [PATCH 3/9] Custom delay for every channel --- .../dmx_receiver_mos_relay_public.ino | 60 +++++++++++++------ 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino b/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino index 936796e..accc969 100644 --- a/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino +++ b/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino @@ -2,6 +2,9 @@ - customization 20/09/2012 - ATMEGA32u4 - Board DMX Receiver V2 - TinkerKit + + - customization 03/05/2019 + - SmartMode added This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -82,8 +85,8 @@ volatile unsigned int smartMode; volatile unsigned int offDelay; -bool learningMode; -byte dmxArray[512]; +volatile bool learningMode; +byte dmxArray[512+1]; #define CH_1 1 @@ -212,15 +215,24 @@ void setup() if (smartMode) { - Serial.println("Loading EEPROM data"); - EEPROM.get(0, dmxArray); + if (analogRead(SW9) <= THR) + { + Serial.println("Entering learning mode & clear settings"); + learningMode = 1; + memset(dmxArray,0,sizeof(dmxArray)); + } + else + { + Serial.println("Loading EEPROM data"); + EEPROM.get(0, dmxArray); + } + for (byte i=0;i THR) + if( learningMode && (analogRead(SW9) > THR)) { Serial.println("Leaving learning mode, saving data to EEPROM"); EEPROM.put(0,dmxArray); @@ -346,7 +358,7 @@ void demo() SIGNAL(USART1_RX_vect) { int temp = UCSR1A; - int dmxByte = UDR1; + volatile int dmxByte = UDR1; if (temp&(1<512) break; + if (dmxCount>512) {dmxStatus = BREAK;break;} digitalWrite(LED,HIGH); if (learningMode) { if (dmxByte) // if light is on on appropriate channel - set bit - { - if (!digitalRead(SW1)) dmxArray[dmxCount] |= CH_1; - if (!digitalRead(SW2)) dmxArray[dmxCount] |= CH_2; - if (!digitalRead(SW3)) dmxArray[dmxCount] |= CH_3; - if (!digitalRead(SW4)) dmxArray[dmxCount] |= CH_4; + { + byte localDelay = 0; + + if( analogRead(SW5) <= THR) localDelay |= 16; + if( analogRead(SW6) <= THR) localDelay |= 32; + if( analogRead(SW7) <= THR) localDelay |= 64; + if( analogRead(SW8) <= THR) localDelay |= 128; + dmxArray[dmxCount] &= 15; //Reset previosly saved delay for the channel + if (!digitalRead(SW1)) dmxArray[dmxCount] |= (CH_1 | localDelay); + if (!digitalRead(SW2)) dmxArray[dmxCount] |= (CH_2 | localDelay); + if (!digitalRead(SW3)) dmxArray[dmxCount] |= (CH_3 | localDelay); + if (!digitalRead(SW4)) dmxArray[dmxCount] |= (CH_4 | localDelay); + } } else //operating Mode @@ -403,8 +423,12 @@ SIGNAL(USART1_RX_vect) if (dmxByte) for (byte i=0;i> 4; + if (localDelay == 15) localDelay=offDelay; //Default Delay + + if (!(chanDelay[i]=localDelay*10)) chanDelay[i] =1; + analogWrite(outPins[i],255); } } From 207ed480f8ece9fea5e29fd2fc23e61bd287f0ab Mon Sep 17 00:00:00 2001 From: Andrey Klimov Date: Sat, 15 Jun 2019 16:00:55 +0300 Subject: [PATCH 4/9] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c2cee44..0360fc2 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # DMXReceiver Techinal Specifications -Nominal Input Voltage (DC) 9 to 24 Vdc +Nominal Input Voltage (DC) 9 to 24 Vdc (24V is to much for Relays board) Input Current 10 A Max Output Current 2.5A Max/Ch Number of DMX Channels 4 @@ -11,16 +11,18 @@ Addressing DMX Range 1 to 509 Guidance to use -1. Turn Switch #10 on, rest switches off and restart board +1. Turn Switch #10 on (SmartMode on now), Switch#5-#8 on (default delay), rest switches off and restart board 2. Put board in Learning mode by turning Switch #9 on 3. Turn off all DMX light 4. Turn on Switch#1 on and then use all lights, which you want to associate with Relay#1 5. Turn off Switch#1 and all DMX lights 6. Repeat learning for channels 2-4 (with appropriate switches 2-4) 7. Turn off Switch#9 (Learning mode off, all changes will be written to EEPROM) +8. Ajust default delay by switches 1-8 and restart board (delay in tens of seconds. If 0: it will be 1 second delay) * When Switch#9 off - Switches 1-8 will define delay, between all DMX channels, associated with Relay turned to off and Relay turned off (in 10th seconds) * Relay turnes on immediatelly when at least, 1 associated DMX channel in use +* You can ajust individual delay for every channel at step 4, using switches 5-8 (in tens of seconds). Value 15 (on-on-on-on) is reserved for default delay. [SmartMode designed to use togetger with LightHub Smarthome controller](https://github.com/anklimov/lighthub) Recommeded for control AC power of LED transformers From 2961f34d76082dbf2c23a715cb3d1e8f64398e62 Mon Sep 17 00:00:00 2001 From: Andrey Klimov Date: Sun, 31 Oct 2021 18:54:23 +0300 Subject: [PATCH 5/9] PlatformIO, CLI and bugfixing --- .gitignore | 2 + .pio/build/leonardo/.sconsign38.dblite | Bin 0 -> 43430 bytes .pio/build/leonardo/firmware.elf | Bin 0 -> 29772 bytes .pio/build/leonardo/firmware.hex | 764 ++++++++++++++++++ .pio/build/leonardo/idedata.json | 1 + .pio/build/project.checksum | 1 + .pio/libdeps/leonardo/CmdArduino | 1 + .vscode/c_cpp_properties.json | 88 ++ .vscode/extensions.json | 7 + .vscode/launch.json | 44 + README.md | 17 +- compiled/firmware.hex | 764 ++++++++++++++++++ compiled/upload.sh | 1 + .../dmx_receiver_mos_relay_public.ino | 250 +++++- lib/utils/utils.cpp | 530 ++++++++++++ lib/utils/utils.h | 61 ++ platformio.ini | 28 + 17 files changed, 2541 insertions(+), 18 deletions(-) create mode 100644 .pio/build/leonardo/.sconsign38.dblite create mode 100755 .pio/build/leonardo/firmware.elf create mode 100644 .pio/build/leonardo/firmware.hex create mode 100644 .pio/build/leonardo/idedata.json create mode 100644 .pio/build/project.checksum create mode 160000 .pio/libdeps/leonardo/CmdArduino create mode 100644 .vscode/c_cpp_properties.json create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 compiled/firmware.hex create mode 100755 compiled/upload.sh create mode 100644 lib/utils/utils.cpp create mode 100644 lib/utils/utils.h create mode 100644 platformio.ini diff --git a/.gitignore b/.gitignore index 8df9393..6db1af3 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,5 @@ *.lai *.la *.a +.git +.pio diff --git a/.pio/build/leonardo/.sconsign38.dblite b/.pio/build/leonardo/.sconsign38.dblite new file mode 100644 index 0000000000000000000000000000000000000000..2754ca828ecb6ff3886eceea1c905d04bc719d2d GIT binary patch literal 43430 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 bZJD#ieq?LTSu_9e+LjHbhX~{7{Ph0=E=*pp literal 0 HcmV?d00001 diff --git a/.pio/build/leonardo/firmware.elf b/.pio/build/leonardo/firmware.elf new file mode 100755 index 0000000000000000000000000000000000000000..2cc13908504843a43df753f848d8e773911d1d69 GIT binary patch literal 29772 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 literal 0 HcmV?d00001 diff --git a/.pio/build/leonardo/firmware.hex b/.pio/build/leonardo/firmware.hex new file mode 100644 index 0000000..6ccc793 --- /dev/null +++ b/.pio/build/leonardo/firmware.hex @@ -0,0 +1,764 @@ +:100000000C942C020C9454020C9454020C94540240 +:100010000C9454020C9454020C9454020C94540208 +:100020000C9454020C9454020C94BA0A0C94290BAC +:100030000C9454020C9454020C9454020C945402E8 +:100040000C9454020C9454020C9454020C945402D8 +:100050000C9454020C9454020C9454020C94700AA4 +:100060000C9454020C945B0D0C9454020C945402A6 +:100070000C9454020C9454020C9454020C945402A8 +:100080000C9454020C9454020C9454020C94540298 +:100090000C9455090C9454020C9454020C94540280 +:1000A0000C9454020C9454020C9454020A55736537 +:1000B00020746865736520636F6D6D616E64733A5B +:1000C000202768656C7027202D2074686973207460 +:1000D0006578740A2772656C6179202327202D20AA +:1000E0007365742072656C61792023207365747563 +:1000F0007020666F722028312D34290A27736574A9 +:10010000203C444D58206368616E6E656C20233E30 +:10011000205B3C64656C617920696E203130733EF0 +:100120005D27202D206173736F6369617465207290 +:10013000656C61792077697468206368616E6E65AB +:100140006C0A2764656C203C444D58206368616EDE +:100150006E656C20233E27202D2064652D6173730E +:100160006F63696174652072656C61792077697469 +:1001700068206368616E6E656C200A277072696E14 +:100180007427202D207072696E74206173736F6301 +:10019000696174696F6E207461626C650A277361AE +:1001A000766527202D2073617665206375727265F0 +:1001B0006E7420636F6E66696720696E204E5652BA +:1001C000414D0A276C6F616427202D206C6F61649C +:1001D00020636F6E6669672066726F6D204E56529F +:1001E000414D0A276B696C6C27202D207465737450 +:1001F000207761746368646F670A27636C65617256 +:1002000027202D20636C656172206173736F6369B1 +:100210006174696F6E207461626C6520696E205232 +:10022000414D0A0043757272656E742072656C618F +:10023000793A200044656C6179206D757374206291 +:100240006520696E20302E2E3134203130732072BB +:10025000616E676500444D58204368616E6E656C41 +:10026000206D75737420626520696E20312E2E35E5 +:1002700031322072616E67650075736167653A207F +:10028000276164642023444D586368616E6E656C19 +:10029000205B64656C61795F696E5F3130736563A3 +:1002A0005D004E6F2043757272656E742072656CCE +:1002B000617920646566696E65642C2075736520BC +:1002C0002772656C61792720636F6D6D616E6400C4 +:1002D00075736167653A202764656C2023444D5827 +:1002E0006368616E6E656C00444D58204368616EB2 +:1002F0006E656C206D75737420626520696E2031A7 +:100300002E2E3531322072616E6765004E6F2043AC +:10031000757272656E742072656C617920646566B1 +:10032000696E65642C20757365202772656C617930 +:100330002720636F6D6D616E6400080B000202027E +:100340000000090400000102020000052400100161 +:100350000524010101042402060524060001070505 +:10036000810310004009040100020A000000070593 +:100370000202400000070583024000000403090454 +:1003800012010002EF020140412336800001010208 +:10039000030141726475696E6F204C4C43004172D9 +:1003A0006475696E6F204C656F6E6172646F003E9C +:1003B0003E2000496E76616C696420636F6D6D61EB +:1003C0006E6400070605040100080A0B0C0D090005 +:1003D000000000240027002A002D0030000000004B +:1003E00000250028002B002E003100000000002313 +:1003F00000260029002C002F000404040404030438 +:1004000005020202020403020202020606060606B2 +:1004100006040402020204040408020110408040A1 +:10042000102040804080080204018040201002011A +:10043000108010204040200000000200090F000042 +:10044000030401000C000000000000000000000098 +:10045000000000000000C20F11241FBECFEFDAE041 +:10046000DEBFCDBF12E0A0E0B1E0E4E7FEE202C0F3 +:1004700005900D92A632B107D9F725E0A6E2B2E0C9 +:1004800001C01D92A038B207E1F712E0CCE2D2E041 +:1004900004C02197FE010E942217CB32D107C9F771 +:1004A0000E94E90F0C9438170C940000FC01809115 +:1004B0001C03882311F13FB7F89482E08093E90090 +:1004C0002091F200822F90E01816190614F481E0B2 +:1004D00090E0882339F0289844E640931B0340912C +:1004E000F1004083222339F02091F200211103C052 +:1004F0002BE62093E8003FBF08958FEF9FEF08950C +:100500002FB7F89483E08093E9009091E800892F59 +:10051000807295FF04C09091F20080E4891B2FBF88 +:1005200008952091D102260F3327331F2132310540 +:10053000ECF42091F502FC0190E080E0243069F0B9 +:1005400082E00895A091D1022191AC014F545D4FFA +:10055000A40FB52FB11D2C930196861798F38091A7 +:10056000D102680F6093D10280E0089581E0089580 +:1005700008958FEF9FEF08958FEF9FEF089580917B +:10058000AA0290E09195819591090895CF93DF9308 +:10059000CB01EA01642F0E949102CE01DF91CF913D +:1005A0000895CF93DF931F92CDB7DEB7698361E0E3 +:1005B000CE0101960E94910281E090E00F90DF91C0 +:1005C000CF9108958091A20281110DC082E08093A5 +:1005D0009E0284E080939F021092A1021092A002DA +:1005E00081E08093A2028EE992E0089581508F30DD +:1005F00008F047C0E82FF0E0E050FD4F0C942217C0 +:100600001D0321030F031503190341034103410394 +:1006100024032A032E033203380341033C03809151 +:1006200080008F77809380000895809180008F7D77 +:10063000F9CF80918000877FF5CF84B58F7784BD17 +:10064000089584B58F7DFBCF809190008F77809344 +:1006500090000895809190008F7DF9CF8091900057 +:10066000877FF5CF8091C0008F778093C000089579 +:100670008091C0008F7DF9CF8091C200877F8093E9 +:10068000C2000895CF93DF93282F30E0F901E95C91 +:10069000FB4F8491F901E85EFB4FD491F901E750DB +:1006A000FC4FC491CC23A1F081110E94F602EC2FE3 +:1006B000F0E0EE0FFF1FE551FC4FA591B491EC91D6 +:1006C000ED2381E090E009F480E0DF91CF9108957F +:1006D00080E090E0FACF1F93CF93DF93282F30E094 +:1006E000F901E95CFB4F8491F901E85EFB4FD4917D +:1006F000F901E750FC4FC491CC23A9F0162F8111CA +:100700000E94F602EC2FF0E0EE0FFF1FE352FC4FC9 +:10071000A591B4918FB7F894EC91111108C0D095C0 +:10072000DE23DC938FBFDF91CF911F910895DE2BE5 +:10073000F8CFCF93DF9390E0FC01E85EFB4F24916C +:1007400087509C4FFC0184918823D1F090E0880F62 +:10075000991FFC01E153FC4FA591B491FC01E352B8 +:10076000FC4FC591D49161110EC09FB7F8948C9144 +:10077000E22FE0958E238C932881E223E8839FBFAC +:10078000DF91CF9108958FB7F894EC91E22BEC9321 +:100790008FBFF6CF8251E82FF0E0ED53FC4FE4918C +:1007A00090917B008E2F880F880F80729F7D892B00 +:1007B00080937B00E770E064E0937C0080917A0096 +:1007C000806480937A0080917A0086FDFCCF8091CE +:1007D00078009091790008953FB7F89480919A023B +:1007E00090919B02A0919C02B0919D0226B5A89B7E +:1007F00005C02F3F19F00196A11DB11D3FBFBA2FB3 +:10080000A92F982F8827BC01CD01620F711D811D72 +:10081000911D42E0660F771F881F991F4A95D1F7F7 +:1008200008958F929F92AF92BF92CF92DF92EF92F4 +:10083000FF924B015C010E94EC036B017C010E9462 +:10084000EC036C197D098E099F09683E7340810590 +:100850009105A8F321E0821A9108A108B10888EE59 +:10086000C80E83E0D81EE11CF11C81149104A10480 +:10087000B10429F7FF90EF90DF90CF90BF90AF9039 +:100880009F908F90089540913702509138022091A7 +:1008900035023091360242175307B4F49091E800C4 +:1008A0009570E1F39091E80092FD19C08093F100FA +:1008B000809137029091380201968F739927892B86 +:1008C00019F48EEF8093E8008091370290913802FE +:1008D0000196909338028093370281E0089580E07A +:1008E0000895DF92EF92FF920F931F93CF93DF93C0 +:1008F000D82E8A01EB017B01E40EF51ECE15DF0533 +:1009000059F0D7FE12C0FE0184910E944304219643 +:100910008111F4CF0FEF1FEFC801DF91CF911F912D +:100920000F91FF90EF90DF9008958881EECF0F93A5 +:100930001F93CF93DF931F92CDB7DEB782E08983F9 +:1009400042E450E06AE373E080E80E9471040E9490 +:10095000E202DC0112960D911C910115110589F03E +:10096000D801ED91FC910280F381E02DBE016F5F13 +:100970007F4FC801099597FD04C0F80100851185D6 +:10098000ECCF89810F90DF91CF911F910F91089546 +:10099000615030F02091F100FC0120830196F8CFE6 +:1009A000289884E680931B030895DC01ED91FC9167 +:1009B0000190F081E02D099490E080E008958F92FD +:1009C0009F92AF92BF92CF92DF92EF92FF920F93DE +:1009D0001F93CF93DF936C017B018A0180910B0100 +:1009E000882309F45CC080911C03882309F457C054 +:1009F00080913B0280FF05C08091E000826080937F +:100A0000E000E801B12C8AEFA82E93E0892E2AE3BA +:100A1000922E209711F4BB20D9F10E9480028111FF +:100A20000AC0AA94AA20D9F161E070E080E090E0C9 +:100A30000E941104EECF8C171D0611F00CF08C2FC4 +:100A40009FB7F8948092E9002091E80025FD02C04C +:100A50009FBFDFCF282F30E0C21BD30BF70181509F +:100A600020F041914093F100FACFE20EF31EBB203B +:100A700021F09092E800B12CEBCF8091E80085FD49 +:100A8000E7CF9092E800BB24B394209709F3F3CF0B +:100A90005D9884E680933A02101611063CF081E0DE +:100AA00090E0F6019383828310E000E0C801DF91BB +:100AB000CF911F910F91FF90EF90DF90CF90BF905B +:100AC000AF909F908F900895CF93DF931F92CDB7F3 +:100AD000DEB76983DC01ED91FC910280F381E02DAA +:100AE00041E050E0BE016F5F7F4F09950F90DF91AD +:100AF000CF9108950F931F93CF93DF938C01D0E094 +:100B0000C0E0F801EC0FFD1F6491662341F08EE117 +:100B100095E00E946405892B11F02196F2CFCE0159 +:100B2000DF91CF911F910F91089583E08093E900A9 +:100B30008091F200882319F08AE38093E8000895F9 +:100B40000E94800290E00895CF93DF931F92CDB76B +:100B5000DEB7FC018485958597FD08C02FEF3FEF38 +:100B6000358724870F90DF91CF910895CE010196AC +:100B70000E945602019719F4898190E0F3CF8FEF1C +:100B80009FEFF0CF0F931F93CF93DF931F92CDB7BB +:100B9000DEB78C01FC018485958597FF0BC0CE01E3 +:100BA00001960E945602019771F4898190E0F80144 +:100BB00095878487F801848595850F90DF91CF9183 +:100BC0001F910F9108958FEF9FEFF1CFFC01848566 +:100BD000958597FD0BC09FB7F89482E08093E9005C +:100BE0008091F2009FBF90E0019608959FB7F8941E +:100BF00082E08093E9008091F2009FBF90E0089529 +:100C00000F931F93CF93DF930DE113E0D0E0C0E08B +:100C1000CE010E94EA16F80181938F012196C1301E +:100C2000F2E0DF07A9F78DE193E0DF91CF911F910B +:100C30000F910895FF920F931F93CF93DF930DE1D0 +:100C400013E0D0E0C0E0F801F1908F01CE010E94E6 +:100C5000EA16F81621F06F2DCE010E94F2162196A9 +:100C6000C130F2E0DF0779F78DE193E0DF91CF91BA +:100C70001F910F91FF9008951F93CF93DF9385ED00 +:100C80008093BC008091AD029091AE02A091AF0222 +:100C9000B091B0020796A11DB11D23E0B695A795AE +:100CA000979587952A95D1F72091BC0024FD03C024 +:100CB0001092F50252C04091AD025091AE02609187 +:100CC000AF027091B002452B462B472B69F300977A +:100CD000A105B10541F025E32A95F1F70000019740 +:100CE000A109B109E1CF8091AC02C1E0C093AB0290 +:100CF000882399F1D091B8001091BA008091BC007E +:100D00008A7B8093BC0060E082E00E946B0360E01D +:100D100083E00E946B031092F502C093F7021092D9 +:100D2000F60261E082E00E946B0361E083E00E94D2 +:100D30006B038091B9008E7F8093B9008091B900D8 +:100D40008D7F8093B90088E48093B80085E4809318 +:100D5000BC001093BA00D093B800DF91CF911F91DF +:100D60000895EDE1F3E080E092E0DF019C011D9247 +:100D700021503040E1F781E090E00895FB010190BF +:100D80000020E9F73197AF01461B570BDC01ED91CD +:100D9000FC910280F381E02D099469E371E08EE11A +:100DA00095E00C94BE06CF93DF930E947A05EC0188 +:100DB0000E94CD068C0F9D1FDF91CF9108958CEA84 +:100DC00090E00E94D30681E090E00895CF92DF92F8 +:100DD000EF92FF921F93CF93DF936C017B011091F1 +:100DE000280282EA92E0112391F089E792E022E062 +:100DF000C216D10464F0FB01828193810E9498168F +:100E0000EC0101978115924070F085E592E00E9417 +:100E1000D30690E080E0DF91CF911F91FF90EF909B +:100E2000DF90CF90089522E0C216D10459F0F70167 +:100E3000848195810E9498169C0140972CF084E350 +:100E400092E0E5CF2FE030E0C35EDC4F98819F70E9 +:100E5000612F6150770BAB0161E070E001C0660F5C +:100E60004A95EAF7962B84E0220F331F8A95E1F723 +:100E7000922B988381E090E0CECFCF93DF93C09107 +:100E80002802C11109C08CE093E00E94D30690E0D3 +:100E900080E0DF91CF91089502971CF480ED92E0FD +:100EA000F4CFFB01828193810E9498169C0121500E +:100EB00031092115324018F088EE92E0E6CFFC01AE +:100EC000E35EFC4FC150DD0B21E030E001C0220F9A +:100ED000CA95EAF7209580812823208381E090E05D +:100EE000D8CF8F929F92AF92BF92EF92FF920F93C3 +:100EF0001F93CF93DF93CDB7DEB7A1970FB6F894CA +:100F0000DEBF0FBECDBF7C01FA01CB0119A222309A +:100F100008F42AE08E010F5D1F4F822E912CB12C18 +:100F2000A12CBF01A50194010E940017F901CA017B +:100F30006A300CF5605DD8016E938D01232B242B54 +:100F4000252B79F790E080E0109721F0BD01C701D3 +:100F50000E94BE06A1960FB6F894DEBF0FBECDBFAD +:100F6000DF91CF911F910F91FF90EF90BF90AF90C5 +:100F70009F908F900895695CDECFCF92DF92EF92C1 +:100F8000FF92CF93DF93AB01BC0177FF1DC06A01D5 +:100F90007C016DE28EE195E00E94D504EC014427CE +:100FA0005527BA014C195D096E097F092AE08EE1C7 +:100FB00095E00E9471078C0F9D1FDF91CF91FF90EC +:100FC000EF90DF90CF9008952AE08EE195E0DF91D9 +:100FD000CF91FF90EF90DF90CF900C9471078F929C +:100FE0009F92AF92BF92CF92DF92EF92FF920F93B8 +:100FF0001F93CF93DF937C018B016C0182E0C80EBD +:10100000D11C4701E5E08E0E911CD0E0C0E0F60156 +:1010100041916F0150E070E060E02AE0C8010E9459 +:1010200071075C016EE2C8010E94D5048A0D9B1D08 +:10103000C80FD91FC814D90451F7F701458150E0F2 +:1010400070E060E02AE0C8010E9471078C0F9D1FCC +:10105000DF91CF911F910F91FF90EF90DF90CF9094 +:10106000BF90AF909F908F900895CF92DF92EF92B4 +:10107000FF92C12CD12C7601C39468EE73E080E01E +:1010800090E00E9411042AE0B701A6018EE195E0EC +:101090000E9471070E94CD068FEFC81AD80AE80A8D +:1010A000F80A84E1C816D104E104F10431F781E0C3 +:1010B00090E0FF90EF90DF90CF900895029739F481 +:1010C000FB01828193810E9498168093280284E21A +:1010D00092E00E947A054091280250E070E060E0C2 +:1010E0002AE08EE195E00E9471070E94CD0681E022 +:1010F00090E00895CF93DF93BC018EE195E00E94CC +:10110000BE06EC010E94CD068C0F9D1FDF91CF9192 +:1011100008958CE391E00E947A080E941A0681E00B +:1011200090E008958FE491E00E947A080E94000602 +:1011300081E090E008954F925F926F927F92AF921C +:10114000BF92CF92DF92EF92FF920F931F93CF93B4 +:10115000DF93C12CD12C7601C39401E010E063E64B +:1011600071E08EE195E00E94BE06C701B6010E94C3 +:10117000BD070E94CD06C6010197580102C0AA0C06 +:10118000BB1C8A95E2F7CDE1D3E0412C512C320112 +:101190004394898190E08A219B21892BD9F0C30156 +:1011A000B2010E94BD0768E671E08EE195E00E9401 +:1011B000BE06698170E084E0759567958A95E1F7D0 +:1011C000072E000C880B990B0E94BD078AE691E060 +:1011D0000E947A0821968FEF481A580A680A780AFE +:1011E00081E0481682E058066104710491F68FEFA1 +:1011F000C81AD80AE80AF80A85E0C816D104E1043A +:10120000F10409F0ACCF81E090E0DF91CF911F9124 +:101210000F91FF90EF90DF90CF90BF90AF907F90B5 +:101220006F905F904F900895CF92DF92EF92FF9270 +:101230000F931F93CF93DF936C018B0186E090E0B7 +:101240000E947315EC019093420280934102F601D3 +:1012500001900020E9F7CF018C199D090E947315B8 +:101260007C01B6010E943117F60101900020E9F7D8 +:101270003197EC19FD09EE0DFF1D1082F982E8820D +:101280001B830A8380913D0290913E029D838C8353 +:10129000D0933E02C0933D02DF91CF911F910F91F9 +:1012A000FF90EF90DF90CF9008951F920F920FB6AE +:1012B0000F9211242F933F934F935F936F937F93DC +:1012C0008F939F93AF93BF93EF93FF938091B90058 +:1012D000887F803609F44AC0F0F5883209F4A5C049 +:1012E00018F5803109F499C0B8F4882309F4F5C0E1 +:1012F000883009F492C0FF91EF91BF91AF919F9117 +:101300008F917F916F915F914F913F912F910F90AE +:101310000FBE0F901F901895883109F486C0803257 +:1013200051F78093F40214C0803409F49BC040F458 +:101330008033B9F38833F9F68093F40285ECAEC0BC +:10134000803509F483C0883509F494C0883499F64F +:101350000E943C06D0CF883909F48AC038F5883716 +:1013600029F050F4883611F0803729F683E0809315 +:10137000F5021092F30255C0883809F479C080391B +:1013800019F0803809F0B7CF8091F302803208F06D +:101390006FC0E091F30281E08E0F8093F3028091A1 +:1013A000BB00F0E0ED52FD4F80833BC0803B39F045 +:1013B000D0F4803A09F477C0883A09F09CCF84E0F1 +:1013C0008093F5021092D2021092D102F0E0E0E098 +:1013D00009958091D10281110FC081E08093D102E3 +:1013E0001092B10209C0803C09F4A8CF883C09F4EE +:1013F000A5CF883B09F07FCFE091D20281E08E0F2C +:101400008093D202F0E0EF54FD4F80818093BB00C7 +:101410009091D2028091D10229C080911A038093C9 +:10142000BB0085EC8093BC0066CF9091190380913E +:101430001803981758F5E091190381E08E0F8093F7 +:101440001903F0E0E850FD4F8081E9CFE0911903E6 +:1014500081E08E0F809319038091BB00F0E0E8508B +:10146000FD4F808390911903809118039817C8F25B +:1014700085E8D8CFE091190381E08E0F809319039E +:101480008091BB00F0E0E850FD4F80838091F7022F +:1014900081115ECF81E08093F60284EA8093BC00E4 +:1014A0001092F50228CF85EC8093BC001092F502D3 +:1014B0008091F302803230F4E091F302F0E0ED52DB +:1014C000FD4F10826091F30270E083ED92E0F0E056 +:1014D000E0E009951092F3020ECF1092F40238CF9B +:1014E0001F920F920FB60F9211242F933F938F9359 +:1014F0009F93AF93BF938091960290919702A09192 +:101500009802B09199023091950223E0230F2D3774 +:1015100058F50196A11DB11D209395028093960266 +:1015200090939702A0939802B093990280919A02A7 +:1015300090919B02A0919C02B0919D020196A11DE9 +:10154000B11D80939A0290939B02A0939C02B0934A +:101550009D02BF91AF919F918F913F912F910F90DD +:101560000FBE0F901F90189526E8230F0296A11D1D +:10157000B11DD2CF1F920F920FB60F9211248F93ED +:101580009F938091E1009091E100937F9093E1001F +:1015900083FF0FC01092E90091E09093EB0010924E +:1015A000EC0092E39093ED0010921C0398E090936E +:1015B000F00082FF22C093E09093E9009091F20046 +:1015C000992319F09AE39093E80090913A029923B5 +:1015D00041F090913A02915090933A02911101C0DA +:1015E0005D9A90911B03992341F090911B039150B8 +:1015F00090931B03911101C0289A84FF18C0809119 +:10160000E2008E7E81608093E2008091E1008F7E17 +:101610008093E10080913B028E7E806180933B024B +:101620009F918F910F900FBE0F901F90189580FF84 +:10163000F7CF8091E2008E7E80618093E2008091FE +:10164000E1008E7E8093E10080913B028E7E81607E +:10165000E5CF1F920F920FB60F921124CF92DF9217 +:10166000EF92FF920F931F932F933F934F935F93AC +:101670006F937F938F939F93AF93BF93EF93FF935A +:10168000CF93DF93CDB7DEB76C97DEBFCDBF10929F +:10169000E9008091E80083FF25C068E0CE0145960F +:1016A0000E94C80482EF8093E8008D8987FF39C0CB +:1016B0009091E80090FFFCCF982F907609F034C10C +:1016C0009E894F89588D2F89F88C911131C08038AF +:1016D00061F580913C028093F1001092F1008EEF51 +:1016E0008093E8006C960FB6F894DEBF0FBECDBFB6 +:1016F000DF91CF91FF91EF91BF91AF919F918F912A +:101700007F916F915F914F913F912F911F910F9119 +:10171000FF90EF90DF90CF900F900FBE0F901F9033 +:1017200018959EEF9093E800C7CF1092F100D5CFA7 +:10173000913059F48111D3CF4130510581F6809118 +:101740003C028D7F80933C02CACF933049F48111D3 +:10175000C6CF4130510519F680913C028260F2CF2C +:10176000953041F48091E80080FFFCCF2068209301 +:10177000E300B5CF963009F0A9C00B8D1C8D22E097 +:101780001092E9001092380210923702F2122EC025 +:1017900010923602109235020E9497041F8299E03F +:1017A0009983FA8291E09E8390EA98879AEF9987CD +:1017B0002091370230913802275F3F4F3C832B83C3 +:1017C0008D831092E9001092380210923702109324 +:1017D00036020093350249E050E0BE016F5F7F4F53 +:1017E00080E00E9471040E94970479CF1093360222 +:1017F000009335020E94E202DC0112960D911C91C9 +:101800000115110509F451C1D801ED91FC91048035 +:10181000F581E02DBE016B5E7F4FC80109950097F1 +:1018200009F03EC1F80100851185EACFF3E0FF120F +:101830000EC08F89882309F440C0823061F440E8EB +:1018400060E18EE993E00E948F0F811148CF81E221 +:101850008093EB0047CF813029F440E86BE082E9C8 +:1018600093E0F1CF833099F70E94E202DC011296F7 +:10187000ED90FC908E010F5F1F4F6801E114F104A1 +:1018800079F0D701ED91FC910680F781E02DB80148 +:10189000C7010995080F111DF701E084F184EECF0F +:1018A000D8011C92F60101900020E9F73197BF01A1 +:1018B0006C197D0940E0C601C6CF6CE773E0FB01FF +:1018C000449150E080E80E94710409CF973009F4F8 +:1018D000BECF983021F481E08093F10000CF9930A1 +:1018E00009F0FDCE837009F0B2CFE3E1F1E081E0D1 +:1018F00031E096E32191222371F08093E900309347 +:10190000EB00DF0111972C912093EC009093ED00F8 +:101910008F5F873079F78EE78093EA001092EA00B4 +:101920008F8980931C03DBCE8B8D9C8D1092E900F8 +:10193000109238021092370290933602809335024B +:10194000898D811192C08E899D89913A49F48132A5 +:1019500009F07DCF47E050E064E071E080E0B3CF74 +:10196000913209F074CF833269F48F89988DB0E099 +:10197000A0E08093000190930101A0930201B09335 +:101980000301ADCE803269F48091E80082FFFCCF84 +:1019900067E084E091E00E94C8048BEF8093E80048 +:1019A0009ECE823209F09BCE8F8980930B01EEEFA1 +:1019B000FFE7859194918B3F9C4D51F1E0E0F8E079 +:1019C0008091040190910501A0910601B091070159 +:1019D000803B9440A105B105F1F480910B0180FD9D +:1019E0001AC0EE3F8AE0F80789F587E797E7918309 +:1019F0008083809160008093390288E19BE00FB67C +:101A0000F894A895809360000FBE9093600067CE15 +:101A1000EEEFFAE0D5CF808191818737974709F0C3 +:101A20005ECEA8958091600088618093600080916F +:101A3000390280936000EE3F2AE0F20789F080913E +:101A4000FE0A9091FF0A9183808349CE8081918123 +:101A50008737980751F29093FF0A8093FE0AC5CF0B +:101A60001092FF0A1092FE0A3ACE0E94E202DC01B6 +:101A700012960D911C910115110509F4E8CED801BB +:101A8000ED91FC910190F081E02DBE016B5E7F4FE6 +:101A9000C8010995811123CEF80100851185EBCF8E +:101AA000181619060CF41BCED2CEF1E0FF12BECEF2 +:101AB00060E873E004CF1F920F920FB60F921124CB +:101AC000AF92BF92CF92DF92EF92FF920F931F934C +:101AD0002F933F934F935F936F937F938F939F9336 +:101AE000AF93BF93EF93FF93CF93DF9300D0CDB726 +:101AF000DEB72091C8008091CE0090E09A83898360 +:101B000023FF27C010923402109233028091C80044 +:101B1000877F8093C80000000F900F90DF91CF91D6 +:101B2000FF91EF91BF91AF919F918F917F916F91B5 +:101B30005F914F913F912F911F910F91FF90EF90E7 +:101B4000DF90CF90BF90AF900F900FBE0F901F907F +:101B5000189524FF0EC0109232021092310281E0DB +:101B600090E090933402809333028091C8008F7E7E +:101B7000D0CF80913302909134028230910509F4E4 +:101B800014C1C8F4019739F689819A81892B09F526 +:101B90008091930290919402892B01F184E090E06E +:101BA000909334028093330281E090E0909332026C +:101BB00080933102B0CF8330910509F40AC10497B4 +:101BC00009F0A9CF80913102909132028130924088 +:101BD00088F010923402109233029DCF80919102CE +:101BE00090919202019719F483E090E0D9CF82E0BE +:101BF00090E0D6CF61E087E00E946B038091800285 +:101C0000882309F469C089819A81892B09F45EC00F +:101C100082E10E94CA0310E145970CF010E083E1D5 +:101C20000E94CA0345970CF4106284E10E94CA0323 +:101C300045970CF4106485E10E94CA0345970CF4A3 +:101C40001068E0913102F0913202E35EFC4F808136 +:101C50008F70808388E00E944203892B51F4E091C9 +:101C60003102F0913202E35EFC4F80818160812B72 +:101C700080838CE00E944203892B51F4E091310271 +:101C8000F0913202E35EFC4F80818260812B808381 +:101C900084E00E944203892B51F4E0913102F091DB +:101CA0003202E35EFC4F80818460812B80838BE075 +:101CB0000E944203892B51F4E0913102F0913202EB +:101CC000E35EFC4F80818860182B10838091310285 +:101CD0009091320201966ACFF12CE12C34E6B32EBA +:101CE000E0913102F0913202E35EFC4F808190E09E +:101CF0000E2C02C0959587950A94E2F780FF3BC0B1 +:101D0000E0913102F0913202E35EFC4F008110E07D +:101D100024E0159507952A95E1F70F30110521F478 +:101D200000913F021091400289819A81892B61F1D3 +:101D30006701CC0CDD1CF601E75EFE4FA08061E080 +:101D40008A2D0E94990361E08A2D0E946B0381E035 +:101D500090E00115110529F0B09EC001B19E900DD3 +:101D60001124F601EB57FD4F2081318128173907E7 +:101D700010F4918380838FEFE81AF80A24E0E216CA +:101D8000F10409F0ADCFA2CF012BA9F7F701EE0FB7 +:101D9000FF1FE75EFE4F108161E0812F0E949903D3 +:101DA00060E0812F0E946B03E6CF809191029091B9 +:101DB00092022091310230913202019782179307EB +:101DC00009F084CF83E090E0909334028093330253 +:101DD0007DCF61E087E00E946B032091310230915A +:101DE000320280919102909192022817390739F4BA +:101DF00089819A819093300280932F0267CF8091DE +:101E0000910290919202209131023091320201961A +:101E10008217930739F489819A8190932E028093D7 +:101E20002D0254CF80919102909192022091310223 +:101E30003091320202968217930739F489819A8190 +:101E400090932C0280932B0241CF8091910290912C +:101E50009202209131023091320203968217930749 +:101E600009F059CE89819A8190932A0280932902A0 +:101E700081E090E09093320280933102109234021C +:101E80001092330280912F029091300261E0892BF1 +:101E900091F18AE00E94990361E08AE00E946B035D +:101EA00080912D0290912E0261E0892B49F189E009 +:101EB0000E94990361E089E00E946B0380912B02EC +:101EC00090912C0261E0892B01F185E00E94990339 +:101ED00061E085E00E946B038091290290912A02C3 +:101EE00061E0892BB9F086E00E94990361E086E009 +:101EF0000E946B0310CE8AE00E94990360E0CDCF70 +:101F000089E00E94990360E0D6CF85E00E949903A2 +:101F100060E0DFCF86E00E94990360E0E8CFEF92B7 +:101F2000FF920F931F93CF93DF93F82E192FE62E76 +:101F3000042F81E0860F880F0E94430483E00E94F3 +:101F40004304CF2DD12FEC0EFD2EF11CCE15DF0555 +:101F5000B9F007FF13C0FE0184910E944304182FBB +:101F600080E00E944304812321968111EFCFDF910D +:101F7000CF911F910F91FF90EF9008958881EDCF41 +:101F800081E0F5CFEEE1F5E01382128288EE93E076 +:101F9000A0E0B0E084839583A683B78385E291E0D7 +:101FA000918380838FEF9FEF95878487EEE6F5E03E +:101FB00087E391E0918380831282138214821582D9 +:101FC000E4E7F5E091838083128213821482158204 +:101FD0000895CF93DF93CDB7DEB7CE54D1090FB6B6 +:101FE000F894DEBF0FBECDBF789484B5826084BD07 +:101FF00084B5816084BD85B5826085BD85B581600D +:1020000085BD80916E00816080936E00109281008A +:102010008091810082608093810080918100816045 +:102020008093810080918000816080938000809106 +:1020300091008260809391008091910081608093F3 +:102040009100809190008160809390008091C10008 +:1020500084608093C1008091C10082608093C10040 +:102060008091C10081608093C1008091C300816034 +:102070008093C3008091C00082608093C0008091F3 +:10208000C20081608093C20080917A008460809356 +:102090007A0080917A00826080937A0080917A0041 +:1020A000816080937A0080917A00806880937A00C2 +:1020B00010921C0310923C0210923B028091D700B8 +:1020C00081608093D70080EA8093D80089B58061D1 +:1020D00089BD89B5826089BD09B400FEFDCF61E08C +:1020E00070E080E090E00E9411048091D8008F7C25 +:1020F00080618093D8008091E000807F8093E00031 +:102100008091E1008E7E8093E1008DE08093E2007B +:10211000559A209A60E088E00E94990360E08CE084 +:102120000E94990360E084E00E94990360E08BE0E4 +:102130000E94990360E082E10E94990360E083E1DC +:102140000E94990360E084E10E94990360E085E1C8 +:102150000E94990360E086E10E94990360E087E1B4 +:102160000E94990361E082E00E94990361E087E0A8 +:102170000E94990361E088E00E946B0361E08CE0BB +:102180000E946B0361E084E00E946B0361E08BE0DE +:102190000E946B0361E082E10E946B0361E083E1D6 +:1021A0000E946B0361E084E10E946B0361E085E1C2 +:1021B0000E946B0361E086E10E946B0361E087E1AE +:1021C0000E946B0388E00E9442032F969FAF8EAF60 +:1021D0002F978CE00E9442032D969FAF8EAF2D97D4 +:1021E00084E00E9442032B969FAF8EAF2B978BE02B +:1021F0000E94420329969FAF8EAF29972F968EADEE +:102200009FAD2F97019709F0CDC12F961FAE1EAE3F +:102210002F972D968EAD9FAD2D97019709F0C9C1CF +:102220002D961FAE1EAE2D972B968EAD9FAD2B9784 +:10223000019709F0C5C12B961FAE1EAE2B972996AC +:102240008EAD9FAD2997019709F0C1C129961FAEA8 +:102250001EAE299782E10E94CA0345970CF0BEC1C9 +:1022600081E090E027969FAF8EAF279783E10E9491 +:10227000CA0345970CF0B7C181E090E025969FAF67 +:102280008EAF259784E10E94CA0345970CF0B0C138 +:1022900081E090E023969FAF8EAF239785E10E9467 +:1022A000CA0345970CF0A9C181E090E021969FAF49 +:1022B0008EAF219786E10E94CA0345970CF0A2C118 +:1022C00081E090E09EAF8DAF87E10E94CA03459701 +:1022D0000CF09BC181E090E0909394028093930274 +:1022E0008DAD9EAD2196CEACDFAC21972396EEACA2 +:1022F000FFAC239725960EAD1FAD25972796AEAD63 +:10230000BFAD27972996EEADFFAD29972B966EAD01 +:102310007FAD2B972D964EAD5FAD2D972F962EADA1 +:102320003FAD2F97880F991F8C0D9D1D880F991F0A +:102330008E0D9F1D880F991F800F911F880F991F69 +:102340008A0F9B1F880F991F8E0F9F1F880F991F41 +:10235000860F971F880F991F840F951F880F991F4D +:10236000820F931F90939202809391028091910229 +:10237000909192028D3F914030F08DEF91E09093DB +:1023800092028093910278948FEF9FEF90932B05A8 +:1023900080932A0568EE73E080E090E00E941104CB +:1023A00010927F0210923E0210923D026EE578E09C +:1023B0008CE691E00E9414096FED76E082E791E0EF +:1023C0000E94140969E878E087E791E00E94140907 +:1023D00062E978E08CE791E00E9414096BE978E00B +:1023E00081E891E00E94140966EE76E087E891E0CA +:1023F0000E9414096DE377E08BE891E00E941409D4 +:1024000061EB76E08FE891E00E94140965E378E0E3 +:1024100085E991E00E941409109280028091930254 +:1024200090919402892B09F4FCC086E10E94CA03B2 +:1024300045970CF0EFC08AE991E00E947A0881E0AC +:1024400080938002EDE1F3E081E092E0DF019C0106 +:102450001D9221503040E1F719E1E12E11E0F12EFB +:1024600010E000E0D701DC90B2E0EB0EF11C61E07F +:102470008D2D0E94990360E08D2D0E946B03F80161 +:10248000EE0FFF1FEB57FD4F118210820F5F1F4FA2 +:102490000430110539F721968EAD9FAD2197239613 +:1024A000EEACFFAC239725960EAD1FAD2597279672 +:1024B000AEADBFAD27972996EEADFFAD29972B9610 +:1024C0006EAD7FAD2B972D964EAD5FAD2D972F96B0 +:1024D0002EAD3FAD2F97880F991F8E0D9F1D880F32 +:1024E000991F800F911F880F991F8A0F9B1F880FBC +:1024F000991F8E0F9F1F880F991F860F971F880F98 +:10250000991F840F951F880F991F820F931F909317 +:10251000400280933F0260E082E00E946B03809162 +:10252000910290919202892B31F4809193029091C3 +:102530009402892B79F083E08093CC001092CD0037 +:102540001092CE001092C80080E98093C9008EE0FE +:102550008093CA0000E010E0FF24F3948EE195E040 +:102560000E94E605892B09F4E5C08EE195E00E9402 +:10257000A405E82EEAE08E1709F467C0FDE08F1786 +:1025800009F463C028E08213C2C068E08EE195E0E0 +:102590000E94D50480917F02882301F381508093AB +:1025A0007F02DCCF81E090E02F969FAF8EAF2F9718 +:1025B00030CE81E090E02D969FAF8EAF2D9734CE38 +:1025C00081E090E02B969FAF8EAF2B9738CE81E0C5 +:1025D00090E029969FAF8EAF29973CCE27961FAEED +:1025E0001EAE279743CE25961FAE1EAE25974ACE28 +:1025F00023961FAE1EAE239751CE21961FAE1EAE60 +:10260000219758CE1EAE1DAE5FCE1092940210924E +:10261000930266CE8FE491E00E947A080E94000641 +:102620001BCF62EC71E08EE195E00E94BE06409106 +:1026300091025091920270E060E02AE08EE195E014 +:102640000E9471070E94CD0666CFE0917F02F0E004 +:10265000ED5BFD4F108269E371E08EE195E00E9431 +:10266000BE0680914302882309F445C060ED71E005 +:1026700083E492E00E94B6169A8389835E0133E078 +:10268000A30EB11CCC24C394D12CEC2C9D2C60ED5A +:1026900071E090E080E00E94B616D5018D939D9385 +:1026A0005D01BEE1CB16D10429F0EFEFCE1ADE0AB0 +:1026B000892B59F7C0904102D0904202A980BA807C +:1026C000C114D104F9F0D6016D917C91C5010E942D +:1026D0002817892B99F4D6011296ED91FC91BE0131 +:1026E0006F5F7F4F8E2D992D09950E94CD068FEA41 +:1026F00093E00E947A0510927F0230CFF601C480E9 +:10270000D580DECF83EB93E00E94D306EECF682F17 +:102710008EE195E00E94D504E0917F02EB3308F052 +:102720001DCF81E08E0F80937F02F0E0ED5BFD4FC7 +:10273000E08214CF8091930290919402892B09F446 +:1027400080C08FB7F8948090960290909702A090E6 +:102750009802B09099028FBF40918D0250918E02E5 +:1027600060918F02709190022A013B01F0E14F0EBF +:10277000F7E25F1E611C711C81E090E0A0E0B0E018 +:102780002FEF421652066206720618F480E090E0BF +:10279000DC01840D951DA61DB71D88159905AA0598 +:1027A000BB0508F0F9C084169506A606B70608F022 +:1027B000ECC062ED71E08EE195E00E94BE06D12C86 +:1027C000C12CF601EE0FFF1FEB57FD4F40815181E9 +:1027D00070E060E02AE08EE195E00E94710760ED14 +:1027E00071E08EE195E00E94BE063FEFC31AD30A66 +:1027F00084E0C816D10429F784ED91E00E947A089C +:102800002FB7F8948091960290919702A091980228 +:10281000B09199022FBF80938D0290938E02A09366 +:102820008F02B0939002C3C0875E9E4FDC01EC9094 +:1028300061E08E2D0E94990360E08E2D0E946B0353 +:1028400033C18091910290919202892B09F009C1C4 +:102850008AE192E00E947A0861E08AE00E9499038E +:1028600061E08AE00E946B0361E089E00E949903C5 +:1028700060E089E00E946B0361E085E00E949903BB +:1028800060E085E00E946B0361E086E00E949903AE +:1028900060E086E00E946B0368EE73E080E090E009 +:1028A0000E94110461E08AE00E94990360E08AE0DE +:1028B0000E946B0361E089E00E94990361E089E076 +:1028C0000E946B0361E085E00E94990360E085E06F +:1028D0000E946B0361E086E00E94990360E086E05D +:1028E0000E946B0368EE73E080E090E00E941104A8 +:1028F00061E08AE00E94990360E08AE00E946B0335 +:1029000061E089E00E94990360E089E00E946B0326 +:1029100061E085E00E94990361E085E00E946B031D +:1029200061E086E00E94990360E086E00E946B030C +:1029300068EE73E080E090E00E94110461E08AE0BC +:102940000E94990360E08AE00E946B0361E089E0E5 +:102950000E94990360E089E00E946B0361E085E0DA +:102960000E94990360E085E00E946B0361E086E0CD +:102970000E94990361E086E00E946B0368EE73E0B9 +:1029800080E090E00E94110463CF481759076A075E +:102990007B0708F40ECF0BC0481759076A077B075F +:1029A00030F484169506A606B70608F402CF8FB752 +:1029B000F8948090960290909702A0909802B09020 +:1029C00099028FBF409181025091820260918302EF +:1029D000709184022A013B01A4E64A0E511C611C3D +:1029E000711C81E090E0A0E0B0E0EFEF4E165E06D3 +:1029F0006E067E0618F480E090E0DC01840D951DE3 +:102A0000A61DB71D88159905AA05BB0588F584166E +:102A10009506A606B706B0F1481759076A077B075F +:102A200088F18091800281110BC086E10E94CA0367 +:102A3000459734F486ED91E00E947A08F092800286 +:102A400080918002882369F086E10E94CA0345973D +:102A500044F08DEE91E00E947A080E941A061092CE +:102A600080020115110509F479CD0E94000076CD90 +:102A7000481759076A077B07A0F684169506A6062D +:102A8000B70678F6D12CC12CC601880F991FFC011E +:102A9000EB57FD4F20813181232B09F4C5CE808176 +:102AA0009181019791838083BFEFCB1ADB0AE4E029 +:102AB000CE16D10449F72FB7F894809196029091E1 +:102AC0009702A0919802B09199022FBF8093810242 +:102AD00090938202A0938302B093840260E087E027 +:102AE0000E946B039ECF0F931F93CF93DF9382308F +:102AF000910510F482E090E0E0917E05F0917F0571 +:102B000030E020E0B0E0A0E0309799F421153105E5 +:102B100009F44AC0281B390B24303105D8F58A81C5 +:102B20009B816115710589F1FB0193838283FE010D +:102B300011C0408151810281138148175907E0F08B +:102B40004817590799F4109761F012960C93129751 +:102B500013961C933296CF01DF91CF911F910F9165 +:102B6000089500937E0510937F05F4CF211531055C +:102B700051F04217530738F0A901DB019A01BD015A +:102B8000DF01F801C1CFEF01F9CF90937F0580936A +:102B90007E05CDCFFE01E20FF31F8193919322506A +:102BA000310939832883D7CF20917C0530917D0569 +:102BB000232B41F420910E0130910F0130937D05BC +:102BC00020937C0520910C0130910D0121153105D8 +:102BD00041F42DB73EB74091100150911101241BD3 +:102BE000350BE0917C05F0917D05E217F307A0F429 +:102BF0002E1B3F0B2817390778F0AC014E5F5F4F53 +:102C00002417350748F04E0F5F1F50937D05409302 +:102C10007C05819391939FCFF0E0E0E09CCFCF9330 +:102C2000DF930097E9F0FC01329713821282A091A2 +:102C30007E05B0917F05ED0130E020E01097A1F412 +:102C400020813181820F931F20917C0530917D0579 +:102C50002817390709F061C0F0937D05E0937C05E2 +:102C6000DF91CF910895EA01CE17DF07E8F54A8199 +:102C70005B819E0141155105B1F7E901FB83EA83B0 +:102C800049915991C40FD51FEC17FD0761F480815C +:102C900091810296840F951FE9019983888382812F +:102CA00093819B838A83F0E0E0E012968D919C9162 +:102CB00013970097B9F52D913C911197CD0102968C +:102CC000820F931F20917C0530917D0528173907CD +:102CD00039F6309751F510927F0510927E05B0932A +:102CE0007D05A0937C05BCCFD383C28340815181F5 +:102CF000840F951FC817D90761F44E5F5F4F888115 +:102D00009981480F591F518340838A819B81938306 +:102D100082832115310509F0B0CFF0937F05E09350 +:102D20007E059ECFFD01DC01C0CF13821282D7CF7A +:102D3000FC0188279927E89421912032E9F3293072 +:102D400010F02E30C8F32B3241F02D3239F4689454 +:102D500004C00E94E216820F911D219120532A3057 +:102D6000C0F31EF4909581959F4F08954AE755E072 +:102D70000E94BB160895FA01A191B081009719F441 +:102D80001097E1F0CD01DC01CD010D90002011F490 +:102D9000C00113C0FB012191222319F02015D9F79E +:102DA000F3CFFB012191201519F41E92119606C054 +:102DB0002223C1F70D900020A1F7D001FA01A193C1 +:102DC000B08308957AE0979F902D879F802D910D75 +:102DD00011240895F999FECF92BD81BDF89A9927E3 +:102DE00080B50895262FF999FECF1FBA92BD81BDF7 +:102DF00020BD0FB6F894FA9AF99A0FBE019608957D +:102E0000A1E21A2EAA1BBB1BFD010DC0AA1FBB1FEE +:102E1000EE1FFF1FA217B307E407F50720F0A21B60 +:102E2000B30BE40BF50B661F771F881F991F1A94CD +:102E300069F760957095809590959B01AC01BD01F7 +:102E4000CF010895EE0FFF1F0590F491E02D099436 +:102E5000FB01DC018D91019080190110D9F3990BD0 +:102E60000895FB01DC0101900D920020E1F7089527 +:042E7000F894FFCF04 +:102E7400FFFFFFFF00E100000000000000008005EC +:102E8400800000C180810000000A000900050006DE +:102E940000000000006405DF04A0059505E605A414 +:102EA40005C20500000000EF070D0A0053617669B2 +:102EB4006E6720454550524F4D2064617461004C4B +:102EC4006F6164696E6720454550524F4D206461BF +:102ED40074610052656C61793A003B0072656C6103 +:102EE400790068656C700073617665006C6F61646D +:102EF400007072696E74007365740064656C0063BD +:102F04006C656172006B696C6C00456E7465726906 +:102F14006E67206C6561726E696E67206D6F6465A3 +:102F2400202620636C6561722073657474696E6712 +:102F34007300537461727420416464726573733AEC +:102F440020005B005D00456E746572696E67206CDD +:102F54006561726E696E67206D6F6465004C6561B2 +:102F640076696E67206C6561726E696E67206D6F3D +:102F740064652C20736176696E67206461746120D6 +:102F8400746F20454550524F4D0052656C61792055 +:062F940044656D6F0000B2 +:00000001FF diff --git a/.pio/build/leonardo/idedata.json b/.pio/build/leonardo/idedata.json new file mode 100644 index 0000000..2b62dd9 --- /dev/null +++ b/.pio/build/leonardo/idedata.json @@ -0,0 +1 @@ +{"env_name": "leonardo", "libsource_dirs": ["/Users/andrey/Documents/Arduino/DMXReceiver/lib", "/Users/andrey/Documents/Arduino/DMXReceiver/.pio/libdeps/leonardo", "/Users/andrey/.platformio/lib", "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries"], "defines": ["PLATFORMIO=50202", "ARDUINO_AVR_LEONARDO", "F_CPU=16000000L", "ARDUINO_ARCH_AVR", "ARDUINO=10808", "USB_VID=0x2341", "USB_PID=0x8036", "USB_PRODUCT=\"Arduino Leonardo\"", "USB_MANUFACTURER=\"Arduino\"", "__AVR_ATmega32U4__"], "includes": {"build": ["/Users/andrey/Documents/Arduino/DMXReceiver/include", "/Users/andrey/Documents/Arduino/DMXReceiver/dmx_receiver_mos_relay_public", "/Users/andrey/Documents/Arduino/DMXReceiver/dmx_receiver_mos_relay_public", "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/EEPROM/src", "/Users/andrey/Documents/Arduino/DMXReceiver/lib/utils", "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/Wire/src", "/Users/andrey/Documents/Arduino/DMXReceiver/.pio/libdeps/leonardo/CmdArduino", "/Users/andrey/.platformio/packages/framework-arduino-avr/cores/arduino", "/Users/andrey/.platformio/packages/framework-arduino-avr/variants/leonardo"], "compatlib": ["/Users/andrey/Documents/Arduino/DMXReceiver/lib/utils", "/Users/andrey/Documents/Arduino/DMXReceiver/.pio/libdeps/leonardo/CmdArduino", "/Users/andrey/Documents/Arduino/DMXReceiver/.pio/libdeps/leonardo/CmdArduino", "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/EEPROM/src", "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/Wire/src", "/Users/andrey/.platformio/lib/Adafruit BusIO", "/Users/andrey/.platformio/lib/Adafruit GFX Library", "/Users/andrey/.platformio/lib/Adafruit ILI9341", "/Users/andrey/.platformio/lib/Adafruit STMPE610", "/Users/andrey/.platformio/lib/Adafruit TouchScreen", "/Users/andrey/.platformio/lib/ArduinoOTA_ID6178/src", "/Users/andrey/.platformio/lib/GUIslice/src", "/Users/andrey/.platformio/lib/ILI9341_t3", "/Users/andrey/.platformio/lib/ILI9341_t3_ID540", "/Users/andrey/.platformio/lib/XPT2046_Touchscreen", "/Users/andrey/.platformio/lib/XPT2046_Touchscreen_ID542", "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/HID/src", "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/SPI/src", "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/SoftwareSerial/src"], "toolchain": ["/Users/andrey/.platformio/packages/toolchain-atmelavr/lib/gcc/avr/7.3.0/include", "/Users/andrey/.platformio/packages/toolchain-atmelavr/lib/gcc/avr/7.3.0/include-fixed", "/Users/andrey/.platformio/packages/toolchain-atmelavr/avr/include"], "unity": ["/Users/andrey/.platformio/packages/tool-unity"]}, "cc_path": "/Users/andrey/.platformio/packages/toolchain-atmelavr/bin/avr-gcc", "cxx_path": "/Users/andrey/.platformio/packages/toolchain-atmelavr/bin/avr-g++", "gdb_path": "/Users/andrey/.platformio/packages/toolchain-atmelavr/bin/avr-gdb", "prog_path": "/Users/andrey/Documents/Arduino/DMXReceiver/.pio/build/leonardo/firmware.elf", "svd_path": null, "compiler_type": "gcc", "targets": [{"name": "size", "title": "Program Size", "description": "Calculate program size", "group": "Platform"}, {"name": "upload", "title": "Upload", "description": null, "group": "Platform"}, {"name": "uploadeep", "title": "Upload EEPROM", "description": null, "group": "Platform"}, {"name": "fuses", "title": "Set Fuses", "description": null, "group": "Platform"}, {"name": "bootloader", "title": "Burn Bootloader", "description": null, "group": "Platform"}, {"name": "compiledb", "title": "Compilation Database", "description": "Generate compilation database `compile_commands.json`", "group": "Advanced"}, {"name": "clean", "title": "Clean", "group": "General"}, {"name": "cleanall", "title": "Clean All", "group": "General", "description": "Clean a build environment and installed library dependencies"}], "extra": {"flash_images": []}, "cc_flags": "-std=gnu11 -fno-fat-lto-objects -Os -Wall -ffunction-sections -fdata-sections -flto -mmcu=atmega32u4", "cxx_flags": "-fno-exceptions -fno-threadsafe-statics -fpermissive -std=gnu++11 -Os -Wall -ffunction-sections -fdata-sections -flto -mmcu=atmega32u4"} \ No newline at end of file diff --git a/.pio/build/project.checksum b/.pio/build/project.checksum new file mode 100644 index 0000000..2525cab --- /dev/null +++ b/.pio/build/project.checksum @@ -0,0 +1 @@ +ec2a8e409fdc9562855d596d20e824c36c5e6517 \ No newline at end of file diff --git a/.pio/libdeps/leonardo/CmdArduino b/.pio/libdeps/leonardo/CmdArduino new file mode 160000 index 0000000..0c02589 --- /dev/null +++ b/.pio/libdeps/leonardo/CmdArduino @@ -0,0 +1 @@ +Subproject commit 0c02589991754ac7af1a2686ea834a57a179923f diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..29f7125 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,88 @@ +// +// !!! WARNING !!! AUTO-GENERATED FILE! +// PLEASE DO NOT MODIFY IT AND USE "platformio.ini": +// https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags +// +{ + "configurations": [ + { + "name": "PlatformIO", + "includePath": [ + "/Users/andrey/Documents/Arduino/DMXReceiver/include", + "/Users/andrey/Documents/Arduino/DMXReceiver/dmx_receiver_mos_relay_public", + "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/EEPROM/src", + "/Users/andrey/Documents/Arduino/DMXReceiver/lib/utils", + "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/Wire/src", + "/Users/andrey/Documents/Arduino/DMXReceiver/.pio/libdeps/leonardo/CmdArduino", + "/Users/andrey/.platformio/packages/framework-arduino-avr/cores/arduino", + "/Users/andrey/.platformio/packages/framework-arduino-avr/variants/leonardo", + "/Users/andrey/.platformio/lib/Adafruit BusIO", + "/Users/andrey/.platformio/lib/Adafruit GFX Library", + "/Users/andrey/.platformio/lib/Adafruit ILI9341", + "/Users/andrey/.platformio/lib/Adafruit STMPE610", + "/Users/andrey/.platformio/lib/Adafruit TouchScreen", + "/Users/andrey/.platformio/lib/ArduinoOTA_ID6178/src", + "/Users/andrey/.platformio/lib/GUIslice/src", + "/Users/andrey/.platformio/lib/ILI9341_t3", + "/Users/andrey/.platformio/lib/ILI9341_t3_ID540", + "/Users/andrey/.platformio/lib/XPT2046_Touchscreen", + "/Users/andrey/.platformio/lib/XPT2046_Touchscreen_ID542", + "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/HID/src", + "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/SPI/src", + "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/SoftwareSerial/src", + "/Users/andrey/.platformio/packages/tool-unity", + "" + ], + "browse": { + "limitSymbolsToIncludedHeaders": true, + "path": [ + "/Users/andrey/Documents/Arduino/DMXReceiver/include", + "/Users/andrey/Documents/Arduino/DMXReceiver/dmx_receiver_mos_relay_public", + "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/EEPROM/src", + "/Users/andrey/Documents/Arduino/DMXReceiver/lib/utils", + "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/Wire/src", + "/Users/andrey/Documents/Arduino/DMXReceiver/.pio/libdeps/leonardo/CmdArduino", + "/Users/andrey/.platformio/packages/framework-arduino-avr/cores/arduino", + "/Users/andrey/.platformio/packages/framework-arduino-avr/variants/leonardo", + "/Users/andrey/.platformio/lib/Adafruit BusIO", + "/Users/andrey/.platformio/lib/Adafruit GFX Library", + "/Users/andrey/.platformio/lib/Adafruit ILI9341", + "/Users/andrey/.platformio/lib/Adafruit STMPE610", + "/Users/andrey/.platformio/lib/Adafruit TouchScreen", + "/Users/andrey/.platformio/lib/ArduinoOTA_ID6178/src", + "/Users/andrey/.platformio/lib/GUIslice/src", + "/Users/andrey/.platformio/lib/ILI9341_t3", + "/Users/andrey/.platformio/lib/ILI9341_t3_ID540", + "/Users/andrey/.platformio/lib/XPT2046_Touchscreen", + "/Users/andrey/.platformio/lib/XPT2046_Touchscreen_ID542", + "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/HID/src", + "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/SPI/src", + "/Users/andrey/.platformio/packages/framework-arduino-avr/libraries/SoftwareSerial/src", + "/Users/andrey/.platformio/packages/tool-unity", + "" + ] + }, + "defines": [ + "PLATFORMIO=50202", + "ARDUINO_AVR_LEONARDO", + "F_CPU=16000000L", + "ARDUINO_ARCH_AVR", + "ARDUINO=10808", + "USB_VID=0x2341", + "USB_PID=0x8036", + "USB_PRODUCT=\"Arduino Leonardo\"", + "USB_MANUFACTURER=\"Arduino\"", + "__AVR_ATmega32U4__", + "" + ], + "cStandard": "c11", + "cppStandard": "c++11", + "compilerPath": "/Users/andrey/.platformio/packages/toolchain-atmelavr/bin/avr-gcc", + "compilerArgs": [ + "-mmcu=atmega32u4", + "" + ] + } + ], + "version": 4 +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..0f0d740 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..4ca3825 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,44 @@ +// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY +// +// PIO Unified Debugger +// +// Documentation: https://docs.platformio.org/page/plus/debugging.html +// Configuration: https://docs.platformio.org/page/projectconf/section_env_debug.html + +{ + "version": "0.2.0", + "configurations": [ + { + "type": "platformio-debug", + "request": "launch", + "name": "PIO Debug", + "executable": "/Users/andrey/Documents/Arduino/DMXReceiver/.pio/build/leonardo/firmware.elf", + "projectEnvName": "leonardo", + "toolchainBinDir": "/Users/andrey/.platformio/packages/toolchain-atmelavr/bin", + "internalConsoleOptions": "openOnSessionStart", + "preLaunchTask": { + "type": "PlatformIO", + "task": "Pre-Debug" + } + }, + { + "type": "platformio-debug", + "request": "launch", + "name": "PIO Debug (skip Pre-Debug)", + "executable": "/Users/andrey/Documents/Arduino/DMXReceiver/.pio/build/leonardo/firmware.elf", + "projectEnvName": "leonardo", + "toolchainBinDir": "/Users/andrey/.platformio/packages/toolchain-atmelavr/bin", + "internalConsoleOptions": "openOnSessionStart" + }, + { + "type": "platformio-debug", + "request": "launch", + "name": "PIO Debug (without uploading)", + "executable": "/Users/andrey/Documents/Arduino/DMXReceiver/.pio/build/leonardo/firmware.elf", + "projectEnvName": "leonardo", + "toolchainBinDir": "/Users/andrey/.platformio/packages/toolchain-atmelavr/bin", + "internalConsoleOptions": "openOnSessionStart", + "loadMode": "manual" + } + ] +} diff --git a/README.md b/README.md index 0360fc2..9cd3125 100644 --- a/README.md +++ b/README.md @@ -18,15 +18,28 @@ Guidance to use 5. Turn off Switch#1 and all DMX lights 6. Repeat learning for channels 2-4 (with appropriate switches 2-4) 7. Turn off Switch#9 (Learning mode off, all changes will be written to EEPROM) -8. Ajust default delay by switches 1-8 and restart board (delay in tens of seconds. If 0: it will be 1 second delay) +8. Ajust default delay by switches 1-8 and restart board (delay in tens of seconds. If 0: it will be no delay) * When Switch#9 off - Switches 1-8 will define delay, between all DMX channels, associated with Relay turned to off and Relay turned off (in 10th seconds) * Relay turnes on immediatelly when at least, 1 associated DMX channel in use -* You can ajust individual delay for every channel at step 4, using switches 5-8 (in tens of seconds). Value 15 (on-on-on-on) is reserved for default delay. +* You can ajust individual delay for every channel at step 4, using switches 5-8 (in tens of seconds). Value 15 (on-on-on-on) is reserved for default delay (defined at step 8). [SmartMode designed to use togetger with LightHub Smarthome controller](https://github.com/anklimov/lighthub) Recommeded for control AC power of LED transformers +* in SmartMode possible to use CLI interface on USB Serial port to control association table, save it to NVRAM and load fron NVRAM (USE 9600,N,8,1 Serial line parameters) + +* Use these commands: 'help' - this text +* 'relay #' - set relay # setup for (1-4)\n +* 'set []' - associate relay with channel +* 'del ' - de-associate relay with channel +* 'print' - print association table +* 'save' - save current config in NVRAM +* 'load' - load config from NVRAM +* 'kill' - test watchdog (there are no WDT yet) +* 'clear' - clear association table in RAM +* 'reboot' - reboot controller (disabled now) + * When Switch #10 turned off - the board will working as normal DMX relay * Setting Address diff --git a/compiled/firmware.hex b/compiled/firmware.hex new file mode 100644 index 0000000..6ccc793 --- /dev/null +++ b/compiled/firmware.hex @@ -0,0 +1,764 @@ +:100000000C942C020C9454020C9454020C94540240 +:100010000C9454020C9454020C9454020C94540208 +:100020000C9454020C9454020C94BA0A0C94290BAC +:100030000C9454020C9454020C9454020C945402E8 +:100040000C9454020C9454020C9454020C945402D8 +:100050000C9454020C9454020C9454020C94700AA4 +:100060000C9454020C945B0D0C9454020C945402A6 +:100070000C9454020C9454020C9454020C945402A8 +:100080000C9454020C9454020C9454020C94540298 +:100090000C9455090C9454020C9454020C94540280 +:1000A0000C9454020C9454020C9454020A55736537 +:1000B00020746865736520636F6D6D616E64733A5B +:1000C000202768656C7027202D2074686973207460 +:1000D0006578740A2772656C6179202327202D20AA +:1000E0007365742072656C61792023207365747563 +:1000F0007020666F722028312D34290A27736574A9 +:10010000203C444D58206368616E6E656C20233E30 +:10011000205B3C64656C617920696E203130733EF0 +:100120005D27202D206173736F6369617465207290 +:10013000656C61792077697468206368616E6E65AB +:100140006C0A2764656C203C444D58206368616EDE +:100150006E656C20233E27202D2064652D6173730E +:100160006F63696174652072656C61792077697469 +:1001700068206368616E6E656C200A277072696E14 +:100180007427202D207072696E74206173736F6301 +:10019000696174696F6E207461626C650A277361AE +:1001A000766527202D2073617665206375727265F0 +:1001B0006E7420636F6E66696720696E204E5652BA +:1001C000414D0A276C6F616427202D206C6F61649C +:1001D00020636F6E6669672066726F6D204E56529F +:1001E000414D0A276B696C6C27202D207465737450 +:1001F000207761746368646F670A27636C65617256 +:1002000027202D20636C656172206173736F6369B1 +:100210006174696F6E207461626C6520696E205232 +:10022000414D0A0043757272656E742072656C618F +:10023000793A200044656C6179206D757374206291 +:100240006520696E20302E2E3134203130732072BB +:10025000616E676500444D58204368616E6E656C41 +:10026000206D75737420626520696E20312E2E35E5 +:1002700031322072616E67650075736167653A207F +:10028000276164642023444D586368616E6E656C19 +:10029000205B64656C61795F696E5F3130736563A3 +:1002A0005D004E6F2043757272656E742072656CCE +:1002B000617920646566696E65642C2075736520BC +:1002C0002772656C61792720636F6D6D616E6400C4 +:1002D00075736167653A202764656C2023444D5827 +:1002E0006368616E6E656C00444D58204368616EB2 +:1002F0006E656C206D75737420626520696E2031A7 +:100300002E2E3531322072616E6765004E6F2043AC +:10031000757272656E742072656C617920646566B1 +:10032000696E65642C20757365202772656C617930 +:100330002720636F6D6D616E6400080B000202027E +:100340000000090400000102020000052400100161 +:100350000524010101042402060524060001070505 +:10036000810310004009040100020A000000070593 +:100370000202400000070583024000000403090454 +:1003800012010002EF020140412336800001010208 +:10039000030141726475696E6F204C4C43004172D9 +:1003A0006475696E6F204C656F6E6172646F003E9C +:1003B0003E2000496E76616C696420636F6D6D61EB +:1003C0006E6400070605040100080A0B0C0D090005 +:1003D000000000240027002A002D0030000000004B +:1003E00000250028002B002E003100000000002313 +:1003F00000260029002C002F000404040404030438 +:1004000005020202020403020202020606060606B2 +:1004100006040402020204040408020110408040A1 +:10042000102040804080080204018040201002011A +:10043000108010204040200000000200090F000042 +:10044000030401000C000000000000000000000098 +:10045000000000000000C20F11241FBECFEFDAE041 +:10046000DEBFCDBF12E0A0E0B1E0E4E7FEE202C0F3 +:1004700005900D92A632B107D9F725E0A6E2B2E0C9 +:1004800001C01D92A038B207E1F712E0CCE2D2E041 +:1004900004C02197FE010E942217CB32D107C9F771 +:1004A0000E94E90F0C9438170C940000FC01809115 +:1004B0001C03882311F13FB7F89482E08093E90090 +:1004C0002091F200822F90E01816190614F481E0B2 +:1004D00090E0882339F0289844E640931B0340912C +:1004E000F1004083222339F02091F200211103C052 +:1004F0002BE62093E8003FBF08958FEF9FEF08950C +:100500002FB7F89483E08093E9009091E800892F59 +:10051000807295FF04C09091F20080E4891B2FBF88 +:1005200008952091D102260F3327331F2132310540 +:10053000ECF42091F502FC0190E080E0243069F0B9 +:1005400082E00895A091D1022191AC014F545D4FFA +:10055000A40FB52FB11D2C930196861798F38091A7 +:10056000D102680F6093D10280E0089581E0089580 +:1005700008958FEF9FEF08958FEF9FEF089580917B +:10058000AA0290E09195819591090895CF93DF9308 +:10059000CB01EA01642F0E949102CE01DF91CF913D +:1005A0000895CF93DF931F92CDB7DEB7698361E0E3 +:1005B000CE0101960E94910281E090E00F90DF91C0 +:1005C000CF9108958091A20281110DC082E08093A5 +:1005D0009E0284E080939F021092A1021092A002DA +:1005E00081E08093A2028EE992E0089581508F30DD +:1005F00008F047C0E82FF0E0E050FD4F0C942217C0 +:100600001D0321030F031503190341034103410394 +:1006100024032A032E033203380341033C03809151 +:1006200080008F77809380000895809180008F7D77 +:10063000F9CF80918000877FF5CF84B58F7784BD17 +:10064000089584B58F7DFBCF809190008F77809344 +:1006500090000895809190008F7DF9CF8091900057 +:10066000877FF5CF8091C0008F778093C000089579 +:100670008091C0008F7DF9CF8091C200877F8093E9 +:10068000C2000895CF93DF93282F30E0F901E95C91 +:10069000FB4F8491F901E85EFB4FD491F901E750DB +:1006A000FC4FC491CC23A1F081110E94F602EC2FE3 +:1006B000F0E0EE0FFF1FE551FC4FA591B491EC91D6 +:1006C000ED2381E090E009F480E0DF91CF9108957F +:1006D00080E090E0FACF1F93CF93DF93282F30E094 +:1006E000F901E95CFB4F8491F901E85EFB4FD4917D +:1006F000F901E750FC4FC491CC23A9F0162F8111CA +:100700000E94F602EC2FF0E0EE0FFF1FE352FC4FC9 +:10071000A591B4918FB7F894EC91111108C0D095C0 +:10072000DE23DC938FBFDF91CF911F910895DE2BE5 +:10073000F8CFCF93DF9390E0FC01E85EFB4F24916C +:1007400087509C4FFC0184918823D1F090E0880F62 +:10075000991FFC01E153FC4FA591B491FC01E352B8 +:10076000FC4FC591D49161110EC09FB7F8948C9144 +:10077000E22FE0958E238C932881E223E8839FBFAC +:10078000DF91CF9108958FB7F894EC91E22BEC9321 +:100790008FBFF6CF8251E82FF0E0ED53FC4FE4918C +:1007A00090917B008E2F880F880F80729F7D892B00 +:1007B00080937B00E770E064E0937C0080917A0096 +:1007C000806480937A0080917A0086FDFCCF8091CE +:1007D00078009091790008953FB7F89480919A023B +:1007E00090919B02A0919C02B0919D0226B5A89B7E +:1007F00005C02F3F19F00196A11DB11D3FBFBA2FB3 +:10080000A92F982F8827BC01CD01620F711D811D72 +:10081000911D42E0660F771F881F991F4A95D1F7F7 +:1008200008958F929F92AF92BF92CF92DF92EF92F4 +:10083000FF924B015C010E94EC036B017C010E9462 +:10084000EC036C197D098E099F09683E7340810590 +:100850009105A8F321E0821A9108A108B10888EE59 +:10086000C80E83E0D81EE11CF11C81149104A10480 +:10087000B10429F7FF90EF90DF90CF90BF90AF9039 +:100880009F908F90089540913702509138022091A7 +:1008900035023091360242175307B4F49091E800C4 +:1008A0009570E1F39091E80092FD19C08093F100FA +:1008B000809137029091380201968F739927892B86 +:1008C00019F48EEF8093E8008091370290913802FE +:1008D0000196909338028093370281E0089580E07A +:1008E0000895DF92EF92FF920F931F93CF93DF93C0 +:1008F000D82E8A01EB017B01E40EF51ECE15DF0533 +:1009000059F0D7FE12C0FE0184910E944304219643 +:100910008111F4CF0FEF1FEFC801DF91CF911F912D +:100920000F91FF90EF90DF9008958881EECF0F93A5 +:100930001F93CF93DF931F92CDB7DEB782E08983F9 +:1009400042E450E06AE373E080E80E9471040E9490 +:10095000E202DC0112960D911C910115110589F03E +:10096000D801ED91FC910280F381E02DBE016F5F13 +:100970007F4FC801099597FD04C0F80100851185D6 +:10098000ECCF89810F90DF91CF911F910F91089546 +:10099000615030F02091F100FC0120830196F8CFE6 +:1009A000289884E680931B030895DC01ED91FC9167 +:1009B0000190F081E02D099490E080E008958F92FD +:1009C0009F92AF92BF92CF92DF92EF92FF920F93DE +:1009D0001F93CF93DF936C017B018A0180910B0100 +:1009E000882309F45CC080911C03882309F457C054 +:1009F00080913B0280FF05C08091E000826080937F +:100A0000E000E801B12C8AEFA82E93E0892E2AE3BA +:100A1000922E209711F4BB20D9F10E9480028111FF +:100A20000AC0AA94AA20D9F161E070E080E090E0C9 +:100A30000E941104EECF8C171D0611F00CF08C2FC4 +:100A40009FB7F8948092E9002091E80025FD02C04C +:100A50009FBFDFCF282F30E0C21BD30BF70181509F +:100A600020F041914093F100FACFE20EF31EBB203B +:100A700021F09092E800B12CEBCF8091E80085FD49 +:100A8000E7CF9092E800BB24B394209709F3F3CF0B +:100A90005D9884E680933A02101611063CF081E0DE +:100AA00090E0F6019383828310E000E0C801DF91BB +:100AB000CF911F910F91FF90EF90DF90CF90BF905B +:100AC000AF909F908F900895CF93DF931F92CDB7F3 +:100AD000DEB76983DC01ED91FC910280F381E02DAA +:100AE00041E050E0BE016F5F7F4F09950F90DF91AD +:100AF000CF9108950F931F93CF93DF938C01D0E094 +:100B0000C0E0F801EC0FFD1F6491662341F08EE117 +:100B100095E00E946405892B11F02196F2CFCE0159 +:100B2000DF91CF911F910F91089583E08093E900A9 +:100B30008091F200882319F08AE38093E8000895F9 +:100B40000E94800290E00895CF93DF931F92CDB76B +:100B5000DEB7FC018485958597FD08C02FEF3FEF38 +:100B6000358724870F90DF91CF910895CE010196AC +:100B70000E945602019719F4898190E0F3CF8FEF1C +:100B80009FEFF0CF0F931F93CF93DF931F92CDB7BB +:100B9000DEB78C01FC018485958597FF0BC0CE01E3 +:100BA00001960E945602019771F4898190E0F80144 +:100BB00095878487F801848595850F90DF91CF9183 +:100BC0001F910F9108958FEF9FEFF1CFFC01848566 +:100BD000958597FD0BC09FB7F89482E08093E9005C +:100BE0008091F2009FBF90E0019608959FB7F8941E +:100BF00082E08093E9008091F2009FBF90E0089529 +:100C00000F931F93CF93DF930DE113E0D0E0C0E08B +:100C1000CE010E94EA16F80181938F012196C1301E +:100C2000F2E0DF07A9F78DE193E0DF91CF911F910B +:100C30000F910895FF920F931F93CF93DF930DE1D0 +:100C400013E0D0E0C0E0F801F1908F01CE010E94E6 +:100C5000EA16F81621F06F2DCE010E94F2162196A9 +:100C6000C130F2E0DF0779F78DE193E0DF91CF91BA +:100C70001F910F91FF9008951F93CF93DF9385ED00 +:100C80008093BC008091AD029091AE02A091AF0222 +:100C9000B091B0020796A11DB11D23E0B695A795AE +:100CA000979587952A95D1F72091BC0024FD03C024 +:100CB0001092F50252C04091AD025091AE02609187 +:100CC000AF027091B002452B462B472B69F300977A +:100CD000A105B10541F025E32A95F1F70000019740 +:100CE000A109B109E1CF8091AC02C1E0C093AB0290 +:100CF000882399F1D091B8001091BA008091BC007E +:100D00008A7B8093BC0060E082E00E946B0360E01D +:100D100083E00E946B031092F502C093F7021092D9 +:100D2000F60261E082E00E946B0361E083E00E94D2 +:100D30006B038091B9008E7F8093B9008091B900D8 +:100D40008D7F8093B90088E48093B80085E4809318 +:100D5000BC001093BA00D093B800DF91CF911F91DF +:100D60000895EDE1F3E080E092E0DF019C011D9247 +:100D700021503040E1F781E090E00895FB010190BF +:100D80000020E9F73197AF01461B570BDC01ED91CD +:100D9000FC910280F381E02D099469E371E08EE11A +:100DA00095E00C94BE06CF93DF930E947A05EC0188 +:100DB0000E94CD068C0F9D1FDF91CF9108958CEA84 +:100DC00090E00E94D30681E090E00895CF92DF92F8 +:100DD000EF92FF921F93CF93DF936C017B011091F1 +:100DE000280282EA92E0112391F089E792E022E062 +:100DF000C216D10464F0FB01828193810E9498168F +:100E0000EC0101978115924070F085E592E00E9417 +:100E1000D30690E080E0DF91CF911F91FF90EF909B +:100E2000DF90CF90089522E0C216D10459F0F70167 +:100E3000848195810E9498169C0140972CF084E350 +:100E400092E0E5CF2FE030E0C35EDC4F98819F70E9 +:100E5000612F6150770BAB0161E070E001C0660F5C +:100E60004A95EAF7962B84E0220F331F8A95E1F723 +:100E7000922B988381E090E0CECFCF93DF93C09107 +:100E80002802C11109C08CE093E00E94D30690E0D3 +:100E900080E0DF91CF91089502971CF480ED92E0FD +:100EA000F4CFFB01828193810E9498169C0121500E +:100EB00031092115324018F088EE92E0E6CFFC01AE +:100EC000E35EFC4FC150DD0B21E030E001C0220F9A +:100ED000CA95EAF7209580812823208381E090E05D +:100EE000D8CF8F929F92AF92BF92EF92FF920F93C3 +:100EF0001F93CF93DF93CDB7DEB7A1970FB6F894CA +:100F0000DEBF0FBECDBF7C01FA01CB0119A222309A +:100F100008F42AE08E010F5D1F4F822E912CB12C18 +:100F2000A12CBF01A50194010E940017F901CA017B +:100F30006A300CF5605DD8016E938D01232B242B54 +:100F4000252B79F790E080E0109721F0BD01C701D3 +:100F50000E94BE06A1960FB6F894DEBF0FBECDBFAD +:100F6000DF91CF911F910F91FF90EF90BF90AF90C5 +:100F70009F908F900895695CDECFCF92DF92EF92C1 +:100F8000FF92CF93DF93AB01BC0177FF1DC06A01D5 +:100F90007C016DE28EE195E00E94D504EC014427CE +:100FA0005527BA014C195D096E097F092AE08EE1C7 +:100FB00095E00E9471078C0F9D1FDF91CF91FF90EC +:100FC000EF90DF90CF9008952AE08EE195E0DF91D9 +:100FD000CF91FF90EF90DF90CF900C9471078F929C +:100FE0009F92AF92BF92CF92DF92EF92FF920F93B8 +:100FF0001F93CF93DF937C018B016C0182E0C80EBD +:10100000D11C4701E5E08E0E911CD0E0C0E0F60156 +:1010100041916F0150E070E060E02AE0C8010E9459 +:1010200071075C016EE2C8010E94D5048A0D9B1D08 +:10103000C80FD91FC814D90451F7F701458150E0F2 +:1010400070E060E02AE0C8010E9471078C0F9D1FCC +:10105000DF91CF911F910F91FF90EF90DF90CF9094 +:10106000BF90AF909F908F900895CF92DF92EF92B4 +:10107000FF92C12CD12C7601C39468EE73E080E01E +:1010800090E00E9411042AE0B701A6018EE195E0EC +:101090000E9471070E94CD068FEFC81AD80AE80A8D +:1010A000F80A84E1C816D104E104F10431F781E0C3 +:1010B00090E0FF90EF90DF90CF900895029739F481 +:1010C000FB01828193810E9498168093280284E21A +:1010D00092E00E947A054091280250E070E060E0C2 +:1010E0002AE08EE195E00E9471070E94CD0681E022 +:1010F00090E00895CF93DF93BC018EE195E00E94CC +:10110000BE06EC010E94CD068C0F9D1FDF91CF9192 +:1011100008958CE391E00E947A080E941A0681E00B +:1011200090E008958FE491E00E947A080E94000602 +:1011300081E090E008954F925F926F927F92AF921C +:10114000BF92CF92DF92EF92FF920F931F93CF93B4 +:10115000DF93C12CD12C7601C39401E010E063E64B +:1011600071E08EE195E00E94BE06C701B6010E94C3 +:10117000BD070E94CD06C6010197580102C0AA0C06 +:10118000BB1C8A95E2F7CDE1D3E0412C512C320112 +:101190004394898190E08A219B21892BD9F0C30156 +:1011A000B2010E94BD0768E671E08EE195E00E9401 +:1011B000BE06698170E084E0759567958A95E1F7D0 +:1011C000072E000C880B990B0E94BD078AE691E060 +:1011D0000E947A0821968FEF481A580A680A780AFE +:1011E00081E0481682E058066104710491F68FEFA1 +:1011F000C81AD80AE80AF80A85E0C816D104E1043A +:10120000F10409F0ACCF81E090E0DF91CF911F9124 +:101210000F91FF90EF90DF90CF90BF90AF907F90B5 +:101220006F905F904F900895CF92DF92EF92FF9270 +:101230000F931F93CF93DF936C018B0186E090E0B7 +:101240000E947315EC019093420280934102F601D3 +:1012500001900020E9F7CF018C199D090E947315B8 +:101260007C01B6010E943117F60101900020E9F7D8 +:101270003197EC19FD09EE0DFF1D1082F982E8820D +:101280001B830A8380913D0290913E029D838C8353 +:10129000D0933E02C0933D02DF91CF911F910F91F9 +:1012A000FF90EF90DF90CF9008951F920F920FB6AE +:1012B0000F9211242F933F934F935F936F937F93DC +:1012C0008F939F93AF93BF93EF93FF938091B90058 +:1012D000887F803609F44AC0F0F5883209F4A5C049 +:1012E00018F5803109F499C0B8F4882309F4F5C0E1 +:1012F000883009F492C0FF91EF91BF91AF919F9117 +:101300008F917F916F915F914F913F912F910F90AE +:101310000FBE0F901F901895883109F486C0803257 +:1013200051F78093F40214C0803409F49BC040F458 +:101330008033B9F38833F9F68093F40285ECAEC0BC +:10134000803509F483C0883509F494C0883499F64F +:101350000E943C06D0CF883909F48AC038F5883716 +:1013600029F050F4883611F0803729F683E0809315 +:10137000F5021092F30255C0883809F479C080391B +:1013800019F0803809F0B7CF8091F302803208F06D +:101390006FC0E091F30281E08E0F8093F3028091A1 +:1013A000BB00F0E0ED52FD4F80833BC0803B39F045 +:1013B000D0F4803A09F477C0883A09F09CCF84E0F1 +:1013C0008093F5021092D2021092D102F0E0E0E098 +:1013D00009958091D10281110FC081E08093D102E3 +:1013E0001092B10209C0803C09F4A8CF883C09F4EE +:1013F000A5CF883B09F07FCFE091D20281E08E0F2C +:101400008093D202F0E0EF54FD4F80818093BB00C7 +:101410009091D2028091D10229C080911A038093C9 +:10142000BB0085EC8093BC0066CF9091190380913E +:101430001803981758F5E091190381E08E0F8093F7 +:101440001903F0E0E850FD4F8081E9CFE0911903E6 +:1014500081E08E0F809319038091BB00F0E0E8508B +:10146000FD4F808390911903809118039817C8F25B +:1014700085E8D8CFE091190381E08E0F809319039E +:101480008091BB00F0E0E850FD4F80838091F7022F +:1014900081115ECF81E08093F60284EA8093BC00E4 +:1014A0001092F50228CF85EC8093BC001092F502D3 +:1014B0008091F302803230F4E091F302F0E0ED52DB +:1014C000FD4F10826091F30270E083ED92E0F0E056 +:1014D000E0E009951092F3020ECF1092F40238CF9B +:1014E0001F920F920FB60F9211242F933F938F9359 +:1014F0009F93AF93BF938091960290919702A09192 +:101500009802B09199023091950223E0230F2D3774 +:1015100058F50196A11DB11D209395028093960266 +:1015200090939702A0939802B093990280919A02A7 +:1015300090919B02A0919C02B0919D020196A11DE9 +:10154000B11D80939A0290939B02A0939C02B0934A +:101550009D02BF91AF919F918F913F912F910F90DD +:101560000FBE0F901F90189526E8230F0296A11D1D +:10157000B11DD2CF1F920F920FB60F9211248F93ED +:101580009F938091E1009091E100937F9093E1001F +:1015900083FF0FC01092E90091E09093EB0010924E +:1015A000EC0092E39093ED0010921C0398E090936E +:1015B000F00082FF22C093E09093E9009091F20046 +:1015C000992319F09AE39093E80090913A029923B5 +:1015D00041F090913A02915090933A02911101C0DA +:1015E0005D9A90911B03992341F090911B039150B8 +:1015F00090931B03911101C0289A84FF18C0809119 +:10160000E2008E7E81608093E2008091E1008F7E17 +:101610008093E10080913B028E7E806180933B024B +:101620009F918F910F900FBE0F901F90189580FF84 +:10163000F7CF8091E2008E7E80618093E2008091FE +:10164000E1008E7E8093E10080913B028E7E81607E +:10165000E5CF1F920F920FB60F921124CF92DF9217 +:10166000EF92FF920F931F932F933F934F935F93AC +:101670006F937F938F939F93AF93BF93EF93FF935A +:10168000CF93DF93CDB7DEB76C97DEBFCDBF10929F +:10169000E9008091E80083FF25C068E0CE0145960F +:1016A0000E94C80482EF8093E8008D8987FF39C0CB +:1016B0009091E80090FFFCCF982F907609F034C10C +:1016C0009E894F89588D2F89F88C911131C08038AF +:1016D00061F580913C028093F1001092F1008EEF51 +:1016E0008093E8006C960FB6F894DEBF0FBECDBFB6 +:1016F000DF91CF91FF91EF91BF91AF919F918F912A +:101700007F916F915F914F913F912F911F910F9119 +:10171000FF90EF90DF90CF900F900FBE0F901F9033 +:1017200018959EEF9093E800C7CF1092F100D5CFA7 +:10173000913059F48111D3CF4130510581F6809118 +:101740003C028D7F80933C02CACF933049F48111D3 +:10175000C6CF4130510519F680913C028260F2CF2C +:10176000953041F48091E80080FFFCCF2068209301 +:10177000E300B5CF963009F0A9C00B8D1C8D22E097 +:101780001092E9001092380210923702F2122EC025 +:1017900010923602109235020E9497041F8299E03F +:1017A0009983FA8291E09E8390EA98879AEF9987CD +:1017B0002091370230913802275F3F4F3C832B83C3 +:1017C0008D831092E9001092380210923702109324 +:1017D00036020093350249E050E0BE016F5F7F4F53 +:1017E00080E00E9471040E94970479CF1093360222 +:1017F000009335020E94E202DC0112960D911C91C9 +:101800000115110509F451C1D801ED91FC91048035 +:10181000F581E02DBE016B5E7F4FC80109950097F1 +:1018200009F03EC1F80100851185EACFF3E0FF120F +:101830000EC08F89882309F440C0823061F440E8EB +:1018400060E18EE993E00E948F0F811148CF81E221 +:101850008093EB0047CF813029F440E86BE082E9C8 +:1018600093E0F1CF833099F70E94E202DC011296F7 +:10187000ED90FC908E010F5F1F4F6801E114F104A1 +:1018800079F0D701ED91FC910680F781E02DB80148 +:10189000C7010995080F111DF701E084F184EECF0F +:1018A000D8011C92F60101900020E9F73197BF01A1 +:1018B0006C197D0940E0C601C6CF6CE773E0FB01FF +:1018C000449150E080E80E94710409CF973009F4F8 +:1018D000BECF983021F481E08093F10000CF9930A1 +:1018E00009F0FDCE837009F0B2CFE3E1F1E081E0D1 +:1018F00031E096E32191222371F08093E900309347 +:10190000EB00DF0111972C912093EC009093ED00F8 +:101910008F5F873079F78EE78093EA001092EA00B4 +:101920008F8980931C03DBCE8B8D9C8D1092E900F8 +:10193000109238021092370290933602809335024B +:10194000898D811192C08E899D89913A49F48132A5 +:1019500009F07DCF47E050E064E071E080E0B3CF74 +:10196000913209F074CF833269F48F89988DB0E099 +:10197000A0E08093000190930101A0930201B09335 +:101980000301ADCE803269F48091E80082FFFCCF84 +:1019900067E084E091E00E94C8048BEF8093E80048 +:1019A0009ECE823209F09BCE8F8980930B01EEEFA1 +:1019B000FFE7859194918B3F9C4D51F1E0E0F8E079 +:1019C0008091040190910501A0910601B091070159 +:1019D000803B9440A105B105F1F480910B0180FD9D +:1019E0001AC0EE3F8AE0F80789F587E797E7918309 +:1019F0008083809160008093390288E19BE00FB67C +:101A0000F894A895809360000FBE9093600067CE15 +:101A1000EEEFFAE0D5CF808191818737974709F0C3 +:101A20005ECEA8958091600088618093600080916F +:101A3000390280936000EE3F2AE0F20789F080913E +:101A4000FE0A9091FF0A9183808349CE8081918123 +:101A50008737980751F29093FF0A8093FE0AC5CF0B +:101A60001092FF0A1092FE0A3ACE0E94E202DC01B6 +:101A700012960D911C910115110509F4E8CED801BB +:101A8000ED91FC910190F081E02DBE016B5E7F4FE6 +:101A9000C8010995811123CEF80100851185EBCF8E +:101AA000181619060CF41BCED2CEF1E0FF12BECEF2 +:101AB00060E873E004CF1F920F920FB60F921124CB +:101AC000AF92BF92CF92DF92EF92FF920F931F934C +:101AD0002F933F934F935F936F937F938F939F9336 +:101AE000AF93BF93EF93FF93CF93DF9300D0CDB726 +:101AF000DEB72091C8008091CE0090E09A83898360 +:101B000023FF27C010923402109233028091C80044 +:101B1000877F8093C80000000F900F90DF91CF91D6 +:101B2000FF91EF91BF91AF919F918F917F916F91B5 +:101B30005F914F913F912F911F910F91FF90EF90E7 +:101B4000DF90CF90BF90AF900F900FBE0F901F907F +:101B5000189524FF0EC0109232021092310281E0DB +:101B600090E090933402809333028091C8008F7E7E +:101B7000D0CF80913302909134028230910509F4E4 +:101B800014C1C8F4019739F689819A81892B09F526 +:101B90008091930290919402892B01F184E090E06E +:101BA000909334028093330281E090E0909332026C +:101BB00080933102B0CF8330910509F40AC10497B4 +:101BC00009F0A9CF80913102909132028130924088 +:101BD00088F010923402109233029DCF80919102CE +:101BE00090919202019719F483E090E0D9CF82E0BE +:101BF00090E0D6CF61E087E00E946B038091800285 +:101C0000882309F469C089819A81892B09F45EC00F +:101C100082E10E94CA0310E145970CF010E083E1D5 +:101C20000E94CA0345970CF4106284E10E94CA0323 +:101C300045970CF4106485E10E94CA0345970CF4A3 +:101C40001068E0913102F0913202E35EFC4F808136 +:101C50008F70808388E00E944203892B51F4E091C9 +:101C60003102F0913202E35EFC4F80818160812B72 +:101C700080838CE00E944203892B51F4E091310271 +:101C8000F0913202E35EFC4F80818260812B808381 +:101C900084E00E944203892B51F4E0913102F091DB +:101CA0003202E35EFC4F80818460812B80838BE075 +:101CB0000E944203892B51F4E0913102F0913202EB +:101CC000E35EFC4F80818860182B10838091310285 +:101CD0009091320201966ACFF12CE12C34E6B32EBA +:101CE000E0913102F0913202E35EFC4F808190E09E +:101CF0000E2C02C0959587950A94E2F780FF3BC0B1 +:101D0000E0913102F0913202E35EFC4F008110E07D +:101D100024E0159507952A95E1F70F30110521F478 +:101D200000913F021091400289819A81892B61F1D3 +:101D30006701CC0CDD1CF601E75EFE4FA08061E080 +:101D40008A2D0E94990361E08A2D0E946B0381E035 +:101D500090E00115110529F0B09EC001B19E900DD3 +:101D60001124F601EB57FD4F2081318128173907E7 +:101D700010F4918380838FEFE81AF80A24E0E216CA +:101D8000F10409F0ADCFA2CF012BA9F7F701EE0FB7 +:101D9000FF1FE75EFE4F108161E0812F0E949903D3 +:101DA00060E0812F0E946B03E6CF809191029091B9 +:101DB00092022091310230913202019782179307EB +:101DC00009F084CF83E090E0909334028093330253 +:101DD0007DCF61E087E00E946B032091310230915A +:101DE000320280919102909192022817390739F4BA +:101DF00089819A819093300280932F0267CF8091DE +:101E0000910290919202209131023091320201961A +:101E10008217930739F489819A8190932E028093D7 +:101E20002D0254CF80919102909192022091310223 +:101E30003091320202968217930739F489819A8190 +:101E400090932C0280932B0241CF8091910290912C +:101E50009202209131023091320203968217930749 +:101E600009F059CE89819A8190932A0280932902A0 +:101E700081E090E09093320280933102109234021C +:101E80001092330280912F029091300261E0892BF1 +:101E900091F18AE00E94990361E08AE00E946B035D +:101EA00080912D0290912E0261E0892B49F189E009 +:101EB0000E94990361E089E00E946B0380912B02EC +:101EC00090912C0261E0892B01F185E00E94990339 +:101ED00061E085E00E946B038091290290912A02C3 +:101EE00061E0892BB9F086E00E94990361E086E009 +:101EF0000E946B0310CE8AE00E94990360E0CDCF70 +:101F000089E00E94990360E0D6CF85E00E949903A2 +:101F100060E0DFCF86E00E94990360E0E8CFEF92B7 +:101F2000FF920F931F93CF93DF93F82E192FE62E76 +:101F3000042F81E0860F880F0E94430483E00E94F3 +:101F40004304CF2DD12FEC0EFD2EF11CCE15DF0555 +:101F5000B9F007FF13C0FE0184910E944304182FBB +:101F600080E00E944304812321968111EFCFDF910D +:101F7000CF911F910F91FF90EF9008958881EDCF41 +:101F800081E0F5CFEEE1F5E01382128288EE93E076 +:101F9000A0E0B0E084839583A683B78385E291E0D7 +:101FA000918380838FEF9FEF95878487EEE6F5E03E +:101FB00087E391E0918380831282138214821582D9 +:101FC000E4E7F5E091838083128213821482158204 +:101FD0000895CF93DF93CDB7DEB7CE54D1090FB6B6 +:101FE000F894DEBF0FBECDBF789484B5826084BD07 +:101FF00084B5816084BD85B5826085BD85B581600D +:1020000085BD80916E00816080936E00109281008A +:102010008091810082608093810080918100816045 +:102020008093810080918000816080938000809106 +:1020300091008260809391008091910081608093F3 +:102040009100809190008160809390008091C10008 +:1020500084608093C1008091C10082608093C10040 +:102060008091C10081608093C1008091C300816034 +:102070008093C3008091C00082608093C0008091F3 +:10208000C20081608093C20080917A008460809356 +:102090007A0080917A00826080937A0080917A0041 +:1020A000816080937A0080917A00806880937A00C2 +:1020B00010921C0310923C0210923B028091D700B8 +:1020C00081608093D70080EA8093D80089B58061D1 +:1020D00089BD89B5826089BD09B400FEFDCF61E08C +:1020E00070E080E090E00E9411048091D8008F7C25 +:1020F00080618093D8008091E000807F8093E00031 +:102100008091E1008E7E8093E1008DE08093E2007B +:10211000559A209A60E088E00E94990360E08CE084 +:102120000E94990360E084E00E94990360E08BE0E4 +:102130000E94990360E082E10E94990360E083E1DC +:102140000E94990360E084E10E94990360E085E1C8 +:102150000E94990360E086E10E94990360E087E1B4 +:102160000E94990361E082E00E94990361E087E0A8 +:102170000E94990361E088E00E946B0361E08CE0BB +:102180000E946B0361E084E00E946B0361E08BE0DE +:102190000E946B0361E082E10E946B0361E083E1D6 +:1021A0000E946B0361E084E10E946B0361E085E1C2 +:1021B0000E946B0361E086E10E946B0361E087E1AE +:1021C0000E946B0388E00E9442032F969FAF8EAF60 +:1021D0002F978CE00E9442032D969FAF8EAF2D97D4 +:1021E00084E00E9442032B969FAF8EAF2B978BE02B +:1021F0000E94420329969FAF8EAF29972F968EADEE +:102200009FAD2F97019709F0CDC12F961FAE1EAE3F +:102210002F972D968EAD9FAD2D97019709F0C9C1CF +:102220002D961FAE1EAE2D972B968EAD9FAD2B9784 +:10223000019709F0C5C12B961FAE1EAE2B972996AC +:102240008EAD9FAD2997019709F0C1C129961FAEA8 +:102250001EAE299782E10E94CA0345970CF0BEC1C9 +:1022600081E090E027969FAF8EAF279783E10E9491 +:10227000CA0345970CF0B7C181E090E025969FAF67 +:102280008EAF259784E10E94CA0345970CF0B0C138 +:1022900081E090E023969FAF8EAF239785E10E9467 +:1022A000CA0345970CF0A9C181E090E021969FAF49 +:1022B0008EAF219786E10E94CA0345970CF0A2C118 +:1022C00081E090E09EAF8DAF87E10E94CA03459701 +:1022D0000CF09BC181E090E0909394028093930274 +:1022E0008DAD9EAD2196CEACDFAC21972396EEACA2 +:1022F000FFAC239725960EAD1FAD25972796AEAD63 +:10230000BFAD27972996EEADFFAD29972B966EAD01 +:102310007FAD2B972D964EAD5FAD2D972F962EADA1 +:102320003FAD2F97880F991F8C0D9D1D880F991F0A +:102330008E0D9F1D880F991F800F911F880F991F69 +:102340008A0F9B1F880F991F8E0F9F1F880F991F41 +:10235000860F971F880F991F840F951F880F991F4D +:10236000820F931F90939202809391028091910229 +:10237000909192028D3F914030F08DEF91E09093DB +:1023800092028093910278948FEF9FEF90932B05A8 +:1023900080932A0568EE73E080E090E00E941104CB +:1023A00010927F0210923E0210923D026EE578E09C +:1023B0008CE691E00E9414096FED76E082E791E0EF +:1023C0000E94140969E878E087E791E00E94140907 +:1023D00062E978E08CE791E00E9414096BE978E00B +:1023E00081E891E00E94140966EE76E087E891E0CA +:1023F0000E9414096DE377E08BE891E00E941409D4 +:1024000061EB76E08FE891E00E94140965E378E0E3 +:1024100085E991E00E941409109280028091930254 +:1024200090919402892B09F4FCC086E10E94CA03B2 +:1024300045970CF0EFC08AE991E00E947A0881E0AC +:1024400080938002EDE1F3E081E092E0DF019C0106 +:102450001D9221503040E1F719E1E12E11E0F12EFB +:1024600010E000E0D701DC90B2E0EB0EF11C61E07F +:102470008D2D0E94990360E08D2D0E946B03F80161 +:10248000EE0FFF1FEB57FD4F118210820F5F1F4FA2 +:102490000430110539F721968EAD9FAD2197239613 +:1024A000EEACFFAC239725960EAD1FAD2597279672 +:1024B000AEADBFAD27972996EEADFFAD29972B9610 +:1024C0006EAD7FAD2B972D964EAD5FAD2D972F96B0 +:1024D0002EAD3FAD2F97880F991F8E0D9F1D880F32 +:1024E000991F800F911F880F991F8A0F9B1F880FBC +:1024F000991F8E0F9F1F880F991F860F971F880F98 +:10250000991F840F951F880F991F820F931F909317 +:10251000400280933F0260E082E00E946B03809162 +:10252000910290919202892B31F4809193029091C3 +:102530009402892B79F083E08093CC001092CD0037 +:102540001092CE001092C80080E98093C9008EE0FE +:102550008093CA0000E010E0FF24F3948EE195E040 +:102560000E94E605892B09F4E5C08EE195E00E9402 +:10257000A405E82EEAE08E1709F467C0FDE08F1786 +:1025800009F463C028E08213C2C068E08EE195E0E0 +:102590000E94D50480917F02882301F381508093AB +:1025A0007F02DCCF81E090E02F969FAF8EAF2F9718 +:1025B00030CE81E090E02D969FAF8EAF2D9734CE38 +:1025C00081E090E02B969FAF8EAF2B9738CE81E0C5 +:1025D00090E029969FAF8EAF29973CCE27961FAEED +:1025E0001EAE279743CE25961FAE1EAE25974ACE28 +:1025F00023961FAE1EAE239751CE21961FAE1EAE60 +:10260000219758CE1EAE1DAE5FCE1092940210924E +:10261000930266CE8FE491E00E947A080E94000641 +:102620001BCF62EC71E08EE195E00E94BE06409106 +:1026300091025091920270E060E02AE08EE195E014 +:102640000E9471070E94CD0666CFE0917F02F0E004 +:10265000ED5BFD4F108269E371E08EE195E00E9431 +:10266000BE0680914302882309F445C060ED71E005 +:1026700083E492E00E94B6169A8389835E0133E078 +:10268000A30EB11CCC24C394D12CEC2C9D2C60ED5A +:1026900071E090E080E00E94B616D5018D939D9385 +:1026A0005D01BEE1CB16D10429F0EFEFCE1ADE0AB0 +:1026B000892B59F7C0904102D0904202A980BA807C +:1026C000C114D104F9F0D6016D917C91C5010E942D +:1026D0002817892B99F4D6011296ED91FC91BE0131 +:1026E0006F5F7F4F8E2D992D09950E94CD068FEA41 +:1026F00093E00E947A0510927F0230CFF601C480E9 +:10270000D580DECF83EB93E00E94D306EECF682F17 +:102710008EE195E00E94D504E0917F02EB3308F052 +:102720001DCF81E08E0F80937F02F0E0ED5BFD4FC7 +:10273000E08214CF8091930290919402892B09F446 +:1027400080C08FB7F8948090960290909702A090E6 +:102750009802B09099028FBF40918D0250918E02E5 +:1027600060918F02709190022A013B01F0E14F0EBF +:10277000F7E25F1E611C711C81E090E0A0E0B0E018 +:102780002FEF421652066206720618F480E090E0BF +:10279000DC01840D951DA61DB71D88159905AA0598 +:1027A000BB0508F0F9C084169506A606B70608F022 +:1027B000ECC062ED71E08EE195E00E94BE06D12C86 +:1027C000C12CF601EE0FFF1FEB57FD4F40815181E9 +:1027D00070E060E02AE08EE195E00E94710760ED14 +:1027E00071E08EE195E00E94BE063FEFC31AD30A66 +:1027F00084E0C816D10429F784ED91E00E947A089C +:102800002FB7F8948091960290919702A091980228 +:10281000B09199022FBF80938D0290938E02A09366 +:102820008F02B0939002C3C0875E9E4FDC01EC9094 +:1028300061E08E2D0E94990360E08E2D0E946B0353 +:1028400033C18091910290919202892B09F009C1C4 +:102850008AE192E00E947A0861E08AE00E9499038E +:1028600061E08AE00E946B0361E089E00E949903C5 +:1028700060E089E00E946B0361E085E00E949903BB +:1028800060E085E00E946B0361E086E00E949903AE +:1028900060E086E00E946B0368EE73E080E090E009 +:1028A0000E94110461E08AE00E94990360E08AE0DE +:1028B0000E946B0361E089E00E94990361E089E076 +:1028C0000E946B0361E085E00E94990360E085E06F +:1028D0000E946B0361E086E00E94990360E086E05D +:1028E0000E946B0368EE73E080E090E00E941104A8 +:1028F00061E08AE00E94990360E08AE00E946B0335 +:1029000061E089E00E94990360E089E00E946B0326 +:1029100061E085E00E94990361E085E00E946B031D +:1029200061E086E00E94990360E086E00E946B030C +:1029300068EE73E080E090E00E94110461E08AE0BC +:102940000E94990360E08AE00E946B0361E089E0E5 +:102950000E94990360E089E00E946B0361E085E0DA +:102960000E94990360E085E00E946B0361E086E0CD +:102970000E94990361E086E00E946B0368EE73E0B9 +:1029800080E090E00E94110463CF481759076A075E +:102990007B0708F40ECF0BC0481759076A077B075F +:1029A00030F484169506A606B70608F402CF8FB752 +:1029B000F8948090960290909702A0909802B09020 +:1029C00099028FBF409181025091820260918302EF +:1029D000709184022A013B01A4E64A0E511C611C3D +:1029E000711C81E090E0A0E0B0E0EFEF4E165E06D3 +:1029F0006E067E0618F480E090E0DC01840D951DE3 +:102A0000A61DB71D88159905AA05BB0588F584166E +:102A10009506A606B706B0F1481759076A077B075F +:102A200088F18091800281110BC086E10E94CA0367 +:102A3000459734F486ED91E00E947A08F092800286 +:102A400080918002882369F086E10E94CA0345973D +:102A500044F08DEE91E00E947A080E941A061092CE +:102A600080020115110509F479CD0E94000076CD90 +:102A7000481759076A077B07A0F684169506A6062D +:102A8000B70678F6D12CC12CC601880F991FFC011E +:102A9000EB57FD4F20813181232B09F4C5CE808176 +:102AA0009181019791838083BFEFCB1ADB0AE4E029 +:102AB000CE16D10449F72FB7F894809196029091E1 +:102AC0009702A0919802B09199022FBF8093810242 +:102AD00090938202A0938302B093840260E087E027 +:102AE0000E946B039ECF0F931F93CF93DF9382308F +:102AF000910510F482E090E0E0917E05F0917F0571 +:102B000030E020E0B0E0A0E0309799F421153105E5 +:102B100009F44AC0281B390B24303105D8F58A81C5 +:102B20009B816115710589F1FB0193838283FE010D +:102B300011C0408151810281138148175907E0F08B +:102B40004817590799F4109761F012960C93129751 +:102B500013961C933296CF01DF91CF911F910F9165 +:102B6000089500937E0510937F05F4CF211531055C +:102B700051F04217530738F0A901DB019A01BD015A +:102B8000DF01F801C1CFEF01F9CF90937F0580936A +:102B90007E05CDCFFE01E20FF31F8193919322506A +:102BA000310939832883D7CF20917C0530917D0569 +:102BB000232B41F420910E0130910F0130937D05BC +:102BC00020937C0520910C0130910D0121153105D8 +:102BD00041F42DB73EB74091100150911101241BD3 +:102BE000350BE0917C05F0917D05E217F307A0F429 +:102BF0002E1B3F0B2817390778F0AC014E5F5F4F53 +:102C00002417350748F04E0F5F1F50937D05409302 +:102C10007C05819391939FCFF0E0E0E09CCFCF9330 +:102C2000DF930097E9F0FC01329713821282A091A2 +:102C30007E05B0917F05ED0130E020E01097A1F412 +:102C400020813181820F931F20917C0530917D0579 +:102C50002817390709F061C0F0937D05E0937C05E2 +:102C6000DF91CF910895EA01CE17DF07E8F54A8199 +:102C70005B819E0141155105B1F7E901FB83EA83B0 +:102C800049915991C40FD51FEC17FD0761F480815C +:102C900091810296840F951FE9019983888382812F +:102CA00093819B838A83F0E0E0E012968D919C9162 +:102CB00013970097B9F52D913C911197CD0102968C +:102CC000820F931F20917C0530917D0528173907CD +:102CD00039F6309751F510927F0510927E05B0932A +:102CE0007D05A0937C05BCCFD383C28340815181F5 +:102CF000840F951FC817D90761F44E5F5F4F888115 +:102D00009981480F591F518340838A819B81938306 +:102D100082832115310509F0B0CFF0937F05E09350 +:102D20007E059ECFFD01DC01C0CF13821282D7CF7A +:102D3000FC0188279927E89421912032E9F3293072 +:102D400010F02E30C8F32B3241F02D3239F4689454 +:102D500004C00E94E216820F911D219120532A3057 +:102D6000C0F31EF4909581959F4F08954AE755E072 +:102D70000E94BB160895FA01A191B081009719F441 +:102D80001097E1F0CD01DC01CD010D90002011F490 +:102D9000C00113C0FB012191222319F02015D9F79E +:102DA000F3CFFB012191201519F41E92119606C054 +:102DB0002223C1F70D900020A1F7D001FA01A193C1 +:102DC000B08308957AE0979F902D879F802D910D75 +:102DD00011240895F999FECF92BD81BDF89A9927E3 +:102DE00080B50895262FF999FECF1FBA92BD81BDF7 +:102DF00020BD0FB6F894FA9AF99A0FBE019608957D +:102E0000A1E21A2EAA1BBB1BFD010DC0AA1FBB1FEE +:102E1000EE1FFF1FA217B307E407F50720F0A21B60 +:102E2000B30BE40BF50B661F771F881F991F1A94CD +:102E300069F760957095809590959B01AC01BD01F7 +:102E4000CF010895EE0FFF1F0590F491E02D099436 +:102E5000FB01DC018D91019080190110D9F3990BD0 +:102E60000895FB01DC0101900D920020E1F7089527 +:042E7000F894FFCF04 +:102E7400FFFFFFFF00E100000000000000008005EC +:102E8400800000C180810000000A000900050006DE +:102E940000000000006405DF04A0059505E605A414 +:102EA40005C20500000000EF070D0A0053617669B2 +:102EB4006E6720454550524F4D2064617461004C4B +:102EC4006F6164696E6720454550524F4D206461BF +:102ED40074610052656C61793A003B0072656C6103 +:102EE400790068656C700073617665006C6F61646D +:102EF400007072696E74007365740064656C0063BD +:102F04006C656172006B696C6C00456E7465726906 +:102F14006E67206C6561726E696E67206D6F6465A3 +:102F2400202620636C6561722073657474696E6712 +:102F34007300537461727420416464726573733AEC +:102F440020005B005D00456E746572696E67206CDD +:102F54006561726E696E67206D6F6465004C6561B2 +:102F640076696E67206C6561726E696E67206D6F3D +:102F740064652C20736176696E67206461746120D6 +:102F8400746F20454550524F4D0052656C61792055 +:062F940044656D6F0000B2 +:00000001FF diff --git a/compiled/upload.sh b/compiled/upload.sh new file mode 100755 index 0000000..01a5fa8 --- /dev/null +++ b/compiled/upload.sh @@ -0,0 +1 @@ +../flashtools/mac/tool-avrdude/avrdude -C ../flashtools/mac/tool-avrdude/avrdude.conf -v -patmega32u4 -cavr109 -P/dev/cu.usbmodem14201 -b57600 -D -Uflash:w:firmware.hex:i diff --git a/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino b/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino index accc969..b88475a 100644 --- a/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino +++ b/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino @@ -5,6 +5,9 @@ - customization 03/05/2019 - SmartMode added + + - customization 31/10/2021 + - Command line interface added & some bugs fixed This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,6 +22,7 @@ along with this program. If not, see . */ +#include #include #include #include @@ -29,6 +33,9 @@ #include #include #include +#include "Cmd.h" +#include +#include #define F_OSC 16000000 // Clock frequency #define BAUD_RATE 250000 @@ -108,13 +115,175 @@ void init_USART() UCSR1C = (1< []' - associate relay with channel\n" + "'del ' - de-associate relay with channel \n" + "'print' - print association table\n" + "'save' - save current config in NVRAM\n" + "'load' - load config from NVRAM\n" +// "'log [serial_loglevel]' - define log level (0..7)\n" + "'kill' - test watchdog\n" + "'clear' - clear association table in RAM\n" +// "'reboot' - reboot controller" +)); +return 1; +} + +uint8_t currentRelay = 0; + +int cmdFunctionRelay(int arg_cnt, char **args) +{ +if (arg_cnt == 2) currentRelay=atoi(args[1]); + +debugSerialPort.print(F("Current relay: ")); +debugSerialPort.println(currentRelay); +return 1; +} + +int cmdFunctionAdd(int arg_cnt, char **args) +{ +int localDelay = 15; + +if (!currentRelay) + { + debugSerialPort.println(F("No Current relay defined, use 'relay' command")); + return 0; + } + +if (arg_cnt<2) + { + debugSerialPort.println(F("usage: 'add #DMXchannel [delay_in_10sec]")); + return 0; + } + +int currentChan = atoi(args[1]); +if (currentChan<1 || currentChan>512) + { + debugSerialPort.println(F("DMX Channel must be in 1..512 range")); + return 0; + } + +if (arg_cnt>2) + { + localDelay = atoi(args[2]); + if (localDelay>15) + { + debugSerialPort.println(F("Delay must be in 0..14 10s range")); + return 0; + } + } + + dmxArray[currentChan] &= 15; //Reset previosly saved delay for the channel + dmxArray[currentChan] |= ((1<<(currentRelay-1)) | (localDelay<<4)); +return 1; +} + +int cmdFunctionDel(int arg_cnt, char **args) +{ + +if (!currentRelay) + { + debugSerialPort.println(F("No Current relay defined, use 'relay' command")); + return 0; + } + +if (arg_cnt<2) + { + debugSerialPort.println(F("usage: 'del #DMXchannel")); + return 0; + } + +int currentChan = atoi(args[1]); +if (currentChan<1 || currentChan>512) + { + debugSerialPort.println(F("DMX Channel must be in 1..512 range")); + return 0; + } + +dmxArray[currentChan] &= ~(1<<(currentRelay-1)); + +return 1; +} + +int cmdFunctionDelay(int arg_cnt, char **args) +{ + +return 1; +} +int cmdFunctionPrint(int arg_cnt, char **args) +{ +for (short r=0; r>4); + debugSerialPort.println(";"); + } + } +return 1; +} + +int cmdFunctionLog(int arg_cnt, char **args) +{ + +return 1; +} + +int cmdFunctionClear(int arg_cnt, char **args) +{ +memset(dmxArray,0,512); +return 1; +} + +int cmdFunctionReboot(int arg_cnt, char **args) +{ +softRebootFunc(); //Hmm just hung +return 1; +} + +int cmdFunctionKill(int arg_cnt, char **args) +{ //WDT not working on Leonardo + for (byte i = 1; i < 20; i++) { + delay(1000); + debugSerialPort.println(i); + }; +return 1; +} + +int cmdFunctionLoad(int arg_cnt, char **args) +{ + Serial.println("Loading EEPROM data"); + EEPROM.get(0, dmxArray); +return 1; +} + +int cmdFunctionSave(int arg_cnt, char **args) +{ + Serial.println("Saving EEPROM data"); + EEPROM.put(0, dmxArray); +return 1; +} void setup() { + + #ifdef WDT_ENABLE + wdt_reset(); // reset watchdog counter + wdt_disable(); + wdt_enable(WDTO_8S); + #endif /*Declaration of variables*/ volatile unsigned int address1,address2,address3,address4,address5,address6,address7,address8,address9; - /*Initialization of INPUT*/ pinMode(SW1,INPUT); pinMode(SW2,INPUT); @@ -210,6 +379,22 @@ void setup() Serial.begin(9600); delay(1000); + cmdInit(); + cmdAdd("relay", cmdFunctionRelay); + cmdAdd("help", cmdFunctionHelp); + cmdAdd("save", cmdFunctionSave); + cmdAdd("load", cmdFunctionLoad); + cmdAdd("print", cmdFunctionPrint); + cmdAdd("set", cmdFunctionAdd); + cmdAdd("del", cmdFunctionDel); + //cmdAdd("delay", cmdFunctionDelay); + //cmdAdd("log", cmdFunctionLog); + cmdAdd("clear", cmdFunctionClear); + //cmdAdd("reboot", cmdFunctionReboot); + cmdAdd("kill", cmdFunctionKill); + + + learningMode = 0; @@ -245,19 +430,41 @@ void setup() if (dmxStartAddress || smartMode) init_USART(); //Call to initialization of USART } +uint32_t printTimer; +uint32_t processTimer; void loop() { + #ifdef WDT_ENABLE + wdt_reset(); + #endif + cmdPoll(); if (smartMode) { - Serial.print("["); - for (byte i=0; i> 4; + unsigned int localDelay = dmxArray[dmxCount] >> 4; if (localDelay == 15) localDelay=offDelay; //Default Delay - if (!(chanDelay[i]=localDelay*10)) chanDelay[i] =1; - - analogWrite(outPins[i],255); + if (dmxByte) + { //ON + analogWrite(outPins[i],255); + if (!localDelay) localDelay =1; + else localDelay=localDelay * 100; //tens of second + + if (chanDelay[i] + +#include + + + + +#if defined(__SAM3X8E__) || defined(ARDUINO_ARCH_STM32) +#include +#endif + +#if defined(ESP8266) +extern "C" { +#include "user_interface.h" +} +#endif + + + + +void PrintBytes(uint8_t *addr, uint8_t count, bool newline) { + for (uint8_t i = 0; i < count; i++) { + debugSerialPort.print((addr[i] >> 4,HEX)); + debugSerialPort.print((addr[i] & 0x0f),HEX); + } + if (newline) + debugSerialPort.println(); +} + +const char HEXSTR[] = "0123456789ABCDEF"; + +void SetBytes(uint8_t *addr, uint8_t count, char *out) { + // debugSerialPort.println("SB:"); + for (uint8_t i = 0; i < count; i++) { + *(out++) = HEXSTR[(addr[i] >> 4)]; + *(out++) = HEXSTR[(addr[i] & 0x0f)]; + } + *out = 0; + +} + + +byte HEX2DEC(char i) { + byte v=0; + if ('a' <= i && i <= 'f') { v = i - 97 + 10; } + else if ('A' <= i && i <= 'F') { v = i - 65 + 10; } + else if ('0' <= i && i <= '9') { v = i - 48; } + return v; +} + +void SetAddr(char *out, uint8_t *addr) { + + for (uint8_t i = 0; i < 8; i++) { + *addr = HEX2DEC(*out++) << 4; + *addr++ |= HEX2DEC(*out++); + } +} + +// chan is pointer to pointer to string +// Function return first retrived integer and move pointer to position next after ',' +int getInt(char **chan) { + if (chan && *chan && **chan) + { + //Skip non-numeric values + while (**chan && !(**chan == '-' || (**chan >= '0' && **chan<='9'))) *chan += 1; + int ch = atoi(*chan); + + //Move pointer to next element (after ,) + *chan = strchr(*chan, ','); + if (*chan) *chan += 1; + //debugSerialPort.print(F("Par:")); debugSerialPort.println(ch); + return ch; + } + return 0; +} + + + +#if defined(ARDUINO_ARCH_ESP32) || defined(ESP8266) +unsigned long freeRam () +{return system_get_free_heap_size();} +#endif + +#if defined(__AVR__) +unsigned long freeRam () +{ + extern int __heap_start, *__brkval; + int v; + return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); +} +#endif + +#if defined(ARDUINO_ARCH_STM32) +extern char _end; +extern "C" char *sbrk(int i); + +unsigned long freeRam() { + char *heapend = sbrk(0); + register char *stack_ptr asm( "sp" ); + struct mallinfo mi = mallinfo(); + + return stack_ptr - heapend + mi.fordblks; +} + +#endif + +#if defined(__SAM3X8E__) +extern char _end; +extern "C" char *sbrk(int i); + +unsigned long freeRam() { + char *ramstart = (char *) 0x20070000; + char *ramend = (char *) 0x20088000; + char *heapend = sbrk(0); + register char *stack_ptr asm( "sp" ); + struct mallinfo mi = mallinfo(); + + return stack_ptr - heapend + mi.fordblks; +} + +#endif + +#if defined(NRF5) +extern char _end; +extern "C" char *sbrk(int i); + +unsigned long freeRam() { + char *ramstart = (char *) 0x20070000; + char *ramend = (char *) 0x20088000; + char *heapend = sbrk(0); + register char *stack_ptr asm( "sp" ); + //struct mallinfo mi = mallinfo(); + + return stack_ptr - heapend;// + mi.fordblks; +} + +#endif + + +void parseBytes(const char *str, char separator, byte *bytes, int maxBytes, int base) { + for (int i = 0; i < maxBytes; i++) { + bytes[i] = strtoul(str, NULL, base); // Convert byte + str = strchr(str, separator); // Find next separator + if (str == NULL || *str == '\0') { + break; // No more separators, exit + } + str++; // Point to next character after separator + } +} + + +void printFloatValueToStr(float value, char *valstr) { + #if defined(ESP8266) || defined(ARDUINO_ARCH_ESP32) + sprintf(valstr, "%2.1f", value); + #endif + #if defined(__AVR__) + sprintf(valstr, "%d", (int)value); + int fractional = 10.0*((float)abs(value)-(float)abs((int)value)); + int val_len =strlen(valstr); + valstr[val_len]='.'; + valstr[val_len+1]='0'+fractional; + valstr[val_len+2]='\0'; + #endif + #if defined(__SAM3X8E__) + sprintf(valstr, "%2.1f",value); + #endif +} + +#define ARDBUFFER 16 //Buffer for storing intermediate strings. Performance may vary depending on size. + +int log(const char *str, ...)//TODO: __FlashStringHelper str support +{ + int i, count=0, j=0, flag=0; + char temp[ARDBUFFER+1]; + for(i=0; str[i]!='\0';i++) if(str[i]=='%') count++; //Evaluate number of arguments required to be printed + + va_list argv; + va_start(argv, count); + for(i=0,j=0; str[i]!='\0';i++) //Iterate over formatting string + { + if(str[i]=='%') + { + //Clear buffer + temp[j] = '\0'; + debugSerialPort.print(temp); + j=0; + temp[0] = '\0'; + + //Process argument + switch(str[++i]) + { + case 'd': debugSerialPort.print(va_arg(argv, int)); + break; + case 'l': debugSerialPort.print(va_arg(argv, long)); + break; + case 'f': debugSerialPort.print(va_arg(argv, double)); + break; + case 'c': debugSerialPort.print((char)va_arg(argv, int)); + break; + case 's': debugSerialPort.print(va_arg(argv, char *)); + break; + default: ; + }; + } + else + { + //Add to buffer + temp[j] = str[i]; + j = (j+1)%ARDBUFFER; + if(j==0) //If buffer is full, empty buffer. + { + temp[ARDBUFFER] = '\0'; + debugSerialPort.print(temp); + temp[0]='\0'; + } + } + }; + + debugSerialPort.println(); //Print trailing newline + return count + 1; //Return number of arguments detected +} + +/* Code borrowed from http://forum.arduino.cc/index.php?topic=289190.0 +Awesome work Mark T!*/ + + +__attribute__ ((section (".ramfunc"))) + +void ReadUniqueID( uint32_t * pdwUniqueID ) +{ + unsigned int status ; + +#if defined(__SAM3X8E__) + + /* Send the Start Read unique Identifier command (STUI) by writing the Flash Command Register with the STUI command.*/ + EFC1->EEFC_FCR = (0x5A << 24) | EFC_FCMD_STUI; + do + { + status = EFC1->EEFC_FSR ; + } while ( (status & EEFC_FSR_FRDY) == EEFC_FSR_FRDY ) ; + + /* The Unique Identifier is located in the first 128 bits of the Flash memory mapping. So, at the address 0x400000-0x400003. */ + pdwUniqueID[0] = *(uint32_t *)IFLASH1_ADDR; + pdwUniqueID[1] = *(uint32_t *)(IFLASH1_ADDR + 4); + pdwUniqueID[2] = *(uint32_t *)(IFLASH1_ADDR + 8); + pdwUniqueID[3] = *(uint32_t *)(IFLASH1_ADDR + 12); + + /* To stop the Unique Identifier mode, the user needs to send the Stop Read unique Identifier + command (SPUI) by writing the Flash Command Register with the SPUI command. */ + EFC1->EEFC_FCR = (0x5A << 24) | EFC_FCMD_SPUI ; + + /* When the Stop read Unique Unique Identifier command (SPUI) has been performed, the + FRDY bit in the Flash Programming Status Register (EEFC_FSR) rises. */ + do + { + status = EFC1->EEFC_FSR ; + } while ( (status & EEFC_FSR_FRDY) != EEFC_FSR_FRDY ) ; +#endif +} + + +int _inet_aton(const char* aIPAddrString, IPAddress& aResult) +{ + // See if we've been given a valid IP address + const char* p =aIPAddrString; + while (*p && + ( (*p == '.') || (*p >= '0') || (*p <= '9') )) + { + p++; + } + + if (*p == '\0') + { + // It's looking promising, we haven't found any invalid characters + p = aIPAddrString; + int segment =0; + int segmentValue =0; + while (*p && (segment < 4)) + { + if (*p == '.') + { + // We've reached the end of a segment + if (segmentValue > 255) + { + // You can't have IP address segments that don't fit in a byte + return 0; + } + else + { + aResult[segment] = (byte)segmentValue; + segment++; + segmentValue = 0; + } + } + else + { + // Next digit + segmentValue = (segmentValue*10)+(*p - '0'); + } + p++; + } + // We've reached the end of address, but there'll still be the last + // segment to deal with + if ((segmentValue > 255) || (segment > 3)) + { + // You can't have IP address segments that don't fit in a byte, + // or more than four segments + return 0; + } + else + { + aResult[segment] = (byte)segmentValue; + return 1; + } + } + else + + { + return 0; + } +} + +/** + * Same as ipaddr_ntoa, but reentrant since a user-supplied buffer is used. + * + * @param addr ip address in network order to convert + * @param buf target buffer where the string is stored + * @param buflen length of buf + * @return either pointer to buf which now holds the ASCII + * representation of addr or NULL if buf was too small + */ +char *_inet_ntoa_r(IPAddress addr, char *buf, int buflen) +{ + short n; + char intbuf[4]; + + +buf[0]=0; +for(n = 0; n < 4; n++) { + if (addr[n]>255) addr[n]=-1; + itoa(addr[n],intbuf,10); + strncat(buf,intbuf,buflen); + if (n<3) strncat(buf,".",buflen); +} + return buf; +} + +String toString(const IPAddress& address){ + return String() + address[0] + "." + address[1] + "." + address[2] + "." + address[3]; +} + +void printIPAddress(IPAddress ipAddress) { + for (byte i = 0; i < 4; i++) + if (i < 3) + {debugSerialPort.print((ipAddress[i]),DEC); debugSerialPort.print(F("."));} + else debugSerialPort.print((ipAddress[i])); +} + + + +void printUlongValueToStr(char *valstr, unsigned long value) { + char buf[11]; + int i=0; + for(;value>0;i++){ + unsigned long mod = value - ((unsigned long)(value/10))*10; + buf[i]=mod+48; + value = (unsigned long)(value/10); + } + + for(int n=0;n<=i;n++){ + valstr[n]=buf[i-n-1]; + } + valstr[i]='\0'; +} + + +void scan_i2c_bus() { + byte error, address; + int nDevices; + + debugSerialPort.println(F("Scanning...")); + + nDevices = 0; + for(address = 1; address < 127; address++ ) + { + // The i2c_scanner uses the return value of + // the Write.endTransmisstion to see if + // a device did acknowledge to the address. + Wire.beginTransmission(address); + error = Wire.endTransmission(); + + if (error == 0) + { + debugSerialPort.print(F("\nI2C device found at address ")); + // if (address<16) + // debugSerial<<("0"); + debugSerialPort.print(address); + + nDevices++; + } + else if (error==4) + { + debugSerialPort.print(F("\nUnknow error at address ")); + // if (address<16) + // debugSerial<<("0"); + debugSerialPort.print(address); + } + } + if (nDevices == 0) + debugSerialPort.print(F("No I2C devices found\n")); + else + debugSerialPort.print(F("done\n")); +} + + +#if defined(__SAM3X8E__) +void softRebootFunc() { + RSTC->RSTC_CR = 0xA5000005; +} +#endif + +#if defined(NRF5) || defined (ARDUINO_ARCH_STM32) +void softRebootFunc() { + debugSerial<<"Not implemented"<endTime) && (currTime endTime) || (currTime >shift; + if (!now) now=1; + return now; +} + +struct serial_st +{ + const char verb[4]; + const serialParamType mode; +}; + + +const serial_st serialModes_P[] PROGMEM = +{ + { "8E1", (serialParamType) SERIAL_8E1},//(uint16_t) US_MR_CHRL_8_BIT | US_MR_NBSTOP_1_BIT | UART_MR_PAR_EVEN }, + { "8N1", (serialParamType) SERIAL_8N1}, + { "8E2", (serialParamType) SERIAL_8E2}, + { "8N2", (serialParamType) SERIAL_8N2}, + { "8O1", (serialParamType) SERIAL_8O1}, + { "8O2", (serialParamType) SERIAL_8O2}, +// { "8M1", SERIAL_8M1}, +// { "8S1", SERIAL_8S1}, + { "7E1", (serialParamType) SERIAL_7E1},//(uint16_t) US_MR_CHRL_8_BIT | US_MR_NBSTOP_1_BIT | UART_MR_PAR_EVEN }, + { "7E2", (serialParamType) SERIAL_7E2}, + { "7O1", (serialParamType) SERIAL_7O1}, + { "7O2", (serialParamType) SERIAL_7O2} +#ifndef ARDUINO_ARCH_STM32 + ,{ "7N1", (serialParamType) SERIAL_7N1} + ,{ "7N2", (serialParamType) SERIAL_7N2} +#endif +// { "7M1", SERIAL_7M1}, +// { "7S1", SERIAL_7S1} +} ; + +#define serialModesNum sizeof(serialModes_P)/sizeof(serial_st) + +serialParamType str2SerialParam(char * str) +{ debugSerialPort.print(str); + debugSerialPort.print(F(" =>")); + for(uint8_t i=0; i (SERIAL_8N1); +} +#pragma message(VAR_NAME_VALUE(debugSerial)) +#pragma message(VAR_NAME_VALUE(SERIAL_BAUD)) diff --git a/lib/utils/utils.h b/lib/utils/utils.h new file mode 100644 index 0000000..cba0ef5 --- /dev/null +++ b/lib/utils/utils.h @@ -0,0 +1,61 @@ +/* Copyright © 2017-2018 Andrey Klimov. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +Homepage: http://lazyhome.ru +GIT: https://github.com/anklimov/lighthub +e-mail anklimov@gmail.com + +*/ +#pragma once + +#define Q(x) #x +#define QUOTE(x) Q(x) +#define VALUE_TO_STRING(x) #x +#define VALUE(x) VALUE_TO_STRING(x) +#define VAR_NAME_VALUE(var) #var "=" VALUE(var) + +#include +#include + +#if defined(ESP32) +#define serialParamType uint32_t +#else +#define serialParamType uint16_t +#endif + +#ifndef debugSerialPort +#define debugSerialPort Serial +#endif + +void PrintBytes(uint8_t* addr, uint8_t count, bool newline); +void SetBytes(uint8_t* addr, uint8_t count, char * out); +void SetAddr(char * out, uint8_t* addr); +uint8_t HEX2DEC(char i); +int getInt(char ** chan); + +unsigned long freeRam (); +void parseBytes(const char* str, char separator, byte* bytes, int maxBytes, int base); +int log(const char *str, ...); +void printFloatValueToStr(float value, char *valstr); +void ReadUniqueID( uint32_t * pdwUniqueID ); +int _inet_aton(const char* aIPAddrString, IPAddress& aResult); +char *_inet_ntoa_r(IPAddress addr, char *buf, int buflen); +void printIPAddress(IPAddress ipAddress); +void printUlongValueToStr(char *valstr, unsigned long value); +void scan_i2c_bus(); +void softRebootFunc(); +bool isTimeOver(uint32_t timestamp, uint32_t currTime, uint32_t time, uint32_t modulo = 0xFFFFFFFF); +unsigned long millisNZ(uint8_t shift=0); +serialParamType str2SerialParam(char * str); +String toString(const IPAddress& address); diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 0000000..dbf1b33 --- /dev/null +++ b/platformio.ini @@ -0,0 +1,28 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[platformio] +src_dir = dmx_receiver_mos_relay_public +default_envs = leonardo +[env:leonardo] +platform = atmelavr +board = leonardo +monitor_baud = 9600 +monitor_speed = 9600 +;board_build.variant = breakout +;upload_protocol = mbed +;upload_port = /dev/cu.SLAB_USBtoUART +framework = arduino +;build_flags = !python get_build_flags.py nrf52840 + +lib_deps = + https://github.com/anklimov/CmdArduino + + From 3b28e0653e8f3c2ec67b68cea76c4493a8669d33 Mon Sep 17 00:00:00 2001 From: Andrey Klimov Date: Sun, 31 Oct 2021 18:55:29 +0300 Subject: [PATCH 6/9] remove junk --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6db1af3..dd601d5 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ *.a .git .pio +.pio/* \ No newline at end of file From 6415e7c0738fc6656461f3797c7abe97b8ef361c Mon Sep 17 00:00:00 2001 From: Andrey Klimov Date: Sun, 31 Oct 2021 18:56:55 +0300 Subject: [PATCH 7/9] remove junk --- .gitignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index dd601d5..8d68f1e 100644 --- a/.gitignore +++ b/.gitignore @@ -11,5 +11,9 @@ *.la *.a .git +.pioenvs +.piolibdeps .pio -.pio/* \ No newline at end of file +.clang_complete +.gcc-flags.json +.DS_Store From 9a6e1906180c136915d7a75af76ae6599030996c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BB=D0=B8=D0=BC=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9=20=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B5?= =?UTF-8?q?=D0=B2=D0=B8=D1=87?= Date: Mon, 1 May 2023 16:03:34 +0300 Subject: [PATCH 8/9] mininum value for every relay (min CLI command) --- .pio/build/leonardo/firmware.hex | 1530 +++++++++-------- .../dmx_receiver_mos_relay_public.ino | 60 +- 2 files changed, 840 insertions(+), 750 deletions(-) diff --git a/.pio/build/leonardo/firmware.hex b/.pio/build/leonardo/firmware.hex index 6ccc793..a53f8e3 100644 --- a/.pio/build/leonardo/firmware.hex +++ b/.pio/build/leonardo/firmware.hex @@ -1,14 +1,14 @@ -:100000000C942C020C9454020C9454020C94540240 -:100010000C9454020C9454020C9454020C94540208 -:100020000C9454020C9454020C94BA0A0C94290BAC -:100030000C9454020C9454020C9454020C945402E8 -:100040000C9454020C9454020C9454020C945402D8 -:100050000C9454020C9454020C9454020C94700AA4 -:100060000C9454020C945B0D0C9454020C945402A6 -:100070000C9454020C9454020C9454020C945402A8 -:100080000C9454020C9454020C9454020C94540298 -:100090000C9455090C9454020C9454020C94540280 -:1000A0000C9454020C9454020C9454020A55736537 +:100000000C948E020C94B6020C94B6020C94B602B8 +:100010000C94B6020C94B6020C94B6020C94B60280 +:100020000C94B6020C94B6020C948D0B0C94FC0B41 +:100030000C94B6020C94B6020C94B6020C94B60260 +:100040000C94B6020C94B6020C94B6020C94B60250 +:100050000C94B6020C94B6020C94B6020C94430BAA +:100060000C94B6020C942E0E0C94B6020C94B602AC +:100070000C94B6020C94B6020C94B6020C94B60220 +:100080000C94B6020C94B6020C94B6020C94B60210 +:100090000C94280A0C94B6020C94B6020C94B60286 +:1000A0000C94B6020C94B6020C94B6020A55736511 :1000B00020746865736520636F6D6D616E64733A5B :1000C000202768656C7027202D2074686973207460 :1000D0006578740A2772656C6179202327202D20AA @@ -21,744 +21,778 @@ :100140006C0A2764656C203C444D58206368616EDE :100150006E656C20233E27202D2064652D6173730E :100160006F63696174652072656C61792077697469 -:1001700068206368616E6E656C200A277072696E14 -:100180007427202D207072696E74206173736F6301 -:10019000696174696F6E207461626C650A277361AE -:1001A000766527202D2073617665206375727265F0 -:1001B0006E7420636F6E66696720696E204E5652BA -:1001C000414D0A276C6F616427202D206C6F61649C -:1001D00020636F6E6669672066726F6D204E56529F -:1001E000414D0A276B696C6C27202D207465737450 -:1001F000207761746368646F670A27636C65617256 -:1002000027202D20636C656172206173736F6369B1 -:100210006174696F6E207461626C6520696E205232 -:10022000414D0A0043757272656E742072656C618F -:10023000793A200044656C6179206D757374206291 -:100240006520696E20302E2E3134203130732072BB -:10025000616E676500444D58204368616E6E656C41 -:10026000206D75737420626520696E20312E2E35E5 -:1002700031322072616E67650075736167653A207F -:10028000276164642023444D586368616E6E656C19 -:10029000205B64656C61795F696E5F3130736563A3 -:1002A0005D004E6F2043757272656E742072656CCE -:1002B000617920646566696E65642C2075736520BC -:1002C0002772656C61792720636F6D6D616E6400C4 -:1002D00075736167653A202764656C2023444D5827 -:1002E0006368616E6E656C00444D58204368616EB2 -:1002F0006E656C206D75737420626520696E2031A7 -:100300002E2E3531322072616E6765004E6F2043AC -:10031000757272656E742072656C617920646566B1 -:10032000696E65642C20757365202772656C617930 -:100330002720636F6D6D616E6400080B000202027E -:100340000000090400000102020000052400100161 -:100350000524010101042402060524060001070505 -:10036000810310004009040100020A000000070593 -:100370000202400000070583024000000403090454 -:1003800012010002EF020140412336800001010208 -:10039000030141726475696E6F204C4C43004172D9 -:1003A0006475696E6F204C656F6E6172646F003E9C -:1003B0003E2000496E76616C696420636F6D6D61EB -:1003C0006E6400070605040100080A0B0C0D090005 -:1003D000000000240027002A002D0030000000004B -:1003E00000250028002B002E003100000000002313 -:1003F00000260029002C002F000404040404030438 -:1004000005020202020403020202020606060606B2 -:1004100006040402020204040408020110408040A1 -:10042000102040804080080204018040201002011A -:10043000108010204040200000000200090F000042 -:10044000030401000C000000000000000000000098 -:10045000000000000000C20F11241FBECFEFDAE041 -:10046000DEBFCDBF12E0A0E0B1E0E4E7FEE202C0F3 -:1004700005900D92A632B107D9F725E0A6E2B2E0C9 -:1004800001C01D92A038B207E1F712E0CCE2D2E041 -:1004900004C02197FE010E942217CB32D107C9F771 -:1004A0000E94E90F0C9438170C940000FC01809115 -:1004B0001C03882311F13FB7F89482E08093E90090 -:1004C0002091F200822F90E01816190614F481E0B2 -:1004D00090E0882339F0289844E640931B0340912C -:1004E000F1004083222339F02091F200211103C052 -:1004F0002BE62093E8003FBF08958FEF9FEF08950C -:100500002FB7F89483E08093E9009091E800892F59 -:10051000807295FF04C09091F20080E4891B2FBF88 -:1005200008952091D102260F3327331F2132310540 -:10053000ECF42091F502FC0190E080E0243069F0B9 -:1005400082E00895A091D1022191AC014F545D4FFA -:10055000A40FB52FB11D2C930196861798F38091A7 -:10056000D102680F6093D10280E0089581E0089580 -:1005700008958FEF9FEF08958FEF9FEF089580917B -:10058000AA0290E09195819591090895CF93DF9308 -:10059000CB01EA01642F0E949102CE01DF91CF913D -:1005A0000895CF93DF931F92CDB7DEB7698361E0E3 -:1005B000CE0101960E94910281E090E00F90DF91C0 -:1005C000CF9108958091A20281110DC082E08093A5 -:1005D0009E0284E080939F021092A1021092A002DA -:1005E00081E08093A2028EE992E0089581508F30DD -:1005F00008F047C0E82FF0E0E050FD4F0C942217C0 -:100600001D0321030F031503190341034103410394 -:1006100024032A032E033203380341033C03809151 -:1006200080008F77809380000895809180008F7D77 -:10063000F9CF80918000877FF5CF84B58F7784BD17 -:10064000089584B58F7DFBCF809190008F77809344 -:1006500090000895809190008F7DF9CF8091900057 -:10066000877FF5CF8091C0008F778093C000089579 -:100670008091C0008F7DF9CF8091C200877F8093E9 -:10068000C2000895CF93DF93282F30E0F901E95C91 -:10069000FB4F8491F901E85EFB4FD491F901E750DB -:1006A000FC4FC491CC23A1F081110E94F602EC2FE3 -:1006B000F0E0EE0FFF1FE551FC4FA591B491EC91D6 -:1006C000ED2381E090E009F480E0DF91CF9108957F -:1006D00080E090E0FACF1F93CF93DF93282F30E094 -:1006E000F901E95CFB4F8491F901E85EFB4FD4917D -:1006F000F901E750FC4FC491CC23A9F0162F8111CA -:100700000E94F602EC2FF0E0EE0FFF1FE352FC4FC9 -:10071000A591B4918FB7F894EC91111108C0D095C0 -:10072000DE23DC938FBFDF91CF911F910895DE2BE5 -:10073000F8CFCF93DF9390E0FC01E85EFB4F24916C -:1007400087509C4FFC0184918823D1F090E0880F62 -:10075000991FFC01E153FC4FA591B491FC01E352B8 -:10076000FC4FC591D49161110EC09FB7F8948C9144 -:10077000E22FE0958E238C932881E223E8839FBFAC -:10078000DF91CF9108958FB7F894EC91E22BEC9321 -:100790008FBFF6CF8251E82FF0E0ED53FC4FE4918C -:1007A00090917B008E2F880F880F80729F7D892B00 -:1007B00080937B00E770E064E0937C0080917A0096 -:1007C000806480937A0080917A0086FDFCCF8091CE -:1007D00078009091790008953FB7F89480919A023B -:1007E00090919B02A0919C02B0919D0226B5A89B7E -:1007F00005C02F3F19F00196A11DB11D3FBFBA2FB3 -:10080000A92F982F8827BC01CD01620F711D811D72 -:10081000911D42E0660F771F881F991F4A95D1F7F7 -:1008200008958F929F92AF92BF92CF92DF92EF92F4 -:10083000FF924B015C010E94EC036B017C010E9462 -:10084000EC036C197D098E099F09683E7340810590 -:100850009105A8F321E0821A9108A108B10888EE59 -:10086000C80E83E0D81EE11CF11C81149104A10480 -:10087000B10429F7FF90EF90DF90CF90BF90AF9039 -:100880009F908F90089540913702509138022091A7 -:1008900035023091360242175307B4F49091E800C4 -:1008A0009570E1F39091E80092FD19C08093F100FA -:1008B000809137029091380201968F739927892B86 -:1008C00019F48EEF8093E8008091370290913802FE -:1008D0000196909338028093370281E0089580E07A -:1008E0000895DF92EF92FF920F931F93CF93DF93C0 -:1008F000D82E8A01EB017B01E40EF51ECE15DF0533 -:1009000059F0D7FE12C0FE0184910E944304219643 -:100910008111F4CF0FEF1FEFC801DF91CF911F912D -:100920000F91FF90EF90DF9008958881EECF0F93A5 -:100930001F93CF93DF931F92CDB7DEB782E08983F9 -:1009400042E450E06AE373E080E80E9471040E9490 -:10095000E202DC0112960D911C910115110589F03E -:10096000D801ED91FC910280F381E02DBE016F5F13 -:100970007F4FC801099597FD04C0F80100851185D6 -:10098000ECCF89810F90DF91CF911F910F91089546 -:10099000615030F02091F100FC0120830196F8CFE6 -:1009A000289884E680931B030895DC01ED91FC9167 -:1009B0000190F081E02D099490E080E008958F92FD -:1009C0009F92AF92BF92CF92DF92EF92FF920F93DE -:1009D0001F93CF93DF936C017B018A0180910B0100 -:1009E000882309F45CC080911C03882309F457C054 -:1009F00080913B0280FF05C08091E000826080937F -:100A0000E000E801B12C8AEFA82E93E0892E2AE3BA -:100A1000922E209711F4BB20D9F10E9480028111FF -:100A20000AC0AA94AA20D9F161E070E080E090E0C9 -:100A30000E941104EECF8C171D0611F00CF08C2FC4 -:100A40009FB7F8948092E9002091E80025FD02C04C -:100A50009FBFDFCF282F30E0C21BD30BF70181509F -:100A600020F041914093F100FACFE20EF31EBB203B -:100A700021F09092E800B12CEBCF8091E80085FD49 -:100A8000E7CF9092E800BB24B394209709F3F3CF0B -:100A90005D9884E680933A02101611063CF081E0DE -:100AA00090E0F6019383828310E000E0C801DF91BB -:100AB000CF911F910F91FF90EF90DF90CF90BF905B -:100AC000AF909F908F900895CF93DF931F92CDB7F3 -:100AD000DEB76983DC01ED91FC910280F381E02DAA -:100AE00041E050E0BE016F5F7F4F09950F90DF91AD -:100AF000CF9108950F931F93CF93DF938C01D0E094 -:100B0000C0E0F801EC0FFD1F6491662341F08EE117 -:100B100095E00E946405892B11F02196F2CFCE0159 -:100B2000DF91CF911F910F91089583E08093E900A9 -:100B30008091F200882319F08AE38093E8000895F9 -:100B40000E94800290E00895CF93DF931F92CDB76B -:100B5000DEB7FC018485958597FD08C02FEF3FEF38 -:100B6000358724870F90DF91CF910895CE010196AC -:100B70000E945602019719F4898190E0F3CF8FEF1C -:100B80009FEFF0CF0F931F93CF93DF931F92CDB7BB -:100B9000DEB78C01FC018485958597FF0BC0CE01E3 -:100BA00001960E945602019771F4898190E0F80144 -:100BB00095878487F801848595850F90DF91CF9183 -:100BC0001F910F9108958FEF9FEFF1CFFC01848566 -:100BD000958597FD0BC09FB7F89482E08093E9005C -:100BE0008091F2009FBF90E0019608959FB7F8941E -:100BF00082E08093E9008091F2009FBF90E0089529 -:100C00000F931F93CF93DF930DE113E0D0E0C0E08B -:100C1000CE010E94EA16F80181938F012196C1301E -:100C2000F2E0DF07A9F78DE193E0DF91CF911F910B -:100C30000F910895FF920F931F93CF93DF930DE1D0 -:100C400013E0D0E0C0E0F801F1908F01CE010E94E6 -:100C5000EA16F81621F06F2DCE010E94F2162196A9 -:100C6000C130F2E0DF0779F78DE193E0DF91CF91BA -:100C70001F910F91FF9008951F93CF93DF9385ED00 -:100C80008093BC008091AD029091AE02A091AF0222 -:100C9000B091B0020796A11DB11D23E0B695A795AE -:100CA000979587952A95D1F72091BC0024FD03C024 -:100CB0001092F50252C04091AD025091AE02609187 -:100CC000AF027091B002452B462B472B69F300977A -:100CD000A105B10541F025E32A95F1F70000019740 -:100CE000A109B109E1CF8091AC02C1E0C093AB0290 -:100CF000882399F1D091B8001091BA008091BC007E -:100D00008A7B8093BC0060E082E00E946B0360E01D -:100D100083E00E946B031092F502C093F7021092D9 -:100D2000F60261E082E00E946B0361E083E00E94D2 -:100D30006B038091B9008E7F8093B9008091B900D8 -:100D40008D7F8093B90088E48093B80085E4809318 -:100D5000BC001093BA00D093B800DF91CF911F91DF -:100D60000895EDE1F3E080E092E0DF019C011D9247 -:100D700021503040E1F781E090E00895FB010190BF -:100D80000020E9F73197AF01461B570BDC01ED91CD -:100D9000FC910280F381E02D099469E371E08EE11A -:100DA00095E00C94BE06CF93DF930E947A05EC0188 -:100DB0000E94CD068C0F9D1FDF91CF9108958CEA84 -:100DC00090E00E94D30681E090E00895CF92DF92F8 -:100DD000EF92FF921F93CF93DF936C017B011091F1 -:100DE000280282EA92E0112391F089E792E022E062 -:100DF000C216D10464F0FB01828193810E9498168F -:100E0000EC0101978115924070F085E592E00E9417 -:100E1000D30690E080E0DF91CF911F91FF90EF909B -:100E2000DF90CF90089522E0C216D10459F0F70167 -:100E3000848195810E9498169C0140972CF084E350 -:100E400092E0E5CF2FE030E0C35EDC4F98819F70E9 -:100E5000612F6150770BAB0161E070E001C0660F5C -:100E60004A95EAF7962B84E0220F331F8A95E1F723 -:100E7000922B988381E090E0CECFCF93DF93C09107 -:100E80002802C11109C08CE093E00E94D30690E0D3 -:100E900080E0DF91CF91089502971CF480ED92E0FD -:100EA000F4CFFB01828193810E9498169C0121500E -:100EB00031092115324018F088EE92E0E6CFFC01AE -:100EC000E35EFC4FC150DD0B21E030E001C0220F9A -:100ED000CA95EAF7209580812823208381E090E05D -:100EE000D8CF8F929F92AF92BF92EF92FF920F93C3 -:100EF0001F93CF93DF93CDB7DEB7A1970FB6F894CA -:100F0000DEBF0FBECDBF7C01FA01CB0119A222309A -:100F100008F42AE08E010F5D1F4F822E912CB12C18 -:100F2000A12CBF01A50194010E940017F901CA017B -:100F30006A300CF5605DD8016E938D01232B242B54 -:100F4000252B79F790E080E0109721F0BD01C701D3 -:100F50000E94BE06A1960FB6F894DEBF0FBECDBFAD -:100F6000DF91CF911F910F91FF90EF90BF90AF90C5 -:100F70009F908F900895695CDECFCF92DF92EF92C1 -:100F8000FF92CF93DF93AB01BC0177FF1DC06A01D5 -:100F90007C016DE28EE195E00E94D504EC014427CE -:100FA0005527BA014C195D096E097F092AE08EE1C7 -:100FB00095E00E9471078C0F9D1FDF91CF91FF90EC -:100FC000EF90DF90CF9008952AE08EE195E0DF91D9 -:100FD000CF91FF90EF90DF90CF900C9471078F929C -:100FE0009F92AF92BF92CF92DF92EF92FF920F93B8 -:100FF0001F93CF93DF937C018B016C0182E0C80EBD -:10100000D11C4701E5E08E0E911CD0E0C0E0F60156 -:1010100041916F0150E070E060E02AE0C8010E9459 -:1010200071075C016EE2C8010E94D5048A0D9B1D08 -:10103000C80FD91FC814D90451F7F701458150E0F2 -:1010400070E060E02AE0C8010E9471078C0F9D1FCC -:10105000DF91CF911F910F91FF90EF90DF90CF9094 -:10106000BF90AF909F908F900895CF92DF92EF92B4 -:10107000FF92C12CD12C7601C39468EE73E080E01E -:1010800090E00E9411042AE0B701A6018EE195E0EC -:101090000E9471070E94CD068FEFC81AD80AE80A8D -:1010A000F80A84E1C816D104E104F10431F781E0C3 -:1010B00090E0FF90EF90DF90CF900895029739F481 -:1010C000FB01828193810E9498168093280284E21A -:1010D00092E00E947A054091280250E070E060E0C2 -:1010E0002AE08EE195E00E9471070E94CD0681E022 -:1010F00090E00895CF93DF93BC018EE195E00E94CC -:10110000BE06EC010E94CD068C0F9D1FDF91CF9192 -:1011100008958CE391E00E947A080E941A0681E00B -:1011200090E008958FE491E00E947A080E94000602 -:1011300081E090E008954F925F926F927F92AF921C -:10114000BF92CF92DF92EF92FF920F931F93CF93B4 -:10115000DF93C12CD12C7601C39401E010E063E64B -:1011600071E08EE195E00E94BE06C701B6010E94C3 -:10117000BD070E94CD06C6010197580102C0AA0C06 -:10118000BB1C8A95E2F7CDE1D3E0412C512C320112 -:101190004394898190E08A219B21892BD9F0C30156 -:1011A000B2010E94BD0768E671E08EE195E00E9401 -:1011B000BE06698170E084E0759567958A95E1F7D0 -:1011C000072E000C880B990B0E94BD078AE691E060 -:1011D0000E947A0821968FEF481A580A680A780AFE -:1011E00081E0481682E058066104710491F68FEFA1 -:1011F000C81AD80AE80AF80A85E0C816D104E1043A -:10120000F10409F0ACCF81E090E0DF91CF911F9124 -:101210000F91FF90EF90DF90CF90BF90AF907F90B5 -:101220006F905F904F900895CF92DF92EF92FF9270 -:101230000F931F93CF93DF936C018B0186E090E0B7 -:101240000E947315EC019093420280934102F601D3 -:1012500001900020E9F7CF018C199D090E947315B8 -:101260007C01B6010E943117F60101900020E9F7D8 -:101270003197EC19FD09EE0DFF1D1082F982E8820D -:101280001B830A8380913D0290913E029D838C8353 -:10129000D0933E02C0933D02DF91CF911F910F91F9 -:1012A000FF90EF90DF90CF9008951F920F920FB6AE -:1012B0000F9211242F933F934F935F936F937F93DC -:1012C0008F939F93AF93BF93EF93FF938091B90058 -:1012D000887F803609F44AC0F0F5883209F4A5C049 -:1012E00018F5803109F499C0B8F4882309F4F5C0E1 -:1012F000883009F492C0FF91EF91BF91AF919F9117 -:101300008F917F916F915F914F913F912F910F90AE -:101310000FBE0F901F901895883109F486C0803257 -:1013200051F78093F40214C0803409F49BC040F458 -:101330008033B9F38833F9F68093F40285ECAEC0BC -:10134000803509F483C0883509F494C0883499F64F -:101350000E943C06D0CF883909F48AC038F5883716 -:1013600029F050F4883611F0803729F683E0809315 -:10137000F5021092F30255C0883809F479C080391B -:1013800019F0803809F0B7CF8091F302803208F06D -:101390006FC0E091F30281E08E0F8093F3028091A1 -:1013A000BB00F0E0ED52FD4F80833BC0803B39F045 -:1013B000D0F4803A09F477C0883A09F09CCF84E0F1 -:1013C0008093F5021092D2021092D102F0E0E0E098 -:1013D00009958091D10281110FC081E08093D102E3 -:1013E0001092B10209C0803C09F4A8CF883C09F4EE -:1013F000A5CF883B09F07FCFE091D20281E08E0F2C -:101400008093D202F0E0EF54FD4F80818093BB00C7 -:101410009091D2028091D10229C080911A038093C9 -:10142000BB0085EC8093BC0066CF9091190380913E -:101430001803981758F5E091190381E08E0F8093F7 -:101440001903F0E0E850FD4F8081E9CFE0911903E6 -:1014500081E08E0F809319038091BB00F0E0E8508B -:10146000FD4F808390911903809118039817C8F25B -:1014700085E8D8CFE091190381E08E0F809319039E -:101480008091BB00F0E0E850FD4F80838091F7022F -:1014900081115ECF81E08093F60284EA8093BC00E4 -:1014A0001092F50228CF85EC8093BC001092F502D3 -:1014B0008091F302803230F4E091F302F0E0ED52DB -:1014C000FD4F10826091F30270E083ED92E0F0E056 -:1014D000E0E009951092F3020ECF1092F40238CF9B -:1014E0001F920F920FB60F9211242F933F938F9359 -:1014F0009F93AF93BF938091960290919702A09192 -:101500009802B09199023091950223E0230F2D3774 -:1015100058F50196A11DB11D209395028093960266 -:1015200090939702A0939802B093990280919A02A7 -:1015300090919B02A0919C02B0919D020196A11DE9 -:10154000B11D80939A0290939B02A0939C02B0934A -:101550009D02BF91AF919F918F913F912F910F90DD -:101560000FBE0F901F90189526E8230F0296A11D1D -:10157000B11DD2CF1F920F920FB60F9211248F93ED -:101580009F938091E1009091E100937F9093E1001F -:1015900083FF0FC01092E90091E09093EB0010924E -:1015A000EC0092E39093ED0010921C0398E090936E -:1015B000F00082FF22C093E09093E9009091F20046 -:1015C000992319F09AE39093E80090913A029923B5 -:1015D00041F090913A02915090933A02911101C0DA -:1015E0005D9A90911B03992341F090911B039150B8 -:1015F00090931B03911101C0289A84FF18C0809119 -:10160000E2008E7E81608093E2008091E1008F7E17 -:101610008093E10080913B028E7E806180933B024B -:101620009F918F910F900FBE0F901F90189580FF84 -:10163000F7CF8091E2008E7E80618093E2008091FE -:10164000E1008E7E8093E10080913B028E7E81607E -:10165000E5CF1F920F920FB60F921124CF92DF9217 -:10166000EF92FF920F931F932F933F934F935F93AC -:101670006F937F938F939F93AF93BF93EF93FF935A -:10168000CF93DF93CDB7DEB76C97DEBFCDBF10929F -:10169000E9008091E80083FF25C068E0CE0145960F -:1016A0000E94C80482EF8093E8008D8987FF39C0CB -:1016B0009091E80090FFFCCF982F907609F034C10C -:1016C0009E894F89588D2F89F88C911131C08038AF -:1016D00061F580913C028093F1001092F1008EEF51 -:1016E0008093E8006C960FB6F894DEBF0FBECDBFB6 -:1016F000DF91CF91FF91EF91BF91AF919F918F912A -:101700007F916F915F914F913F912F911F910F9119 -:10171000FF90EF90DF90CF900F900FBE0F901F9033 -:1017200018959EEF9093E800C7CF1092F100D5CFA7 -:10173000913059F48111D3CF4130510581F6809118 -:101740003C028D7F80933C02CACF933049F48111D3 -:10175000C6CF4130510519F680913C028260F2CF2C -:10176000953041F48091E80080FFFCCF2068209301 -:10177000E300B5CF963009F0A9C00B8D1C8D22E097 -:101780001092E9001092380210923702F2122EC025 -:1017900010923602109235020E9497041F8299E03F -:1017A0009983FA8291E09E8390EA98879AEF9987CD -:1017B0002091370230913802275F3F4F3C832B83C3 -:1017C0008D831092E9001092380210923702109324 -:1017D00036020093350249E050E0BE016F5F7F4F53 -:1017E00080E00E9471040E94970479CF1093360222 -:1017F000009335020E94E202DC0112960D911C91C9 -:101800000115110509F451C1D801ED91FC91048035 -:10181000F581E02DBE016B5E7F4FC80109950097F1 -:1018200009F03EC1F80100851185EACFF3E0FF120F -:101830000EC08F89882309F440C0823061F440E8EB -:1018400060E18EE993E00E948F0F811148CF81E221 -:101850008093EB0047CF813029F440E86BE082E9C8 -:1018600093E0F1CF833099F70E94E202DC011296F7 -:10187000ED90FC908E010F5F1F4F6801E114F104A1 -:1018800079F0D701ED91FC910680F781E02DB80148 -:10189000C7010995080F111DF701E084F184EECF0F -:1018A000D8011C92F60101900020E9F73197BF01A1 -:1018B0006C197D0940E0C601C6CF6CE773E0FB01FF -:1018C000449150E080E80E94710409CF973009F4F8 -:1018D000BECF983021F481E08093F10000CF9930A1 -:1018E00009F0FDCE837009F0B2CFE3E1F1E081E0D1 -:1018F00031E096E32191222371F08093E900309347 -:10190000EB00DF0111972C912093EC009093ED00F8 -:101910008F5F873079F78EE78093EA001092EA00B4 -:101920008F8980931C03DBCE8B8D9C8D1092E900F8 -:10193000109238021092370290933602809335024B -:10194000898D811192C08E899D89913A49F48132A5 -:1019500009F07DCF47E050E064E071E080E0B3CF74 -:10196000913209F074CF833269F48F89988DB0E099 -:10197000A0E08093000190930101A0930201B09335 -:101980000301ADCE803269F48091E80082FFFCCF84 -:1019900067E084E091E00E94C8048BEF8093E80048 -:1019A0009ECE823209F09BCE8F8980930B01EEEFA1 -:1019B000FFE7859194918B3F9C4D51F1E0E0F8E079 -:1019C0008091040190910501A0910601B091070159 -:1019D000803B9440A105B105F1F480910B0180FD9D -:1019E0001AC0EE3F8AE0F80789F587E797E7918309 -:1019F0008083809160008093390288E19BE00FB67C -:101A0000F894A895809360000FBE9093600067CE15 -:101A1000EEEFFAE0D5CF808191818737974709F0C3 -:101A20005ECEA8958091600088618093600080916F -:101A3000390280936000EE3F2AE0F20789F080913E -:101A4000FE0A9091FF0A9183808349CE8081918123 -:101A50008737980751F29093FF0A8093FE0AC5CF0B -:101A60001092FF0A1092FE0A3ACE0E94E202DC01B6 -:101A700012960D911C910115110509F4E8CED801BB -:101A8000ED91FC910190F081E02DBE016B5E7F4FE6 -:101A9000C8010995811123CEF80100851185EBCF8E -:101AA000181619060CF41BCED2CEF1E0FF12BECEF2 -:101AB00060E873E004CF1F920F920FB60F921124CB -:101AC000AF92BF92CF92DF92EF92FF920F931F934C -:101AD0002F933F934F935F936F937F938F939F9336 -:101AE000AF93BF93EF93FF93CF93DF9300D0CDB726 -:101AF000DEB72091C8008091CE0090E09A83898360 -:101B000023FF27C010923402109233028091C80044 -:101B1000877F8093C80000000F900F90DF91CF91D6 -:101B2000FF91EF91BF91AF919F918F917F916F91B5 -:101B30005F914F913F912F911F910F91FF90EF90E7 -:101B4000DF90CF90BF90AF900F900FBE0F901F907F -:101B5000189524FF0EC0109232021092310281E0DB -:101B600090E090933402809333028091C8008F7E7E -:101B7000D0CF80913302909134028230910509F4E4 -:101B800014C1C8F4019739F689819A81892B09F526 -:101B90008091930290919402892B01F184E090E06E -:101BA000909334028093330281E090E0909332026C -:101BB00080933102B0CF8330910509F40AC10497B4 -:101BC00009F0A9CF80913102909132028130924088 -:101BD00088F010923402109233029DCF80919102CE -:101BE00090919202019719F483E090E0D9CF82E0BE -:101BF00090E0D6CF61E087E00E946B038091800285 -:101C0000882309F469C089819A81892B09F45EC00F -:101C100082E10E94CA0310E145970CF010E083E1D5 -:101C20000E94CA0345970CF4106284E10E94CA0323 -:101C300045970CF4106485E10E94CA0345970CF4A3 -:101C40001068E0913102F0913202E35EFC4F808136 -:101C50008F70808388E00E944203892B51F4E091C9 -:101C60003102F0913202E35EFC4F80818160812B72 -:101C700080838CE00E944203892B51F4E091310271 -:101C8000F0913202E35EFC4F80818260812B808381 -:101C900084E00E944203892B51F4E0913102F091DB -:101CA0003202E35EFC4F80818460812B80838BE075 -:101CB0000E944203892B51F4E0913102F0913202EB -:101CC000E35EFC4F80818860182B10838091310285 -:101CD0009091320201966ACFF12CE12C34E6B32EBA -:101CE000E0913102F0913202E35EFC4F808190E09E -:101CF0000E2C02C0959587950A94E2F780FF3BC0B1 -:101D0000E0913102F0913202E35EFC4F008110E07D -:101D100024E0159507952A95E1F70F30110521F478 -:101D200000913F021091400289819A81892B61F1D3 -:101D30006701CC0CDD1CF601E75EFE4FA08061E080 -:101D40008A2D0E94990361E08A2D0E946B0381E035 -:101D500090E00115110529F0B09EC001B19E900DD3 -:101D60001124F601EB57FD4F2081318128173907E7 -:101D700010F4918380838FEFE81AF80A24E0E216CA -:101D8000F10409F0ADCFA2CF012BA9F7F701EE0FB7 -:101D9000FF1FE75EFE4F108161E0812F0E949903D3 -:101DA00060E0812F0E946B03E6CF809191029091B9 -:101DB00092022091310230913202019782179307EB -:101DC00009F084CF83E090E0909334028093330253 -:101DD0007DCF61E087E00E946B032091310230915A -:101DE000320280919102909192022817390739F4BA -:101DF00089819A819093300280932F0267CF8091DE -:101E0000910290919202209131023091320201961A -:101E10008217930739F489819A8190932E028093D7 -:101E20002D0254CF80919102909192022091310223 -:101E30003091320202968217930739F489819A8190 -:101E400090932C0280932B0241CF8091910290912C -:101E50009202209131023091320203968217930749 -:101E600009F059CE89819A8190932A0280932902A0 -:101E700081E090E09093320280933102109234021C -:101E80001092330280912F029091300261E0892BF1 -:101E900091F18AE00E94990361E08AE00E946B035D -:101EA00080912D0290912E0261E0892B49F189E009 -:101EB0000E94990361E089E00E946B0380912B02EC -:101EC00090912C0261E0892B01F185E00E94990339 -:101ED00061E085E00E946B038091290290912A02C3 -:101EE00061E0892BB9F086E00E94990361E086E009 -:101EF0000E946B0310CE8AE00E94990360E0CDCF70 -:101F000089E00E94990360E0D6CF85E00E949903A2 -:101F100060E0DFCF86E00E94990360E0E8CFEF92B7 -:101F2000FF920F931F93CF93DF93F82E192FE62E76 -:101F3000042F81E0860F880F0E94430483E00E94F3 -:101F40004304CF2DD12FEC0EFD2EF11CCE15DF0555 -:101F5000B9F007FF13C0FE0184910E944304182FBB -:101F600080E00E944304812321968111EFCFDF910D -:101F7000CF911F910F91FF90EF9008958881EDCF41 -:101F800081E0F5CFEEE1F5E01382128288EE93E076 -:101F9000A0E0B0E084839583A683B78385E291E0D7 -:101FA000918380838FEF9FEF95878487EEE6F5E03E -:101FB00087E391E0918380831282138214821582D9 -:101FC000E4E7F5E091838083128213821482158204 -:101FD0000895CF93DF93CDB7DEB7CE54D1090FB6B6 -:101FE000F894DEBF0FBECDBF789484B5826084BD07 -:101FF00084B5816084BD85B5826085BD85B581600D -:1020000085BD80916E00816080936E00109281008A -:102010008091810082608093810080918100816045 -:102020008093810080918000816080938000809106 -:1020300091008260809391008091910081608093F3 -:102040009100809190008160809390008091C10008 -:1020500084608093C1008091C10082608093C10040 -:102060008091C10081608093C1008091C300816034 -:102070008093C3008091C00082608093C0008091F3 -:10208000C20081608093C20080917A008460809356 -:102090007A0080917A00826080937A0080917A0041 -:1020A000816080937A0080917A00806880937A00C2 -:1020B00010921C0310923C0210923B028091D700B8 -:1020C00081608093D70080EA8093D80089B58061D1 -:1020D00089BD89B5826089BD09B400FEFDCF61E08C -:1020E00070E080E090E00E9411048091D8008F7C25 -:1020F00080618093D8008091E000807F8093E00031 -:102100008091E1008E7E8093E1008DE08093E2007B -:10211000559A209A60E088E00E94990360E08CE084 -:102120000E94990360E084E00E94990360E08BE0E4 -:102130000E94990360E082E10E94990360E083E1DC -:102140000E94990360E084E10E94990360E085E1C8 -:102150000E94990360E086E10E94990360E087E1B4 -:102160000E94990361E082E00E94990361E087E0A8 -:102170000E94990361E088E00E946B0361E08CE0BB -:102180000E946B0361E084E00E946B0361E08BE0DE -:102190000E946B0361E082E10E946B0361E083E1D6 -:1021A0000E946B0361E084E10E946B0361E085E1C2 -:1021B0000E946B0361E086E10E946B0361E087E1AE -:1021C0000E946B0388E00E9442032F969FAF8EAF60 -:1021D0002F978CE00E9442032D969FAF8EAF2D97D4 -:1021E00084E00E9442032B969FAF8EAF2B978BE02B -:1021F0000E94420329969FAF8EAF29972F968EADEE -:102200009FAD2F97019709F0CDC12F961FAE1EAE3F -:102210002F972D968EAD9FAD2D97019709F0C9C1CF -:102220002D961FAE1EAE2D972B968EAD9FAD2B9784 -:10223000019709F0C5C12B961FAE1EAE2B972996AC -:102240008EAD9FAD2997019709F0C1C129961FAEA8 -:102250001EAE299782E10E94CA0345970CF0BEC1C9 -:1022600081E090E027969FAF8EAF279783E10E9491 -:10227000CA0345970CF0B7C181E090E025969FAF67 -:102280008EAF259784E10E94CA0345970CF0B0C138 -:1022900081E090E023969FAF8EAF239785E10E9467 -:1022A000CA0345970CF0A9C181E090E021969FAF49 -:1022B0008EAF219786E10E94CA0345970CF0A2C118 -:1022C00081E090E09EAF8DAF87E10E94CA03459701 -:1022D0000CF09BC181E090E0909394028093930274 -:1022E0008DAD9EAD2196CEACDFAC21972396EEACA2 -:1022F000FFAC239725960EAD1FAD25972796AEAD63 -:10230000BFAD27972996EEADFFAD29972B966EAD01 -:102310007FAD2B972D964EAD5FAD2D972F962EADA1 -:102320003FAD2F97880F991F8C0D9D1D880F991F0A -:102330008E0D9F1D880F991F800F911F880F991F69 -:102340008A0F9B1F880F991F8E0F9F1F880F991F41 -:10235000860F971F880F991F840F951F880F991F4D -:10236000820F931F90939202809391028091910229 -:10237000909192028D3F914030F08DEF91E09093DB -:1023800092028093910278948FEF9FEF90932B05A8 -:1023900080932A0568EE73E080E090E00E941104CB -:1023A00010927F0210923E0210923D026EE578E09C -:1023B0008CE691E00E9414096FED76E082E791E0EF -:1023C0000E94140969E878E087E791E00E94140907 -:1023D00062E978E08CE791E00E9414096BE978E00B -:1023E00081E891E00E94140966EE76E087E891E0CA -:1023F0000E9414096DE377E08BE891E00E941409D4 -:1024000061EB76E08FE891E00E94140965E378E0E3 -:1024100085E991E00E941409109280028091930254 -:1024200090919402892B09F4FCC086E10E94CA03B2 -:1024300045970CF0EFC08AE991E00E947A0881E0AC -:1024400080938002EDE1F3E081E092E0DF019C0106 -:102450001D9221503040E1F719E1E12E11E0F12EFB -:1024600010E000E0D701DC90B2E0EB0EF11C61E07F -:102470008D2D0E94990360E08D2D0E946B03F80161 -:10248000EE0FFF1FEB57FD4F118210820F5F1F4FA2 -:102490000430110539F721968EAD9FAD2197239613 +:1001700068206368616E6E656C200A276D696E2069 +:100180003C312E2E3235353E272073657420747233 +:100190006573686F6C642076616C756520666F723C +:1001A0002063757272656E742072656C61790A27BE +:1001B0007072696E7427202D207072696E742061D0 +:1001C00073736F63696174696F6E207461626C65CB +:1001D0000A277361766527202D2073617665206379 +:1001E000757272656E7420636F6E66696720696EE2 +:1001F000204E5652414D0A276C6F616427202D20F6 +:100200006C6F616420636F6E6669672066726F6DE4 +:10021000204E5652414D0A276B696C6C27202D20C9 +:1002200074657374207761746368646F670A276309 +:100230006C65617227202D20636C6561722061738B +:10024000736F63696174696F6E207461626C65209D +:10025000696E2052414D0A00696E76616C696420B6 +:1002600072656C6179230043757272656E742072D9 +:10027000656C61793A2000536574206D696E207653 +:10028000616C756520004E6F2043757272656E74E7 +:100290002072656C617920646566696E65642C20E6 +:1002A000757365202772656C61792720636F6D6DAA +:1002B000616E6400696E76616C69642076616C754C +:1002C00065004D696E696D616C2076616C75657352 +:1002D00020666F722072656C6179733A0044656CB8 +:1002E0006179206D75737420626520696E20302EEF +:1002F0002E3134203130732072616E676500444DB9 +:1003000058204368616E6E656C206D757374206251 +:100310006520696E20312E2E3531322072616E6774 +:10032000650075736167653A202761646420234422 +:100330004D586368616E6E656C205B64656C6179B5 +:100340005F696E5F31307365635D004E6F2043758A +:100350007272656E742072656C617920646566697D +:100360006E65642C20757365202772656C61792732 +:1003700020636F6D6D616E640075736167653A200F +:100380002764656C2023444D586368616E6E656C0C +:1003900000444D58204368616E6E656C206D757326 +:1003A0007420626520696E20312E2E353132207224 +:1003B000616E6765004E6F2043757272656E7420C2 +:1003C00072656C617920646566696E65642C207560 +:1003D0007365202772656C61792720636F6D6D618D +:1003E0006E64003E3E2000080B000202020000097D +:1003F0000400000102020000052400100105240190 +:1004000001010424020605240600010705810310EA +:10041000004009040100020A000000070502024032 +:1004200000000705830240000004030904120100D4 +:1004300002EF020140412336800001010203014125 +:10044000726475696E6F204C4C430041726475692B +:100450006E6F204C656F6E6172646F004D696E69DE +:100460006D616C2076616C75657320666F722072A9 +:10047000656C6179733A00496E76616C69642063DA +:100480006F6D6D616E6400070605040100080A0BBC +:100490000C0D0900000000240027002A002D003068 +:1004A0000000000000250028002B002E0031000075 +:1004B0000000002300260029002C002F0004040463 +:1004C00004040304050202020204030202020206FB +:1004D00006060606060404020202040404080201D9 +:1004E000104080401020408040800802040180407D +:1004F0002010020110801020404020000000020067 +:10050000090F0000030401000C00000000000000BF +:10051000000000000000000000009B1011241FBE1E +:10052000CFEFDAE0DEBFCDBF12E0A0E0B1E0E0E95E +:10053000F0E302C005900D92AE33B107D9F725E084 +:10054000AEE3B2E001C01D92AC39B207E1F712E0B0 +:10055000CEE8D2E004C02197FE010E943018CD38C9 +:10056000D107C9F70E94C2100C9446180C940000E1 +:10057000FC0180913803882311F13FB7F89482E0A1 +:100580008093E9002091F200822F90E0181619065E +:1005900014F481E090E0882339F0289844E64093F1 +:1005A00037034091F1004083222339F02091F2007B +:1005B000211103C02BE62093E8003FBF08958FEF81 +:1005C0009FEF08952FB7F89483E08093E90090910E +:1005D000E800892F807295FF04C09091F20080E4BA +:1005E000891B2FBF08952091ED02260F3327331F5B +:1005F00021323105ECF420911103FC0190E080E000 +:10060000243069F082E00895A091ED022191AC01BF +:1006100043535D4FA40FB52FB11D2C930196861740 +:1006200098F38091ED02680F6093ED0280E00895E9 +:1006300081E0089508958FEF9FEF08958FEF9FEF6A +:1006400008958091C60290E0919581959109089551 +:10065000CF93DF93CB01EA01642F0E94F302CE0116 +:10066000DF91CF910895CF93DF931F92CDB7DEB77F +:10067000698361E0CE0101960E94F30281E090E07F +:100680000F90DF91CF9108958091BE0281110DC02E +:1006900082E08093BA0284E08093BB021092BD0294 +:1006A0001092BC0281E08093BE028AEB92E0089532 +:1006B00081508F3008F047C0E82FF0E0EE59FC4F32 +:1006C0000C9430187F038303710377037B03A30328 +:1006D000A303A30386038C03900394039A03A30349 +:1006E0009E03809180008F77809380000895809191 +:1006F00080008F7DF9CF80918000877FF5CF84B512 +:100700008F7784BD089584B58F7DFBCF8091900055 +:100710008F77809390000895809190008F7DF9CF1E +:1007200080919000877FF5CF8091C0008F77809374 +:10073000C00008958091C0008F7DF9CF8091C200E4 +:10074000877F8093C2000895CF93DF93282F30E0F6 +:10075000F901E550FB4F8491F901E452FB4FD4912C +:10076000F901E354FB4FC491CC23A1F081110E9405 +:100770005803EC2FF0E0EE0FFF1FE155FB4FA59162 +:10078000B491EC91ED2381E090E009F480E0DF91F9 +:10079000CF91089580E090E0FACF1F93CF93DF933D +:1007A000282F30E0F901E550FB4F8491F901E45224 +:1007B000FB4FD491F901E354FB4FC491CC23A9F032 +:1007C000162F81110E945803EC2FF0E0EE0FFF1F4F +:1007D000EF55FB4FA591B4918FB7F894EC9111119F +:1007E00008C0D095DE23DC938FBFDF91CF911F919E +:1007F0000895DE2BF8CFCF93DF9390E0FC01E45215 +:10080000FB4F249183549B4FFC0184918823D1F0AA +:1008100090E0880F991FFC01ED56FB4FA591B49114 +:10082000FC01EF55FB4FC591D49161110EC09FB7EC +:10083000F8948C91E22FE0958E238C932881E2230B +:10084000E8839FBFDF91CF9108958FB7F894EC9123 +:10085000E22BEC938FBFF6CF8251E82FF0E0E957FF +:10086000FB4FE49190917B008E2F880F880F807250 +:100870009F7D892B80937B00E770E064E0937C0090 +:1008800080917A00806480937A0080917A0086FD5E +:10089000FCCF809178009091790008953FB7F8944B +:1008A0008091B6029091B702A091B802B091B902BE +:1008B00026B5A89B05C02F3F19F00196A11DB11DBB +:1008C0003FBFBA2FA92F982F8827BC01CD01620FF7 +:1008D000711D811D911D42E0660F771F881F991FB2 +:1008E0004A95D1F708958F929F92AF92BF92CF927F +:1008F000DF92EF92FF924B015C010E944E046B016C +:100900007C010E944E046C197D098E099F09683E86 +:10091000734081059105A8F321E0821A9108A1088E +:10092000B10888EEC80E83E0D81EE11CF11C8114CA +:100930009104A104B10429F7FF90EF90DF90CF90CC +:10094000BF90AF909F908F90089540914F0250912B +:10095000500220914D0230914E0242175307B4F4D9 +:100960009091E8009570E1F39091E80092FD19C034 +:100970008093F10080914F029091500201968F7305 +:100980009927892B19F48EEF8093E80080914F020C +:100990009091500201969093500280934F0281E013 +:1009A000089580E00895DF92EF92FF920F931F93D6 +:1009B000CF93DF93D82E8A01EB017B01E40EF51E65 +:1009C000CE15DF0559F0D7FE12C0FE0184910E94BA +:1009D000A50421968111F4CF0FEF1FEFC801DF911D +:1009E000CF911F910F91FF90EF90DF900895888134 +:1009F000EECF0F931F93CF93DF931F92CDB7DEB748 +:100A000082E0898342E450E067EE73E080E80E9470 +:100A1000D3040E944403DC0112960D911C91011530 +:100A2000110589F0D801ED91FC910280F381E02D50 +:100A3000BE016F5F7F4FC801099597FD04C0F801A3 +:100A400000851185ECCF89810F90DF91CF911F91A7 +:100A50000F910895615030F02091F100FC01208346 +:100A60000196F8CF289884E6809337030895DC0137 +:100A7000ED91FC910190F081E02D099490E080E0EF +:100A800008958F929F92AF92BF92CF92DF92EF9292 +:100A9000FF920F931F93CF93DF936C017B018A0129 +:100AA00080910B01882309F45CC08091380388236E +:100AB00009F457C08091530280FF05C08091E00087 +:100AC00082608093E000E801B12C8AEFA82E93E0C9 +:100AD000892E2AE3922E209711F4BB20D9F10E948F +:100AE000E20281110AC0AA94AA20D9F161E070E063 +:100AF00080E090E00E947304EECF8C171D0611F089 +:100B00000CF08C2F9FB7F8948092E9002091E800B8 +:100B100025FD02C09FBFDFCF282F30E0C21BD30BC3 +:100B2000F701815020F041914093F100FACFE20E9D +:100B3000F31EBB2021F09092E800B12CEBCF809106 +:100B4000E80085FDE7CF9092E800BB24B39420979E +:100B500009F3F3CF5D9884E68093520210161106D4 +:100B60003CF081E090E0F6019383828310E000E0A6 +:100B7000C801DF91CF911F910F91FF90EF90DF900F +:100B8000CF90BF90AF909F908F900895CF93DF93B9 +:100B90001F92CDB7DEB76983DC01ED91FC91028035 +:100BA000F381E02D41E050E0BE016F5F7F4F09957A +:100BB0000F90DF91CF9108950F931F93CF93DF9301 +:100BC0008C01D0E0C0E0F801EC0FFD1F64916623BA +:100BD00041F08AE395E00E94C605892B11F0219629 +:100BE000F2CFCE01DF91CF911F910F91089583E055 +:100BF0008093E9008091F200882319F08AE38093C2 +:100C0000E80008950E94E20290E00895CF93DF93F8 +:100C10001F92CDB7DEB7FC018485958597FD08C08E +:100C20002FEF3FEF358724870F90DF91CF91089505 +:100C3000CE0101960E94B802019719F4898190E0D3 +:100C4000F3CF8FEF9FEFF0CF0F931F93CF93DF93EF +:100C50001F92CDB7DEB78C01FC018485958597FF87 +:100C60000BC0CE0101960E94B802019771F48981F0 +:100C700090E0F80195878487F801848595850F9029 +:100C8000DF91CF911F910F9108958FEF9FEFF1CFDB +:100C9000FC018485958597FD0BC09FB7F89482E091 +:100CA0008093E9008091F2009FBF90E00196089543 +:100CB0009FB7F89482E08093E9008091F2009FBF93 +:100CC00090E008950F931F93CF93DF9309E313E010 +:100CD000D0E0C0E0CE010E94F817F80181938F01A7 +:100CE0002196C130F2E0DF07A9F789E393E0DF91B5 +:100CF000CF911F910F910895FF920F931F93CF9360 +:100D0000DF9309E313E0D0E0C0E0F801F1908F0138 +:100D1000CE010E94F817F81621F06F2DCE010E9427 +:100D200000182196C130F2E0DF0779F789E393E0FC +:100D3000DF91CF911F910F91FF9008951F93CF9353 +:100D4000DF9385ED8093BC008091C9029091CA0227 +:100D5000A091CB02B091CC020796A11DB11D23E05A +:100D6000B695A795979587952A95D1F72091BC00C0 +:100D700024FD03C01092110352C04091C90250914A +:100D8000CA026091CB027091CC02452B462B472BB7 +:100D900069F30097A105B10541F025E32A95F1F724 +:100DA00000000197A109B109E1CF8091C802C1E01B +:100DB000C093C702882399F1D091B8001091BA006E +:100DC0008091BC008A7B8093BC0060E082E00E943E +:100DD000CD0360E083E00E94CD0310921103C09325 +:100DE00013031092120361E082E00E94CD0361E0E0 +:100DF00083E00E94CD038091B9008E7F8093B9007B +:100E00008091B9008D7F8093B90088E48093B80009 +:100E100085E48093BC001093BA00D093B800DF91B2 +:100E2000CF911F910895E9E3F3E081E092E0DF01C3 +:100E30009C011D9221503040E1F781E090E008953F +:100E4000FB0101900020E9F73197AF01461B570BDA +:100E5000DC01ED91FC910280F381E02D099469E3BE +:100E600071E08AE395E00E94200783EE93E00C9402 +:100E7000DC05CF93DF930E94DC05EC0169E371E0B0 +:100E80008AE395E00E9420078C0F9D1FDF91CF9190 +:100E900008958CEA90E00E94390781E090E008957F +:100EA000CF92DF92EF92FF921F93CF93DF936C016B +:100EB0007B01109140028BE493E0112391F082E2D8 +:100EC00093E022E0C216D10464F0FB018281938199 +:100ED0000E94A617EC0101978115924070F08EEFE9 +:100EE00092E00E94390790E080E0DF91CF911F915E +:100EF000FF90EF90DF90CF90089522E0C216D104CA +:100F000059F0F701848195810E94A6179C014097B2 +:100F10002CF08DED92E0E5CF2FE030E0C75CDC4FA8 +:100F200098819F70612F6150770BAB0161E070E099 +:100F300001C0660F4A95EAF7962B84E0220F331F13 +:100F40008A95E1F7922B988381E090E0CECFCF9302 +:100F5000DF93C0914002C11109C085EB93E00E946C +:100F6000390790E080E0DF91CF91089502971CF45B +:100F700089E793E0F4CFFB01828193810E94A61759 +:100F80009C01215031092115324018F081E993E08C +:100F9000E6CFFC01E75CFC4FC150DD0B21E030E007 +:100FA00001C0220FCA95EAF720958081282320836B +:100FB00081E090E0D8CF8F929F92AF92BF92EF9254 +:100FC000FF920F931F93CF93DF93CDB7DEB7A19717 +:100FD0000FB6F894DEBF0FBECDBF7C01FA01CB0186 +:100FE00019A2223008F42AE08E010F5D1F4F822ED5 +:100FF000912CB12CA12CBF01A50194010E940E18C7 +:10100000F901CA016A300CF5605DD8016E938D015B +:10101000232B242B252B79F790E080E0109721F0EB +:10102000BD01C7010E942007A1960FB6F894DEBF4C +:101030000FBECDBFDF91CF911F910F91FF90EF9029 +:10104000BF90AF909F908F900895695CDECFCF9254 +:10105000DF92EF92FF92CF93DF93AB01BC0177FF5A +:101060001DC06A017C016DE28AE395E00E943705AC +:10107000EC0144275527BA014C195D096E097F0917 +:101080002AE08AE395E00E94DB078C0F9D1FDF9129 +:10109000CF91FF90EF90DF90CF9008952AE08AE300 +:1010A00095E0DF91CF91FF90EF90DF90CF900C947F +:1010B000DB078F929F92AF92BF92CF92DF92EF9217 +:1010C000FF920F931F93CF93DF937C018B016C01F1 +:1010D00082E0C80ED11C4701E5E08E0E911CD0E0E5 +:1010E000C0E0F60141916F0150E070E060E02AE05D +:1010F000C8010E94DB075C016EE2C8010E9437054F +:101100008A0D9B1DC80FD91FC814D90451F7F701C8 +:10111000458150E070E060E02AE0C8010E94DB07F2 +:101120008C0F9D1FDF91CF911F910F91FF90EF903A +:10113000DF90CF90BF90AF909F908F900895CF9306 +:10114000DF93BC018AE395E00E942007EC0169E38C +:1011500071E08AE395E00E9420078C0F9D1FDF91CC +:10116000CF9108958CE391E00E949F080E947C0635 +:1011700081E090E008958FE491E00E949F080E9432 +:10118000620681E090E00895CF93DF93482F50E00E +:1011900070E060E02AE08AE395E00E94DB07EC0162 +:1011A00069E371E08AE395E00E9420078C0F9D1FA0 +:1011B000DF91CF910895029739F4FB0182819381E9 +:1011C0000E94A61780934002809140028150843093 +:1011D00038F088E592E00E94390790E080E00895B9 +:1011E00087E692E00E94DC05809140020E94C408DC +:1011F00081E090E00895CF93C1E068EE73E080E075 +:1012000090E00E9473048C2F0E94C408CF5FC43109 +:10121000A1F781E090E0CF9108954F925F926F9295 +:101220007F92AF92BF92CF92DF92EF92FF920F9395 +:101230001F93CF93DF93C12CD12C7601C39401E08F +:1012400010E063E671E08AE395E00E942007C701A1 +:10125000B6010E94270869E371E08AE395E00E94E5 +:101260002007C6010197580102C0AA0CBB1C8A9531 +:10127000E2F7C9E3D3E0412C512C32014394898138 +:1012800090E08A219B21892BD9F0C301B2010E94F1 +:10129000270868E671E08AE395E00E9420076981EB +:1012A00070E084E0759567958A95E1F7072E000C4C +:1012B000880B990B0E9427088AE691E00E949F08FC +:1012C00021968FEF481A580A680A780A81E0481672 +:1012D00082E058066104710491F68FEFC81AD80AAB +:1012E000E80AF80A85E0C816D104E104F10409F01F +:1012F000A8CF81E090E0DF91CF911F910F91FF90F7 +:10130000EF90DF90CF90BF90AF907F906F905F9005 +:101310004F9008950F931F93CF9382309105A4F4BB +:1013200082EC92E00E94390710E000E0F801E95AEF +:10133000FD4F80810E94C4080F5F1F4F04301105CC +:10134000A9F790E080E03FC0C1E0029751F4FB01B3 +:10135000828193810E94A617C82F84EB92E0CC2350 +:1013600031F000914002011105C086E892E00E9430 +:101370003907E7CF10E0F801EA5AFD4FC0830F5F4D +:101380001D4FC8010E94F817C81721F06C2FC80123 +:101390000E94001887E792E00E94DC054C2F50E085 +:1013A00070E060E02AE08AE395E00E94DB076CE6EB +:1013B00071E08AE395E00E942007809140020E943C +:1013C000C40881E090E0CF911F910F910895CF92D2 +:1013D000DF92EF92FF920F931F93CF93DF936C01F5 +:1013E0008B0186E090E00E948116EC0190935E02F2 +:1013F00080935D02F60101900020E9F7CF018C197E +:101400009D090E9481167C01B6010E943F18F601D9 +:1014100001900020E9F73197EC19FD09EE0DFF1D51 +:101420001082F982E8821B830A8380915502909191 +:1014300056029D838C83D0935602C0935502DF9150 +:10144000CF911F910F91FF90EF90DF90CF90089573 +:101450001F920F920FB60F9211242F933F934F9329 +:101460005F936F937F938F939F93AF93BF93EF930C +:10147000FF938091B900887F803609F44AC0F0F567 +:10148000883209F4A5C018F5803109F499C0B8F480 +:10149000882309F4F5C0883009F492C0FF91EF91D8 +:1014A000BF91AF919F918F917F916F915F914F917C +:1014B0003F912F910F900FBE0F901F90189588317C +:1014C00009F486C0803251F78093100314C0803431 +:1014D00009F49BC040F48033B9F38833F9F6809364 +:1014E000100385ECAEC0803509F483C0883509F45B +:1014F00094C0883499F60E949E06D0CF883909F4AA +:101500008AC038F5883729F050F4883611F08037D2 +:1015100029F683E08093110310920F0355C0883899 +:1015200009F479C0803919F0803809F0B7CF80917B +:101530000F03803208F06FC0E0910F0381E08E0F3F +:1015400080930F038091BB00F0E0E151FD4F808359 +:101550003BC0803B39F0D0F4803A09F477C0883A38 +:1015600009F09CCF84E0809311031092EE02109258 +:10157000ED02F0E0E0E009958091ED0281110FC0ED +:1015800081E08093ED021092CD0209C0803C09F405 +:10159000A8CF883C09F4A5CF883B09F07FCFE09124 +:1015A000EE0281E08E0F8093EE02F0E0E353FD4FF8 +:1015B00080818093BB009091EE028091ED0229C062 +:1015C000809136038093BB0085EC8093BC0066CF8E +:1015D0009091350380913403981758F5E0913503C5 +:1015E00081E08E0F80933503F0E0EC5EFC4F80814C +:1015F000E9CFE091350381E08E0F80933503809130 +:10160000BB00F0E0EC5EFC4F80839091350380914D +:1016100034039817C8F285E8D8CFE091350381E00C +:101620008E0F809335038091BB00F0E0EC5EFC4FA1 +:1016300080838091130381115ECF81E08093120338 +:1016400084EA8093BC001092110328CF85EC80932C +:10165000BC001092110380910F03803230F4E091AE +:101660000F03F0E0E151FD4F108260910F0370E035 +:101670008FEE92E0F0E0E0E0099510920F030ECFBC +:101680001092100338CF1F920F920FB60F921124B1 +:101690002F933F938F939F93AF93BF938091B20209 +:1016A0009091B302A091B402B091B5023091B10211 +:1016B00023E0230F2D3758F50196A11DB11D20936E +:1016C000B1028093B2029093B302A093B402B0939C +:1016D000B5028091B6029091B702A091B802B09184 +:1016E000B9020196A11DB11D8093B6029093B70275 +:1016F000A093B802B093B902BF91AF919F918F911F +:101700003F912F910F900FBE0F901F90189526E8D4 +:10171000230F0296A11DB11DD2CF1F920F920FB6BB +:101720000F9211248F939F938091E1009091E1009B +:10173000937F9093E10083FF0FC01092E90091E046 +:101740009093EB001092EC0092E39093ED001092D6 +:10175000380398E09093F00082FF22C093E09093CA +:10176000E9009091F200992319F09AE39093E80030 +:1017700090915202992341F090915202915090938E +:101780005202911101C05D9A90913703992341F063 +:1017900090913703915090933703911101C0289A8B +:1017A00084FF18C08091E2008E7E81608093E20009 +:1017B0008091E1008F7E8093E100809153028E7EC4 +:1017C0008061809353029F918F910F900FBE0F9075 +:1017D0001F90189580FFF7CF8091E2008E7E806188 +:1017E0008093E2008091E1008E7E8093E100809101 +:1017F00053028E7E8160E5CF1F920F920FB60F923B +:101800001124CF92DF92EF92FF920F931F932F93A9 +:101810003F934F935F936F937F938F939F93AF9378 +:10182000BF93EF93FF93CF93DF93CDB7DEB76C9762 +:10183000DEBFCDBF1092E9008091E80083FF25C094 +:1018400068E0CE0145960E942A0582EF8093E80069 +:101850008D8987FF39C09091E80090FFFCCF982FC9 +:10186000907609F034C19E894F89588D2F89F88C64 +:10187000911131C0803861F5809154028093F1005C +:101880001092F1008EEF8093E8006C960FB6F894FA +:10189000DEBF0FBECDBFDF91CF91FF91EF91BF9122 +:1018A000AF919F918F917F916F915F914F913F91F8 +:1018B0002F911F910F91FF90EF90DF90CF900F909D +:1018C0000FBE0F901F9018959EEF9093E800C7CF22 +:1018D0001092F100D5CF913059F48111D3CF41301E +:1018E000510581F6809154028D7F80935402CACFB6 +:1018F000933049F48111C6CF4130510519F68091DA +:1019000054028260F2CF953041F48091E80080FF6C +:10191000FCCF20682093E300B5CF963009F0A9C032 +:101920000B8D1C8D22E01092E90010925002109253 +:101930004F02F2122EC010924E0210924D020E94DF +:10194000F9041F8299E09983FA8291E09E8390EADC +:1019500098879AEF998720914F0230915002275F24 +:101960003F4F3C832B838D831092E90010925002ED +:1019700010924F0210934E0200934D0249E050E046 +:10198000BE016F5F7F4F80E00E94D3040E94F90484 +:1019900079CF10934E0200934D020E944403DC0164 +:1019A00012960D911C910115110509F451C1D80130 +:1019B000ED91FC910480F581E02DBE016B5E7F4FBF +:1019C000C8010995009709F03EC1F801008511850D +:1019D000EACFF3E0FF120EC08F89882309F440C0DC +:1019E000823061F440E860E18BE494E00E9468108A +:1019F000811148CF81E28093EB0047CF813029F4F9 +:101A000040E86BE08FE394E0F1CF833099F70E94D8 +:101A10004403DC011296ED90FC908E010F5F1F4F86 +:101A20006801E114F10479F0D701ED91FC91068091 +:101A3000F781E02DB801C7010995080F111DF701C5 +:101A4000E084F184EECFD8011C92F60101900020D1 +:101A5000E9F73197BF016C197D0940E0C601C6CF97 +:101A600069E274E0FB01449150E080E80E94D304F5 +:101A700009CF973009F4BECF983021F481E08093EC +:101A8000F10000CF993009F0FDCE837009F0B2CF9C +:101A9000E3E1F1E081E031E096E32191222371F06E +:101AA0008093E9003093EB00DF0111972C91209394 +:101AB000EC009093ED008F5F873079F78EE780938D +:101AC000EA001092EA008F8980933803DBCE8B8D79 +:101AD0009C8D1092E9001092500210924F02909348 +:101AE0004E0280934D02898D811192C08E899D890D +:101AF000913A49F4813209F07DCF47E050E064E04B +:101B000071E080E0B3CF913209F074CF833269F491 +:101B10008F89988DB0E0A0E080930001909301013F +:101B2000A0930201B0930301ADCE803269F480919D +:101B3000E80082FFFCCF67E084E091E00E942A0584 +:101B40008BEF8093E8009ECE823209F09BCE8F8986 +:101B500080930B01EEEFFFE7859194918B3F9C4DB5 +:101B600051F1E0E0F8E08091040190910501A0912D +:101B70000601B0910701803B9440A105B105F1F445 +:101B800080910B0180FD1AC0EE3F8AE0F80789F5CD +:101B900087E797E79183808380916000809351026B +:101BA00088E19BE00FB6F894A895809360000FBE83 +:101BB0009093600067CEEEEFFAE0D5CF80819181FF +:101BC0008737974709F05ECEA895809160008861BD +:101BD000809360008091510280936000EE3F2AE084 +:101BE000F20789F08091FE0A9091FF0A9183808329 +:101BF00049CE808191818737980751F29093FF0AEF +:101C00008093FE0AC5CF1092FF0A1092FE0A3ACEC8 +:101C10000E944403DC0112960D911C9101151105DF +:101C200009F4E8CED801ED91FC910190F081E02D0E +:101C3000BE016B5E7F4FC8010995811123CEF8016B +:101C400000851185EBCF181619060CF41BCED2CEE9 +:101C5000F1E0FF12BECE6DE274E004CF1F920F924E +:101C60000FB60F921124AF92BF92CF92DF92EF92F4 +:101C7000FF920F931F932F933F934F935F936F9315 +:101C80007F938F939F93AF93BF93EF93FF93CF93E4 +:101C9000DF9300D0CDB7DEB72091C8008091CE0091 +:101CA00090E09A83898323FF27C010924C02109200 +:101CB0004B028091C800877F8093C80000000F907E +:101CC0000F90DF91CF91FF91EF91BF91AF919F91D5 +:101CD0008F917F916F915F914F913F912F911F91C4 +:101CE0000F91FF90EF90DF90CF90BF90AF900F904B +:101CF0000FBE0F901F90189524FF0EC010924A023D +:101D00001092490281E090E090934C0280934B0244 +:101D10008091C8008F7ED0CF80914B0290914C0271 +:101D20008230910509F41AC1C8F4019739F6898106 +:101D30009A81892B09F58091AF029091B002892B8D +:101D400001F184E090E090934C0280934B0281E09B +:101D500090E090934A0280934902B0CF833091057E +:101D600009F410C1049709F0A9CF8091490290911C +:101D70004A028130924088F010924C0210924B023D +:101D80009DCF8091AD029091AE02019719F483E04E +:101D900090E0D9CF82E090E0D6CF61E087E00E946A +:101DA000CD0380919C02882309F469C089819A81BE +:101DB000892B09F45EC082E10E942C0410E1459752 +:101DC0000CF010E083E10E942C0445970CF41062A3 +:101DD00084E10E942C0445970CF4106485E10E9474 +:101DE0002C0445970CF41068E0914902F0914A02E6 +:101DF000E75CFC4F80818F70808388E00E94A403A1 +:101E0000892B51F4E0914902F0914A02E75CFC4FC2 +:101E100080818160812B80838CE00E94A403892BC8 +:101E200051F4E0914902F0914A02E75CFC4F808155 +:101E30008260812B808384E00E94A403892B51F46B +:101E4000E0914902F0914A02E75CFC4F8081846096 +:101E5000812B80838BE00E94A403892B51F4E091B5 +:101E60004902F0914A02E75CFC4F80818860182BA0 +:101E700010838091490290914A0201966ACFF12C19 +:101E8000E12C34E6B32EE0914902F0914A02E75C7E +:101E9000FC4F808190E00E2C02C0959587950A94A6 +:101EA000E2F780FF41C0E0914902F0914A02E75C0D +:101EB000FC4F008110E024E0159507952A95E1F785 +:101EC0000F30110521F400915B0210915C02F701C3 +:101ED000E95AFD4F208189819A812817190609F056 +:101EE00064F56701CC0CDD1CF601E75EFE4FA080B7 +:101EF00061E08A2D0E94FB0361E08A2D0E94CD03E0 +:101F000081E090E00115110529F0B09EC001B19E5D +:101F1000900D1124F601EF55FD4F208131812817D6 +:101F2000390710F4918380838FEFE81AF80A24E0D0 +:101F3000E216F10409F0A7CF9CCF012BA9F7F70116 +:101F4000EE0FFF1FE75EFE4F108161E0812F0E94C0 +:101F5000FB0360E0812F0E94CD03E6CF8091AD02AC +:101F60009091AE022091490230914A020197821766 +:101F7000930709F07ECF83E090E090934C0280932A +:101F80004B0277CF61E087E00E94CD0320914902A8 +:101F900030914A028091AD029091AE022817390724 +:101FA00039F489819A81909348028093470261CFE6 +:101FB0008091AD029091AE022091490230914A0287 +:101FC00001968217930739F489819A81909346028A +:101FD000809345024ECF8091AD029091AE02209148 +:101FE000490230914A0202968217930739F4898197 +:101FF0009A8190934402809343023BCF8091AD023B +:102000009091AE022091490230914A0203968217C4 +:10201000930709F053CE89819A819093420280936D +:10202000410281E090E090934A028093490210922D +:102030004C0210924B02809147029091480261E05D +:10204000892B91F18AE00E94FB0361E08AE00E9403 +:10205000CD03809145029091460261E0892B49F1C0 +:1020600089E00E94FB0361E089E00E94CD0380913A +:1020700043029091440261E0892B01F185E00E94C6 +:10208000FB0361E085E00E94CD03809141029091C5 +:10209000420261E0892BB9F086E00E94FB0361E017 +:1020A00086E00E94CD030ACE8AE00E94FB0360E036 +:1020B000CDCF89E00E94FB0360E0D6CF85E00E948F +:1020C000FB0360E0DFCF86E00E94FB0360E0E8CF27 +:1020D000EF92FF920F931F93CF93DF93F82E192F58 +:1020E000E62E042F81E0860F880F0E94A50483E06E +:1020F0000E94A504CF2DD12FEC0EFD2EF11CCE1584 +:10210000DF05B9F007FF13C0FE0184910E94A5040A +:10211000182F80E00E94A504812321968111EFCF22 +:10212000DF91CF911F910F91FF90EF9008958881DB +:10213000EDCF81E0F5CFEAE3F5E01382128288EE7D +:1021400093E0A0E0B0E084839583A683B78385E223 +:1021500091E0918380838FEF9FEF95878487EAE8F2 +:10216000F5E087E391E091838083128213821482E9 +:102170001582E0E9F5E09183808312821382148254 +:1021800015820895CF93DF93CDB7DEB7CE54D10932 +:102190000FB6F894DEBF0FBECDBF789484B58260D1 +:1021A00084BD84B5816084BD85B5826085BD85B5FB +:1021B000816085BD80916E00816080936E00109279 +:1021C00081008091810082608093810080918100F4 +:1021D0008160809381008091800081608093800085 +:1021E0008091910082608093910080919100816044 +:1021F0008093910080919000816080939000809105 +:10220000C10084608093C1008091C100826080938E +:10221000C1008091C10081608093C1008091C300A2 +:1022200081608093C3008091C00082608093C00071 +:102230008091C20081608093C20080917A008460A6 +:1022400080937A0080917A00826080937A008091F6 +:102250007A00816080937A0080917A008068809310 +:102260007A00109238031092540210925302809117 +:10227000D70081608093D70080EA8093D80089B529 +:10228000806189BD89B5826089BD09B400FEFDCF3A +:1022900061E070E080E090E00E9473048091D800DB +:1022A0008F7C80618093D8008091E000807F809354 +:1022B000E0008091E1008E7E8093E1008DE08093CC +:1022C000E200559A209A60E088E00E94FB0360E0FB +:1022D0008CE00E94FB0360E084E00E94FB0360E06E +:1022E0008BE00E94FB0360E082E10E94FB0360E060 +:1022F00083E10E94FB0360E084E10E94FB0360E055 +:1023000085E10E94FB0360E086E10E94FB0360E040 +:1023100087E10E94FB0361E082E00E94FB0361E031 +:1023200087E00E94FB0361E088E00E94CD0361E04A +:102330008CE00E94CD0361E084E00E94CD0361E067 +:102340008BE00E94CD0361E082E10E94CD0361E059 +:1023500083E10E94CD0361E084E10E94CD0361E04E +:1023600085E10E94CD0361E086E10E94CD0361E03A +:1023700087E10E94CD0388E00E94A4032F969FAFBF +:102380008EAF2F978CE00E94A4032D969FAF8EAF47 +:102390002D9784E00E94A4032B969FAF8EAF2B97BE +:1023A0008BE00E94A40329969FAF8EAF29972F96AA +:1023B0008EAD9FAD2F97019709F002C22F961FAEE9 +:1023C0001EAE2F972D968EAD9FAD2D97019709F0DC +:1023D000FEC12D961FAE1EAE2D972B968EAD9FADD6 +:1023E0002B97019709F0FAC12B961FAE1EAE2B97C3 +:1023F00029968EAD9FAD2997019709F0F6C12996D0 +:102400001FAE1EAE299782E10E942C0445970CF066 +:10241000F3C181E090E027969FAF8EAF279783E1CD +:102420000E942C0445970CF0ECC181E090E02596C9 +:102430009FAF8EAF259784E10E942C0445970CF046 +:10244000E5C181E090E023969FAF8EAF239785E1B1 +:102450000E942C0445970CF0DEC181E090E02196AB +:102460009FAF8EAF219786E10E942C0445970CF018 +:10247000D7C181E090E09EAF8DAF87E10E942C0430 +:1024800045970CF0D0C181E090E09093B00280932A +:10249000AF028DAD9EAD2196CEACDFAC21972396D9 :1024A000EEACFFAC239725960EAD1FAD2597279672 :1024B000AEADBFAD27972996EEADFFAD29972B9610 :1024C0006EAD7FAD2B972D964EAD5FAD2D972F96B0 -:1024D0002EAD3FAD2F97880F991F8E0D9F1D880F32 -:1024E000991F800F911F880F991F8A0F9B1F880FBC -:1024F000991F8E0F9F1F880F991F860F971F880F98 -:10250000991F840F951F880F991F820F931F909317 -:10251000400280933F0260E082E00E946B03809162 -:10252000910290919202892B31F4809193029091C3 -:102530009402892B79F083E08093CC001092CD0037 -:102540001092CE001092C80080E98093C9008EE0FE -:102550008093CA0000E010E0FF24F3948EE195E040 -:102560000E94E605892B09F4E5C08EE195E00E9402 -:10257000A405E82EEAE08E1709F467C0FDE08F1786 -:1025800009F463C028E08213C2C068E08EE195E0E0 -:102590000E94D50480917F02882301F381508093AB -:1025A0007F02DCCF81E090E02F969FAF8EAF2F9718 -:1025B00030CE81E090E02D969FAF8EAF2D9734CE38 -:1025C00081E090E02B969FAF8EAF2B9738CE81E0C5 -:1025D00090E029969FAF8EAF29973CCE27961FAEED -:1025E0001EAE279743CE25961FAE1EAE25974ACE28 -:1025F00023961FAE1EAE239751CE21961FAE1EAE60 -:10260000219758CE1EAE1DAE5FCE1092940210924E -:10261000930266CE8FE491E00E947A080E94000641 -:102620001BCF62EC71E08EE195E00E94BE06409106 -:1026300091025091920270E060E02AE08EE195E014 -:102640000E9471070E94CD0666CFE0917F02F0E004 -:10265000ED5BFD4F108269E371E08EE195E00E9431 -:10266000BE0680914302882309F445C060ED71E005 -:1026700083E492E00E94B6169A8389835E0133E078 -:10268000A30EB11CCC24C394D12CEC2C9D2C60ED5A -:1026900071E090E080E00E94B616D5018D939D9385 -:1026A0005D01BEE1CB16D10429F0EFEFCE1ADE0AB0 -:1026B000892B59F7C0904102D0904202A980BA807C -:1026C000C114D104F9F0D6016D917C91C5010E942D -:1026D0002817892B99F4D6011296ED91FC91BE0131 -:1026E0006F5F7F4F8E2D992D09950E94CD068FEA41 -:1026F00093E00E947A0510927F0230CFF601C480E9 -:10270000D580DECF83EB93E00E94D306EECF682F17 -:102710008EE195E00E94D504E0917F02EB3308F052 -:102720001DCF81E08E0F80937F02F0E0ED5BFD4FC7 -:10273000E08214CF8091930290919402892B09F446 -:1027400080C08FB7F8948090960290909702A090E6 -:102750009802B09099028FBF40918D0250918E02E5 -:1027600060918F02709190022A013B01F0E14F0EBF -:10277000F7E25F1E611C711C81E090E0A0E0B0E018 -:102780002FEF421652066206720618F480E090E0BF -:10279000DC01840D951DA61DB71D88159905AA0598 -:1027A000BB0508F0F9C084169506A606B70608F022 -:1027B000ECC062ED71E08EE195E00E94BE06D12C86 -:1027C000C12CF601EE0FFF1FEB57FD4F40815181E9 -:1027D00070E060E02AE08EE195E00E94710760ED14 -:1027E00071E08EE195E00E94BE063FEFC31AD30A66 -:1027F00084E0C816D10429F784ED91E00E947A089C -:102800002FB7F8948091960290919702A091980228 -:10281000B09199022FBF80938D0290938E02A09366 -:102820008F02B0939002C3C0875E9E4FDC01EC9094 -:1028300061E08E2D0E94990360E08E2D0E946B0353 -:1028400033C18091910290919202892B09F009C1C4 -:102850008AE192E00E947A0861E08AE00E9499038E -:1028600061E08AE00E946B0361E089E00E949903C5 -:1028700060E089E00E946B0361E085E00E949903BB -:1028800060E085E00E946B0361E086E00E949903AE -:1028900060E086E00E946B0368EE73E080E090E009 -:1028A0000E94110461E08AE00E94990360E08AE0DE -:1028B0000E946B0361E089E00E94990361E089E076 -:1028C0000E946B0361E085E00E94990360E085E06F -:1028D0000E946B0361E086E00E94990360E086E05D -:1028E0000E946B0368EE73E080E090E00E941104A8 -:1028F00061E08AE00E94990360E08AE00E946B0335 -:1029000061E089E00E94990360E089E00E946B0326 -:1029100061E085E00E94990361E085E00E946B031D -:1029200061E086E00E94990360E086E00E946B030C -:1029300068EE73E080E090E00E94110461E08AE0BC -:102940000E94990360E08AE00E946B0361E089E0E5 -:102950000E94990360E089E00E946B0361E085E0DA -:102960000E94990360E085E00E946B0361E086E0CD -:102970000E94990361E086E00E946B0368EE73E0B9 -:1029800080E090E00E94110463CF481759076A075E -:102990007B0708F40ECF0BC0481759076A077B075F -:1029A00030F484169506A606B70608F402CF8FB752 -:1029B000F8948090960290909702A0909802B09020 -:1029C00099028FBF409181025091820260918302EF -:1029D000709184022A013B01A4E64A0E511C611C3D -:1029E000711C81E090E0A0E0B0E0EFEF4E165E06D3 -:1029F0006E067E0618F480E090E0DC01840D951DE3 -:102A0000A61DB71D88159905AA05BB0588F584166E -:102A10009506A606B706B0F1481759076A077B075F -:102A200088F18091800281110BC086E10E94CA0367 -:102A3000459734F486ED91E00E947A08F092800286 -:102A400080918002882369F086E10E94CA0345973D -:102A500044F08DEE91E00E947A080E941A061092CE -:102A600080020115110509F479CD0E94000076CD90 -:102A7000481759076A077B07A0F684169506A6062D -:102A8000B70678F6D12CC12CC601880F991FFC011E -:102A9000EB57FD4F20813181232B09F4C5CE808176 -:102AA0009181019791838083BFEFCB1ADB0AE4E029 -:102AB000CE16D10449F72FB7F894809196029091E1 -:102AC0009702A0919802B09199022FBF8093810242 -:102AD00090938202A0938302B093840260E087E027 -:102AE0000E946B039ECF0F931F93CF93DF9382308F -:102AF000910510F482E090E0E0917E05F0917F0571 -:102B000030E020E0B0E0A0E0309799F421153105E5 -:102B100009F44AC0281B390B24303105D8F58A81C5 -:102B20009B816115710589F1FB0193838283FE010D -:102B300011C0408151810281138148175907E0F08B -:102B40004817590799F4109761F012960C93129751 -:102B500013961C933296CF01DF91CF911F910F9165 -:102B6000089500937E0510937F05F4CF211531055C -:102B700051F04217530738F0A901DB019A01BD015A -:102B8000DF01F801C1CFEF01F9CF90937F0580936A -:102B90007E05CDCFFE01E20FF31F8193919322506A -:102BA000310939832883D7CF20917C0530917D0569 -:102BB000232B41F420910E0130910F0130937D05BC -:102BC00020937C0520910C0130910D0121153105D8 -:102BD00041F42DB73EB74091100150911101241BD3 -:102BE000350BE0917C05F0917D05E217F307A0F429 -:102BF0002E1B3F0B2817390778F0AC014E5F5F4F53 -:102C00002417350748F04E0F5F1F50937D05409302 -:102C10007C05819391939FCFF0E0E0E09CCFCF9330 -:102C2000DF930097E9F0FC01329713821282A091A2 -:102C30007E05B0917F05ED0130E020E01097A1F412 -:102C400020813181820F931F20917C0530917D0579 -:102C50002817390709F061C0F0937D05E0937C05E2 -:102C6000DF91CF910895EA01CE17DF07E8F54A8199 -:102C70005B819E0141155105B1F7E901FB83EA83B0 -:102C800049915991C40FD51FEC17FD0761F480815C -:102C900091810296840F951FE9019983888382812F -:102CA00093819B838A83F0E0E0E012968D919C9162 -:102CB00013970097B9F52D913C911197CD0102968C -:102CC000820F931F20917C0530917D0528173907CD -:102CD00039F6309751F510927F0510927E05B0932A -:102CE0007D05A0937C05BCCFD383C28340815181F5 -:102CF000840F951FC817D90761F44E5F5F4F888115 -:102D00009981480F591F518340838A819B81938306 -:102D100082832115310509F0B0CFF0937F05E09350 -:102D20007E059ECFFD01DC01C0CF13821282D7CF7A -:102D3000FC0188279927E89421912032E9F3293072 -:102D400010F02E30C8F32B3241F02D3239F4689454 -:102D500004C00E94E216820F911D219120532A3057 -:102D6000C0F31EF4909581959F4F08954AE755E072 -:102D70000E94BB160895FA01A191B081009719F441 -:102D80001097E1F0CD01DC01CD010D90002011F490 -:102D9000C00113C0FB012191222319F02015D9F79E -:102DA000F3CFFB012191201519F41E92119606C054 -:102DB0002223C1F70D900020A1F7D001FA01A193C1 -:102DC000B08308957AE0979F902D879F802D910D75 -:102DD00011240895F999FECF92BD81BDF89A9927E3 -:102DE00080B50895262FF999FECF1FBA92BD81BDF7 -:102DF00020BD0FB6F894FA9AF99A0FBE019608957D -:102E0000A1E21A2EAA1BBB1BFD010DC0AA1FBB1FEE -:102E1000EE1FFF1FA217B307E407F50720F0A21B60 -:102E2000B30BE40BF50B661F771F881F991F1A94CD -:102E300069F760957095809590959B01AC01BD01F7 -:102E4000CF010895EE0FFF1F0590F491E02D099436 -:102E5000FB01DC018D91019080190110D9F3990BD0 -:102E60000895FB01DC0101900D920020E1F7089527 -:042E7000F894FFCF04 -:102E7400FFFFFFFF00E100000000000000008005EC -:102E8400800000C180810000000A000900050006DE -:102E940000000000006405DF04A0059505E605A414 -:102EA40005C20500000000EF070D0A0053617669B2 -:102EB4006E6720454550524F4D2064617461004C4B -:102EC4006F6164696E6720454550524F4D206461BF -:102ED40074610052656C61793A003B0072656C6103 -:102EE400790068656C700073617665006C6F61646D -:102EF400007072696E74007365740064656C0063BD -:102F04006C656172006B696C6C00456E7465726906 -:102F14006E67206C6561726E696E67206D6F6465A3 -:102F2400202620636C6561722073657474696E6712 -:102F34007300537461727420416464726573733AEC -:102F440020005B005D00456E746572696E67206CDD -:102F54006561726E696E67206D6F6465004C6561B2 -:102F640076696E67206C6561726E696E67206D6F3D -:102F740064652C20736176696E67206461746120D6 -:102F8400746F20454550524F4D0052656C61792055 -:062F940044656D6F0000B2 +:1024D0002EAD3FAD2F97880F991F8C0D9D1D880F36 +:1024E000991F8E0D9F1D880F991F800F911F880FB8 +:1024F000991F8A0F9B1F880F991F8E0F9F1F880F90 +:10250000991F860F971F880F991F840F951F880F9B +:10251000991F820F931F9093AE028093AD0280911A +:10252000AD029091AE028D3F914030F08DEF91E081 +:102530009093AE028093AD0278948FEF9FEF9093CB +:1025400047058093460568EE73E080E090E00E94C6 +:10255000730410929B0210925602109255026BED7A +:1025600078E081E891E00E94E70969E477E087E894 +:1025700091E00E94E70962EB78E08CE891E00E942C +:10258000E7096BEB78E081E991E00E94E7096DE0F3 +:1025900079E086E991E00E94E70960E577E08CE95F +:1025A00091E00E94E70967EA77E080EA91E00E9403 +:1025B000E70963E177E084EA91E00E94E7096BEFC5 +:1025C00078E08AEA91E00E94E7096AE879E08FEA18 +:1025D00091E00E94E70910929C028091AF029091D5 +:1025E000B002892B09F42BC186E10E942C04459787 +:1025F0000CF01EC183EB91E00E949F0881E0809364 +:102600009C02E9E3F3E081E092E0DF019C011D928E +:1026100021503040E1F719E1E12E11E0F12E10E0F8 +:1026200000E0D701DC90B2E0EB0EF11C61E08D2DF3 +:102630000E94FB0360E08D2D0E94CD03F801EE0F98 +:10264000FF1FEF55FD4F118210820F5F1F4F0430A7 +:10265000110539F721968EAD9FAD21972396EEACEB +:10266000FFAC239725960EAD1FAD25972796AEADEF +:10267000BFAD27972996EEADFFAD29972B966EAD8E +:102680007FAD2B972D964EAD5FAD2D972F962EAD2E +:102690003FAD2F97880F991F8E0D9F1D880F991F93 +:1026A000800F911F880F991F8A0F9B1F880F991FFA +:1026B0008E0F9F1F880F991F860F971F880F991FD6 +:1026C000840F951F880F991F820F931F90935C02B0 +:1026D00080935B0282E092E00E94F8178093570299 +:1026E00083E092E00E94F8178093580284E092E021 +:1026F0000E94F8178093590285E092E00E94F81733 +:1027000080935A028CE594E00E94390710E000E0C3 +:10271000FF24F394F801E95AFD4F8081811101C033 +:10272000F08280810E94C4080F5F1F4F04301105A2 +:1027300089F760E082E00E94CD038091AD02909124 +:10274000AE02892B31F48091AF029091B002892BB7 +:1027500079F083E08093CC001092CD001092CE00EF +:102760001092C80080E98093C9008EE08093CA006F +:1027700000E010E0FF24F3948AE395E00E9448060D +:10278000892B09F4E5C08AE395E00E940606E82E4D +:10279000EAE08E1709F46BC0FDE08F1709F467C0FB +:1027A00028E08213C2C068E08AE395E00E94370502 +:1027B00080919B02882301F3815080939B02DCCFA0 +:1027C00081E090E02F969FAF8EAF2F97FBCD81E0F9 +:1027D00090E02D969FAF8EAF2D97FFCD81E090E0DA +:1027E0002B969FAF8EAF2B9703CE81E090E029967A +:1027F0009FAF8EAF299707CE27961FAE1EAE2797A5 +:102800000ECE25961FAE1EAE259715CE23961FAE73 +:102810001EAE23971CCE21961FAE1EAE219723CE4F +:102820001EAE1DAE2ACE1092B0021092AF0231CE73 +:102830008FE491E00E949F080E946206ECCE6BED4F +:1028400071E08AE395E00E9420074091AD0250912B +:10285000AE0270E060E02AE08AE395E00E94DB07C8 +:1028600069E371E08AE395E00E94200733CFE091AD +:102870009B02F0E0E15AFD4F108269E371E08AE3C8 +:1028800095E00E94200780915F02882309F441C0EF +:1028900069EE71E08FE592E00E94C4179A83898304 +:1028A0005E0133E0A30EB11CCC24C394D12CEC2CDC +:1028B0009D2C69EE71E090E080E00E94C417D50184 +:1028C0008D939D935D01BEE1CB16D10429F0EFEF0E +:1028D000CE1ADE0A892B59F7C0905D02D0905E02B5 +:1028E000A980BA80C114D104D9F0D6016D917C9130 +:1028F000C5010E943618892B79F4D6011296ED9104 +:10290000FC91BE016F5F7F4F8E2D992D09950E941E +:102910002F0710929B0230CFF601C480D580E2CF02 +:1029200087E794E00E943907F2CF682F8AE395E0A9 +:102930000E943705E0919B02EB3308F01DCF81E048 +:102940008E0F80939B02F0E0E15AFD4FE08214CF9E +:102950008091AF029091B002892B09F480C08FB7AB +:10296000F8948090B2029090B302A090B402B0901C +:10297000B5028FBF4091A9025091AA026091AB02AB +:102980007091AC022A013B01F0E14F0EF7E25F1EAD +:10299000611C711C81E090E0A0E0B0E02FEF4216D6 +:1029A00052066206720618F480E090E0DC01840DA5 +:1029B000951DA61DB71D88159905AA05BB0508F02C +:1029C000F2C084169506A606B70608F058C16BEE4D +:1029D00071E08AE395E00E942007D12CC12CF6011A +:1029E000EE0FFF1FEF55FD4F4081518170E060E019 +:1029F0002AE08AE395E00E94DB0769EE71E08AE352 +:102A000095E00E9420073FEFC31AD30A84E0C8165E +:102A1000D10429F78DEE91E00E949F082FB7F8941A +:102A20008091B2029091B302A091B402B091B5022C +:102A30002FBF8093A9029093AA02A093AB02B093F8 +:102A4000AC02BCC0875E9E4FDC01EC9061E08E2D35 +:102A50000E94FB0360E08E2D0E94CD0333C1809164 +:102A6000AD029091AE02892B09F002C183E392E09E +:102A70000E949F0861E08AE00E94FB0361E08AE017 +:102A80000E94CD0361E089E00E94FB0360E089E0E1 +:102A90000E94CD0361E085E00E94FB0360E085E0D9 +:102AA0000E94CD0361E086E00E94FB0360E086E0C7 +:102AB0000E94CD0368EE73E080E090E00E94730412 +:102AC00061E08AE00E94FB0360E08AE00E94CD039F +:102AD00061E089E00E94FB0361E089E00E94CD0390 +:102AE00061E085E00E94FB0360E085E00E94CD0389 +:102AF00061E086E00E94FB0360E086E00E94CD0377 +:102B000068EE73E080E090E00E94730461E08AE088 +:102B10000E94FB0360E08AE00E94CD0361E089E04F +:102B20000E94FB0360E089E00E94CD0361E085E044 +:102B30000E94FB0361E085E00E94CD0361E086E036 +:102B40000E94FB0360E086E00E94CD0368EE73E024 +:102B500080E090E00E94730461E08AE00E94FB0341 +:102B600060E08AE00E94CD0361E089E00E94FB03FF +:102B700060E089E00E94CD0361E085E00E94FB03F4 +:102B800060E085E00E94CD0361E086E00E94FB03E7 +:102B900061E086E00E94CD0368EE73E080E090E0A3 +:102BA0000E94730463CF481759076A077B0730F404 +:102BB00084169506A606B70608F409CF8FB7F894D1 +:102BC0008090B2029090B302A090B402B090B5028F +:102BD0008FBF40919D0250919E0260919F02709123 +:102BE000A0022A013B01A4E64A0E511C611C711C83 +:102BF00081E090E0A0E0B0E0EFEF4E165E066E06DA +:102C00007E0618F480E090E0DC01840D951DA61D81 +:102C1000B71D88159905AA05BB05C0F5841695064C +:102C2000A606B706E8F1481759076A077B07C0F1FF +:102C300080919C0281110BC086E10E942C04459773 +:102C400034F48FEE91E00E949F08F0929C028091F4 +:102C50009C02882369F086E10E942C04459744F089 +:102C600086E092E00E949F080E947C0610929C02DF +:102C70000115110509F480CD0E9400007DCD481793 +:102C800059076A077B0708F4A2CE98CF481759075F +:102C90006A077B0768F684169506A606B70640F60F +:102CA000D12CC12CC601880F991FFC01EF55FD4F97 +:102CB00020813181232B09F4C5CE80819181019738 +:102CC00091838083BFEFCB1ADB0AE4E0CE16D104F8 +:102CD00049F72FB7F8948091B2029091B302A09176 +:102CE000B402B091B5022FBF80939D0290939E02D3 +:102CF000A0939F02B093A00260E087E00E94CD0302 +:102D000097CF0F931F93CF93DF938230910510F4E9 +:102D100082E090E0E0919A05F0919B0530E020E0A0 +:102D2000B0E0A0E0309799F42115310509F44AC0CC +:102D3000281B390B24303105D8F58A819B81611518 +:102D4000710589F1FB0193838283FE0111C04081EB +:102D500051810281138148175907E0F0481759073C +:102D600099F4109761F012960C93129713961C9396 +:102D70003296CF01DF91CF911F910F91089500936B +:102D80009A0510939B05F4CF2115310551F0421798 +:102D9000530738F0A901DB019A01BD01DF01F801F9 +:102DA000C1CFEF01F9CF90939B0580939A05CDCFCA +:102DB000FE01E20FF31F8193919322503109398371 +:102DC0002883D7CF2091980530919905232B41F482 +:102DD00020910E0130910F013093990520939805B1 +:102DE00020910C0130910D012115310541F42DB7D1 +:102DF0003EB74091100150911101241B350BE09119 +:102E00009805F0919905E217F307A0F42E1B3F0BEC +:102E10002817390778F0AC014E5F5F4F241735074C +:102E200048F04E0F5F1F509399054093980581938A +:102E300091939FCFF0E0E0E09CCFCF93DF9300979A +:102E4000E9F0FC01329713821282A0919A05B091A9 +:102E50009B05ED0130E020E01097A1F42081318145 +:102E6000820F931F209198053091990528173907F3 +:102E700009F061C0F0939905E0939805DF91CF9137 +:102E80000895EA01CE17DF07E8F54A815B819E01CC +:102E900041155105B1F7E901FB83EA834991599145 +:102EA000C40FD51FEC17FD0761F480819181029654 +:102EB000840F951FE90199838883828193819B8385 +:102EC0008A83F0E0E0E012968D919C911397009731 +:102ED000B9F52D913C911197CD010296820F931F68 +:102EE00020919805309199052817390739F63097C0 +:102EF00051F510929B0510929A05B0939905A093F5 +:102F00009805BCCFD383C28340815181840F951F24 +:102F1000C817D90761F44E5F5F4F88819981480FC8 +:102F2000591F518340838A819B819383828321151A +:102F3000310509F0B0CFF0939B05E0939A059ECF41 +:102F4000FD01DC01C0CF13821282D7CFFC0188279C +:102F50009927E89421912032E9F3293010F02E309E +:102F6000C8F32B3241F02D3239F4689404C00E942A +:102F7000F017820F911D219120532A30C0F31EF4C7 +:102F8000909581959F4F089546E955E00E94C91795 +:102F90000895FA01A191B081009719F41097E1F01A +:102FA000CD01DC01CD010D90002011F4C00113C052 +:102FB000FB012191222319F02015D9F7F3CFFB0152 +:102FC0002191201519F41E92119606C02223C1F7F3 +:102FD0000D900020A1F7D001FA01A193B0830895CC +:102FE0007AE0979F902D879F802D910D1124089551 +:102FF000F999FECF92BD81BDF89A992780B50895C1 +:10300000262FF999FECF1FBA92BD81BD20BD0FB604 +:10301000F894FA9AF99A0FBE01960895A1E21A2E31 +:10302000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F6C +:10303000A217B307E407F50720F0A21BB30BE40BBC +:10304000F50B661F771F881F991F1A9469F7609503 +:103050007095809590959B01AC01BD01CF010895BD +:10306000EE0FFF1F0590F491E02D0994FB01DC01A8 +:103070008D91019080190110D9F3990B0895FB01EE +:10308000DC0101900D920020E1F70895F894FFCF44 +:10309000FFFFFFFF00E100000000000000009C05B2 +:1030A000800000C180810000000A000900050006C0 +:1030B0000000000000C60541050206F705480606A7 +:1030C0000624060000000059080D0A0053617669C5 +:1030D0006E6720454550524F4D2064617461004C2D +:1030E0006F6164696E6720454550524F4D206461A1 +:1030F00074610052656C61793A003B0020666F7222 +:103100002063757272656E742072656C61793A2005 +:103110000072656C61790068656C7000736176653A +:10312000006C6F6164007072696E74007365740086 +:1031300064656C00636C656172006B696C6C006D3A +:10314000696E00456E746572696E67206C656172A8 +:103150006E696E67206D6F6465202620636C656103 +:10316000722073657474696E67730053746172744E +:1031700020416464726573733A20005B005D004512 +:103180006E746572696E67206C6561726E696E67D8 +:10319000206D6F6465004C656176696E67206C65B3 +:1031A00061726E696E67206D6F64652C2073617645 +:1031B000696E67206461746120746F2045455052C8 +:0E31C0004F4D0052656C61792044656D6F00C3 :00000001FF diff --git a/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino b/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino index b88475a..7a9ea3b 100644 --- a/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino +++ b/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino @@ -94,6 +94,7 @@ volatile unsigned int offDelay; volatile bool learningMode; byte dmxArray[512+1]; +#define chanMinOffset 514 #define CH_1 1 @@ -102,6 +103,8 @@ byte dmxArray[512+1]; #define CH_4 8 #define CHANNELS 4 volatile unsigned int chanDelay[CHANNELS]; +volatile byte chanMin[CHANNELS]; +//volatile unsigned int chanMax[CHANNELS]; /*Initialization of USART*/ @@ -122,6 +125,7 @@ int cmdFunctionHelp(int arg_cnt, char **args) "'relay #' - set relay # setup for (1-4)\n" "'set []' - associate relay with channel\n" "'del ' - de-associate relay with channel \n" + "'min <1..255>' set treshold value for current relay\n" "'print' - print association table\n" "'save' - save current config in NVRAM\n" "'load' - load config from NVRAM\n" @@ -139,11 +143,54 @@ int cmdFunctionRelay(int arg_cnt, char **args) { if (arg_cnt == 2) currentRelay=atoi(args[1]); +if (!currentRelay || currentRelay>CHANNELS) + { + debugSerialPort.println(F("invalid relay#")); + return 0; + } debugSerialPort.print(F("Current relay: ")); debugSerialPort.println(currentRelay); return 1; } +int cmdFunctionMin(int arg_cnt, char **args) +{ +uint8_t min = 1; +if (arg_cnt < 2) +{ + debugSerialPort.println(F("Minimal values for relays:")); + for (int i=0;i255) + { + debugSerialPort.println(F("invalid value")); + return 0; + } + +if (!currentRelay) + { + debugSerialPort.println(F("No Current relay defined, use 'relay' command")); + return 0; + } + +chanMin[currentRelay-1]=min; +EEPROM.put(chanMinOffset+currentRelay-1,min); + +debugSerialPort.print(F("Set min value ")); +debugSerialPort.print(min); +debugSerialPort.print(" for current relay: "); +debugSerialPort.println(currentRelay); +return 1; +} + + int cmdFunctionAdd(int arg_cnt, char **args) { int localDelay = 15; @@ -240,7 +287,7 @@ return 1; int cmdFunctionClear(int arg_cnt, char **args) { -memset(dmxArray,0,512); +memset(dmxArray,0,sizeof(dmxArray)); return 1; } @@ -392,6 +439,7 @@ void setup() cmdAdd("clear", cmdFunctionClear); //cmdAdd("reboot", cmdFunctionReboot); cmdAdd("kill", cmdFunctionKill); + cmdAdd("min", cmdFunctionMin); @@ -425,6 +473,14 @@ void setup() Serial.print("Start Address: "); Serial.println(dmxStartAddress); } + EEPROM.get(chanMinOffset,chanMin); + debugSerialPort.println(F("Minimal values for relays:")); + for (int i=0;i> 4; if (localDelay == 15) localDelay=offDelay; //Default Delay - if (dmxByte) + if (dmxByte>=chanMin[i]) { //ON analogWrite(outPins[i],255); if (!localDelay) localDelay =1; From 4fd2d81c9752ab16fd2826ead6d7bad50472c989 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BB=D0=B8=D0=BC=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9=20=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B5?= =?UTF-8?q?=D0=B2=D0=B8=D1=87?= Date: Wed, 3 May 2023 13:34:35 +0300 Subject: [PATCH 9/9] default min vals in 'clear' cmd & bin --- compiled/firmware.hex | 1547 +++++++++-------- .../dmx_receiver_mos_relay_public.ino | 5 +- 2 files changed, 800 insertions(+), 752 deletions(-) diff --git a/compiled/firmware.hex b/compiled/firmware.hex index 6ccc793..51dd229 100644 --- a/compiled/firmware.hex +++ b/compiled/firmware.hex @@ -1,14 +1,14 @@ -:100000000C942C020C9454020C9454020C94540240 -:100010000C9454020C9454020C9454020C94540208 -:100020000C9454020C9454020C94BA0A0C94290BAC -:100030000C9454020C9454020C9454020C945402E8 -:100040000C9454020C9454020C9454020C945402D8 -:100050000C9454020C9454020C9454020C94700AA4 -:100060000C9454020C945B0D0C9454020C945402A6 -:100070000C9454020C9454020C9454020C945402A8 -:100080000C9454020C9454020C9454020C94540298 -:100090000C9455090C9454020C9454020C94540280 -:1000A0000C9454020C9454020C9454020A55736537 +:100000000C948E020C94B6020C94B6020C94B602B8 +:100010000C94B6020C94B6020C94B6020C94B60280 +:100020000C94B6020C94B6020C94DE0B0C944D0C9E +:100030000C94B6020C94B6020C94B6020C94B60260 +:100040000C94B6020C94B6020C94B6020C94B60250 +:100050000C94B6020C94B6020C94B6020C94940B59 +:100060000C94B6020C947F0E0C94B6020C94B6025B +:100070000C94B6020C94B6020C94B6020C94B60220 +:100080000C94B6020C94B6020C94B6020C94B60210 +:100090000C94790A0C94B6020C94B6020C94B60235 +:1000A0000C94B6020C94B6020C94B6020A55736511 :1000B00020746865736520636F6D6D616E64733A5B :1000C000202768656C7027202D2074686973207460 :1000D0006578740A2772656C6179202327202D20AA @@ -21,744 +21,789 @@ :100140006C0A2764656C203C444D58206368616EDE :100150006E656C20233E27202D2064652D6173730E :100160006F63696174652072656C61792077697469 -:1001700068206368616E6E656C200A277072696E14 -:100180007427202D207072696E74206173736F6301 -:10019000696174696F6E207461626C650A277361AE -:1001A000766527202D2073617665206375727265F0 -:1001B0006E7420636F6E66696720696E204E5652BA -:1001C000414D0A276C6F616427202D206C6F61649C -:1001D00020636F6E6669672066726F6D204E56529F -:1001E000414D0A276B696C6C27202D207465737450 -:1001F000207761746368646F670A27636C65617256 -:1002000027202D20636C656172206173736F6369B1 -:100210006174696F6E207461626C6520696E205232 -:10022000414D0A0043757272656E742072656C618F -:10023000793A200044656C6179206D757374206291 -:100240006520696E20302E2E3134203130732072BB -:10025000616E676500444D58204368616E6E656C41 -:10026000206D75737420626520696E20312E2E35E5 -:1002700031322072616E67650075736167653A207F -:10028000276164642023444D586368616E6E656C19 -:10029000205B64656C61795F696E5F3130736563A3 -:1002A0005D004E6F2043757272656E742072656CCE -:1002B000617920646566696E65642C2075736520BC -:1002C0002772656C61792720636F6D6D616E6400C4 -:1002D00075736167653A202764656C2023444D5827 -:1002E0006368616E6E656C00444D58204368616EB2 -:1002F0006E656C206D75737420626520696E2031A7 -:100300002E2E3531322072616E6765004E6F2043AC -:10031000757272656E742072656C617920646566B1 -:10032000696E65642C20757365202772656C617930 -:100330002720636F6D6D616E6400080B000202027E -:100340000000090400000102020000052400100161 -:100350000524010101042402060524060001070505 -:10036000810310004009040100020A000000070593 -:100370000202400000070583024000000403090454 -:1003800012010002EF020140412336800001010208 -:10039000030141726475696E6F204C4C43004172D9 -:1003A0006475696E6F204C656F6E6172646F003E9C -:1003B0003E2000496E76616C696420636F6D6D61EB -:1003C0006E6400070605040100080A0B0C0D090005 -:1003D000000000240027002A002D0030000000004B -:1003E00000250028002B002E003100000000002313 -:1003F00000260029002C002F000404040404030438 -:1004000005020202020403020202020606060606B2 -:1004100006040402020204040408020110408040A1 -:10042000102040804080080204018040201002011A -:10043000108010204040200000000200090F000042 -:10044000030401000C000000000000000000000098 -:10045000000000000000C20F11241FBECFEFDAE041 -:10046000DEBFCDBF12E0A0E0B1E0E4E7FEE202C0F3 -:1004700005900D92A632B107D9F725E0A6E2B2E0C9 -:1004800001C01D92A038B207E1F712E0CCE2D2E041 -:1004900004C02197FE010E942217CB32D107C9F771 -:1004A0000E94E90F0C9438170C940000FC01809115 -:1004B0001C03882311F13FB7F89482E08093E90090 -:1004C0002091F200822F90E01816190614F481E0B2 -:1004D00090E0882339F0289844E640931B0340912C -:1004E000F1004083222339F02091F200211103C052 -:1004F0002BE62093E8003FBF08958FEF9FEF08950C -:100500002FB7F89483E08093E9009091E800892F59 -:10051000807295FF04C09091F20080E4891B2FBF88 -:1005200008952091D102260F3327331F2132310540 -:10053000ECF42091F502FC0190E080E0243069F0B9 -:1005400082E00895A091D1022191AC014F545D4FFA -:10055000A40FB52FB11D2C930196861798F38091A7 -:10056000D102680F6093D10280E0089581E0089580 -:1005700008958FEF9FEF08958FEF9FEF089580917B -:10058000AA0290E09195819591090895CF93DF9308 -:10059000CB01EA01642F0E949102CE01DF91CF913D -:1005A0000895CF93DF931F92CDB7DEB7698361E0E3 -:1005B000CE0101960E94910281E090E00F90DF91C0 -:1005C000CF9108958091A20281110DC082E08093A5 -:1005D0009E0284E080939F021092A1021092A002DA -:1005E00081E08093A2028EE992E0089581508F30DD -:1005F00008F047C0E82FF0E0E050FD4F0C942217C0 -:100600001D0321030F031503190341034103410394 -:1006100024032A032E033203380341033C03809151 -:1006200080008F77809380000895809180008F7D77 -:10063000F9CF80918000877FF5CF84B58F7784BD17 -:10064000089584B58F7DFBCF809190008F77809344 -:1006500090000895809190008F7DF9CF8091900057 -:10066000877FF5CF8091C0008F778093C000089579 -:100670008091C0008F7DF9CF8091C200877F8093E9 -:10068000C2000895CF93DF93282F30E0F901E95C91 -:10069000FB4F8491F901E85EFB4FD491F901E750DB -:1006A000FC4FC491CC23A1F081110E94F602EC2FE3 -:1006B000F0E0EE0FFF1FE551FC4FA591B491EC91D6 -:1006C000ED2381E090E009F480E0DF91CF9108957F -:1006D00080E090E0FACF1F93CF93DF93282F30E094 -:1006E000F901E95CFB4F8491F901E85EFB4FD4917D -:1006F000F901E750FC4FC491CC23A9F0162F8111CA -:100700000E94F602EC2FF0E0EE0FFF1FE352FC4FC9 -:10071000A591B4918FB7F894EC91111108C0D095C0 -:10072000DE23DC938FBFDF91CF911F910895DE2BE5 -:10073000F8CFCF93DF9390E0FC01E85EFB4F24916C -:1007400087509C4FFC0184918823D1F090E0880F62 -:10075000991FFC01E153FC4FA591B491FC01E352B8 -:10076000FC4FC591D49161110EC09FB7F8948C9144 -:10077000E22FE0958E238C932881E223E8839FBFAC -:10078000DF91CF9108958FB7F894EC91E22BEC9321 -:100790008FBFF6CF8251E82FF0E0ED53FC4FE4918C -:1007A00090917B008E2F880F880F80729F7D892B00 -:1007B00080937B00E770E064E0937C0080917A0096 -:1007C000806480937A0080917A0086FDFCCF8091CE -:1007D00078009091790008953FB7F89480919A023B -:1007E00090919B02A0919C02B0919D0226B5A89B7E -:1007F00005C02F3F19F00196A11DB11D3FBFBA2FB3 -:10080000A92F982F8827BC01CD01620F711D811D72 -:10081000911D42E0660F771F881F991F4A95D1F7F7 -:1008200008958F929F92AF92BF92CF92DF92EF92F4 -:10083000FF924B015C010E94EC036B017C010E9462 -:10084000EC036C197D098E099F09683E7340810590 -:100850009105A8F321E0821A9108A108B10888EE59 -:10086000C80E83E0D81EE11CF11C81149104A10480 -:10087000B10429F7FF90EF90DF90CF90BF90AF9039 -:100880009F908F90089540913702509138022091A7 -:1008900035023091360242175307B4F49091E800C4 -:1008A0009570E1F39091E80092FD19C08093F100FA -:1008B000809137029091380201968F739927892B86 -:1008C00019F48EEF8093E8008091370290913802FE -:1008D0000196909338028093370281E0089580E07A -:1008E0000895DF92EF92FF920F931F93CF93DF93C0 -:1008F000D82E8A01EB017B01E40EF51ECE15DF0533 -:1009000059F0D7FE12C0FE0184910E944304219643 -:100910008111F4CF0FEF1FEFC801DF91CF911F912D -:100920000F91FF90EF90DF9008958881EECF0F93A5 -:100930001F93CF93DF931F92CDB7DEB782E08983F9 -:1009400042E450E06AE373E080E80E9471040E9490 -:10095000E202DC0112960D911C910115110589F03E -:10096000D801ED91FC910280F381E02DBE016F5F13 -:100970007F4FC801099597FD04C0F80100851185D6 -:10098000ECCF89810F90DF91CF911F910F91089546 -:10099000615030F02091F100FC0120830196F8CFE6 -:1009A000289884E680931B030895DC01ED91FC9167 -:1009B0000190F081E02D099490E080E008958F92FD -:1009C0009F92AF92BF92CF92DF92EF92FF920F93DE -:1009D0001F93CF93DF936C017B018A0180910B0100 -:1009E000882309F45CC080911C03882309F457C054 -:1009F00080913B0280FF05C08091E000826080937F -:100A0000E000E801B12C8AEFA82E93E0892E2AE3BA -:100A1000922E209711F4BB20D9F10E9480028111FF -:100A20000AC0AA94AA20D9F161E070E080E090E0C9 -:100A30000E941104EECF8C171D0611F00CF08C2FC4 -:100A40009FB7F8948092E9002091E80025FD02C04C -:100A50009FBFDFCF282F30E0C21BD30BF70181509F -:100A600020F041914093F100FACFE20EF31EBB203B -:100A700021F09092E800B12CEBCF8091E80085FD49 -:100A8000E7CF9092E800BB24B394209709F3F3CF0B -:100A90005D9884E680933A02101611063CF081E0DE -:100AA00090E0F6019383828310E000E0C801DF91BB -:100AB000CF911F910F91FF90EF90DF90CF90BF905B -:100AC000AF909F908F900895CF93DF931F92CDB7F3 -:100AD000DEB76983DC01ED91FC910280F381E02DAA -:100AE00041E050E0BE016F5F7F4F09950F90DF91AD -:100AF000CF9108950F931F93CF93DF938C01D0E094 -:100B0000C0E0F801EC0FFD1F6491662341F08EE117 -:100B100095E00E946405892B11F02196F2CFCE0159 -:100B2000DF91CF911F910F91089583E08093E900A9 -:100B30008091F200882319F08AE38093E8000895F9 -:100B40000E94800290E00895CF93DF931F92CDB76B -:100B5000DEB7FC018485958597FD08C02FEF3FEF38 -:100B6000358724870F90DF91CF910895CE010196AC -:100B70000E945602019719F4898190E0F3CF8FEF1C -:100B80009FEFF0CF0F931F93CF93DF931F92CDB7BB -:100B9000DEB78C01FC018485958597FF0BC0CE01E3 -:100BA00001960E945602019771F4898190E0F80144 -:100BB00095878487F801848595850F90DF91CF9183 -:100BC0001F910F9108958FEF9FEFF1CFFC01848566 -:100BD000958597FD0BC09FB7F89482E08093E9005C -:100BE0008091F2009FBF90E0019608959FB7F8941E -:100BF00082E08093E9008091F2009FBF90E0089529 -:100C00000F931F93CF93DF930DE113E0D0E0C0E08B -:100C1000CE010E94EA16F80181938F012196C1301E -:100C2000F2E0DF07A9F78DE193E0DF91CF911F910B -:100C30000F910895FF920F931F93CF93DF930DE1D0 -:100C400013E0D0E0C0E0F801F1908F01CE010E94E6 -:100C5000EA16F81621F06F2DCE010E94F2162196A9 -:100C6000C130F2E0DF0779F78DE193E0DF91CF91BA -:100C70001F910F91FF9008951F93CF93DF9385ED00 -:100C80008093BC008091AD029091AE02A091AF0222 -:100C9000B091B0020796A11DB11D23E0B695A795AE -:100CA000979587952A95D1F72091BC0024FD03C024 -:100CB0001092F50252C04091AD025091AE02609187 -:100CC000AF027091B002452B462B472B69F300977A -:100CD000A105B10541F025E32A95F1F70000019740 -:100CE000A109B109E1CF8091AC02C1E0C093AB0290 -:100CF000882399F1D091B8001091BA008091BC007E -:100D00008A7B8093BC0060E082E00E946B0360E01D -:100D100083E00E946B031092F502C093F7021092D9 -:100D2000F60261E082E00E946B0361E083E00E94D2 -:100D30006B038091B9008E7F8093B9008091B900D8 -:100D40008D7F8093B90088E48093B80085E4809318 -:100D5000BC001093BA00D093B800DF91CF911F91DF -:100D60000895EDE1F3E080E092E0DF019C011D9247 -:100D700021503040E1F781E090E00895FB010190BF -:100D80000020E9F73197AF01461B570BDC01ED91CD -:100D9000FC910280F381E02D099469E371E08EE11A -:100DA00095E00C94BE06CF93DF930E947A05EC0188 -:100DB0000E94CD068C0F9D1FDF91CF9108958CEA84 -:100DC00090E00E94D30681E090E00895CF92DF92F8 -:100DD000EF92FF921F93CF93DF936C017B011091F1 -:100DE000280282EA92E0112391F089E792E022E062 -:100DF000C216D10464F0FB01828193810E9498168F -:100E0000EC0101978115924070F085E592E00E9417 -:100E1000D30690E080E0DF91CF911F91FF90EF909B -:100E2000DF90CF90089522E0C216D10459F0F70167 -:100E3000848195810E9498169C0140972CF084E350 -:100E400092E0E5CF2FE030E0C35EDC4F98819F70E9 -:100E5000612F6150770BAB0161E070E001C0660F5C -:100E60004A95EAF7962B84E0220F331F8A95E1F723 -:100E7000922B988381E090E0CECFCF93DF93C09107 -:100E80002802C11109C08CE093E00E94D30690E0D3 -:100E900080E0DF91CF91089502971CF480ED92E0FD -:100EA000F4CFFB01828193810E9498169C0121500E -:100EB00031092115324018F088EE92E0E6CFFC01AE -:100EC000E35EFC4FC150DD0B21E030E001C0220F9A -:100ED000CA95EAF7209580812823208381E090E05D -:100EE000D8CF8F929F92AF92BF92EF92FF920F93C3 -:100EF0001F93CF93DF93CDB7DEB7A1970FB6F894CA -:100F0000DEBF0FBECDBF7C01FA01CB0119A222309A -:100F100008F42AE08E010F5D1F4F822E912CB12C18 -:100F2000A12CBF01A50194010E940017F901CA017B -:100F30006A300CF5605DD8016E938D01232B242B54 -:100F4000252B79F790E080E0109721F0BD01C701D3 -:100F50000E94BE06A1960FB6F894DEBF0FBECDBFAD -:100F6000DF91CF911F910F91FF90EF90BF90AF90C5 -:100F70009F908F900895695CDECFCF92DF92EF92C1 -:100F8000FF92CF93DF93AB01BC0177FF1DC06A01D5 -:100F90007C016DE28EE195E00E94D504EC014427CE -:100FA0005527BA014C195D096E097F092AE08EE1C7 -:100FB00095E00E9471078C0F9D1FDF91CF91FF90EC -:100FC000EF90DF90CF9008952AE08EE195E0DF91D9 -:100FD000CF91FF90EF90DF90CF900C9471078F929C -:100FE0009F92AF92BF92CF92DF92EF92FF920F93B8 -:100FF0001F93CF93DF937C018B016C0182E0C80EBD -:10100000D11C4701E5E08E0E911CD0E0C0E0F60156 -:1010100041916F0150E070E060E02AE0C8010E9459 -:1010200071075C016EE2C8010E94D5048A0D9B1D08 -:10103000C80FD91FC814D90451F7F701458150E0F2 -:1010400070E060E02AE0C8010E9471078C0F9D1FCC -:10105000DF91CF911F910F91FF90EF90DF90CF9094 -:10106000BF90AF909F908F900895CF92DF92EF92B4 -:10107000FF92C12CD12C7601C39468EE73E080E01E -:1010800090E00E9411042AE0B701A6018EE195E0EC -:101090000E9471070E94CD068FEFC81AD80AE80A8D -:1010A000F80A84E1C816D104E104F10431F781E0C3 -:1010B00090E0FF90EF90DF90CF900895029739F481 -:1010C000FB01828193810E9498168093280284E21A -:1010D00092E00E947A054091280250E070E060E0C2 -:1010E0002AE08EE195E00E9471070E94CD0681E022 -:1010F00090E00895CF93DF93BC018EE195E00E94CC -:10110000BE06EC010E94CD068C0F9D1FDF91CF9192 -:1011100008958CE391E00E947A080E941A0681E00B -:1011200090E008958FE491E00E947A080E94000602 -:1011300081E090E008954F925F926F927F92AF921C -:10114000BF92CF92DF92EF92FF920F931F93CF93B4 -:10115000DF93C12CD12C7601C39401E010E063E64B -:1011600071E08EE195E00E94BE06C701B6010E94C3 -:10117000BD070E94CD06C6010197580102C0AA0C06 -:10118000BB1C8A95E2F7CDE1D3E0412C512C320112 -:101190004394898190E08A219B21892BD9F0C30156 -:1011A000B2010E94BD0768E671E08EE195E00E9401 -:1011B000BE06698170E084E0759567958A95E1F7D0 -:1011C000072E000C880B990B0E94BD078AE691E060 -:1011D0000E947A0821968FEF481A580A680A780AFE -:1011E00081E0481682E058066104710491F68FEFA1 -:1011F000C81AD80AE80AF80A85E0C816D104E1043A -:10120000F10409F0ACCF81E090E0DF91CF911F9124 -:101210000F91FF90EF90DF90CF90BF90AF907F90B5 -:101220006F905F904F900895CF92DF92EF92FF9270 -:101230000F931F93CF93DF936C018B0186E090E0B7 -:101240000E947315EC019093420280934102F601D3 -:1012500001900020E9F7CF018C199D090E947315B8 -:101260007C01B6010E943117F60101900020E9F7D8 -:101270003197EC19FD09EE0DFF1D1082F982E8820D -:101280001B830A8380913D0290913E029D838C8353 -:10129000D0933E02C0933D02DF91CF911F910F91F9 -:1012A000FF90EF90DF90CF9008951F920F920FB6AE -:1012B0000F9211242F933F934F935F936F937F93DC -:1012C0008F939F93AF93BF93EF93FF938091B90058 -:1012D000887F803609F44AC0F0F5883209F4A5C049 -:1012E00018F5803109F499C0B8F4882309F4F5C0E1 -:1012F000883009F492C0FF91EF91BF91AF919F9117 -:101300008F917F916F915F914F913F912F910F90AE -:101310000FBE0F901F901895883109F486C0803257 -:1013200051F78093F40214C0803409F49BC040F458 -:101330008033B9F38833F9F68093F40285ECAEC0BC -:10134000803509F483C0883509F494C0883499F64F -:101350000E943C06D0CF883909F48AC038F5883716 -:1013600029F050F4883611F0803729F683E0809315 -:10137000F5021092F30255C0883809F479C080391B -:1013800019F0803809F0B7CF8091F302803208F06D -:101390006FC0E091F30281E08E0F8093F3028091A1 -:1013A000BB00F0E0ED52FD4F80833BC0803B39F045 -:1013B000D0F4803A09F477C0883A09F09CCF84E0F1 -:1013C0008093F5021092D2021092D102F0E0E0E098 -:1013D00009958091D10281110FC081E08093D102E3 -:1013E0001092B10209C0803C09F4A8CF883C09F4EE -:1013F000A5CF883B09F07FCFE091D20281E08E0F2C -:101400008093D202F0E0EF54FD4F80818093BB00C7 -:101410009091D2028091D10229C080911A038093C9 -:10142000BB0085EC8093BC0066CF9091190380913E -:101430001803981758F5E091190381E08E0F8093F7 -:101440001903F0E0E850FD4F8081E9CFE0911903E6 -:1014500081E08E0F809319038091BB00F0E0E8508B -:10146000FD4F808390911903809118039817C8F25B -:1014700085E8D8CFE091190381E08E0F809319039E -:101480008091BB00F0E0E850FD4F80838091F7022F -:1014900081115ECF81E08093F60284EA8093BC00E4 -:1014A0001092F50228CF85EC8093BC001092F502D3 -:1014B0008091F302803230F4E091F302F0E0ED52DB -:1014C000FD4F10826091F30270E083ED92E0F0E056 -:1014D000E0E009951092F3020ECF1092F40238CF9B -:1014E0001F920F920FB60F9211242F933F938F9359 -:1014F0009F93AF93BF938091960290919702A09192 -:101500009802B09199023091950223E0230F2D3774 -:1015100058F50196A11DB11D209395028093960266 -:1015200090939702A0939802B093990280919A02A7 -:1015300090919B02A0919C02B0919D020196A11DE9 -:10154000B11D80939A0290939B02A0939C02B0934A -:101550009D02BF91AF919F918F913F912F910F90DD -:101560000FBE0F901F90189526E8230F0296A11D1D -:10157000B11DD2CF1F920F920FB60F9211248F93ED -:101580009F938091E1009091E100937F9093E1001F -:1015900083FF0FC01092E90091E09093EB0010924E -:1015A000EC0092E39093ED0010921C0398E090936E -:1015B000F00082FF22C093E09093E9009091F20046 -:1015C000992319F09AE39093E80090913A029923B5 -:1015D00041F090913A02915090933A02911101C0DA -:1015E0005D9A90911B03992341F090911B039150B8 -:1015F00090931B03911101C0289A84FF18C0809119 -:10160000E2008E7E81608093E2008091E1008F7E17 -:101610008093E10080913B028E7E806180933B024B -:101620009F918F910F900FBE0F901F90189580FF84 -:10163000F7CF8091E2008E7E80618093E2008091FE -:10164000E1008E7E8093E10080913B028E7E81607E -:10165000E5CF1F920F920FB60F921124CF92DF9217 -:10166000EF92FF920F931F932F933F934F935F93AC -:101670006F937F938F939F93AF93BF93EF93FF935A -:10168000CF93DF93CDB7DEB76C97DEBFCDBF10929F -:10169000E9008091E80083FF25C068E0CE0145960F -:1016A0000E94C80482EF8093E8008D8987FF39C0CB -:1016B0009091E80090FFFCCF982F907609F034C10C -:1016C0009E894F89588D2F89F88C911131C08038AF -:1016D00061F580913C028093F1001092F1008EEF51 -:1016E0008093E8006C960FB6F894DEBF0FBECDBFB6 -:1016F000DF91CF91FF91EF91BF91AF919F918F912A -:101700007F916F915F914F913F912F911F910F9119 -:10171000FF90EF90DF90CF900F900FBE0F901F9033 -:1017200018959EEF9093E800C7CF1092F100D5CFA7 -:10173000913059F48111D3CF4130510581F6809118 -:101740003C028D7F80933C02CACF933049F48111D3 -:10175000C6CF4130510519F680913C028260F2CF2C -:10176000953041F48091E80080FFFCCF2068209301 -:10177000E300B5CF963009F0A9C00B8D1C8D22E097 -:101780001092E9001092380210923702F2122EC025 -:1017900010923602109235020E9497041F8299E03F -:1017A0009983FA8291E09E8390EA98879AEF9987CD -:1017B0002091370230913802275F3F4F3C832B83C3 -:1017C0008D831092E9001092380210923702109324 -:1017D00036020093350249E050E0BE016F5F7F4F53 -:1017E00080E00E9471040E94970479CF1093360222 -:1017F000009335020E94E202DC0112960D911C91C9 -:101800000115110509F451C1D801ED91FC91048035 -:10181000F581E02DBE016B5E7F4FC80109950097F1 -:1018200009F03EC1F80100851185EACFF3E0FF120F -:101830000EC08F89882309F440C0823061F440E8EB -:1018400060E18EE993E00E948F0F811148CF81E221 -:101850008093EB0047CF813029F440E86BE082E9C8 -:1018600093E0F1CF833099F70E94E202DC011296F7 -:10187000ED90FC908E010F5F1F4F6801E114F104A1 -:1018800079F0D701ED91FC910680F781E02DB80148 -:10189000C7010995080F111DF701E084F184EECF0F -:1018A000D8011C92F60101900020E9F73197BF01A1 -:1018B0006C197D0940E0C601C6CF6CE773E0FB01FF -:1018C000449150E080E80E94710409CF973009F4F8 -:1018D000BECF983021F481E08093F10000CF9930A1 -:1018E00009F0FDCE837009F0B2CFE3E1F1E081E0D1 -:1018F00031E096E32191222371F08093E900309347 -:10190000EB00DF0111972C912093EC009093ED00F8 -:101910008F5F873079F78EE78093EA001092EA00B4 -:101920008F8980931C03DBCE8B8D9C8D1092E900F8 -:10193000109238021092370290933602809335024B -:10194000898D811192C08E899D89913A49F48132A5 -:1019500009F07DCF47E050E064E071E080E0B3CF74 -:10196000913209F074CF833269F48F89988DB0E099 -:10197000A0E08093000190930101A0930201B09335 -:101980000301ADCE803269F48091E80082FFFCCF84 -:1019900067E084E091E00E94C8048BEF8093E80048 -:1019A0009ECE823209F09BCE8F8980930B01EEEFA1 -:1019B000FFE7859194918B3F9C4D51F1E0E0F8E079 -:1019C0008091040190910501A0910601B091070159 -:1019D000803B9440A105B105F1F480910B0180FD9D -:1019E0001AC0EE3F8AE0F80789F587E797E7918309 -:1019F0008083809160008093390288E19BE00FB67C -:101A0000F894A895809360000FBE9093600067CE15 -:101A1000EEEFFAE0D5CF808191818737974709F0C3 -:101A20005ECEA8958091600088618093600080916F -:101A3000390280936000EE3F2AE0F20789F080913E -:101A4000FE0A9091FF0A9183808349CE8081918123 -:101A50008737980751F29093FF0A8093FE0AC5CF0B -:101A60001092FF0A1092FE0A3ACE0E94E202DC01B6 -:101A700012960D911C910115110509F4E8CED801BB -:101A8000ED91FC910190F081E02DBE016B5E7F4FE6 -:101A9000C8010995811123CEF80100851185EBCF8E -:101AA000181619060CF41BCED2CEF1E0FF12BECEF2 -:101AB00060E873E004CF1F920F920FB60F921124CB -:101AC000AF92BF92CF92DF92EF92FF920F931F934C -:101AD0002F933F934F935F936F937F938F939F9336 -:101AE000AF93BF93EF93FF93CF93DF9300D0CDB726 -:101AF000DEB72091C8008091CE0090E09A83898360 -:101B000023FF27C010923402109233028091C80044 -:101B1000877F8093C80000000F900F90DF91CF91D6 -:101B2000FF91EF91BF91AF919F918F917F916F91B5 -:101B30005F914F913F912F911F910F91FF90EF90E7 -:101B4000DF90CF90BF90AF900F900FBE0F901F907F -:101B5000189524FF0EC0109232021092310281E0DB -:101B600090E090933402809333028091C8008F7E7E -:101B7000D0CF80913302909134028230910509F4E4 -:101B800014C1C8F4019739F689819A81892B09F526 -:101B90008091930290919402892B01F184E090E06E -:101BA000909334028093330281E090E0909332026C -:101BB00080933102B0CF8330910509F40AC10497B4 -:101BC00009F0A9CF80913102909132028130924088 -:101BD00088F010923402109233029DCF80919102CE -:101BE00090919202019719F483E090E0D9CF82E0BE -:101BF00090E0D6CF61E087E00E946B038091800285 -:101C0000882309F469C089819A81892B09F45EC00F -:101C100082E10E94CA0310E145970CF010E083E1D5 -:101C20000E94CA0345970CF4106284E10E94CA0323 -:101C300045970CF4106485E10E94CA0345970CF4A3 -:101C40001068E0913102F0913202E35EFC4F808136 -:101C50008F70808388E00E944203892B51F4E091C9 -:101C60003102F0913202E35EFC4F80818160812B72 -:101C700080838CE00E944203892B51F4E091310271 -:101C8000F0913202E35EFC4F80818260812B808381 -:101C900084E00E944203892B51F4E0913102F091DB -:101CA0003202E35EFC4F80818460812B80838BE075 -:101CB0000E944203892B51F4E0913102F0913202EB -:101CC000E35EFC4F80818860182B10838091310285 -:101CD0009091320201966ACFF12CE12C34E6B32EBA -:101CE000E0913102F0913202E35EFC4F808190E09E -:101CF0000E2C02C0959587950A94E2F780FF3BC0B1 -:101D0000E0913102F0913202E35EFC4F008110E07D -:101D100024E0159507952A95E1F70F30110521F478 -:101D200000913F021091400289819A81892B61F1D3 -:101D30006701CC0CDD1CF601E75EFE4FA08061E080 -:101D40008A2D0E94990361E08A2D0E946B0381E035 -:101D500090E00115110529F0B09EC001B19E900DD3 -:101D60001124F601EB57FD4F2081318128173907E7 -:101D700010F4918380838FEFE81AF80A24E0E216CA -:101D8000F10409F0ADCFA2CF012BA9F7F701EE0FB7 -:101D9000FF1FE75EFE4F108161E0812F0E949903D3 -:101DA00060E0812F0E946B03E6CF809191029091B9 -:101DB00092022091310230913202019782179307EB -:101DC00009F084CF83E090E0909334028093330253 -:101DD0007DCF61E087E00E946B032091310230915A -:101DE000320280919102909192022817390739F4BA -:101DF00089819A819093300280932F0267CF8091DE -:101E0000910290919202209131023091320201961A -:101E10008217930739F489819A8190932E028093D7 -:101E20002D0254CF80919102909192022091310223 -:101E30003091320202968217930739F489819A8190 -:101E400090932C0280932B0241CF8091910290912C -:101E50009202209131023091320203968217930749 -:101E600009F059CE89819A8190932A0280932902A0 -:101E700081E090E09093320280933102109234021C -:101E80001092330280912F029091300261E0892BF1 -:101E900091F18AE00E94990361E08AE00E946B035D -:101EA00080912D0290912E0261E0892B49F189E009 -:101EB0000E94990361E089E00E946B0380912B02EC -:101EC00090912C0261E0892B01F185E00E94990339 -:101ED00061E085E00E946B038091290290912A02C3 -:101EE00061E0892BB9F086E00E94990361E086E009 -:101EF0000E946B0310CE8AE00E94990360E0CDCF70 -:101F000089E00E94990360E0D6CF85E00E949903A2 -:101F100060E0DFCF86E00E94990360E0E8CFEF92B7 -:101F2000FF920F931F93CF93DF93F82E192FE62E76 -:101F3000042F81E0860F880F0E94430483E00E94F3 -:101F40004304CF2DD12FEC0EFD2EF11CCE15DF0555 -:101F5000B9F007FF13C0FE0184910E944304182FBB -:101F600080E00E944304812321968111EFCFDF910D -:101F7000CF911F910F91FF90EF9008958881EDCF41 -:101F800081E0F5CFEEE1F5E01382128288EE93E076 -:101F9000A0E0B0E084839583A683B78385E291E0D7 -:101FA000918380838FEF9FEF95878487EEE6F5E03E -:101FB00087E391E0918380831282138214821582D9 -:101FC000E4E7F5E091838083128213821482158204 -:101FD0000895CF93DF93CDB7DEB7CE54D1090FB6B6 -:101FE000F894DEBF0FBECDBF789484B5826084BD07 -:101FF00084B5816084BD85B5826085BD85B581600D -:1020000085BD80916E00816080936E00109281008A -:102010008091810082608093810080918100816045 -:102020008093810080918000816080938000809106 -:1020300091008260809391008091910081608093F3 -:102040009100809190008160809390008091C10008 -:1020500084608093C1008091C10082608093C10040 -:102060008091C10081608093C1008091C300816034 -:102070008093C3008091C00082608093C0008091F3 -:10208000C20081608093C20080917A008460809356 -:102090007A0080917A00826080937A0080917A0041 -:1020A000816080937A0080917A00806880937A00C2 -:1020B00010921C0310923C0210923B028091D700B8 -:1020C00081608093D70080EA8093D80089B58061D1 -:1020D00089BD89B5826089BD09B400FEFDCF61E08C -:1020E00070E080E090E00E9411048091D8008F7C25 -:1020F00080618093D8008091E000807F8093E00031 -:102100008091E1008E7E8093E1008DE08093E2007B -:10211000559A209A60E088E00E94990360E08CE084 -:102120000E94990360E084E00E94990360E08BE0E4 -:102130000E94990360E082E10E94990360E083E1DC -:102140000E94990360E084E10E94990360E085E1C8 -:102150000E94990360E086E10E94990360E087E1B4 -:102160000E94990361E082E00E94990361E087E0A8 -:102170000E94990361E088E00E946B0361E08CE0BB -:102180000E946B0361E084E00E946B0361E08BE0DE -:102190000E946B0361E082E10E946B0361E083E1D6 -:1021A0000E946B0361E084E10E946B0361E085E1C2 -:1021B0000E946B0361E086E10E946B0361E087E1AE -:1021C0000E946B0388E00E9442032F969FAF8EAF60 -:1021D0002F978CE00E9442032D969FAF8EAF2D97D4 -:1021E00084E00E9442032B969FAF8EAF2B978BE02B -:1021F0000E94420329969FAF8EAF29972F968EADEE -:102200009FAD2F97019709F0CDC12F961FAE1EAE3F -:102210002F972D968EAD9FAD2D97019709F0C9C1CF -:102220002D961FAE1EAE2D972B968EAD9FAD2B9784 -:10223000019709F0C5C12B961FAE1EAE2B972996AC -:102240008EAD9FAD2997019709F0C1C129961FAEA8 -:102250001EAE299782E10E94CA0345970CF0BEC1C9 -:1022600081E090E027969FAF8EAF279783E10E9491 -:10227000CA0345970CF0B7C181E090E025969FAF67 -:102280008EAF259784E10E94CA0345970CF0B0C138 -:1022900081E090E023969FAF8EAF239785E10E9467 -:1022A000CA0345970CF0A9C181E090E021969FAF49 -:1022B0008EAF219786E10E94CA0345970CF0A2C118 -:1022C00081E090E09EAF8DAF87E10E94CA03459701 -:1022D0000CF09BC181E090E0909394028093930274 -:1022E0008DAD9EAD2196CEACDFAC21972396EEACA2 -:1022F000FFAC239725960EAD1FAD25972796AEAD63 -:10230000BFAD27972996EEADFFAD29972B966EAD01 -:102310007FAD2B972D964EAD5FAD2D972F962EADA1 -:102320003FAD2F97880F991F8C0D9D1D880F991F0A -:102330008E0D9F1D880F991F800F911F880F991F69 -:102340008A0F9B1F880F991F8E0F9F1F880F991F41 -:10235000860F971F880F991F840F951F880F991F4D -:10236000820F931F90939202809391028091910229 -:10237000909192028D3F914030F08DEF91E09093DB -:1023800092028093910278948FEF9FEF90932B05A8 -:1023900080932A0568EE73E080E090E00E941104CB -:1023A00010927F0210923E0210923D026EE578E09C -:1023B0008CE691E00E9414096FED76E082E791E0EF -:1023C0000E94140969E878E087E791E00E94140907 -:1023D00062E978E08CE791E00E9414096BE978E00B -:1023E00081E891E00E94140966EE76E087E891E0CA -:1023F0000E9414096DE377E08BE891E00E941409D4 -:1024000061EB76E08FE891E00E94140965E378E0E3 -:1024100085E991E00E941409109280028091930254 -:1024200090919402892B09F4FCC086E10E94CA03B2 -:1024300045970CF0EFC08AE991E00E947A0881E0AC -:1024400080938002EDE1F3E081E092E0DF019C0106 -:102450001D9221503040E1F719E1E12E11E0F12EFB -:1024600010E000E0D701DC90B2E0EB0EF11C61E07F -:102470008D2D0E94990360E08D2D0E946B03F80161 -:10248000EE0FFF1FEB57FD4F118210820F5F1F4FA2 -:102490000430110539F721968EAD9FAD2197239613 -:1024A000EEACFFAC239725960EAD1FAD2597279672 -:1024B000AEADBFAD27972996EEADFFAD29972B9610 -:1024C0006EAD7FAD2B972D964EAD5FAD2D972F96B0 -:1024D0002EAD3FAD2F97880F991F8E0D9F1D880F32 -:1024E000991F800F911F880F991F8A0F9B1F880FBC -:1024F000991F8E0F9F1F880F991F860F971F880F98 -:10250000991F840F951F880F991F820F931F909317 -:10251000400280933F0260E082E00E946B03809162 -:10252000910290919202892B31F4809193029091C3 -:102530009402892B79F083E08093CC001092CD0037 -:102540001092CE001092C80080E98093C9008EE0FE -:102550008093CA0000E010E0FF24F3948EE195E040 -:102560000E94E605892B09F4E5C08EE195E00E9402 -:10257000A405E82EEAE08E1709F467C0FDE08F1786 -:1025800009F463C028E08213C2C068E08EE195E0E0 -:102590000E94D50480917F02882301F381508093AB -:1025A0007F02DCCF81E090E02F969FAF8EAF2F9718 -:1025B00030CE81E090E02D969FAF8EAF2D9734CE38 -:1025C00081E090E02B969FAF8EAF2B9738CE81E0C5 -:1025D00090E029969FAF8EAF29973CCE27961FAEED -:1025E0001EAE279743CE25961FAE1EAE25974ACE28 -:1025F00023961FAE1EAE239751CE21961FAE1EAE60 -:10260000219758CE1EAE1DAE5FCE1092940210924E -:10261000930266CE8FE491E00E947A080E94000641 -:102620001BCF62EC71E08EE195E00E94BE06409106 -:1026300091025091920270E060E02AE08EE195E014 -:102640000E9471070E94CD0666CFE0917F02F0E004 -:10265000ED5BFD4F108269E371E08EE195E00E9431 -:10266000BE0680914302882309F445C060ED71E005 -:1026700083E492E00E94B6169A8389835E0133E078 -:10268000A30EB11CCC24C394D12CEC2C9D2C60ED5A -:1026900071E090E080E00E94B616D5018D939D9385 -:1026A0005D01BEE1CB16D10429F0EFEFCE1ADE0AB0 -:1026B000892B59F7C0904102D0904202A980BA807C -:1026C000C114D104F9F0D6016D917C91C5010E942D -:1026D0002817892B99F4D6011296ED91FC91BE0131 -:1026E0006F5F7F4F8E2D992D09950E94CD068FEA41 -:1026F00093E00E947A0510927F0230CFF601C480E9 -:10270000D580DECF83EB93E00E94D306EECF682F17 -:102710008EE195E00E94D504E0917F02EB3308F052 -:102720001DCF81E08E0F80937F02F0E0ED5BFD4FC7 -:10273000E08214CF8091930290919402892B09F446 -:1027400080C08FB7F8948090960290909702A090E6 -:102750009802B09099028FBF40918D0250918E02E5 -:1027600060918F02709190022A013B01F0E14F0EBF -:10277000F7E25F1E611C711C81E090E0A0E0B0E018 -:102780002FEF421652066206720618F480E090E0BF -:10279000DC01840D951DA61DB71D88159905AA0598 -:1027A000BB0508F0F9C084169506A606B70608F022 -:1027B000ECC062ED71E08EE195E00E94BE06D12C86 -:1027C000C12CF601EE0FFF1FEB57FD4F40815181E9 -:1027D00070E060E02AE08EE195E00E94710760ED14 -:1027E00071E08EE195E00E94BE063FEFC31AD30A66 -:1027F00084E0C816D10429F784ED91E00E947A089C -:102800002FB7F8948091960290919702A091980228 -:10281000B09199022FBF80938D0290938E02A09366 -:102820008F02B0939002C3C0875E9E4FDC01EC9094 -:1028300061E08E2D0E94990360E08E2D0E946B0353 -:1028400033C18091910290919202892B09F009C1C4 -:102850008AE192E00E947A0861E08AE00E9499038E -:1028600061E08AE00E946B0361E089E00E949903C5 -:1028700060E089E00E946B0361E085E00E949903BB -:1028800060E085E00E946B0361E086E00E949903AE -:1028900060E086E00E946B0368EE73E080E090E009 -:1028A0000E94110461E08AE00E94990360E08AE0DE -:1028B0000E946B0361E089E00E94990361E089E076 -:1028C0000E946B0361E085E00E94990360E085E06F -:1028D0000E946B0361E086E00E94990360E086E05D -:1028E0000E946B0368EE73E080E090E00E941104A8 -:1028F00061E08AE00E94990360E08AE00E946B0335 -:1029000061E089E00E94990360E089E00E946B0326 -:1029100061E085E00E94990361E085E00E946B031D -:1029200061E086E00E94990360E086E00E946B030C -:1029300068EE73E080E090E00E94110461E08AE0BC -:102940000E94990360E08AE00E946B0361E089E0E5 -:102950000E94990360E089E00E946B0361E085E0DA -:102960000E94990360E085E00E946B0361E086E0CD -:102970000E94990361E086E00E946B0368EE73E0B9 -:1029800080E090E00E94110463CF481759076A075E -:102990007B0708F40ECF0BC0481759076A077B075F -:1029A00030F484169506A606B70608F402CF8FB752 -:1029B000F8948090960290909702A0909802B09020 -:1029C00099028FBF409181025091820260918302EF -:1029D000709184022A013B01A4E64A0E511C611C3D -:1029E000711C81E090E0A0E0B0E0EFEF4E165E06D3 -:1029F0006E067E0618F480E090E0DC01840D951DE3 -:102A0000A61DB71D88159905AA05BB0588F584166E -:102A10009506A606B706B0F1481759076A077B075F -:102A200088F18091800281110BC086E10E94CA0367 -:102A3000459734F486ED91E00E947A08F092800286 -:102A400080918002882369F086E10E94CA0345973D -:102A500044F08DEE91E00E947A080E941A061092CE -:102A600080020115110509F479CD0E94000076CD90 -:102A7000481759076A077B07A0F684169506A6062D -:102A8000B70678F6D12CC12CC601880F991FFC011E -:102A9000EB57FD4F20813181232B09F4C5CE808176 -:102AA0009181019791838083BFEFCB1ADB0AE4E029 -:102AB000CE16D10449F72FB7F894809196029091E1 -:102AC0009702A0919802B09199022FBF8093810242 -:102AD00090938202A0938302B093840260E087E027 -:102AE0000E946B039ECF0F931F93CF93DF9382308F -:102AF000910510F482E090E0E0917E05F0917F0571 -:102B000030E020E0B0E0A0E0309799F421153105E5 -:102B100009F44AC0281B390B24303105D8F58A81C5 -:102B20009B816115710589F1FB0193838283FE010D -:102B300011C0408151810281138148175907E0F08B -:102B40004817590799F4109761F012960C93129751 -:102B500013961C933296CF01DF91CF911F910F9165 -:102B6000089500937E0510937F05F4CF211531055C -:102B700051F04217530738F0A901DB019A01BD015A -:102B8000DF01F801C1CFEF01F9CF90937F0580936A -:102B90007E05CDCFFE01E20FF31F8193919322506A -:102BA000310939832883D7CF20917C0530917D0569 -:102BB000232B41F420910E0130910F0130937D05BC -:102BC00020937C0520910C0130910D0121153105D8 -:102BD00041F42DB73EB74091100150911101241BD3 -:102BE000350BE0917C05F0917D05E217F307A0F429 -:102BF0002E1B3F0B2817390778F0AC014E5F5F4F53 -:102C00002417350748F04E0F5F1F50937D05409302 -:102C10007C05819391939FCFF0E0E0E09CCFCF9330 -:102C2000DF930097E9F0FC01329713821282A091A2 -:102C30007E05B0917F05ED0130E020E01097A1F412 -:102C400020813181820F931F20917C0530917D0579 -:102C50002817390709F061C0F0937D05E0937C05E2 -:102C6000DF91CF910895EA01CE17DF07E8F54A8199 -:102C70005B819E0141155105B1F7E901FB83EA83B0 -:102C800049915991C40FD51FEC17FD0761F480815C -:102C900091810296840F951FE9019983888382812F -:102CA00093819B838A83F0E0E0E012968D919C9162 -:102CB00013970097B9F52D913C911197CD0102968C -:102CC000820F931F20917C0530917D0528173907CD -:102CD00039F6309751F510927F0510927E05B0932A -:102CE0007D05A0937C05BCCFD383C28340815181F5 -:102CF000840F951FC817D90761F44E5F5F4F888115 -:102D00009981480F591F518340838A819B81938306 -:102D100082832115310509F0B0CFF0937F05E09350 -:102D20007E059ECFFD01DC01C0CF13821282D7CF7A -:102D3000FC0188279927E89421912032E9F3293072 -:102D400010F02E30C8F32B3241F02D3239F4689454 -:102D500004C00E94E216820F911D219120532A3057 -:102D6000C0F31EF4909581959F4F08954AE755E072 -:102D70000E94BB160895FA01A191B081009719F441 -:102D80001097E1F0CD01DC01CD010D90002011F490 -:102D9000C00113C0FB012191222319F02015D9F79E -:102DA000F3CFFB012191201519F41E92119606C054 -:102DB0002223C1F70D900020A1F7D001FA01A193C1 -:102DC000B08308957AE0979F902D879F802D910D75 -:102DD00011240895F999FECF92BD81BDF89A9927E3 -:102DE00080B50895262FF999FECF1FBA92BD81BDF7 -:102DF00020BD0FB6F894FA9AF99A0FBE019608957D -:102E0000A1E21A2EAA1BBB1BFD010DC0AA1FBB1FEE -:102E1000EE1FFF1FA217B307E407F50720F0A21B60 -:102E2000B30BE40BF50B661F771F881F991F1A94CD -:102E300069F760957095809590959B01AC01BD01F7 -:102E4000CF010895EE0FFF1F0590F491E02D099436 -:102E5000FB01DC018D91019080190110D9F3990BD0 -:102E60000895FB01DC0101900D920020E1F7089527 -:042E7000F894FFCF04 -:102E7400FFFFFFFF00E100000000000000008005EC -:102E8400800000C180810000000A000900050006DE -:102E940000000000006405DF04A0059505E605A414 -:102EA40005C20500000000EF070D0A0053617669B2 -:102EB4006E6720454550524F4D2064617461004C4B -:102EC4006F6164696E6720454550524F4D206461BF -:102ED40074610052656C61793A003B0072656C6103 -:102EE400790068656C700073617665006C6F61646D -:102EF400007072696E74007365740064656C0063BD -:102F04006C656172006B696C6C00456E7465726906 -:102F14006E67206C6561726E696E67206D6F6465A3 -:102F2400202620636C6561722073657474696E6712 -:102F34007300537461727420416464726573733AEC -:102F440020005B005D00456E746572696E67206CDD -:102F54006561726E696E67206D6F6465004C6561B2 -:102F640076696E67206C6561726E696E67206D6F3D -:102F740064652C20736176696E67206461746120D6 -:102F8400746F20454550524F4D0052656C61792055 -:062F940044656D6F0000B2 +:1001700068206368616E6E656C200A276D696E2069 +:100180003C312E2E3235353E272073657420747233 +:100190006573686F6C642076616C756520666F723C +:1001A0002063757272656E742072656C61790A27BE +:1001B0007072696E7427202D207072696E742061D0 +:1001C00073736F63696174696F6E207461626C65CB +:1001D0000A277361766527202D2073617665206379 +:1001E000757272656E7420636F6E66696720696EE2 +:1001F000204E5652414D0A276C6F616427202D20F6 +:100200006C6F616420636F6E6669672066726F6DE4 +:10021000204E5652414D0A276B696C6C27202D20C9 +:1002200074657374207761746368646F670A276309 +:100230006C65617227202D20636C6561722061738B +:10024000736F63696174696F6E207461626C65209D +:10025000696E2052414D0A00696E76616C696420B6 +:1002600072656C6179230043757272656E742072D9 +:10027000656C61793A2000536574206D696E207653 +:10028000616C756520004E6F2043757272656E74E7 +:100290002072656C617920646566696E65642C20E6 +:1002A000757365202772656C61792720636F6D6DAA +:1002B000616E6400696E76616C69642076616C754C +:1002C00065004D696E696D616C2076616C75657352 +:1002D00020666F722072656C6179733A0044656CB8 +:1002E0006179206D75737420626520696E20302EEF +:1002F0002E3134203130732072616E676500444DB9 +:1003000058204368616E6E656C206D757374206251 +:100310006520696E20312E2E3531322072616E6774 +:10032000650075736167653A202761646420234422 +:100330004D586368616E6E656C205B64656C6179B5 +:100340005F696E5F31307365635D004E6F2043758A +:100350007272656E742072656C617920646566697D +:100360006E65642C20757365202772656C61792732 +:1003700020636F6D6D616E640075736167653A200F +:100380002764656C2023444D586368616E6E656C0C +:1003900000444D58204368616E6E656C206D757326 +:1003A0007420626520696E20312E2E353132207224 +:1003B000616E6765004E6F2043757272656E7420C2 +:1003C00072656C617920646566696E65642C207560 +:1003D0007365202772656C61792720636F6D6D618D +:1003E0006E64003E3E2000080B000202020000097D +:1003F0000400000102020000052400100105240190 +:1004000001010424020605240600010705810310EA +:10041000004009040100020A000000070502024032 +:1004200000000705830240000004030904120100D4 +:1004300002EF020140412336800001010203014125 +:10044000726475696E6F204C4C430041726475692B +:100450006E6F204C656F6E6172646F004D696E69DE +:100460006D616C2076616C75657320666F722072A9 +:10047000656C6179733A00496E76616C69642063DA +:100480006F6D6D616E6400070605040100080A0BBC +:100490000C0D0900000000240027002A002D003068 +:1004A0000000000000250028002B002E0031000075 +:1004B0000000002300260029002C002F0004040463 +:1004C00004040304050202020204030202020206FB +:1004D00006060606060404020202040404080201D9 +:1004E000104080401020408040800802040180407D +:1004F0002010020110801020404020000000020067 +:10050000090F0000030401000C00000000000000BF +:1005100000000000000000000000EC1011241FBECD +:10052000CFEFDAE0DEBFCDBF12E0A0E0B1E0EEE356 +:10053000F1E302C005900D92AE33B107D9F725E083 +:10054000AEE3B2E001C01D92AC39B207E1F712E0B0 +:10055000CEE8D2E004C02197FE010E948018CD3879 +:10056000D107C9F70E9413110C949D180C94000038 +:10057000FC0180913803882311F13FB7F89482E0A1 +:100580008093E9002091F200822F90E0181619065E +:1005900014F481E090E0882339F0289844E64093F1 +:1005A00037034091F1004083222339F02091F2007B +:1005B000211103C02BE62093E8003FBF08958FEF81 +:1005C0009FEF08952FB7F89483E08093E90090910E +:1005D000E800892F807295FF04C09091F20080E4BA +:1005E000891B2FBF08952091ED02260F3327331F5B +:1005F00021323105ECF420911103FC0190E080E000 +:10060000243069F082E00895A091ED022191AC01BF +:1006100043535D4FA40FB52FB11D2C930196861740 +:1006200098F38091ED02680F6093ED0280E00895E9 +:1006300081E0089508958FEF9FEF08958FEF9FEF6A +:1006400008958091C60290E0919581959109089551 +:10065000CF93DF93CB01EA01642F0E94F302CE0116 +:10066000DF91CF910895CF93DF931F92CDB7DEB77F +:10067000698361E0CE0101960E94F30281E090E07F +:100680000F90DF91CF9108958091BE0281110DC02E +:1006900082E08093BA0284E08093BB021092BD0294 +:1006A0001092BC0281E08093BE028AEB92E0089532 +:1006B00081508F3008F047C0E82FF0E0EE59FC4F32 +:1006C0000C9480187F038303710377037B03A303D8 +:1006D000A303A30386038C03900394039A03A30349 +:1006E0009E03809180008F77809380000895809191 +:1006F00080008F7DF9CF80918000877FF5CF84B512 +:100700008F7784BD089584B58F7DFBCF8091900055 +:100710008F77809390000895809190008F7DF9CF1E +:1007200080919000877FF5CF8091C0008F77809374 +:10073000C00008958091C0008F7DF9CF8091C200E4 +:10074000877F8093C2000895CF93DF93282F30E0F6 +:10075000F901E550FB4F8491F901E452FB4FD4912C +:10076000F901E354FB4FC491CC23A1F081110E9405 +:100770005803EC2FF0E0EE0FFF1FE155FB4FA59162 +:10078000B491EC91ED2381E090E009F480E0DF91F9 +:10079000CF91089580E090E0FACF1F93CF93DF933D +:1007A000282F30E0F901E550FB4F8491F901E45224 +:1007B000FB4FD491F901E354FB4FC491CC23A9F032 +:1007C000162F81110E945803EC2FF0E0EE0FFF1F4F +:1007D000EF55FB4FA591B4918FB7F894EC9111119F +:1007E00008C0D095DE23DC938FBFDF91CF911F919E +:1007F0000895DE2BF8CFCF93DF9390E0FC01E45215 +:10080000FB4F249183549B4FFC0184918823D1F0AA +:1008100090E0880F991FFC01ED56FB4FA591B49114 +:10082000FC01EF55FB4FC591D49161110EC09FB7EC +:10083000F8948C91E22FE0958E238C932881E2230B +:10084000E8839FBFDF91CF9108958FB7F894EC9123 +:10085000E22BEC938FBFF6CF8251E82FF0E0E957FF +:10086000FB4FE49190917B008E2F880F880F807250 +:100870009F7D892B80937B00E770E064E0937C0090 +:1008800080917A00806480937A0080917A0086FD5E +:10089000FCCF809178009091790008953FB7F8944B +:1008A0008091B6029091B702A091B802B091B902BE +:1008B00026B5A89B05C02F3F19F00196A11DB11DBB +:1008C0003FBFBA2FA92F982F8827BC01CD01620FF7 +:1008D000711D811D911D42E0660F771F881F991FB2 +:1008E0004A95D1F708958F929F92AF92BF92CF927F +:1008F000DF92EF92FF924B015C010E944E046B016C +:100900007C010E944E046C197D098E099F09683E86 +:10091000734081059105A8F321E0821A9108A1088E +:10092000B10888EEC80E83E0D81EE11CF11C8114CA +:100930009104A104B10429F7FF90EF90DF90CF90CC +:10094000BF90AF909F908F90089540914F0250912B +:10095000500220914D0230914E0242175307B4F4D9 +:100960009091E8009570E1F39091E80092FD19C034 +:100970008093F10080914F029091500201968F7305 +:100980009927892B19F48EEF8093E80080914F020C +:100990009091500201969093500280934F0281E013 +:1009A000089580E00895DF92EF92FF920F931F93D6 +:1009B000CF93DF93D82E8A01EB017B01E40EF51E65 +:1009C000CE15DF0559F0D7FE12C0FE0184910E94BA +:1009D000A50421968111F4CF0FEF1FEFC801DF911D +:1009E000CF911F910F91FF90EF90DF900895888134 +:1009F000EECF0F931F93CF93DF931F92CDB7DEB748 +:100A000082E0898342E450E067EE73E080E80E9470 +:100A1000D3040E944403DC0112960D911C91011530 +:100A2000110589F0D801ED91FC910280F381E02D50 +:100A3000BE016F5F7F4FC801099597FD04C0F801A3 +:100A400000851185ECCF89810F90DF91CF911F91A7 +:100A50000F910895615030F02091F100FC01208346 +:100A60000196F8CF289884E6809337030895DC0137 +:100A7000ED91FC910190F081E02D099490E080E0EF +:100A800008958F929F92AF92BF92CF92DF92EF9292 +:100A9000FF920F931F93CF93DF936C017B018A0129 +:100AA00080910B01882309F45CC08091380388236E +:100AB00009F457C08091530280FF05C08091E00087 +:100AC00082608093E000E801B12C8AEFA82E93E0C9 +:100AD000892E2AE3922E209711F4BB20D9F10E948F +:100AE000E20281110AC0AA94AA20D9F161E070E063 +:100AF00080E090E00E947304EECF8C171D0611F089 +:100B00000CF08C2F9FB7F8948092E9002091E800B8 +:100B100025FD02C09FBFDFCF282F30E0C21BD30BC3 +:100B2000F701815020F041914093F100FACFE20E9D +:100B3000F31EBB2021F09092E800B12CEBCF809106 +:100B4000E80085FDE7CF9092E800BB24B39420979E +:100B500009F3F3CF5D9884E68093520210161106D4 +:100B60003CF081E090E0F6019383828310E000E0A6 +:100B7000C801DF91CF911F910F91FF90EF90DF900F +:100B8000CF90BF90AF909F908F900895CF93DF93B9 +:100B90001F92CDB7DEB76983DC01ED91FC91028035 +:100BA000F381E02D41E050E0BE016F5F7F4F09957A +:100BB0000F90DF91CF9108950F931F93CF93DF9301 +:100BC0008C01D0E0C0E0F801EC0FFD1F64916623BA +:100BD00041F08AE395E00E94C605892B11F0219629 +:100BE000F2CFCE01DF91CF911F910F91089583E055 +:100BF0008093E9008091F200882319F08AE38093C2 +:100C0000E80008950E94E20290E00895CF93DF93F8 +:100C10001F92CDB7DEB7FC018485958597FD08C08E +:100C20002FEF3FEF358724870F90DF91CF91089505 +:100C3000CE0101960E94B802019719F4898190E0D3 +:100C4000F3CF8FEF9FEFF0CF0F931F93CF93DF93EF +:100C50001F92CDB7DEB78C01FC018485958597FF87 +:100C60000BC0CE0101960E94B802019771F48981F0 +:100C700090E0F80195878487F801848595850F9029 +:100C8000DF91CF911F910F9108958FEF9FEFF1CFDB +:100C9000FC018485958597FD0BC09FB7F89482E091 +:100CA0008093E9008091F2009FBF90E00196089543 +:100CB0009FB7F89482E08093E9008091F2009FBF93 +:100CC00090E008950F931F93CF93DF9309E313E010 +:100CD000D0E0C0E0CE010E944818F80181938F0156 +:100CE0002196C130F2E0DF07A9F789E393E0DF91B5 +:100CF000CF911F910F9108951F93CF93DF9385EDAF +:100D00008093BC008091C9029091CA02A091CB024D +:100D1000B091CC020796A11DB11D23E0B695A79511 +:100D2000979587952A95D1F72091BC0024FD03C0A3 +:100D30001092110352C04091C9025091CA026091B1 +:100D4000CB027091CC02452B462B472B69F30097C1 +:100D5000A105B10541F025E32A95F1F700000197BF +:100D6000A109B109E1CF8091C802C1E0C093C702D7 +:100D7000882399F1D091B8001091BA008091BC00FD +:100D80008A7B8093BC0060E082E00E94CD0360E03B +:100D900083E00E94CD0310921103C09313031092BD +:100DA000120361E082E00E94CD0361E083E00E94D3 +:100DB000CD038091B9008E7F8093B9008091B900F6 +:100DC0008D7F8093B90088E48093B80085E4809398 +:100DD000BC001093BA00D093B800DF91CF911F915F +:100DE0000895FB0101900020E9F73197AF01461B00 +:100DF000570BDC01ED91FC910280F381E02D099409 +:100E000069E371E08AE395E00E94F10683EE93E0E6 +:100E10000C94DC05CF93DF930E94DC05EC0169E3C1 +:100E200071E08AE395E00E94F1068C0F9D1FDF912F +:100E3000CF9108958CEA90E00E940A0781E090E04B +:100E40000895CF92DF92EF92FF921F93CF93DF939B +:100E50006C017B01109140028BE493E0112391F02F +:100E600082E293E022E0C216D10464F0FB018281A9 +:100E700093810E94F617EC0101978115924070F062 +:100E80008EEF92E00E940A0790E080E0DF91CF9120 +:100E90001F91FF90EF90DF90CF90089522E0C2164F +:100EA000D10459F0F701848195810E94F6179C01C5 +:100EB00040972CF08DED92E0E5CF2FE030E0C75C5D +:100EC000DC4F98819F70612F6150770BAB0161E01F +:100ED00070E001C0660F4A95EAF7962B84E0220F76 +:100EE000331F8A95E1F7922B988381E090E0CECF73 +:100EF000CF93DF93C0914002C11109C085EB93E00D +:100F00000E940A0790E080E0DF91CF910895029758 +:100F10001CF489E793E0F4CFFB01828193810E9466 +:100F2000F6179C01215031092115324018F081E952 +:100F300093E0E6CFFC01E75CFC4FC150DD0B21E004 +:100F400030E001C0220FCA95EAF72095808128235E +:100F5000208381E090E0D8CF8F929F92AF92BF9292 +:100F6000EF92FF920F931F93CF93DF93CDB7DEB72E +:100F7000A1970FB6F894DEBF0FBECDBF7C01FA017A +:100F8000CB0119A2223008F42AE08E010F5D1F4F19 +:100F9000822E912CB12CA12CBF01A50194010E949D +:100FA0005E18F901CA016A300CF5605DD8016E93D4 +:100FB0008D01232B242B252B79F790E080E01097CF +:100FC00021F0BD01C7010E94F106A1960FB6F89469 +:100FD000DEBF0FBECDBFDF91CF911F910F91FF906C +:100FE000EF90BF90AF909F908F900895695CDECF97 +:100FF000CF92DF92EF92FF92CF93DF93AB01BC01D0 +:1010000077FF1DC06A017C016DE28AE395E00E94D2 +:101010003705EC0144275527BA014C195D096E09C3 +:101020007F092AE08AE395E00E94AC078C0F9D1FA0 +:10103000DF91CF91FF90EF90DF90CF9008952AE05D +:101040008AE395E0DF91CF91FF90EF90DF90CF9012 +:101050000C94AC078F929F92AF92BF92CF92DF9287 +:10106000EF92FF920F931F93CF93DF937C018B013D +:101070006C0182E0C80ED11C4701E5E08E0E911C88 +:10108000D0E0C0E0F60141916F0150E070E060E017 +:101090002AE0C8010E94AC075C016EE2C8010E9410 +:1010A00037058A0D9B1DC80FD91FC814D90451F7E5 +:1010B000F701458150E070E060E02AE0C8010E943D +:1010C000AC078C0F9D1FDF91CF911F910F91FF9067 +:1010D000EF90DF90CF90BF90AF909F908F9008954A +:1010E000CF93DF93BC018AE395E00E94F106EC0107 +:1010F00069E371E08AE395E00E94F1068C0F9D1F81 +:10110000DF91CF9108958CE391E00E9470080E94D6 +:10111000620681E090E00895CF93DF93482F50E07E +:1011200070E060E02AE08AE395E00E94AC07EC0101 +:1011300069E371E08AE395E00E94F1068C0F9D1F40 +:10114000DF91CF910895029739F4FB018281938159 +:101150000E94F617809340028091400281508430B3 +:1011600038F088E592E00E940A0790E080E0089558 +:1011700087E692E00E94DC05809140020E948C0884 +:1011800081E090E00895CF93C1E068EE73E080E0E5 +:1011900090E00E9473048C2F0E948C08CF5FC431B2 +:1011A000A1F781E090E0CF9108954F925F926F9206 +:1011B0007F92AF92BF92CF92DF92EF92FF920F9306 +:1011C0001F93CF93DF93C12CD12C7601C39401E000 +:1011D00010E060E571E08AE395E00E94F106C70146 +:1011E000B6010E94F80769E371E08AE395E00E9486 +:1011F000F106C6010197580102C0AA0CBB1C8A95D2 +:10120000E2F7C9E3D3E0412C512C320143948981A8 +:1012100090E08A219B21892BD9F0C301B2010E9461 +:10122000F80765E571E08AE395E00E94F1066981BF +:1012300070E084E0759567958A95E1F7072E000CBC +:10124000880B990B0E94F80787E591E00E947008CF +:1012500021968FEF481A580A680A780A81E04816E2 +:1012600082E058066104710491F68FEFC81AD80A1B +:10127000E80AF80A85E0C816D104E104F10409F08F +:10128000A8CF81E090E0DF91CF911F910F91FF9067 +:10129000EF90DF90CF90BF90AF907F906F905F9076 +:1012A0004F900895CF92DF92EF92FF920F931F938A +:1012B000CF93DF936C018B0186E090E00E94D11602 +:1012C000EC0190935E0280935D02F6010190002094 +:1012D000E9F7CF018C199D090E94D1167C01B60156 +:1012E0000E949618F60101900020E9F73197EC1959 +:1012F000FD09EE0DFF1D1082F982E8821B830A832F +:1013000080915502909156029D838C83D093560212 +:10131000C0935502DF91CF911F910F91FF90EF90F5 +:10132000DF90CF900895FF920F931F93CF93DF9399 +:10133000EC01F62E08811981C8010E944818F816A0 +:1013400021F06F2DC8010E945018CE01DF91CF917E +:101350001F910F91FF900895EF92FF920F931F93AB +:10136000CF93DF9300D0CDB7DEB789E3E82E83E0DB +:10137000F82E10E000E01A830983F70161917F01E4 +:10138000CE0101960E9493090F5F1F4F0130F2E0DA +:101390001F0789F789E393E00F900F90DF91CF91BA +:1013A0001F910F91FF90EF90089589E591E00E94C1 +:1013B00070080E94AC0981E090E00895EF92FF92DE +:1013C0000F931F93CF93DF9300D0CDB7DEB7E9E340 +:1013D000F3E081E092E0DF019C011D92215030405A +:1013E000E1F744E050E061E070E087E592E00E94C0 +:1013F000861887E5E82E82E0F82E02E012E01A83D4 +:101400000983D7016D917D01CE0101960E94930958 +:101410000F5F1F4F0630B2E01B0789F781E090E0B5 +:101420000F900F90DF91CF911F910F91FF90EF9050 +:1014300008950F931F93CF93DF9300D0CDB7DEB7FE +:101440008230910594F482EC92E00E940A0707E54D +:1014500012E0F80181918F010E948C08F2E00B35B7 +:101460001F07B9F790E080E03DC011E0029751F40A +:10147000FB01828193810E94F617182F84EB92E082 +:10148000112331F080914002811105C086E892E07D +:101490000E940A07E7CF90E0FC01EA5AFD4F108353 +:1014A0008F5F9D4F9A838983612FCE0101960E94A1 +:1014B000930987E792E00E94DC05412F50E070E03D +:1014C00060E02AE08AE395E00E94AC076CE671E0F8 +:1014D0008AE395E00E94F106809140020E948C0808 +:1014E00081E090E00F900F90DF91CF911F910F91CD +:1014F00008951F920F920FB60F9211242F933F93CE +:101500004F935F936F937F938F939F93AF93BF930B +:10151000EF93FF938091B900887F803609F44AC029 +:10152000F0F5883209F4A5C018F5803109F499C0A6 +:10153000B8F4882309F4F5C0883009F492C0FF910B +:10154000EF91BF91AF919F918F917F916F915F913B +:101550004F913F912F910F900FBE0F901F901895B4 +:10156000883109F486C0803251F78093100314C08B +:10157000803409F49BC040F48033B9F38833F9F622 +:101580008093100385ECAEC0803509F483C08835A4 +:1015900009F494C0883499F60E947C06D0CF88392B +:1015A00009F48AC038F5883729F050F4883611F0EC +:1015B000803729F683E08093110310920F0355C002 +:1015C000883809F479C0803919F0803809F0B7CF2C +:1015D00080910F03803208F06FC0E0910F0381E02B +:1015E0008E0F80930F038091BB00F0E0E151FD4F1F +:1015F00080833BC0803B39F0D0F4803A09F477C057 +:10160000883A09F09CCF84E0809311031092EE0297 +:101610001092ED02F0E0E0E009958091ED02811179 +:101620000FC081E08093ED021092CD0209C0803C92 +:1016300009F4A8CF883C09F4A5CF883B09F07FCFF7 +:10164000E091EE0281E08E0F8093EE02F0E0E35332 +:10165000FD4F80818093BB009091EE028091ED025E +:1016600029C0809136038093BB0085EC8093BC0039 +:1016700066CF9091350380913403981758F5E09127 +:10168000350381E08E0F80933503F0E0EC5EFC4F74 +:101690008081E9CFE091350381E08E0F809335039F +:1016A0008091BB00F0E0EC5EFC4F808390913503AD +:1016B000809134039817C8F285E8D8CFE0913503BC +:1016C00081E08E0F809335038091BB00F0E0EC5EEB +:1016D000FC4F80838091130381115ECF81E0809362 +:1016E000120384EA8093BC001092110328CF85EC8A +:1016F0008093BC001092110380910F03803230F46C +:10170000E0910F03F0E0E151FD4F108260910F0373 +:1017100070E08FEE92E0F0E0E0E0099510920F03A8 +:101720000ECF1092100338CF1F920F920FB60F9268 +:1017300011242F933F938F939F93AF93BF938091E7 +:10174000B2029091B302A091B402B091B50230916F +:10175000B10223E0230F2D3758F50196A11DB11DCD +:101760002093B1028093B2029093B302A093B4028B +:10177000B093B5028091B6029091B702A091B802E1 +:10178000B091B9020196A11DB11D8093B60290934C +:10179000B702A093B802B093B902BF91AF919F91E5 +:1017A0008F913F912F910F900FBE0F901F90189522 +:1017B00026E8230F0296A11DB11DD2CF1F920F92D2 +:1017C0000FB60F9211248F939F938091E100909117 +:1017D000E100937F9093E10083FF0FC01092E90036 +:1017E00091E09093EB001092EC0092E39093ED0067 +:1017F0001092380398E09093F00082FF22C093E0AB +:101800009093E9009091F200992319F09AE3909354 +:10181000E80090915202992341F090915202915028 +:1018200090935202911101C05D9A909137039923D0 +:1018300041F090913703915090933703911101C07B +:10184000289A84FF18C08091E2008E7E8160809388 +:10185000E2008091E1008F7E8093E100809153024D +:101860008E7E8061809353029F918F910F900FBE67 +:101870000F901F90189580FFF7CF8091E2008E7E29 +:1018800080618093E2008091E1008E7E8093E10090 +:10189000809153028E7E8160E5CF1F920F920FB62A +:1018A0000F921124CF92DF92EF92FF920F931F932A +:1018B0002F933F934F935F936F937F938F939F9358 +:1018C000AF93BF93EF93FF93CF93DF93CDB7DEB783 +:1018D0006C97DEBFCDBF1092E9008091E80083FFD6 +:1018E00025C068E0CE0145960E942A0582EF8093CC +:1018F000E8008D8987FF39C09091E80090FFFCCF08 +:10190000982F907609F034C19E894F89588D2F8980 +:10191000F88C911131C0803861F580915402809328 +:10192000F1001092F1008EEF8093E8006C960FB6F4 +:10193000F894DEBF0FBECDBFDF91CF91FF91EF9145 +:10194000BF91AF919F918F917F916F915F914F91D7 +:101950003F912F911F910F91FF90EF90DF90CF90CB +:101960000F900FBE0F901F9018959EEF9093E80078 +:10197000C7CF1092F100D5CF913059F48111D3CF58 +:101980004130510581F6809154028D7F809354023D +:10199000CACF933049F48111C6CF4130510519F6B1 +:1019A000809154028260F2CF953041F48091E8003A +:1019B00080FFFCCF20682093E300B5CF963009F07C +:1019C000A9C00B8D1C8D22E01092E90010925002EC +:1019D00010924F02F2122EC010924E0210924D023F +:1019E0000E94F9041F8299E09983FA8291E09E8314 +:1019F00090EA98879AEF998720914F023091500290 +:101A0000275F3F4F3C832B838D831092E900109218 +:101A1000500210924F0210934E0200934D0249E083 +:101A200050E0BE016F5F7F4F80E00E94D3040E94B0 +:101A3000F90479CF10934E0200934D020E944403A3 +:101A4000DC0112960D911C910115110509F451C18B +:101A5000D801ED91FC910480F581E02DBE016B5E13 +:101A60007F4FC8010995009709F03EC1F801008534 +:101A70001185EACFF3E0FF120EC08F89882309F4A5 +:101A800040C0823061F440E860E18BE494E00E9461 +:101A9000B910811148CF81E28093EB0047CF8130AC +:101AA00029F440E86BE08FE394E0F1CF833099F7BD +:101AB0000E944403DC011296ED90FC908E010F5FB2 +:101AC0001F4F6801E114F10479F0D701ED91FC9109 +:101AD0000680F781E02DB801C7010995080F111D97 +:101AE000F701E084F184EECFD8011C92F601019059 +:101AF0000020E9F73197BF016C197D0940E0C6016C +:101B0000C6CF69E274E0FB01449150E080E80E9496 +:101B1000D30409CF973009F4BECF983021F481E087 +:101B20008093F10000CF993009F0FDCE837009F069 +:101B3000B2CFE3E1F1E081E031E096E321912223AD +:101B400071F08093E9003093EB00DF0111972C9145 +:101B50002093EC009093ED008F5F873079F78EE74C +:101B60008093EA001092EA008F8980933803DBCEDD +:101B70008B8D9C8D1092E9001092500210924F02B2 +:101B800090934E0280934D02898D811192C08E896F +:101B90009D89913A49F4813209F07DCF47E050E0C8 +:101BA00064E071E080E0B3CF913209F074CF83320A +:101BB00069F48F89988DB0E0A0E080930001909344 +:101BC0000101A0930201B0930301ADCE803269F40C +:101BD0008091E80082FFFCCF67E084E091E00E9402 +:101BE0002A058BEF8093E8009ECE823209F09BCECF +:101BF0008F8980930B01EEEFFFE7859194918B3FE6 +:101C00009C4D51F1E0E0F8E08091040190910501D4 +:101C1000A0910601B0910701803B9440A105B10558 +:101C2000F1F480910B0180FD1AC0EE3F8AE0F807C5 +:101C300089F587E797E7918380838091600080939F +:101C4000510288E19BE00FB6F894A895809360005C +:101C50000FBE9093600067CEEEEFFAE0D5CF8081A3 +:101C600091818737974709F05ECEA89580916000F3 +:101C70008861809360008091510280936000EE3F04 +:101C80002AE0F20789F08091FE0A9091FF0A918381 +:101C9000808349CE808191818737980751F2909354 +:101CA000FF0A8093FE0AC5CF1092FF0A1092FE0A27 +:101CB0003ACE0E944403DC0112960D911C9101154D +:101CC000110509F4E8CED801ED91FC910190F08165 +:101CD000E02DBE016B5E7F4FC8010995811123CEB7 +:101CE000F80100851185EBCF181619060CF41BCEF0 +:101CF000D2CEF1E0FF12BECE6DE274E004CF1F92AF +:101D00000F920FB60F921124AF92BF92CF92DF9233 +:101D1000EF92FF920F931F932F933F934F935F93F5 +:101D20006F937F938F939F93AF93BF93EF93FF93A3 +:101D3000CF93DF9300D0CDB7DEB72091C80080915C +:101D4000CE0090E09A83898323FF27C010924C0233 +:101D500010924B028091C800877F8093C8000000DA +:101D60000F900F90DF91CF91FF91EF91BF91AF91C5 +:101D70009F918F917F916F915F914F913F912F91A3 +:101D80001F910F91FF90EF90DF90CF90BF90AF9099 +:101D90000F900FBE0F901F90189524FF0EC0109249 +:101DA0004A021092490281E090E090934C028093A5 +:101DB0004B028091C8008F7ED0CF80914B029091D2 +:101DC0004C028230910509F41AC1C8F4019739F622 +:101DD00089819A81892B09F58091AF029091B00297 +:101DE000892B01F184E090E090934C0280934B02A8 +:101DF00081E090E090934A0280934902B0CF833013 +:101E0000910509F410C1049709F0A9CF8091490206 +:101E100090914A028130924088F010924C021092C8 +:101E20004B029DCF8091AD029091AE02019719F4C3 +:101E300083E090E0D9CF82E090E0D6CF61E087E008 +:101E40000E94CD0380919C02882309F469C0898196 +:101E50009A81892B09F45EC082E10E942C0410E172 +:101E600045970CF010E083E10E942C0445970CF498 +:101E7000106284E10E942C0445970CF4106485E103 +:101E80000E942C0445970CF41068E0914902F091EF +:101E90004A02E75CFC4F80818F70808388E00E945B +:101EA000A403892B51F4E0914902F0914A02E75CC6 +:101EB000FC4F80818160812B80838CE00E94A40391 +:101EC000892B51F4E0914902F0914A02E75CFC4F02 +:101ED00080818260812B808384E00E94A403892B0F +:101EE00051F4E0914902F0914A02E75CFC4F808195 +:101EF0008460812B80838BE00E94A403892B51F4A2 +:101F0000E0914902F0914A02E75CFC4F80818860D1 +:101F1000182B10838091490290914A0201966ACF52 +:101F2000F12CE12C34E6B32EE0914902F0914A0203 +:101F3000E75CFC4F808190E00E2C02C09595879560 +:101F40000A94E2F780FF41C0E0914902F0914A0211 +:101F5000E75CFC4F008110E024E0159507952A9579 +:101F6000E1F70F30110521F400915B0210915C0242 +:101F700089819A81F701E95AFD4F208128171906B6 +:101F800009F064F56701CC0CDD1CF601E75EFE4F3D +:101F9000A08061E08A2D0E94FB0361E08A2D0E94EF +:101FA000CD0381E090E00115110529F0B09EC0013C +:101FB000B19E900D1124F601EF55FD4F2081318126 +:101FC0002817390710F4918380838FEFE81AF80AF5 +:101FD00024E0E216F10409F0A7CF9CCF012BA9F76A +:101FE000F701EE0FFF1FE75EFE4F108161E0812FCA +:101FF0000E94FB0360E0812F0E94CD03E6CF809119 +:10200000AD029091AE022091490230914A020197AF +:102010008217930709F07ECF83E090E090934C0203 +:1020200080934B0277CF61E087E00E94CD0320913F +:10203000490230914A028091AD029091AE02281778 +:10204000390739F489819A81909348028093470235 +:1020500061CF8091AD029091AE0220914902309102 +:102060004A0201968217930739F489819A819093E5 +:102070004602809345024ECF8091AD029091AE0210 +:102080002091490230914A0202968217930739F44F +:1020900089819A8190934402809343023BCF80913F +:1020A000AD029091AE022091490230914A0203960E +:1020B0008217930709F053CE89819A819093420247 +:1020C0008093410281E090E090934A02809349021C +:1020D00010924C0210924B0280914702909148025C +:1020E00061E0892B91F18AE00E94FB0361E08AE0C4 +:1020F0000E94CD03809145029091460261E0892BB8 +:1021000049F189E00E94FB0361E089E00E94CD0370 +:10211000809143029091440261E0892B01F185E0B6 +:102120000E94FB0361E085E00E94CD0380914102A3 +:102130009091420261E0892BB9F086E00E94FB0396 +:1021400061E086E00E94CD030ACE8AE00E94FB0394 +:1021500060E0CDCF89E00E94FB0360E0D6CF85E050 +:102160000E94FB0360E0DFCF86E00E94FB0360E09B +:10217000E8CFEF92FF920F931F93CF93DF93F82E48 +:10218000192FE62E042F81E0860F880F0E94A504E8 +:1021900083E00E94A504CF2DD12FEC0EFD2EF11C63 +:1021A000CE15DF05B9F007FF13C0FE0184910E9430 +:1021B000A504182F80E00E94A50481232196811197 +:1021C000EFCFDF91CF911F910F91FF90EF90089586 +:1021D0008881EDCF81E0F5CFEAE3F5E0138212824A +:1021E00088EE93E0A0E0B0E084839583A683B78374 +:1021F00085E291E0918380838FEF9FEF95878487BD +:10220000EAE8F5E087E391E091838083128213820C +:1022100014821582E0E9F5E09183808312821382B3 +:10222000148215820895CF93DF93CDB7DEB7CE54D5 +:10223000D1090FB6F894DEBF0FBECDBF789484B538 +:10224000826084BD84B5816084BD85B5826085BDB2 +:1022500085B5816085BD80916E00816080936E0040 +:102260001092810080918100826080938100809132 +:1022700081008160809381008091800081608093E3 +:102280008000809191008260809391008091910004 +:102290008160809391008091900081608093900094 +:1022A0008091C10084608093C1008091C1008260F0 +:1022B0008093C1008091C10081608093C1008091B2 +:1022C000C30081608093C3008091C00082608093CE +:1022D000C0008091C20081608093C20080917A002A +:1022E000846080937A0080917A00826080937A0083 +:1022F00080917A00816080937A0080917A00806872 +:1023000080937A0010923803109254021092530274 +:102310008091D70081608093D70080EA8093D800B5 +:1023200089B5806189BD89B5826089BD09B400FE27 +:10233000FDCF61E070E080E090E00E947304809146 +:10234000D8008F7C80618093D8008091E000807FEE +:102350008093E0008091E1008E7E8093E1008DE02B +:102360008093E200559A209A60E088E00E94FB0387 +:1023700060E08CE00E94FB0360E084E00E94FB03CD +:1023800060E08BE00E94FB0360E082E10E94FB03BF +:1023900060E083E10E94FB0360E084E10E94FB03B4 +:1023A00060E085E10E94FB0360E086E10E94FB03A0 +:1023B00060E087E10E94FB0361E082E00E94FB0392 +:1023C00061E087E00E94FB0361E088E00E94CD03AA +:1023D00061E08CE00E94CD0361E084E00E94CD03C7 +:1023E00061E08BE00E94CD0361E082E10E94CD03B9 +:1023F00061E083E10E94CD0361E084E10E94CD03AE +:1024000061E085E10E94CD0361E086E10E94CD0399 +:1024100061E087E10E94CD0388E00E94A4032F962B +:102420009FAF8EAF2F978CE00E94A4032D969FAF95 +:102430008EAF2D9784E00E94A4032B969FAF8EAFA2 +:102440002B978BE00E94A40329969FAF8EAF29970C +:102450002F968EAD9FAD2F97019709F001C22F9651 +:102460001FAE1EAE2F972D968EAD9FAD2D97019767 +:1024700009F0FDC12D961FAE1EAE2D972B968EAD89 +:102480009FAD2B97019709F0F9C12B961FAE1EAE99 +:102490002B9729968EAD9FAD2997019709F0F5C12D +:1024A00029961FAE1EAE299782E10E942C04459703 +:1024B0000CF0F2C181E090E027969FAF8EAF279796 +:1024C00083E10E942C0445970CF0EBC181E090E081 +:1024D00025969FAF8EAF259784E10E942C044597E7 +:1024E0000CF0E4C181E090E023969FAF8EAF23977C +:1024F00085E10E942C0445970CF0DDC181E090E05D +:1025000021969FAF8EAF219786E10E942C044597BC +:102510000CF0D6C181E090E09EAF8DAF87E10E94C4 +:102520002C0445970CF0CFC181E090E09093B0026D +:102530008093AF028DAD9EAD2196CEACDFAC2197DE +:102540002396EEACFFAC239725960EAD1FAD2597D5 +:102550002796AEADBFAD27972996EEADFFAD299773 +:102560002B966EAD7FAD2B972D964EAD5FAD2D9713 +:102570002F962EAD3FAD2F97880F991F8C0D9D1D67 +:10258000880F991F8E0D9F1D880F991F800F911F17 +:10259000880F991F8A0F9B1F880F991F8E0F9F1FEF +:1025A000880F991F860F971F880F991F840F951FFB +:1025B000880F991F820F931F9093AE028093AD02F4 +:1025C0008091AD029091AE028D3F914030F08DEF41 +:1025D00091E09093AE028093AD0278948FEF9FEFDD +:1025E000909347058093460568EE73E080E090E0A5 +:1025F0000E94730410929B02109256021092550290 +:1026000063EA78E081E891E00E9452096AE177E0AC +:1026100087E891E00E94520965ED79E08CE891E04D +:102620000E94520963E878E081E991E00E94520932 +:1026300065ED78E086E991E00E94520961E277E079 +:102640008CE991E00E94520968E777E080EA91E026 +:102650000E9452096EED79E084EA91E00E945209ED +:1026600063EC78E08AEA91E00E94520969E17AE03D +:102670008FEA91E00E94520910929C028091AF0271 +:102680009091B002892B09F42AC186E10E942C04A2 +:1026900045970CF01DC183EB91E00E94700881E02A +:1026A00080939C02E9E3F3E081E092E0DF019C018A +:1026B0001D9221503040E1F719E1E12E11E0F12E99 +:1026C00010E000E0D701DC90B2E0EB0EF11C61E01D +:1026D0008D2D0E94FB0360E08D2D0E94CD03F8013B +:1026E000EE0FFF1FEF55FD4F118210820F5F1F4F3E +:1026F0000430110539F721968EAD9FAD21972396B1 +:10270000EEACFFAC239725960EAD1FAD259727960F +:10271000AEADBFAD27972996EEADFFAD29972B96AD +:102720006EAD7FAD2B972D964EAD5FAD2D972F964D +:102730002EAD3FAD2F97880F991F8E0D9F1D880FCF +:10274000991F800F911F880F991F8A0F9B1F880F59 +:10275000991F8E0F9F1F880F991F860F971F880F35 +:10276000991F840F951F880F991F820F931F9093B5 +:102770005C0280935B0282E092E00E9448188093A2 +:10278000570283E092E00E9448188093580284E048 +:1027900092E00E9448188093590285E092E00E94DE +:1027A000481880935A028CE594E00E940A0707E5D6 +:1027B00012E0FF24F394F8018081811101C0F082BE +:1027C0000F5F1F4F80810E948C08E2E00B351E07CF +:1027D00091F760E082E00E94CD038091AD0290917C +:1027E000AE02892B31F48091AF029091B002892B17 +:1027F00079F083E08093CC001092CD001092CE004F +:102800001092C80080E98093C9008EE08093CA00CE +:1028100000E010E0FF24F3948AE395E00E9448066C +:10282000892B09F4E5C08AE395E00E940606E82EAC +:10283000FAE08F1709F46BC02DE0821709F467C026 +:1028400038E08313C2C068E08AE395E00E94370550 +:1028500080919B02882301F3815080939B02DCCFFF +:1028600081E090E02F969FAF8EAF2F97FCCD81E057 +:1028700090E02D969FAF8EAF2D9700CE81E090E037 +:102880002B969FAF8EAF2B9704CE81E090E02996D8 +:102890009FAF8EAF299708CE27961FAE1EAE279703 +:1028A0000FCE25961FAE1EAE259716CE23961FAED1 +:1028B0001EAE23971DCE21961FAE1EAE219724CEAD +:1028C0001EAE1DAE2BCE1092B0021092AF0232CED1 +:1028D0008CE391E00E9470080E946206EDCE6BEDE1 +:1028E00071E08AE395E00E94F1064091AD025091BB +:1028F000AE0270E060E02AE08AE395E00E94AC0757 +:1029000069E371E08AE395E00E94F10634CFE0913B +:102910009B02F0E0E15AFD4F108269E371E08AE327 +:1029200095E00E94F10680915F02882309F441C07E +:1029300069EE71E08FE592E00E9414189A83898312 +:102940005E0183E0A80EB11CCC24C394D12CEC2CE6 +:102950009D2C69EE71E090E080E00E941418D50192 +:102960008D939D935D01BEE1CB16D10429F0EFEF6D +:10297000CE1ADE0A892B59F7C0905D02D0905E0214 +:10298000A980BA80C114D104D9F0D6016D917C918F +:10299000C5010E948D18892B79F4D6011296ED910C +:1029A000FC91BE016F5F7F4F8E2D992D09950E947E +:1029B000000710929B0230CFF601C480D580E2CF91 +:1029C00087E794E00E940A07F2CF682F8AE395E038 +:1029D0000E943705E0919B02EB3308F01DCF81E0A8 +:1029E0008E0F80939B02F0E0E15AFD4FE08214CFFE +:1029F0008091AF029091B002892B09F480C08FB70B +:102A0000F8948090B2029090B302A090B402B0907B +:102A1000B5028FBF4091A9025091AA026091AB020A +:102A20007091AC022A013B01F0E14F0EF7E25F1E0C +:102A3000611C711C81E090E0A0E0B0E02FEF421635 +:102A400052066206720618F480E090E0DC01840D04 +:102A5000951DA61DB71D88159905AA05BB0508F08B +:102A6000F2C084169506A606B70608F058C16BEEAC +:102A700071E08AE395E00E94F106D12CC12CF601A9 +:102A8000EE0FFF1FEF55FD4F4081518170E060E078 +:102A90002AE08AE395E00E94AC0769EE71E08AE3E0 +:102AA00095E00E94F1063FEFC31AD30A84E0C816EE +:102AB000D10429F78DEE91E00E9470082FB7F894A9 +:102AC0008091B2029091B302A091B402B091B5028C +:102AD0002FBF8093A9029093AA02A093AB02B09358 +:102AE000AC02BCC0875E9E4FDC01EC9061E08E2D95 +:102AF0000E94FB0360E08E2D0E94CD0333C18091C4 +:102B0000AD029091AE02892B09F002C183E392E0FD +:102B10000E94700861E08AE00E94FB0361E08AE0A5 +:102B20000E94CD0361E089E00E94FB0360E089E040 +:102B30000E94CD0361E085E00E94FB0360E085E038 +:102B40000E94CD0361E086E00E94FB0360E086E026 +:102B50000E94CD0368EE73E080E090E00E94730471 +:102B600061E08AE00E94FB0360E08AE00E94CD03FE +:102B700061E089E00E94FB0361E089E00E94CD03EF +:102B800061E085E00E94FB0360E085E00E94CD03E8 +:102B900061E086E00E94FB0360E086E00E94CD03D6 +:102BA00068EE73E080E090E00E94730461E08AE0E8 +:102BB0000E94FB0360E08AE00E94CD0361E089E0AF +:102BC0000E94FB0360E089E00E94CD0361E085E0A4 +:102BD0000E94FB0361E085E00E94CD0361E086E096 +:102BE0000E94FB0360E086E00E94CD0368EE73E084 +:102BF00080E090E00E94730461E08AE00E94FB03A1 +:102C000060E08AE00E94CD0361E089E00E94FB035E +:102C100060E089E00E94CD0361E085E00E94FB0353 +:102C200060E085E00E94CD0361E086E00E94FB0346 +:102C300061E086E00E94CD0368EE73E080E090E002 +:102C40000E94730463CF481759076A077B0730F463 +:102C500084169506A606B70608F409CF8FB7F89430 +:102C60008090B2029090B302A090B402B090B502EE +:102C70008FBF40919D0250919E0260919F02709182 +:102C8000A0022A013B01A4E64A0E511C611C711CE2 +:102C900081E090E0A0E0B0E0EFEF4E165E066E0639 +:102CA0007E0618F480E090E0DC01840D951DA61DE1 +:102CB000B71D88159905AA05BB05C0F584169506AC +:102CC000A606B706E8F1481759076A077B07C0F15F +:102CD00080919C0281110BC086E10E942C044597D3 +:102CE00034F48FEE91E00E947008F0929C02809183 +:102CF0009C02882369F086E10E942C04459744F0E9 +:102D000086E092E00E9470080E94AC0910929C023A +:102D10000115110509F480CD0E9400007DCD4817F2 +:102D200059076A077B0708F4A2CE98CF48175907BE +:102D30006A077B0768F684169506A606B70640F66E +:102D4000D12CC12CC601880F991FFC01EF55FD4FF6 +:102D500020813181232B09F4C5CE80819181019797 +:102D600091838083BFEFCB1ADB0AE4E0CE16D10457 +:102D700049F72FB7F8948091B2029091B302A091D5 +:102D8000B402B091B5022FBF80939D0290939E0232 +:102D9000A0939F02B093A00260E087E00E94CD0361 +:102DA00097CF0F931F93CF93DF938230910510F449 +:102DB00082E090E0E0919A05F0919B0530E020E000 +:102DC000B0E0A0E0309799F42115310509F44AC02C +:102DD000281B390B24303105D8F58A819B81611578 +:102DE000710589F1FB0193838283FE0111C040814B +:102DF00051810281138148175907E0F0481759079C +:102E000099F4109761F012960C93129713961C93F5 +:102E10003296CF01DF91CF911F910F9108950093CA +:102E20009A0510939B05F4CF2115310551F04217F7 +:102E3000530738F0A901DB019A01BD01DF01F80158 +:102E4000C1CFEF01F9CF90939B0580939A05CDCF29 +:102E5000FE01E20FF31F81939193225031093983D0 +:102E60002883D7CF2091980530919905232B41F4E1 +:102E700020910E0130910F01309399052093980510 +:102E800020910C0130910D012115310541F42DB730 +:102E90003EB74091100150911101241B350BE09178 +:102EA0009805F0919905E217F307A0F42E1B3F0B4C +:102EB0002817390778F0AC014E5F5F4F24173507AC +:102EC00048F04E0F5F1F50939905409398058193EA +:102ED00091939FCFF0E0E0E09CCFCF93DF930097FA +:102EE000E9F0FC01329713821282A0919A05B09109 +:102EF0009B05ED0130E020E01097A1F420813181A5 +:102F0000820F931F20919805309199052817390752 +:102F100009F061C0F0939905E0939805DF91CF9196 +:102F20000895EA01CE17DF07E8F54A815B819E012B +:102F300041155105B1F7E901FB83EA8349915991A4 +:102F4000C40FD51FEC17FD0761F4808191810296B3 +:102F5000840F951FE90199838883828193819B83E4 +:102F60008A83F0E0E0E012968D919C911397009790 +:102F7000B9F52D913C911197CD010296820F931FC7 +:102F800020919805309199052817390739F630971F +:102F900051F510929B0510929A05B0939905A09354 +:102FA0009805BCCFD383C28340815181840F951F84 +:102FB000C817D90761F44E5F5F4F88819981480F28 +:102FC000591F518340838A819B819383828321157A +:102FD000310509F0B0CFF0939B05E0939A059ECFA1 +:102FE000FD01DC01C0CF13821282D7CFFC018827FC +:102FF0009927E89421912032E9F3293010F02E30FE +:10300000C8F32B3241F02D3239F4689404C00E9489 +:103010004018820F911D219120532A30C0F31EF4D5 +:10302000909581959F4F089546E955E00E941918A3 +:103030000895FA01A191B081009719F41097E1F079 +:10304000CD01DC01CD010D90002011F4C00113C0B1 +:10305000FB012191222319F02015D9F7F3CFFB01B1 +:103060002191201519F41E92119606C02223C1F752 +:103070000D900020A1F7D001FA01A193B08308952B +:103080007AE0979F902D879F802D910D11240895B0 +:10309000F999FECF92BD81BDF89A992780B5089520 +:1030A000262FF999FECF1FBA92BD81BD20BD0FB664 +:1030B000F894FA9AF99A0FBE01960895A1E21A2E91 +:1030C000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1FCC +:1030D000A217B307E407F50720F0A21BB30BE40B1C +:1030E000F50B661F771F881F991F1A9469F7609563 +:1030F0007095809590959B01AC01BD01CF0108951D +:10310000EE0FFF1F0590F491E02D0994DC0101C042 +:103110006D9341505040E0F70895FB01DC018D9123 +:10312000019080190110D9F3990B0895FB01DC017E +:0E31300001900D920020E1F70895F894FFCF72 +:10313E00FFFFFFFF00E100000000000000009C0503 +:10314E00800000C180810000000A00090005000611 +:10315E000000000000C60541050206F705480606F8 +:10316E00062406000000002A080D0A004C6F616458 +:10317E00696E6720454550524F4D20646174610061 +:10318E0052656C61793A003B00536176696E672037 +:10319E00454550524F4D20646174610020666F7238 +:1031AE002063757272656E742072656C61793A2057 +:1031BE000072656C61790068656C7000736176658C +:1031CE00006C6F6164007072696E740073657400D8 +:1031DE0064656C00636C656172006B696C6C006D8C +:1031EE00696E00456E746572696E67206C656172FA +:1031FE006E696E67206D6F6465202620636C656155 +:10320E00722073657474696E67730053746172749F +:10321E0020416464726573733A20005B005D004563 +:10322E006E746572696E67206C6561726E696E6729 +:10323E00206D6F6465004C656176696E67206C6504 +:10324E0061726E696E67206D6F64652C2073617696 +:10325E00696E67206461746120746F204545505219 +:0E326E004F4D0052656C61792044656D6F0014 :00000001FF diff --git a/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino b/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino index 7a9ea3b..7e91e9d 100644 --- a/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino +++ b/dmx_receiver_mos_relay_public/dmx_receiver_mos_relay_public.ino @@ -103,7 +103,7 @@ byte dmxArray[512+1]; #define CH_4 8 #define CHANNELS 4 volatile unsigned int chanDelay[CHANNELS]; -volatile byte chanMin[CHANNELS]; +byte chanMin[CHANNELS]; //volatile unsigned int chanMax[CHANNELS]; @@ -288,6 +288,9 @@ return 1; int cmdFunctionClear(int arg_cnt, char **args) { memset(dmxArray,0,sizeof(dmxArray)); +memset(chanMin,1,sizeof(chanMin)); +EEPROM.put(chanMinOffset,chanMin); + return 1; }