From b5af3c39fdc21e0a41be5513319e9311777b1004 Mon Sep 17 00:00:00 2001 From: Mark Sproul Date: Sun, 4 Dec 2011 16:54:32 -0500 Subject: [PATCH 1/3] Added setRowOffsets to LiquidCrystal library --- libraries/LiquidCrystal/LiquidCrystal.cpp | 17 +++++++++++++++-- libraries/LiquidCrystal/LiquidCrystal.h | 13 +++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/libraries/LiquidCrystal/LiquidCrystal.cpp b/libraries/LiquidCrystal/LiquidCrystal.cpp index 0653487d70c..678614ade55 100644 --- a/libraries/LiquidCrystal/LiquidCrystal.cpp +++ b/libraries/LiquidCrystal/LiquidCrystal.cpp @@ -79,6 +79,8 @@ void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t en else _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS; + setRowOffsets(0x00, 0x40, 0x14, 0x54); + begin(16, 1); } @@ -172,14 +174,25 @@ void LiquidCrystal::home() void LiquidCrystal::setCursor(uint8_t col, uint8_t row) { - int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; - if ( row >= _numlines ) { +// int row_offsets[] = { 0x00, 0x40, 0x10, 0x50 }; +// int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; //* default + if ( row > _numlines ) { row = _numlines-1; // we count rows starting w/0 } command(LCD_SETDDRAMADDR | (col + row_offsets[row])); } +//* added by MLS Dec 2011 +void LiquidCrystal::setRowOffsets(int row0, int row1, int row2, int row3) +{ + row_offsets[0] = row0; + row_offsets[1] = row1; + row_offsets[2] = row2; + row_offsets[3] = row3; +} + + // Turn the display on/off (quickly) void LiquidCrystal::noDisplay() { _displaycontrol &= ~LCD_DISPLAYON; diff --git a/libraries/LiquidCrystal/LiquidCrystal.h b/libraries/LiquidCrystal/LiquidCrystal.h index 24ec5afdf5b..870cbb2ca1d 100755 --- a/libraries/LiquidCrystal/LiquidCrystal.h +++ b/libraries/LiquidCrystal/LiquidCrystal.h @@ -1,6 +1,17 @@ +//****************************************************************************************** +//* LiquidCrystal.h for Arduino +//****************************************************************************************** +//* Edit History +//****************************************************************************************** +//* Dec 4, 2011 Added setRowOffsets +//****************************************************************************************** + + #ifndef LiquidCrystal_h #define LiquidCrystal_h +#define _SETROWOFFSET_SUPPORTED_ + #include #include "Print.h" @@ -77,6 +88,7 @@ class LiquidCrystal : public Print { void autoscroll(); void noAutoscroll(); + void setRowOffsets(int row1, int row2, int row3, int row4); void createChar(uint8_t, uint8_t[]); void setCursor(uint8_t, uint8_t); virtual size_t write(uint8_t); @@ -101,6 +113,7 @@ class LiquidCrystal : public Print { uint8_t _initialized; uint8_t _numlines,_currline; + int row_offsets[4]; }; #endif From a150841b8dc2e623343bafbe7929b60497516b75 Mon Sep 17 00:00:00 2001 From: Mark Sproul Date: Fri, 16 Dec 2011 10:56:54 -0500 Subject: [PATCH 2/3] Added setRowOffsets to support non-standard LCDs --- libraries/LiquidCrystal/LiquidCrystal.cpp | 15 ++++++++++++--- libraries/LiquidCrystal/LiquidCrystal.h | 12 +----------- 2 files changed, 13 insertions(+), 14 deletions(-) mode change 100755 => 100644 libraries/LiquidCrystal/LiquidCrystal.h diff --git a/libraries/LiquidCrystal/LiquidCrystal.cpp b/libraries/LiquidCrystal/LiquidCrystal.cpp index 678614ade55..089fa1ff40f 100644 --- a/libraries/LiquidCrystal/LiquidCrystal.cpp +++ b/libraries/LiquidCrystal/LiquidCrystal.cpp @@ -1,9 +1,17 @@ +//****************************************************************************************** +//* LiquidCrystal library for Arduino +//****************************************************************************************** +//* Edit History +//****************************************************************************************** +//* Dec 4, 2011 Added setRowOffsets +//****************************************************************************************** + #include "LiquidCrystal.h" #include #include #include -#include "Arduino.h" +#include "WProgram.h" // When the display powers up, it is configured as follows: // @@ -183,7 +191,9 @@ void LiquidCrystal::setCursor(uint8_t col, uint8_t row) command(LCD_SETDDRAMADDR | (col + row_offsets[row])); } +//****************************************************************************************** //* added by MLS Dec 2011 +//* this allows support for non standard LCD displays void LiquidCrystal::setRowOffsets(int row0, int row1, int row2, int row3) { row_offsets[0] = row0; @@ -271,9 +281,8 @@ inline void LiquidCrystal::command(uint8_t value) { send(value, LOW); } -inline size_t LiquidCrystal::write(uint8_t value) { +inline void LiquidCrystal::write(uint8_t value) { send(value, HIGH); - return 1; // assume sucess } /************ low level data pushing commands **********/ diff --git a/libraries/LiquidCrystal/LiquidCrystal.h b/libraries/LiquidCrystal/LiquidCrystal.h old mode 100755 new mode 100644 index 870cbb2ca1d..7ce531977a2 --- a/libraries/LiquidCrystal/LiquidCrystal.h +++ b/libraries/LiquidCrystal/LiquidCrystal.h @@ -1,11 +1,3 @@ -//****************************************************************************************** -//* LiquidCrystal.h for Arduino -//****************************************************************************************** -//* Edit History -//****************************************************************************************** -//* Dec 4, 2011 Added setRowOffsets -//****************************************************************************************** - #ifndef LiquidCrystal_h #define LiquidCrystal_h @@ -91,10 +83,8 @@ class LiquidCrystal : public Print { void setRowOffsets(int row1, int row2, int row3, int row4); void createChar(uint8_t, uint8_t[]); void setCursor(uint8_t, uint8_t); - virtual size_t write(uint8_t); + virtual void write(uint8_t); void command(uint8_t); - - using Print::write; private: void send(uint8_t, uint8_t); void write4bits(uint8_t); From 18572919b0ab9033a09e3416df54eecaa1ac6910 Mon Sep 17 00:00:00 2001 From: Mark Sproul Date: Mon, 2 Jan 2012 14:08:17 -0500 Subject: [PATCH 3/3] Issue#181: watchdog timer Fixed, Issue#392 git status! bug, Fixed, Issue#505 protocl bug, fixed NOT TESTED, issue#543 Epprom WRite, fixed NOT TESTED, issue #544, partially fixed, needs more work --- .../bootloaders/stk500v2/avr_cpunames.h | 189 ++++ .../arduino/bootloaders/stk500v2/stk500boot.c | 365 +++++-- .../stk500v2/stk500boot_v2_mega2560.hex | 969 +++++++++--------- 3 files changed, 903 insertions(+), 620 deletions(-) create mode 100644 hardware/arduino/bootloaders/stk500v2/avr_cpunames.h diff --git a/hardware/arduino/bootloaders/stk500v2/avr_cpunames.h b/hardware/arduino/bootloaders/stk500v2/avr_cpunames.h new file mode 100644 index 00000000000..ad0ed9c02b4 --- /dev/null +++ b/hardware/arduino/bootloaders/stk500v2/avr_cpunames.h @@ -0,0 +1,189 @@ +//************************************************************************************************** +//* +//* Atmel AVR CPU name strings +//* +//************************************************************************************************** +//* Sep 19, 2010 Started on avr_cpunames.h +//************************************************************************************************** + +//#include "avr_cpunames.h" + +//************************************************************************************************** + + +#if defined (__AVR_AT94K__) + #define _AVR_CPU_NAME_ "AT94k" +#elif defined (__AVR_AT43USB320__) +#elif defined (__AVR_AT43USB355__) +#elif defined (__AVR_AT76C711__) +#elif defined (__AVR_AT86RF401__) +#elif defined (__AVR_AT90PWM1__) +#elif defined (__AVR_AT90PWM2__) +#elif defined (__AVR_AT90PWM2B__) +#elif defined (__AVR_AT90PWM3__) +#elif defined (__AVR_AT90PWM3B__) +#elif defined (__AVR_AT90PWM216__) +#elif defined (__AVR_AT90PWM316__) +#elif defined (__AVR_ATmega32C1__) +#elif defined (__AVR_ATmega32M1__) +#elif defined (__AVR_ATmega32U4__) + #define _AVR_CPU_NAME_ "ATmega32U4" +#elif defined (__AVR_ATmega32U6__) + #define _AVR_CPU_NAME_ "ATmega32U6" +#elif defined (__AVR_ATmega128__) + #define _AVR_CPU_NAME_ "Atmega128" +#elif defined (__AVR_ATmega1280__) + #define _AVR_CPU_NAME_ "ATmega1280" +#elif defined (__AVR_ATmega1281__) + #define _AVR_CPU_NAME_ "ATmega1281" +#elif defined (__AVR_ATmega1284P__) + #define _AVR_CPU_NAME_ "ATmega1284" +#elif defined (__AVR_ATmega128RFA1__) + #define _AVR_CPU_NAME_ "ATmega128RFA1" +#elif defined (__AVR_ATmega2560__) + #define _AVR_CPU_NAME_ "ATmega2560" +#elif defined (__AVR_ATmega2561__) + #define _AVR_CPU_NAME_ "ATmega2561" +#elif defined (__AVR_AT90CAN32__) + #define _AVR_CPU_NAME_ "AT90CAN32" +#elif defined (__AVR_AT90CAN64__) + #define _AVR_CPU_NAME_ "AT90CAN64" +#elif defined (__AVR_AT90CAN128__) + #define _AVR_CPU_NAME_ "AT90CAN128" +#elif defined (__AVR_AT90USB82__) + #define _AVR_CPU_NAME_ "AT90USB82" +#elif defined (__AVR_AT90USB162__) + #define _AVR_CPU_NAME_ "AT90USB162" +#elif defined (__AVR_AT90USB646__) + #define _AVR_CPU_NAME_ "AT90USB646" +#elif defined (__AVR_AT90USB647__) + #define _AVR_CPU_NAME_ "AT90USB647" +#elif defined (__AVR_AT90USB1286__) + #define _AVR_CPU_NAME_ "AT90USB1286" +#elif defined (__AVR_AT90USB1287__) + #define _AVR_CPU_NAME_ "AT90USB1287" +#elif defined (__AVR_ATmega64__) + #define _AVR_CPU_NAME_ "ATmega64" +#elif defined (__AVR_ATmega640__) + #define _AVR_CPU_NAME_ "ATmega640" +#elif defined (__AVR_ATmega644__) + #define _AVR_CPU_NAME_ "ATmega644" +#elif defined (__AVR_ATmega644P__) + #define _AVR_CPU_NAME_ "ATmega644P" +#elif defined (__AVR_ATmega645__) + #define _AVR_CPU_NAME_ "ATmega645" +#elif defined (__AVR_ATmega6450__) + #define _AVR_CPU_NAME_ "ATmega6450" +#elif defined (__AVR_ATmega649__) + #define _AVR_CPU_NAME_ "ATmega649" +#elif defined (__AVR_ATmega6490__) + #define _AVR_CPU_NAME_ "ATmega6490" +#elif defined (__AVR_ATmega103__) + #define _AVR_CPU_NAME_ "ATmega103" +#elif defined (__AVR_ATmega32__) + #define _AVR_CPU_NAME_ "Atmega32" +#elif defined (__AVR_ATmega323__) + #define _AVR_CPU_NAME_ "ATmega323" +#elif defined (__AVR_ATmega324P__) + #define _AVR_CPU_NAME_ "ATmega324P" +#elif defined (__AVR_ATmega325__) + #define _AVR_CPU_NAME_ "ATmega325" +#elif defined (__AVR_ATmega325P__) + #define _AVR_CPU_NAME_ "ATmega325P" +#elif defined (__AVR_ATmega3250__) + #define _AVR_CPU_NAME_ "ATmega3250" +#elif defined (__AVR_ATmega3250P__) + #define _AVR_CPU_NAME_ "ATmega3250P" +#elif defined (__AVR_ATmega328P__) + #define _AVR_CPU_NAME_ "ATmega328P" +#elif defined (__AVR_ATmega329__) + #define _AVR_CPU_NAME_ "ATmega329" +#elif defined (__AVR_ATmega329P__) + #define _AVR_CPU_NAME_ "ATmega329P" +#elif defined (__AVR_ATmega3290__) + #define _AVR_CPU_NAME_ "ATmega3290" +#elif defined (__AVR_ATmega3290P__) + #define _AVR_CPU_NAME_ "ATmega3290P" +#elif defined (__AVR_ATmega32HVB__) + #define _AVR_CPU_NAME_ "ATmega32HVB" +#elif defined (__AVR_ATmega406__) + #define _AVR_CPU_NAME_ "ATmega406" +#elif defined (__AVR_ATmega16__) + #define _AVR_CPU_NAME_ "Atmega16" +#elif defined (__AVR_ATmega161__) + #define _AVR_CPU_NAME_ "ATmega161" +#elif defined (__AVR_ATmega162__) + #define _AVR_CPU_NAME_ "ATmega162" +#elif defined (__AVR_ATmega163__) + #define _AVR_CPU_NAME_ "ATmega163" +#elif defined (__AVR_ATmega164P__) + #define _AVR_CPU_NAME_ "ATmega164P" +#elif defined (__AVR_ATmega165__) + #define _AVR_CPU_NAME_ "ATmega165" +#elif defined (__AVR_ATmega165P__) + #define _AVR_CPU_NAME_ "ATmega165P" +#elif defined (__AVR_ATmega168__) + #define _AVR_CPU_NAME_ "ATmega168" +#elif defined (__AVR_ATmega168P__) + #define _AVR_CPU_NAME_ "ATmega168P" +#elif defined (__AVR_ATmega169__) + #define _AVR_CPU_NAME_ "Atmega169" +#elif defined (__AVR_ATmega169P__) + #define _AVR_CPU_NAME_ "ATmega169P" +#elif defined (__AVR_ATmega8HVA__) + #define _AVR_CPU_NAME_ "ATmega8HVA" +#elif defined (__AVR_ATmega16HVA__) + #define _AVR_CPU_NAME_ "ATmega16HVA" +#elif defined (__AVR_ATmega8__) + #define _AVR_CPU_NAME_ "ATmega8" +#elif defined (__AVR_ATmega48__) + #define _AVR_CPU_NAME_ "ATmega48" +#elif defined (__AVR_ATmega48P__) + #define _AVR_CPU_NAME_ "ATmega48P" +#elif defined (__AVR_ATmega88__) + #define _AVR_CPU_NAME_ "ATmega88" +#elif defined (__AVR_ATmega88P__) + #define _AVR_CPU_NAME_ "ATmega88P" +#elif defined (__AVR_ATmega8515__) + #define _AVR_CPU_NAME_ "ATmega8515" +#elif defined (__AVR_ATmega8535__) + #define _AVR_CPU_NAME_ "ATmega8535" +#elif defined (__AVR_AT90S8535__) +#elif defined (__AVR_AT90C8534__) +#elif defined (__AVR_AT90S8515__) +#elif defined (__AVR_AT90S4434__) +#elif defined (__AVR_AT90S4433__) +#elif defined (__AVR_AT90S4414__) +#elif defined (__AVR_ATtiny22__) +#elif defined (__AVR_ATtiny26__) +#elif defined (__AVR_AT90S2343__) +#elif defined (__AVR_AT90S2333__) +#elif defined (__AVR_AT90S2323__) +#elif defined (__AVR_AT90S2313__) +#elif defined (__AVR_ATtiny2313__) + #define _AVR_CPU_NAME_ "ATtiny2313" +#elif defined (__AVR_ATtiny13__) +#elif defined (__AVR_ATtiny13A__) +#elif defined (__AVR_ATtiny25__) +#elif defined (__AVR_ATtiny45__) +#elif defined (__AVR_ATtiny85__) +#elif defined (__AVR_ATtiny24__) +#elif defined (__AVR_ATtiny44__) +#elif defined (__AVR_ATtiny84__) +#elif defined (__AVR_ATtiny261__) +#elif defined (__AVR_ATtiny461__) +#elif defined (__AVR_ATtiny861__) +#elif defined (__AVR_ATtiny43U__) +#elif defined (__AVR_ATtiny48__) +#elif defined (__AVR_ATtiny88__) +#elif defined (__AVR_ATtiny167__) +#elif defined (__AVR_ATmega8U2__) + #define _AVR_CPU_NAME_ "ATmega8U2" +#else + #error cpu not defined +#endif + + +#if !defined (_AVR_CPU_NAME_) +// #define _AVR_CPU_NAME_ "UNKNOWN" +#endif diff --git a/hardware/arduino/bootloaders/stk500v2/stk500boot.c b/hardware/arduino/bootloaders/stk500v2/stk500boot.c index 13dec895182..89eead16366 100755 --- a/hardware/arduino/bootloaders/stk500v2/stk500boot.c +++ b/hardware/arduino/bootloaders/stk500v2/stk500boot.c @@ -79,9 +79,27 @@ Description: add timeout feature like previous Wiring bootloader //* Jul 29, 2010 Added recchar_timeout for timing out on bootloading //* Aug 23, 2010 Added support for atmega2561 //* Aug 26, 2010 Removed support for BOOT_BY_SWITCH +//* Sep 8, 2010 Added support for atmega16 +//* Nov 9, 2010 Issue 392:Fixed bug that 3 !!! in code would cause it to jump to monitor +//* Jun 24, 2011 Removed analogRead (was not used) +//* Dec 29, 2011 Issue 181: added watch dog timmer support +//* Dec 29, 2011 Issue 505: bootloader is comparing the seqNum to 1 or the current sequence +//* Jan 1, 2012 Issue 543: CMD_CHIP_ERASE_ISP now returns STATUS_CMD_FAILED instead of STATUS_CMD_OK +//* Jan 1, 2012 Issue 543: Write EEPROM now does something (NOT TESTED) +//* Jan 1, 2012 Issue 544: stk500v2 bootloader doesn't support reading fuses //************************************************************************ - +//************************************************************************ +//* these are used to test issues +//* http://code.google.com/p/arduino/issues/detail?id=505 +//* Reported by mark.stubbs, Mar 14, 2011 +//* The STK500V2 bootloader is comparing the seqNum to 1 or the current sequence +//* (IE: Requiring the sequence to be 1 or match seqNum before continuing). +//* The correct behavior is for the STK500V2 to accept the PC's sequence number, and echo it back for the reply message. +#define _FIX_ISSUE_505_ +//************************************************************************ +//* Issue 181: added watch dog timmer support +#define _FIX_ISSUE_181_ #include #include @@ -95,11 +113,20 @@ Description: add timeout feature like previous Wiring bootloader #include "command.h" -#if defined(_MEGA_BOARD_) || defined(_BOARD_AMBER128_) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) +#if defined(_MEGA_BOARD_) || defined(_BOARD_AMBER128_) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) \ + || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega1284P__) || defined(ENABLE_MONITOR) + #undef ENABLE_MONITOR #define ENABLE_MONITOR static void RunMonitor(void); #endif +#ifndef EEWE + #define EEWE 1 +#endif +#ifndef EEMWE + #define EEMWE 2 +#endif + //#define _DEBUG_SERIAL_ //#define _DEBUG_WITH_LEDS_ @@ -131,8 +158,8 @@ Description: add timeout feature like previous Wiring bootloader #define PROGLED_PORT PORTD #define PROGLED_DDR DDRD #define PROGLED_PIN PINE7 -#elif defined( _CEREBOTPLUS_BOARD_ ) - //* this is for the Cerebot 2560 board +#elif defined( _CEREBOTPLUS_BOARD_ ) || defined(_CEREBOT_II_BOARD_) + //* this is for the Cerebot 2560 board and the Cerebot-ii //* onbarod leds are on PORTE4-7 #define PROGLED_PORT PORTE #define PROGLED_DDR DDRE @@ -149,6 +176,47 @@ Description: add timeout feature like previous Wiring bootloader #define PROGLED_PORT PORTA #define PROGLED_DDR DDRA #define PROGLED_PIN PINA3 +#elif defined( _BOARD_MEGA16 ) + //* onbarod led is PORTA7 + #define PROGLED_PORT PORTA + #define PROGLED_DDR DDRA + #define PROGLED_PIN PINA7 + #define UART_BAUDRATE_DOUBLE_SPEED 0 + +#elif defined( _BOARD_BAHBOT_ ) + //* dosent have an onboard LED but this is what will probably be added to this port + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB0 + +#elif defined( _BOARD_ROBOTX_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB6 +#elif defined( _BOARD_CUSTOM1284_BLINK_B0_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB0 +#elif defined( _BOARD_CUSTOM1284_ ) + #define PROGLED_PORT PORTD + #define PROGLED_DDR DDRD + #define PROGLED_PIN PIND5 +#elif defined( _AVRLIP_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB5 +#elif defined( _BOARD_STK500_ ) + #define PROGLED_PORT PORTA + #define PROGLED_DDR DDRA + #define PROGLED_PIN PINA7 +#elif defined( _BOARD_STK502_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB5 +#elif defined( _BOARD_STK525_ ) + #define PROGLED_PORT PORTB + #define PROGLED_DDR DDRB + #define PROGLED_PIN PINB7 #else #define PROGLED_PORT PORTG #define PROGLED_DDR DDRG @@ -164,6 +232,7 @@ Description: add timeout feature like previous Wiring bootloader #define F_CPU 16000000UL #endif +#define _BLINK_LOOP_COUNT_ (F_CPU / 2250) /* * UART Baudrate, AVRStudio AVRISP only accepts 115200 bps */ @@ -228,12 +297,33 @@ Description: add timeout feature like previous Wiring bootloader #define SIGNATURE_BYTES 0x1E9801 #elif defined (__AVR_ATmega2561__) #define SIGNATURE_BYTES 0x1e9802 +#elif defined (__AVR_ATmega1284P__) + #define SIGNATURE_BYTES 0x1e9705 +#elif defined (__AVR_ATmega640__) + #define SIGNATURE_BYTES 0x1e9608 +#elif defined (__AVR_ATmega64__) + #define SIGNATURE_BYTES 0x1E9602 +#elif defined (__AVR_ATmega169__) + #define SIGNATURE_BYTES 0x1e9405 +#elif defined (__AVR_AT90USB1287__) + #define SIGNATURE_BYTES 0x1e9782 #else #error "no signature definition for MCU available" #endif -#if defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) \ +#if defined(_BOARD_ROBOTX_) || defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB1286__) + #define UART_BAUD_RATE_LOW UBRR1L + #define UART_STATUS_REG UCSR1A + #define UART_CONTROL_REG UCSR1B + #define UART_ENABLE_TRANSMITTER TXEN1 + #define UART_ENABLE_RECEIVER RXEN1 + #define UART_TRANSMIT_COMPLETE TXC1 + #define UART_RECEIVE_COMPLETE RXC1 + #define UART_DATA_REG UDR1 + #define UART_DOUBLE_SPEED U2X1 + +#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega16__) || defined(__AVR_ATmega32__) \ || defined(__AVR_ATmega8515__) || defined(__AVR_ATmega8535__) /* ATMega8 with one USART */ #define UART_BAUD_RATE_LOW UBRRL @@ -258,6 +348,28 @@ Description: add timeout feature like previous Wiring bootloader #define UART_RECEIVE_COMPLETE RXC0 #define UART_DATA_REG UDR0 #define UART_DOUBLE_SPEED U2X0 +#elif defined(UBRR0L) && defined(UCSR0A) && defined(TXEN0) + /* ATMega with two USART, use UART0 */ + #define UART_BAUD_RATE_LOW UBRR0L + #define UART_STATUS_REG UCSR0A + #define UART_CONTROL_REG UCSR0B + #define UART_ENABLE_TRANSMITTER TXEN0 + #define UART_ENABLE_RECEIVER RXEN0 + #define UART_TRANSMIT_COMPLETE TXC0 + #define UART_RECEIVE_COMPLETE RXC0 + #define UART_DATA_REG UDR0 + #define UART_DOUBLE_SPEED U2X0 +#elif defined(UBRRL) && defined(UCSRA) && defined(UCSRB) && defined(TXEN) && defined(RXEN) + //* catch all + #define UART_BAUD_RATE_LOW UBRRL + #define UART_STATUS_REG UCSRA + #define UART_CONTROL_REG UCSRB + #define UART_ENABLE_TRANSMITTER TXEN + #define UART_ENABLE_RECEIVER RXEN + #define UART_TRANSMIT_COMPLETE TXC + #define UART_RECEIVE_COMPLETE RXC + #define UART_DATA_REG UDR + #define UART_DOUBLE_SPEED U2X #else #error "no UART definition for MCU available" #endif @@ -323,26 +435,16 @@ void __jumpMain(void) asm volatile ( ".set __stack, %0" :: "i" (RAMEND) ); -// ldi r16,high(RAMEND) -// out SPH,r16 ; Set stack pointer to top of RAM +//* set stack pointer to top of RAM -// asm volatile ( "ldi 16, 0x10"); asm volatile ( "ldi 16, %0" :: "i" (RAMEND >> 8) ); -// asm volatile ( "out 0x3E,16"); -// asm volatile ( "out %0,16" :: "i" (SPH_REG) ); asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_HI_ADDR) ); -// asm volatile ( "ldi 16, 0x00"); asm volatile ( "ldi 16, %0" :: "i" (RAMEND & 0x0ff) ); -// asm volatile ( "out 0x3d,16"); -// asm volatile ( "out %0,16" :: "i" (SPL_REG) ); asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_LO_ADDR) ); - - asm volatile ( "clr __zero_reg__" ); // GCC depends on register r1 set to 0 asm volatile ( "out %0, __zero_reg__" :: "I" (_SFR_IO_ADDR(SREG)) ); // set SREG to 0 -// asm volatile ( "rjmp main"); // jump to main() asm volatile ( "jmp main"); // jump to main() } @@ -403,7 +505,7 @@ uint32_t count = 0; if (count > MAX_TIME_COUNT) { unsigned int data; - #if (FLASHEND > 0x0FFFF) + #if (FLASHEND > 0x10000) data = pgm_read_word_far(0); //* get the first word of the user program #else data = pgm_read_word_near(0); //* get the first word of the user program @@ -422,6 +524,8 @@ uint32_t count = 0; return UART_DATA_REG; } +//* for watch dog timer startup +void (*app_start)(void) = 0x0000; //***************************************************************************** @@ -442,7 +546,36 @@ int main(void) unsigned long boot_timer; unsigned int boot_state; #ifdef ENABLE_MONITOR - unsigned int exPointCntr = 0; + unsigned int exPointCntr = 0; + unsigned int rcvdCharCntr = 0; +#endif + + //* some chips dont set the stack properly + asm volatile ( ".set __stack, %0" :: "i" (RAMEND) ); + asm volatile ( "ldi 16, %0" :: "i" (RAMEND >> 8) ); + asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_HI_ADDR) ); + asm volatile ( "ldi 16, %0" :: "i" (RAMEND & 0x0ff) ); + asm volatile ( "out %0,16" :: "i" (AVR_STACK_POINTER_LO_ADDR) ); + +#ifdef _FIX_ISSUE_181_ + //************************************************************************ + //* Dec 29, 2011 Issue #181, added watch dog timmer support + //* handle the watch dog timer + uint8_t mcuStatusReg; + mcuStatusReg = MCUSR; + + __asm__ __volatile__ ("cli"); + __asm__ __volatile__ ("wdr"); + MCUSR = 0; + WDTCSR |= _BV(WDCE) | _BV(WDE); + WDTCSR = 0; + __asm__ __volatile__ ("sei"); + // check if WDT generated the reset, if so, go straight to app + if (mcuStatusReg & _BV(WDRF)) + { + app_start(); + } + //************************************************************************ #endif @@ -450,8 +583,9 @@ int main(void) boot_state = 0; #ifdef BLINK_LED_WHILE_WAITING - boot_timeout = 20000; //* should be about 1 second +// boot_timeout = 90000; //* should be about 4 seconds // boot_timeout = 170000; + boot_timeout = 20000; //* should be about 1 second #else boot_timeout = 3500000; // 7 seconds , approx 2us per step when optimize "s" #endif @@ -516,7 +650,7 @@ int main(void) boot_state = 1; // (after ++ -> boot_state=2 bootloader timeout, jump to main 0x00000 ) } #ifdef BLINK_LED_WHILE_WAITING - if ((boot_timer % 7000) == 0) + if ((boot_timer % _BLINK_LOOP_COUNT_) == 0) { //* toggle the LED PROGLED_PORT ^= (1<>16) & 0x000000FF; + { + answerByte = (SIGNATURE_BYTES >> 16) & 0x000000FF; + } else if ( signatureIndex == 1 ) + { answerByte = (SIGNATURE_BYTES >> 8) & 0x000000FF; + } else + { answerByte = SIGNATURE_BYTES & 0x000000FF; + } } else if ( msgBuffer[4] & 0x50 ) { - answerByte = 0; //read fuse/lock bits not implemented, return dummy value + //* Issue 544: stk500v2 bootloader doesn't support reading fuses + //* I cant find the docs that say what these are supposed to be but this was figured out by trial and error + // answerByte = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS); + // answerByte = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS); + // answerByte = boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS); + if (msgBuffer[4] == 0x50) + { + answerByte = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS); + } + else if (msgBuffer[4] == 0x58) + { + answerByte = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS); + } + else + { + answerByte = 0; + } } else { answerByte = 0; // for all others command are not implemented, return dummy value for AVRDUDE happy - // flag = 1; // Remark this line for AVRDUDE } if ( !flag ) { @@ -804,7 +968,8 @@ int main(void) case CMD_CHIP_ERASE_ISP: eraseAddress = 0; msgLength = 2; - msgBuffer[1] = STATUS_CMD_OK; + // msgBuffer[1] = STATUS_CMD_OK; + msgBuffer[1] = STATUS_CMD_FAILED; //* isue 543, return FAILED instead of OK break; case CMD_LOAD_ADDRESS: @@ -855,7 +1020,9 @@ int main(void) } else { - #if (!defined(__AVR_ATmega1280__) && !defined(__AVR_ATmega2560__) && !defined(__AVR_ATmega2561__)) + //* issue 543, this should work, It has not been tested. + // #if (!defined(__AVR_ATmega1280__) && !defined(__AVR_ATmega2560__) && !defined(__AVR_ATmega2561__) && !defined(__AVR_ATmega1284P__) && !defined(__AVR_ATmega640__)) + #if (defined(EEARL) && defined(EEARH) && defined(EEMWE) && defined(EEWE) && defined(EEDR)) /* write EEPROM */ do { EEARL = address; // Setup EEPROM address @@ -890,11 +1057,12 @@ int main(void) // Read FLASH do { - #if defined(RAMPZ) + //#if defined(RAMPZ) + #if (FLASHEND > 0x10000) data = pgm_read_word_far(address); - #else + #else data = pgm_read_word_near(address); - #endif + #endif *p++ = (unsigned char)data; //LSB *p++ = (unsigned char)(data >> 8); //MSB address += 2; // Select next word in memory @@ -1056,16 +1224,10 @@ unsigned long gEepromIndex; #define true 1 #define false 0 -#if defined(__AVR_ATmega128__) - #define kCPU_NAME "ATmega128" -#elif defined(__AVR_ATmega1280__) - #define kCPU_NAME "ATmega1280" -#elif defined(__AVR_ATmega1281__) - #define kCPU_NAME "ATmega1281" -#elif defined(__AVR_ATmega2560__) - #define kCPU_NAME "ATmega2560" -#elif defined(__AVR_ATmega2561__) - #define kCPU_NAME "ATmega2561" +#include "avr_cpunames.h" + +#ifndef _AVR_CPU_NAME_ + #error cpu name not defined #endif #ifdef _VECTORS_SIZE @@ -1077,8 +1239,8 @@ unsigned long gEepromIndex; void PrintDecInt(int theNumber, int digitCnt); -#ifdef kCPU_NAME - prog_char gTextMsg_CPU_Name[] PROGMEM = kCPU_NAME; +#ifdef _AVR_CPU_NAME_ + prog_char gTextMsg_CPU_Name[] PROGMEM = _AVR_CPU_NAME_; #else prog_char gTextMsg_CPU_Name[] PROGMEM = "UNKNOWN"; #endif @@ -1086,16 +1248,16 @@ void PrintDecInt(int theNumber, int digitCnt); prog_char gTextMsg_Explorer[] PROGMEM = "Arduino explorer stk500V2 by MLS"; prog_char gTextMsg_Prompt[] PROGMEM = "Bootloader>"; prog_char gTextMsg_HUH[] PROGMEM = "Huh?"; - prog_char gTextMsg_COMPILED_ON[] PROGMEM = "Compiled on = "; - prog_char gTextMsg_CPU_Type[] PROGMEM = "CPU Type = "; - prog_char gTextMsg_AVR_ARCH[] PROGMEM = "__AVR_ARCH__ = "; - prog_char gTextMsg_AVR_LIBC[] PROGMEM = "AVR LibC Ver = "; - prog_char gTextMsg_GCC_VERSION[] PROGMEM = "GCC Version = "; - prog_char gTextMsg_CPU_SIGNATURE[] PROGMEM = "CPU signature= "; - prog_char gTextMsg_FUSE_BYTE_LOW[] PROGMEM = "Low fuse = "; - prog_char gTextMsg_FUSE_BYTE_HIGH[] PROGMEM = "High fuse = "; - prog_char gTextMsg_FUSE_BYTE_EXT[] PROGMEM = "Ext fuse = "; - prog_char gTextMsg_FUSE_BYTE_LOCK[] PROGMEM = "Lock fuse = "; + prog_char gTextMsg_COMPILED_ON[] PROGMEM = "Compiled on = "; + prog_char gTextMsg_CPU_Type[] PROGMEM = "CPU Type = "; + prog_char gTextMsg_AVR_ARCH[] PROGMEM = "__AVR_ARCH__= "; + prog_char gTextMsg_AVR_LIBC[] PROGMEM = "AVR LibC Ver= "; + prog_char gTextMsg_GCC_VERSION[] PROGMEM = "GCC Version = "; + prog_char gTextMsg_CPU_SIGNATURE[] PROGMEM = "CPU ID = "; + prog_char gTextMsg_FUSE_BYTE_LOW[] PROGMEM = "Low fuse = "; + prog_char gTextMsg_FUSE_BYTE_HIGH[] PROGMEM = "High fuse = "; + prog_char gTextMsg_FUSE_BYTE_EXT[] PROGMEM = "Ext fuse = "; + prog_char gTextMsg_FUSE_BYTE_LOCK[] PROGMEM = "Lock fuse = "; prog_char gTextMsg_GCC_DATE_STR[] PROGMEM = __DATE__; prog_char gTextMsg_AVR_LIBC_VER_STR[] PROGMEM = __AVR_LIBC_VERSION_STRING__; prog_char gTextMsg_GCC_VERSION_STR[] PROGMEM = __VERSION__; @@ -1109,13 +1271,13 @@ void PrintDecInt(int theNumber, int digitCnt); prog_char gTextMsg_SPACE[] PROGMEM = " "; prog_char gTextMsg_WriteToEEprom[] PROGMEM = "Writting EE"; prog_char gTextMsg_ReadingEEprom[] PROGMEM = "Reading EE"; - prog_char gTextMsg_EEPROMerrorCnt[] PROGMEM = "eeprom error count="; + prog_char gTextMsg_EEPROMerrorCnt[] PROGMEM = "EE err cnt="; prog_char gTextMsg_PORT[] PROGMEM = "PORT"; //************************************************************************ //* Help messages - prog_char gTextMsg_HELP_MSG_0[] PROGMEM = "0=Zero address ctrs"; + prog_char gTextMsg_HELP_MSG_0[] PROGMEM = "0=Zero addr"; prog_char gTextMsg_HELP_MSG_QM[] PROGMEM = "?=CPU stats"; prog_char gTextMsg_HELP_MSG_AT[] PROGMEM = "@=EEPROM test"; prog_char gTextMsg_HELP_MSG_B[] PROGMEM = "B=Blink LED"; @@ -1123,7 +1285,8 @@ void PrintDecInt(int theNumber, int digitCnt); prog_char gTextMsg_HELP_MSG_F[] PROGMEM = "F=Dump FLASH"; prog_char gTextMsg_HELP_MSG_H[] PROGMEM = "H=Help"; prog_char gTextMsg_HELP_MSG_L[] PROGMEM = "L=List I/O Ports"; - prog_char gTextMsg_HELP_MSG_Q[] PROGMEM = "Q=Quit & jump to user pgm"; +// prog_char gTextMsg_HELP_MSG_Q[] PROGMEM = "Q=Quit & jump to user pgm"; + prog_char gTextMsg_HELP_MSG_Q[] PROGMEM = "Q=Quit"; prog_char gTextMsg_HELP_MSG_R[] PROGMEM = "R=Dump RAM"; prog_char gTextMsg_HELP_MSG_V[] PROGMEM = "V=show interrupt Vectors"; prog_char gTextMsg_HELP_MSG_Y[] PROGMEM = "Y=Port blink"; @@ -1142,7 +1305,11 @@ char theChar; while (theChar != 0) { + #if (FLASHEND > 0x10000) theChar = pgm_read_byte_far((uint32_t)dataPtr + ii); + #else + theChar = pgm_read_byte_near((uint32_t)dataPtr + ii); + #endif if (theChar != 0) { sendchar(theChar); @@ -1293,46 +1460,6 @@ unsigned char fuseByte; } -#ifndef sbi - #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) -#endif - -//************************************************************************ -int analogRead(uint8_t pin) -{ -uint8_t low, high; - - // set the analog reference (high two bits of ADMUX) and select the - // channel (low 4 bits). this also sets ADLAR (left-adjust result) - // to 0 (the default). -// ADMUX = (analog_reference << 6) | (pin & 0x07); - ADMUX = (1 << 6) | (pin & 0x07); - -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) - // the MUX5 bit of ADCSRB selects whether we're reading from channels - // 0 to 7 (MUX5 low) or 8 to 15 (MUX5 high). - ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5); -#endif - - // without a delay, we seem to read from the wrong channel - //delay(1); - - // start the conversion - sbi(ADCSRA, ADSC); - - // ADSC is cleared when the conversion finishes - while (bit_is_set(ADCSRA, ADSC)); - - // we have to read ADCL first; doing so locks both ADCL - // and ADCH until ADCH is read. reading ADCL second would - // cause the results of each conversion to be discarded, - // as ADCL and ADCH would be locked when it completed. - low = ADCL; - high = ADCH; - - // combine the two bytes - return (high << 8) | low; -} //************************************************************************ static void BlinkLED(void) @@ -1388,7 +1515,11 @@ unsigned char *ramPtr; switch(dumpWhat) { case kDUMP_FLASH: + #if (FLASHEND > 0x10000) theValue = pgm_read_byte_far(myAddressPointer); + #else + theValue = pgm_read_byte_near(myAddressPointer); + #endif break; case kDUMP_EEPROM: @@ -1435,7 +1566,11 @@ int errorCount; PrintFromPROGMEMln(gTextMsg_WriteToEEprom, 0); PrintNewLine(); ii = 0; +#if (FLASHEND > 0x10000) while (((theChar = pgm_read_byte_far(gTextMsg_Explorer + ii)) != '*') && (ii < 512)) +#else + while (((theChar = pgm_read_byte_near(gTextMsg_Explorer + ii)) != '*') && (ii < 512)) +#endif { eeprom_write_byte((uint8_t *)ii, theChar); if (theChar == 0) @@ -1456,7 +1591,11 @@ int errorCount; PrintNewLine(); errorCount = 0; ii = 0; +#if (FLASHEND > 0x10000) while (((theChar = pgm_read_byte_far(gTextMsg_Explorer + ii)) != '*') && (ii < 512)) +#else + while (((theChar = pgm_read_byte_near(gTextMsg_Explorer + ii)) != '*') && (ii < 512)) +#endif { theEEPROMchar = eeprom_read_byte((uint8_t *)ii); if (theEEPROMchar == 0) @@ -1487,10 +1626,12 @@ int errorCount; #if (FLASHEND > 0x08000) - #include "avrinterruptnames.h" - #ifndef _INTERRUPT_NAMES_DEFINED_ - #warning Interrupt vectors not defined - #endif +//* this includes the interrupt names for the monitor portion. There is no longer enough +//* memory to include this +// #include "avrinterruptnames.h" +// #ifndef _INTERRUPT_NAMES_DEFINED_ +// #warning Interrupt vectors not defined +// #endif #endif //************************************************************************ @@ -1534,12 +1675,18 @@ unsigned long absoluteAddr; //* the AVR is LITTLE ENDIAN, swap the byte order + #if (FLASHEND > 0x10000) byte1 = pgm_read_byte_far(myMemoryPtr++); byte2 = pgm_read_byte_far(myMemoryPtr++); - word1 = (byte2 << 8) + byte1; - byte3 = pgm_read_byte_far(myMemoryPtr++); byte4 = pgm_read_byte_far(myMemoryPtr++); + #else + byte1 = pgm_read_byte_near(myMemoryPtr++); + byte2 = pgm_read_byte_near(myMemoryPtr++); + byte3 = pgm_read_byte_near(myMemoryPtr++); + byte4 = pgm_read_byte_near(myMemoryPtr++); + #endif + word1 = (byte2 << 8) + byte1; word2 = (byte4 << 8) + byte3; @@ -1596,7 +1743,11 @@ unsigned long absoluteAddr; #if defined(_INTERRUPT_NAMES_DEFINED_) sendchar(0x20); + #if (FLASHEND > 0x10000) stringPointer = pgm_read_word_far(&(gInterruptNameTable[vectorIndex])); + #else + stringPointer = pgm_read_word_near(&(gInterruptNameTable[vectorIndex])); + #endif PrintFromPROGMEM((char *)stringPointer, 0); #endif PrintNewLine(); @@ -1895,13 +2046,7 @@ int ii, jj; { theChar = theChar & 0x5F; } - #if defined( _CEREBOTPLUS_BOARD_ ) - if (theChar == 0x5F) - { - - } - else - #endif + if (theChar >= 0x20) { sendchar(theChar); @@ -1979,12 +2124,6 @@ int ii, jj; AVR_PortOutput(); break; - #if defined( _CEREBOTPLUS_BOARD_ ) - case 0x5F: - //* do nothing - break; - #endif - default: PrintFromPROGMEMln(gTextMsg_HUH, 0); break; diff --git a/hardware/arduino/bootloaders/stk500v2/stk500boot_v2_mega2560.hex b/hardware/arduino/bootloaders/stk500v2/stk500boot_v2_mega2560.hex index 4f366997c8d..d8ae2c4abe3 100644 --- a/hardware/arduino/bootloaders/stk500v2/stk500boot_v2_mega2560.hex +++ b/hardware/arduino/bootloaders/stk500v2/stk500boot_v2_mega2560.hex @@ -1,513 +1,468 @@ :020000023000CC -:10E000000D94F6F20D941FF30D941FF30D941FF36E -:10E010000D941FF30D941FF30D941FF30D941FF334 -:10E020000D941FF30D941FF30D941FF30D941FF324 -:10E030000D941FF30D941FF30D941FF30D941FF314 -:10E040000D941FF30D941FF30D941FF30D941FF304 -:10E050000D941FF30D941FF30D941FF30D941FF3F4 -:10E060000D941FF30D941FF30D941FF30D941FF3E4 -:10E070000D941FF30D941FF30D941FF30D941FF3D4 -:10E080000D941FF30D941FF30D941FF30D941FF3C4 -:10E090000D941FF30D941FF30D941FF30D941FF3B4 -:10E0A0000D941FF30D941FF30D941FF30D941FF3A4 -:10E0B0000D941FF30D941FF30D941FF30D941FF394 -:10E0C0000D941FF30D941FF30D941FF30D941FF384 -:10E0D0000D941FF30D941FF30D941FF30D941FF374 -:10E0E0000D941FF341546D65676132353630004140 +:10E000000D9489F10D94B2F10D94B2F10D94B2F129 +:10E010000D94B2F10D94B2F10D94B2F10D94B2F1F0 +:10E020000D94B2F10D94B2F10D94B2F10D94B2F1E0 +:10E030000D94B2F10D94B2F10D94B2F10D94B2F1D0 +:10E040000D94B2F10D94B2F10D94B2F10D94B2F1C0 +:10E050000D94B2F10D94B2F10D94B2F10D94B2F1B0 +:10E060000D94B2F10D94B2F10D94B2F10D94B2F1A0 +:10E070000D94B2F10D94B2F10D94B2F10D94B2F190 +:10E080000D94B2F10D94B2F10D94B2F10D94B2F180 +:10E090000D94B2F10D94B2F10D94B2F10D94B2F170 +:10E0A0000D94B2F10D94B2F10D94B2F10D94B2F160 +:10E0B0000D94B2F10D94B2F10D94B2F10D94B2F150 +:10E0C0000D94B2F10D94B2F10D94B2F10D94B2F140 +:10E0D0000D94B2F10D94B2F10D94B2F10D94B2F130 +:10E0E0000D94B2F141546D656761323536300041AF :10E0F000726475696E6F206578706C6F72657220DE :10E1000073746B3530305632206279204D4C530099 :10E11000426F6F746C6F616465723E004875683F52 -:10E1200000436F6D70696C6564206F6E20203D2028 -:10E1300000435055205479706520202020203D2038 -:10E14000005F5F4156525F415243485F5F203D2070 -:10E1500000415652204C69624320566572203D2092 -:10E16000004743432056657273696F6E20203D203F -:10E1700000435055207369676E61747572653D2068 -:10E18000004C6F77206675736520202020203D208D -:10E1900000486967682066757365202020203D204F -:10E1A00000457874206675736520202020203D206E -:10E1B000004C6F636B2066757365202020203D2026 -:10E1C00000536570202039203230313000312E3636 -:10E1D0002E3700342E332E33005623202020414486 -:10E1E00044522020206F7020636F6465202020201F -:10E1F00020696E737472756374696F6E20616464F4 -:10E2000072202020496E74657272757074006E6F92 -:10E2100020766563746F7200726A6D702020006AE8 -:10E220006D7020005768617420706F72743A0050EE -:10E230006F7274206E6F7420737570706F72746576 -:10E2400064004D7573742062652061206C65747480 -:10E2500065720020005772697474696E67204545C5 -:10E260000052656164696E6720454500656570729E -:10E270006F6D206572726F7220636F756E743D00F2 -:10E28000504F525400303D5A65726F206164647281 -:10E290006573732063747273003F3D435055207360 -:10E2A0007461747300403D454550524F4D20746574 -:10E2B000737400423D426C696E6B204C45440045CE -:10E2C0003D44756D7020454550524F4D00463D44CC -:10E2D000756D7020464C41534800483D48656C7050 -:10E2E000004C3D4C69737420492F4F20506F72745D -:10E2F0007300513D517569742026206A756D702038 -:10E30000746F20757365722070676D00523D44759F -:10E310006D702052414D00563D73686F7720696ED5 -:10E320007465727275707420566563746F727300D1 -:10E33000593D506F727420626C696E6B002A0052F6 -:10E340004553455400494E543000494E543100491C -:10E350004E543200494E543300494E543400494E15 -:10E36000543500494E543600494E54370050434905 -:10E370004E5430005043494E5431005043494E549E -:10E3800032005744540054494D45523020434F4DBC -:10E3900050410054494D45523020434F4D504200AA -:10E3A00054494D455230204F56460054494D455230 -:10E3B0003120434150540054494D45523120434F80 -:10E3C0004D50410054494D45523120434F4D50422C -:10E3D0000054494D45523120434F4D50430054495C -:10E3E0004D455231204F56460054494D455232203A -:10E3F000434F4D50410054494D45523220434F4DFB -:10E4000050420054494D455232204F56460054491F -:10E410004D45523320434150540054494D455233E9 -:10E4200020434F4D50410054494D45523320434FF6 -:10E430004D50420054494D45523320434F4D5043B7 -:10E440000054494D455233204F56460054494D45DE -:10E45000523420434150540054494D4552342043D6 -:10E460004F4D50410054494D45523420434F4D507B -:10E47000420054494D45523420434F4D50430054BF -:10E48000494D455234204F56460054494D4552356A -:10E4900020434150540054494D45523520434F4D7F -:10E4A00050410054494D45523520434F4D50420094 -:10E4B00054494D45523520434F4D50430054494D2A -:10E4C000455235204F564600555341525430205244 -:10E4D000580055534152543020554452450055532D -:10E4E0004152543020545800555341525431205217 -:10E4F000580055534152543120554452450055530C -:10E5000041525431205458005553415254322052F4 -:10E5100058005553415254322055445245005553EA -:10E5200041525432205458005553415254332052D2 -:10E5300058005553415254332055445245005553C9 -:10E5400041525433205458005350492053544300EF -:10E5500041444300414E414C4F4720434F4D5000F2 -:10E560004545205245414459005457490053504DA8 -:10E57000205245414459002A003FE345E34AE34F16 -:10E58000E354E359E35EE363E368E36DE374E37B41 -:10E59000E382E3E9E3F6E303E4ABE3B7E3C4E3D107 -:10E5A000E3DEE386E393E3A0E348E5C8E4D2E4DEF8 -:10E5B000E454E550E560E50EE41AE427E434E44170 -:10E5C000E4E8E4F2E4FEE469E56DE54CE458E46572 -:10E5D000E472E47FE48AE496E4A3E4B0E4BDE408F2 -:10E5E000E512E51EE528E532E53EE50011241FBEF3 -:10E5F000CFEFD1E2DEBFCDBF01E00CBF12E0A0E063 -:10E60000B2E0EAEDFFEF03E00BBF02C007900D920E -:10E61000A030B107D9F712E0A0E0B2E001C01D922E -:10E62000AC30B107E1F70F94FBF40D94EBFF01E27E -:10E630000EBF0FEF0DBF11241FBE0D94FBF40D9400 -:10E6400000F020E030E040ED57E005C0FA013197DE -:10E65000F1F72F5F3F4F28173907C0F308959C014A -:10E66000442737FD4095542FDA01C901860F911DCB -:10E67000A11DB11DABBFFC018791882369F0809378 -:10E68000C6008091C00086FFFCCF8091C0008064EE -:10E690008093C0006F5FE8CF08958DE08093C6003F -:10E6A0008091C00086FFFCCF8091C0008064809381 -:10E6B000C0008AE08093C6008091C00086FFFCCF36 -:10E6C0008091C00080648093C00008950F942FF360 -:10E6D0000F944DF30895FC019081992359F0909384 -:10E6E000C6008091C00086FFFCCF8091C00080648E -:10E6F0008093C0003196992379F70895282F982F99 -:10E7000092959F70892F805D8A3308F0895F80938E -:10E71000C6008091C00086FFFCCF8091C00080645D -:10E720008093C000822F8F70982F905D9A3308F0ED -:10E73000995F9093C6008091C00086FFFCCF8091C6 -:10E74000C00080648093C00008959C01FB01853661 -:10E7500091051CF46330710594F0C90164E670E022 -:10E760000F948CFF605D7F4F6093C6008091C00066 -:10E7700086FFFCCF8091C00080648093C0002B3066 -:10E78000310514F43297B4F0C90164E670E00F94D7 -:10E790008CFF6AE070E00F948CFF605D7F4F6093A8 -:10E7A000C6008091C00086FFFCCF8091C0008064CD -:10E7B0008093C000C9016AE070E00F948CFFC0969E -:10E7C0008093C6008091C00086FFFCCF8091C0007E -:10E7D00080648093C0000895282F277020642093C0 -:10E7E0007C0020917B0086958695869590E08170CF -:10E7F000907033E0880F991F3A95E1F7277F282B17 -:10E8000020937B0080917A00806480937A008091CD -:10E810007A0086FDFCCF2091780040917900942FFA -:10E8200080E030E0282B392BC90108951F93182F61 -:10E8300080E892EE60E00F942FF31093C600809171 -:10E84000C00086FFFCCF8091C00080648093C00030 -:10E850000F944DF31F9108952F923F924F925F9224 -:10E860006F927F928F929F92AF92BF92CF92DF92E0 -:10E87000EF92FF920F931F93DF93CF93CDB7DEB745 -:10E8800062970FB6F894DEBF0FBECDBF382E622E52 -:10E89000CA01DB015C016D01772460E2262E2E01A6 -:10E8A0000894411C511C8BC081E0A81680E0B8067A -:10E8B00081E0C80680E0D80628F0C601AA27BB2759 -:10E8C0000F947EF3BB27AD2D9C2D8B2D0F947EF3E3 -:10E8D0008A2D0F947EF32092C6008091C00086FF9F -:10E8E000FCCF8091C00080648093C0009DE2909333 -:10E8F000C6008091C00086FFFCCF8091C00080647C -:10E900008093C0002092C6008091C00086FFFCCF9B -:10E910008091C00080648093C000198286017501D7 -:10E9200088249924A1E03A1651F03A1620F0B2E07A -:10E930003B1661F409C00BBFF701779007C0C70110 -:10E940000F94D5FF782E02C0F7017080872D0F94A9 -:10E950007EF32092C6008091C00086FFFCCF80919C -:10E96000C00080648093C000872D8052F401EF7056 -:10E97000F0708F3520F4E40DF51D708204C0E40DB5 -:10E98000F51D8EE280830894E11CF11C011D111D10 -:10E990000894811C911C90E18916910409F0C2CF62 -:10E9A00080E190E0A0E0B0E0A80EB91ECA1EDB1E18 -:10E9B000198AC2010F946BF30F944DF36A94662089 -:10E9C00009F072CF62960FB6F894DEBF0FBECDBFCE -:10E9D000CF91DF911F910F91FF90EF90DF90CF903B -:10E9E000BF90AF909F908F907F906F905F904F906F -:10E9F0003F902F9008952F923F924F925F926F9287 -:10EA00007F928F929F92AF92BF92CF92DF92EF92BE -:10EA1000FF920F931F93DF93CF93CDB7DEB7CD5304 -:10EA2000D1400FB6F894DEBF0FBECDBF279A2F9A04 -:10EA30008091C00082608093C00080E18093C40018 -:10EA400088E18093C1000000EE24FF248701B4E038 -:10EA5000AB2EB12CCC24DD2424C0C5010197F1F7E5 -:10EA60000894E11CF11C011D111D21E2E2162EE4A7 -:10EA7000F20620E0020720E0120718F0A1E0CA2EFB -:10EA8000D12CC801B70128E53BE140E050E00F94EC -:10EA90009FFF611571058105910519F485B18058B5 -:10EAA00085B98091C00087FD03C0C114D104A9F2CB -:10EAB000A6014F5F5F4FC25EDE4F59834883CE5140 -:10EAC000D140C25EDE4F68817981CE51D140613044 -:10EAD000710511F00D946EFFC05DDE4F1982188232 -:10EAE000C053D14060E0C15DDE4F1882CF52D140AB -:10EAF000AA24BB24C05EDE4F188219821A821B82B0 -:10EB0000C052D140CE5CDE4F188219821A821B821D -:10EB1000C253D14080E090E0A0E0B0E0ABBFFC0188 -:10EB2000A791B691C45CDE4FB983A883CC53D14082 -:10EB30000D9469FFC25EDE4FE881F981CE51D1406C -:10EB4000319709F52091C600C25EDE4F1982188206 -:10EB5000CE51D14022C02F5F3F4F4F4F5F4F2130EA -:10EB6000F2E13F07FAE74F07F0E05F0780F0C45C8F -:10EB7000DE4F08811981CC53D1400F5F1F4F19F030 -:10EB8000EE27FF27099420E030E040E050E080913C -:10EB9000C00087FFE0CF2091C600213209F094C663 -:10EBA0000894A11CB11C33E0A316B10409F08EC671 -:10EBB00000E010E018C041E24093C6008091C00020 -:10EBC00086FFFCCF8091C00080648093C0002F5FDF -:10EBD0003F4F2931310579F70F944DF30F5F1F4FE8 -:10EBE0000530110519F020E030E0E5CF1092080261 -:10EBF0001092090210920A0210920B021092040263 -:10EC00001092050210920602109207021092000262 -:10EC10001092010210920202109203028FEE90EE07 -:10EC200060E00F9466F380E191EE60E00F942FF3C3 -:10EC30008091C00087FFFCCF9091C600903608F00D -:10EC40009F759032B8F09093C6008091C00086FF07 -:10EC5000FCCF8091C00080648093C00080E28093EC -:10EC6000C6008091C00086FFFCCF8091C000806408 -:10EC70008093C000983409F4DBC19934B8F492341D -:10EC800009F45DC1933458F4903319F1903308F4CA -:10EC900018C69F33A1F1903409F013C6BDC0953456 -:10ECA00009F474C1963409F00CC69CC1923509F47C -:10ECB0002FC2933538F49C3409F4F9C1913509F029 -:10ECC00000C61CC2963509F449C2993509F0F9C548 -:10ECD0009CC485E892EE62E00F9466F31092040201 -:10ECE000109205021092060210920702109208027A -:10ECF0001092090210920A0210920B0217C189E9C0 -:10ED000092EE62E00F9466F38FEE90EE60E00F9467 -:10ED100066F381E291EE60E00F942FF381EC91EEC7 -:10ED200060E00F9466F381E391EE60E00F942FF3BF -:10ED300084EE90EE60E00F9466F381E491EE60E083 -:10ED40000F942FF386E090E061E070E00F94A5F35C -:10ED50000F944DF381E691EE60E00F942FF383ED75 -:10ED600091EE60E00F9466F381E591EE60E00F9420 -:10ED70002FF38DEC91EE60E00F9466F381E791EE56 -:10ED800060E00F942FF38EE10F947EF388E90F94E7 -:10ED90007EF381E00F947EF30F944DF381E891EEC2 -:10EDA00060E00F942FF319E0E0E0F0E010935700DB -:10EDB000E4918E2F0F947EF30F944DF381E991EE41 -:10EDC00060E00F942FF3E3E0F0E010935700E4913C -:10EDD0008E2F0F947EF30F944DF381EA91EE60E055 -:10EDE0000F942FF3E2E0F0E010935700E4918E2FA0 -:10EDF0000F947EF30F944DF381EB91EE60E00F944E -:10EE00002FF3E1E0F0E0109357001491812F0F945D -:10EE10007EF30F944DF307CF85EA92EE62E00F94F4 -:10EE200066F385E592EE60E00F9466F30F944DF380 -:10EE300000E010E019C0C8016F2D0F94DDFFFF2026 -:10EE400031F483E592EE60E00F942FF30BC0F09263 -:10EE5000C6008091C00086FFFCCF8091C000806416 -:10EE60008093C0000F5F1F4FC80181519F41AA27A7 -:10EE700097FDA095BA2FABBFFC01F7905AE2F516AB -:10EE800021F062E000301607B1F60F944DF30F94B5 -:10EE90004DF381E692EE60E00F9466F30F944DF32C -:10EEA000CC24DD2400E010E01EC0C8010F94D5FF83 -:10EEB000F82E882331F483E592EE60E00F942FF36F -:10EEC0000BC08093C6008091C00086FFFCCF80916C -:10EED000C00080648093C000FE1419F00894C11C27 -:10EEE000D11C0F5F1F4FC80181519F41AA2797FD79 -:10EEF000A095BA2FABBFFC01E7907AE2E71621F0AC -:10EF000082E00030180789F60F944DF30F944DF30B -:10EF10008CE692EE60E00F942FF3C60161E070E0A2 -:10EF20000F94A5F30F944DF30F944DF3109200023C -:10EF300010920102109202021092030274CE83EB2F -:10EF400092EE62E00F9466F3279A2F9A16C02F98DC -:10EF500080E090E0E0EDF7E03197F1F7019684363C -:10EF60009105C1F72F9A80E090E0E0EDF7E031974E -:10EF7000F1F7019684369105C1F78091C00087FFB3 -:10EF8000E6CF8091C00087FFFCCF95C48FEB92EE57 -:10EF900062E00F9466F3409100025091010260918B -:10EFA00002027091030281E020E10F942CF4809121 -:10EFB000000290910102A0910202B09103028050E0 -:10EFC0009F4FAF4FBF4F8093000290930102A093D9 -:10EFD0000202B093030280509041A040B04008F478 -:10EFE00022CEA4CF8DEC92EE62E00F9466F34091B6 -:10EFF000040250910502609106027091070280E0C0 -:10F0000020E10F942CF48091040290910502A091CC -:10F010000602B091070280509F4FAF4FBF4F8093C1 -:10F02000040290930502A0930602B0930702FBCD61 -:10F030008AED92EE62E00F9466F385E892EE60E06E -:10F040000F9466F389E992EE60E00F9466F385EA27 -:10F0500092EE60E00F9466F383EB92EE60E00F9423 -:10F0600066F38FEB92EE60E00F9466F38DEC92EE18 -:10F0700060E00F9466F38AED92EE60E00F9466F321 -:10F0800081EE92EE60E00F9466F382EF92EE60E024 -:10F090000F9466F38CE093EE60E00F9466F387E1E3 -:10F0A00093EE60E00F9466F380E393EEB9CD81EECA -:10F0B00092EE62E00F9466F381E40F9416F482E41A -:10F0C0000F9416F483E40F9416F484E40F9416F46A -:10F0D00085E40F9416F486E40F9416F487E40F94F5 -:10F0E00016F488E40F9416F48AE40F9416F48BE473 -:10F0F0000F9416F48CE40F9416F495CD82EF92EEF3 -:10F1000062E00F9466F399249394AA24BB2445C427 -:10F110008CE093EE62E00F9466F340910802509108 -:10F12000090260910A0270910B0282E020E10F94C3 -:10F130002CF48091080290910902A0910A02B091EA -:10F140000B0280509F4FAF4FBF4F809308029093A8 -:10F150000902A0930A02B0930B0265CD87E193EEFA -:10F1600062E00F9466F384EE90EE60E00F9466F335 -:10F1700089ED91EE60E00F9466F309E715EECC5D42 -:10F18000DE4F19830883C452D1406624772443019B -:10F19000CA5DDE4F19821882C652D140A401930184 -:10F1A0005695479537952795C85DDE4F2883398357 -:10F1B0004A835B83C852D140CA5DDE4F4881598182 -:10F1C000C652D1404F5F5F4FCA5DDE4F59834883BF -:10F1D000C652D140CA0162E070E00F94A5F350E23C -:10F1E0005093C6008091C00086FFFCCF8091C00084 -:10F1F00080648093C0006DE26093C6008091C0007F -:10F2000086FFFCCF8091C00080648093C00070E2D4 -:10F210007093C6008091C00086FFFCCF8091C00033 -:10F2200080648093C000C85DDE4FE880F9800A8169 -:10F230001B81C852D140BB27A12F902F8F2D0F9437 -:10F240007EF3C85DDE4F8881C852D1400F947EF3B3 -:10F2500070E2F72EF092C6008091C00086FFFCCFCE -:10F260008091C00080648093C0000DE30093C600CD -:10F270008091C00086FFFCCF8091C00080648093A5 -:10F28000C00010E21093C6008091C00086FFFCCF42 -:10F290008091C00080648093C0008BBEF3012791F1 -:10F2A000C45DDE4F2883CC52D140A22EBB24CC2497 -:10F2B000DD240894611C711C811C911C8BBEF30120 -:10F2C0008791282E332444245524142D032DF22C09 -:10F2D000EE24EA0CFB1C0C1D1D1D0894611C711C06 -:10F2E000811C911C8BBEF3013791C35DDE4F3883C7 -:10F2F000CD52D1400894611C711C811C911C8BBEA5 -:10F30000F3014791C25DDE4F4883CE52D1402DEFCD -:10F310003FEF4FEF5FEF620E731E841E951E0F943A -:10F320007EF330E23093C6008091C00086FFFCCFB0 -:10F330008091C00080648093C000C45DDE4F8881EE -:10F34000CC52D1400F947EF340E24093C6008091AE -:10F35000C00086FFFCCF8091C00080648093C00015 -:10F36000C25DDE4F8881CE52D1400F947EF350E2D1 -:10F370005093C6008091C00086FFFCCF8091C000F2 -:10F3800080648093C000C35DDE4F8881CD52D14040 -:10F390000F947EF360E26093C6008091C00086FF08 -:10F3A000FCCF8091C00080648093C0007FEFE7169F -:10F3B0007FEFF70670E0070770E0170731F48EE083 -:10F3C00092EE60E00F942FF3DFC0D801C701807088 -:10F3D000907CA070B0708050904CA040B040D1F5AF -:10F3E0002FEF3FE340E050E0E222F3220423152315 -:10F3F000C85DDE4FA880B980CA80DB80C852D1408A -:10F40000AE0CBF1CC01ED11EAA0CBB1CCC1CDD1C2C -:10F4100088E192EE60E00F942FF3BB27A12F902F8D -:10F420008F2D0F947EF38E2D0F947EF330E2309368 -:10F43000C6008091C00086FFFCCF8091C000806430 -:10F440008093C0004EE34093C6008091C00086FFC9 -:10F45000FCCF87C06EE07EEF80E090E0E622F722EE -:10F46000082319237CE0E71674E9F70670E0070724 -:10F4700070E0170709F088C0C25DDE4F8881CE5268 -:10F48000D140E82EFF2400E010E0102F0F2DFE2CBD -:10F49000EE24C35DDE4F9881CD52D140E90EF11CC0 -:10F4A000011D111DD601C50181709070A070B07052 -:10F4B000DC0199278827E80EF91E0A1F1B1F20EF81 -:10F4C00030E040E050E0A222B322C422D522F1E194 -:10F4D000AA0CBB1CCC1CDD1CFA95D1F7EA0CFB1C5A -:10F4E0000C1D1D1D41E050E060E070E0242235223B -:10F4F00046225722E5E1220C331C441C551CEA9598 -:10F50000D1F7E20CF31C041D151D57016801AA0C6C -:10F51000BB1CCC1CDD1C8FE192EE60E00F942FF33E -:10F52000C801AA27BB270F947EF3BB27A12F902FDA -:10F530008F2D0F947EF38E2D0F947EF350E2509317 -:10F54000C6008091C00086FFFCCF8091C00080641F -:10F550008093C0006EE36093C6008091C00086FF78 -:10F56000FCCF8091C00080648093C000C601AA27B0 -:10F57000BB270F947EF3BB27AD2D9C2D8B2D0F94B5 -:10F580007EF38A2D0F947EF370E27093C600809113 -:10F59000C00086FFFCCF8091C00080648093C000D3 -:10F5A000CC5DDE4FE881F981C452D140CF01AA275A -:10F5B00097FDA095BA2FABBFFC018791969160E0B3 -:10F5C0000F942FF30F944DF3CC5DDE4F088119811A -:10F5D000C452D1400E5F1F4FCC5DDE4F19830883AC -:10F5E000C452D140CA5DDE4F28813981C652D14014 -:10F5F0002933310509F417CB44E050E060E070E0B6 -:10F60000640E751E861E971EC9CD80E393EE62E0E0 -:10F610000F9466F384E292EE60E00F942FF38091F2 -:10F62000C00087FFFCCF1091C6001F751093C60065 -:10F630008091C00086FFFCCF8091C00080648093E1 -:10F64000C0000F944DF3812F81548A3108F036C1E8 -:10F65000163409F495C0173490F4133409F44EC0ED -:10F66000143430F41134F1F0123409F01DC130C0FB -:10F67000143409F459C0153409F016C16BC01A349A -:10F6800009F4C4C01B3438F4173409F48FC018349B -:10F6900009F00AC1A1C01B3409F4D2C01C3409F01E -:10F6A00003C1E8C08FEF81B90DC082B1809582B9E6 -:10F6B00080E090E0E0EDF7E03197F1F70196883CCB -:10F6C0009105C1F78091C00087FFEFCF12B8EFC05E -:10F6D0008FEF84B90DC085B1809585B980E090E049 -:10F6E000E0EDF7E03197F1F70196883C9105C1F71D -:10F6F0008091C00087FFEFCF15B8D9C08FEF87B9D1 -:10F700000DC088B1809588B980E090E0E0EDF7E029 -:10F710003197F1F70196883C9105C1F78091C000BF -:10F7200087FFEFCF18B8C3C08FEF8AB90DC08BB178 -:10F7300080958BB980E090E0E0EDF7E03197F1F74C -:10F740000196883C9105C1F78091C00087FFEFCFFB -:10F750001BB8ADC08FEF8DB90DC08EB180958EB93D -:10F7600080E090E0E0EDF7E03197F1F70196883C1A -:10F770009105C1F78091C00087FFEFCF1EB897C0F9 -:10F780008FEF80BB0DC081B3809581BB80E090E09E -:10F79000E0EDF7E03197F1F70196883C9105C1F76C -:10F7A0008091C00087FFEFCF11BA81C08FEF83BB7C -:10F7B0000DC084B3809584BB80E090E0E0EDF7E07D -:10F7C0003197F1F70196883C9105C1F78091C0000F -:10F7D00087FFEFCF14BA6BC08FEF809301010FC08A -:10F7E0008091020180958093020180E090E0E0ED3D -:10F7F000F7E03197F1F70196883C9105C1F78091C8 -:10F80000C00087FFEDCF1092020151C08FEF8093AF -:10F8100004010FC08091050180958093050180E06F -:10F8200090E0E0EDF7E03197F1F70196883C910523 -:10F83000C1F78091C00087FFEDCF1092050137C05E -:10F840008FEF809307010FC080910801809580930E -:10F85000080180E090E0E0EDF7E03197F1F70196E4 -:10F86000883C9105C1F78091C00087FFEDCF1092D1 -:10F8700008011DC08FEF80930A010FC080910B011A -:10F88000809580930B0180E090E0E0EDF7E0319708 -:10F89000F1F70196883C9105C1F78091C00087FF80 -:10F8A000EDCF10920B0103C08FE292EEB9C98091A7 -:10F8B000C00087FFFCCF8091C600B5C982E492EEFC -:10F8C000AFC98CE191EEACC9AA24BB24933061F19D -:10F8D000943028F4913089F0923008F508C09530C2 -:10F8E000B1F1953040F1963009F053C04EC02B3144 -:10F8F00009F020C991E06BE11DC9213041F0C15DE3 -:10F90000DE4F5881CF52D140251709F002C362273C -:10F91000C15DDE4F2883CF52D14092E00BC9B22F98 -:10F92000A0E0622793E006C9822F90E0A82BB92BB4 -:10F93000622794E0FFC82E3009F0EBC2622795E001 -:10F94000C05DDE4F19821882C053D140F3C8E1E098 -:10F95000F0E0EC0FFD1FC05DDE4FE880F980C05382 -:10F96000D140EE0DFF1D208387010F5F1F4FC05D4B -:10F97000DE4F19830883C053D14062270A171B0743 -:10F9800009F0D8C8D80196E0D5C8261709F0C1C239 -:10F9900003C0973009F0CEC899248981833109F4D6 -:10F9A000FCC08431C8F4863009F4C2C0873050F4FA -:10F9B000823009F4F0C0833009F458C0813009F076 -:10F9C0000AC23EC0813109F462C0823108F0A6C08B -:10F9D000803109F000C2DFC0883109F472C089317A -:10F9E00050F4853109F4D9C0853108F477C18631E6 -:10F9F00009F0F1C173C18A3109F457C08A3108F4A2 -:10FA00007CC08B3109F446C08D3109F0E4C18D8191 -:10FA1000803311F090E00AC08F81882311F49EE1B9 -:10FA200005C0813011F091E001C098E91A821B8273 -:10FA30008D818C831D829E831F8227E030E0CFC1A1 -:10FA40001A8288E08B8381E48C8386E58D8382E54E -:10FA50008E8389E48F8383E5888780E589878FE5B6 -:10FA60008A8782E38B872BE030E0B9C18A818139B4 -:10FA700041F0823941F0803911F48FE005C080E017 -:10FA800003C082E001C08AE01A828B8344C09924BB -:10FA9000939481C08D81882311F48EE12CC0813034 -:10FAA00011F081E028C088E926C01A82E1E0F0E088 -:10FAB00089E08093570084918B831C8224E030E09E -:10FAC0008EC18B81803589F48C81883039F4E2E0F5 -:10FAD000F0E089E08093570084910DC0E0E0F0E011 -:10FAE00089E080935700849106C0E3E0F0E089E06C -:10FAF0008093570084911A82DFCF8D81836C99E0C7 -:10FB0000E1E0F0E0082E90935700E89507B600FC7E -:10FB1000FDCF1A821B8223E030E061C11A82CE5CE5 -:10FB2000DE4F188219821A821B82C253D14055C1FE -:10FB30008A8190E0A0E0B0E0582F442733272227A5 -:10FB40008B8190E0A0E0B0E0DC0199278827282B8A -:10FB5000392B4A2B5B2B8D8190E0A0E0B0E0282B65 -:10FB6000392B4A2B5B2B8C8190E0A0E0B0E0BA2FC0 -:10FB7000A92F982F8827282B392B4A2B5B2B220F54 -:10FB8000331F441F551FC05EDE4F288339834A83CD -:10FB90005B83C052D1401A8220C19A812B8183316C -:10FBA00049F0C05EDE4F488159816A817B81C05235 -:10FBB000D1408AC0CE5CDE4F488159816A817B8109 -:10FBC000C253D140403080EC580783E0680780E0A2 -:10FBD0007807F0F483E0FA0160935B0080935700AC -:10FBE000E89507B600FCFDCFCE5CDE4F4881598119 -:10FBF0006A817B81C253D14040505F4F6F4F7F4F2E -:10FC0000CE5CDE4F488359836A837B83C253D140E5 -:10FC1000C95CDE4F9883C753D140CA5CDE4F18825F -:10FC2000C653D140022F10E0CA5CDE4F6881798153 -:10FC3000C653D140062B172BC05EDE4F4881598139 -:10FC40006A817B81C052D140DE011B9631E08C91EC -:10FC500011962C9111971296C75CDE4F2883C953D9 -:10FC6000D140C85CDE4F1882C853D14090E0C85CD8 -:10FC7000DE4FE881F981C853D1408E2B9F2B0C01B8 -:10FC8000FA0160935B0030935700E89511244E5FB2 -:10FC90005F4F6F4F7F4F02501040C9F685E0C05E46 -:10FCA000DE4FE880F9800A811B81C052D140F70104 -:10FCB00000935B0080935700E89507B600FCFDCFEA -:10FCC00081E180935700E8951A82C05EDE4F488339 -:10FCD00059836A837B83C052D1407FC0FA80C55C60 -:10FCE000DE4FF882CB53D140C65CDE4F1882CA5338 -:10FCF000D1408B81C82EDD24C65CDE4F088119817E -:10FD0000CA53D140C02AD12A1A828981BE016D5FAF -:10FD10007F4F843121F59601C05EDE4FE880F98087 -:10FD20000A811B81C052D1400BBFF7018791969188 -:10FD3000DB018C9311969C936E5F7F4FD801C701B6 -:10FD40000296A11DB11DC05EDE4F88839983AA83F0 -:10FD5000BB83C052D14022503040F1F636C0C05E65 -:10FD6000DE4F288139814A815B81C052D14008949D -:10FD7000C108D108760100E010E00894C11CD11C34 -:10FD80000894E11CF11C011D111DE20EF31E041F5D -:10FD9000151F21BDBB27A52F942F832F82BD2F5F59 -:10FDA0003F4F4F4F5F4FF89A80B5DB018D93BD01F8 -:10FDB0002E153F054007510761F7C05EDE4F2883CF -:10FDC00039834A835B83C052D14096012D5F3F4FF8 -:10FDD000FB01108204C080EC8A8322E030E08BE1DA -:10FDE0008093C6008091C00086FFFCCF8091C00048 -:10FDF00080648093C000C15DDE4FF881CF52D14056 -:10FE0000F093C6008091C00086FFFCCF8091C000B7 -:10FE100080648093C000432F3093C6008091C0005F -:10FE200086FFFCCF8091C00080648093C000922F39 -:10FE30002093C6008091C00086FFFCCF8091C00057 -:10FE400080648093C0008EE08093C6008091C000E3 -:10FE500086FFFCCF8091C00080648093C00065E184 -:10FE6000C15DDE4FE880CF52D1406E2569276427FF -:10FE7000FE01319610C090819093C6008091C00021 -:10FE800086FFFCCF31968091C00080648093C000D3 -:10FE90006927215030402115310569F76093C6006C -:10FEA0008091C00086FFFCCF8091C0008064809369 -:10FEB000C00085B1805885B9992081F4C15DDE4FBD -:10FEC0000881CF52D1400F5FC15DDE4F0883CF5212 -:10FED000D14090E0A0E0B0E00D949AF527982F98DB -:10FEE00080E090E020ED37E0F9013197F1F70196DD -:10FEF00084369105C9F700008091C0008D7F809302 -:10FF0000C00081E180935700E895EE27FF27099410 -:10FF1000FFCF90E00D949AF597FB092E07260AD0A3 -:10FF200077FD04D02ED006D000201AF4709561958C -:10FF30007F4F0895F6F7909581959F4F0895A1E220 -:10FF40001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F53 -:10FF5000FF1FA217B307E407F50720F0A21BB30B9E -:10FF6000E40BF50B661F771F881F991F1A9469F71A -:10FF700060957095809590959B01AC01BD01CF0176 -:10FF80000895AA1BBB1B51E107C0AA1FBB1FA617E0 -:10FF9000B70710F0A61BB70B881F991F5A95A9F732 -:10FFA00080959095BC01CD010895F999FECF92BD41 -:10FFB00081BDF89A992780B50895262FF999FECF2B -:10FFC0001FBA92BD81BD20BD0FB6F894FA9AF99A76 -:0AFFD0000FBE01960895F894FFCFCC +:10E1200000436F6D70696C6564206F6E203D200048 +:10E130004350552054797065202020203D20005FF9 +:10E140005F4156525F415243485F5F3D2000415658 +:10E1500052204C696243205665723D20004743437C +:10E160002056657273696F6E203D20004350552024 +:10E1700049442020202020203D20004C6F7720663D +:10E18000757365202020203D20004869676820665F +:10E190007573652020203D200045787420667573D6 +:10E1A00065202020203D20004C6F636B2066757336 +:10E1B000652020203D20004A616E20203120323031 +:10E1C000313200312E362E3700342E332E330056A6 +:10E1D00023202020414444522020206F7020636F70 +:10E1E00064652020202020696E73747275637469E1 +:10E1F0006F6E2061646472202020496E74657272B3 +:10E20000757074006E6F20766563746F7200726A49 +:10E210006D702020006A6D70200057686174207056 +:10E220006F72743A00506F7274206E6F7420737541 +:10E2300070706F72746564004D7573742062652030 +:10E2400061206C6574746572002000577269747483 +:10E25000696E672045450052656164696E672045B7 +:10E26000450045452065727220636E743D00504F35 +:10E27000525400303D5A65726F2061646472003FF1 +:10E280003D43505520737461747300403D454550C3 +:10E29000524F4D207465737400423D426C696E6B41 +:10E2A000204C454400453D44756D70204545505215 +:10E2B0004F4D00463D44756D7020464C415348001B +:10E2C000483D48656C70004C3D4C69737420492F83 +:10E2D0004F20506F72747300513D51756974005234 +:10E2E0003D44756D702052414D00563D73686F7707 +:10E2F00020696E7465727275707420566563746FF0 +:10E30000727300593D506F727420626C696E6B00BD +:10E310002A0011241FBECFEFD1E2DEBFCDBF01E046 +:10E320000CBF12E0A0E0B2E0EAE0FDEF03E00BBFBB +:10E3300002C007900D92A030B107D9F712E0A0E01B +:10E34000B2E001C01D92AE30B107E1F70F9464F363 +:10E350000D9483FE01E20EBF0FEF0DBF11241FBE0F +:10E360000D9464F30D9400F020E030E040ED57E0B0 +:10E3700005C0FA013197F1F72F5F3F4F2817390792 +:10E38000C0F308959C01442737FD4095542FDA01CE +:10E39000C901860F911DA11DB11DABBFFC01879165 +:10E3A000882369F08093C6008091C00086FFFCCF6F +:10E3B0008091C00080648093C0006F5FE8CF0895B3 +:10E3C0008DE08093C6008091C00086FFFCCF8091D5 +:10E3D000C00080648093C0008AE08093C600809172 +:10E3E000C00086FFFCCF8091C00080648093C00095 +:10E3F00008950F94C2F10F94E0F10895FC0190810B +:10E40000992359F09093C6008091C00086FFFCCFFD +:10E410008091C00080648093C0003196992379F781 +:10E420000895282F982F92959F70892F805D8A33A9 +:10E4300008F0895F8093C6008091C00086FFFCCF02 +:10E440008091C00080648093C000822F8F70982FCD +:10E45000905D9A3308F0995F9093C6008091C00058 +:10E4600086FFFCCF8091C00080648093C000089537 +:10E470009C01FB01853691051CF46330710594F015 +:10E48000C90164E670E00F9424FE605D7F4F6093E5 +:10E49000C6008091C00086FFFCCF8091C0008064E0 +:10E4A0008093C0002B30310514F43297B4F0C901C9 +:10E4B00064E670E00F9424FE6AE070E00F9424FE9E +:10E4C000605D7F4F6093C6008091C00086FFFCCFE7 +:10E4D0008091C00080648093C000C9016AE070E050 +:10E4E0000F9424FEC0968093C6008091C00086FFE2 +:10E4F000FCCF8091C00080648093C00008951F937A +:10E50000182F8EE692EE60E00F94C2F11093C600D1 +:10E510008091C00086FFFCCF8091C0008064809312 +:10E52000C0000F94E0F11F9108952F923F924F92F7 +:10E530005F926F927F928F929F92AF92BF92CF9293 +:10E54000DF92EF92FF920F931F93DF93CF93CDB79C +:10E55000DEB762970FB6F894DEBF0FBECDBF382E80 +:10E56000622ECA01DB015C016D01772420E2222EBC +:10E570002E010894411C511C8BC081E0A81680E03C +:10E58000B80681E0C80680E0D80628F0C601AA27B0 +:10E59000BB270F9411F2BB27AD2D9C2D8B2D0F9413 +:10E5A00011F28A2D0F9411F22092C6008091C000C2 +:10E5B00086FFFCCF8091C00080648093C0009DE204 +:10E5C0009093C6008091C00086FFFCCF8091C00070 +:10E5D00080648093C0002092C6008091C00086FFB6 +:10E5E000FCCF8091C00080648093C00019828601B6 +:10E5F000750188249924A1E03A1651F03A1620F0CA +:10E60000B2E03B1661F409C00BBFF701779007C079 +:10E61000C7010F946DFE782E02C0F7017080872D20 +:10E620000F9411F22092C6008091C00086FFFCCFAB +:10E630008091C00080648093C000872D8052F401D7 +:10E64000EF70F0708F3520F4E40DF51D708204C07A +:10E65000E40DF51D8EE280830894E11CF11C011D80 +:10E66000111D0894811C911C90E18916910409F0F8 +:10E67000C2CF80E190E0A0E0B0E0A80EB91ECA1EB3 +:10E68000DB1E198AC2010F94FEF10F94E0F16A9427 +:10E69000662009F072CF62960FB6F894DEBF0FBE07 +:10E6A000CDBFCF91DF911F910F91FF90EF90DF9041 +:10E6B000CF90BF90AF909F908F907F906F905F9022 +:10E6C0004F903F902F9008952F923F924F925F92DC +:10E6D0006F927F928F929F92AF92BF92CF92DF9272 +:10E6E000EF92FF920F931F93DF93CF93CDB7DEB7D7 +:10E6F000CD53D1400FB6F894DEBF0FBECDBF01E2BF +:10E700000EBF0FEF0DBF94B7F894A89514BE80917B +:10E71000600088618093600010926000789493FF9D +:10E7200005C0E0910002F09101021995279A2F9AF5 +:10E730008091C00082608093C00080E18093C4001B +:10E7400088E18093C1000000EE24FF24870194E05B +:10E75000A92EB12CCC24DD2424C0C5010197F1F7EA +:10E760000894E11CF11C011D111D21E2E2162EE4AA +:10E77000F20620E0020720E0120718F081E0C82E20 +:10E78000D12CC801B70127EC3BE140E050E00F94E9 +:10E7900037FE611571058105910519F485B1805821 +:10E7A00085B98091C00087FD03C0C114D104A9F2CE +:10E7B000A6014F5F5F4FC25EDE4F59834883CE5143 +:10E7C000D140C25EDE4F88819981CE51D140019700 +:10E7D00011F00D9406FEC05DDE4F19821882C05301 +:10E7E000D14060E0C15DDE4F1882CF52D140AA24F3 +:10E7F000BB24C35DDE4F19821882CD52D140C05E6A +:10E80000DE4F188219821A821B82C052D140CE5C20 +:10E81000DE4F188219821A821B82C253D140EE2425 +:10E82000FF2487010BBFF70107911691C45CDE4FEF +:10E8300019830883CC53D1400D9401FEC25EDE4F94 +:10E8400028813981CE51D1402130310509F52091FF +:10E85000C600C25EDE4F19821882CE51D14022C05E +:10E860002F5F3F4F4F4F5F4F213082E138078AE7DC +:10E87000480780E0580780F0C45CDE4FE881F981EA +:10E88000CC53D140EF5FFF4F19F0EE27FF270994DB +:10E8900020E030E040E050E08091C00087FFE0CF12 +:10E8A0002091C600C35DDE4F48815981CD52D140D1 +:10E8B0004F5F5F4FC35DDE4F59834883CD52D140D8 +:10E8C000213209F067C64A30510508F063C6089442 +:10E8D000A11CB11C53E0A516B10409F05DC600E00F +:10E8E00010E018C081E28093C6008091C00086FFCE +:10E8F000FCCF8091C00080648093C0002F5F3F4FA9 +:10E900002931310579F70F94E0F10F5F1F4F053082 +:10E91000110519F020E030E0E5CF10920A021092C4 +:10E920000B0210920C0210920D021092060210922D +:10E93000070210920802109209021092020210922D +:10E94000030210920402109205028FEE90EE60E036 +:10E950000F94F9F180E191EE60E00F94C2F18091A3 +:10E96000C00087FFFCCF9091C600903608F09F75DD +:10E970009032B8F09093C6008091C00086FFFCCF23 +:10E980008091C00080648093C000A0E2A093C60084 +:10E990008091C00086FFFCCF8091C000806480938E +:10E9A000C000983409F4DBC19934B8F4923409F406 +:10E9B0005DC1933458F4903319F1903308F4E7C5EE +:10E9C0009F33A1F1903409F0E2C5BDC0953409F43C +:10E9D00074C1963409F0DBC59CC1923509F42FC28D +:10E9E000933538F49C3409F4F9C1913509F0CFC559 +:10E9F0001CC2963509F449C2993509F0C8C56BC4E3 +:10EA000083E792EE62E00F94F9F110920602109201 +:10EA10000702109208021092090210920A02109244 +:10EA20000B0210920C0210920D0217C18FE792EEAA +:10EA300062E00F94F9F18FEE90EE60E00F94F9F13F +:10EA400081E291EE60E00F94C2F187EB91EE60E01D +:10EA50000F94F9F180E391EE60E00F94C2F184EE3F +:10EA600090EE60E00F94F9F18FE391EE60E00F9487 +:10EA7000C2F186E090E061E070E00F9438F20F940C +:10EA8000E0F18DE591EE60E00F94C2F189EC91EE3A +:10EA900060E00F94F9F18EE491EE60E00F94C2F122 +:10EAA00083EC91EE60E00F94F9F18CE691EE60E07A +:10EAB0000F94C2F18EE10F9411F288E90F9411F2D4 +:10EAC00081E00F9411F20F94E0F18BE791EE60E09A +:10EAD0000F94C2F119E0E0E0F0E010935700E491E8 +:10EAE0008E2F0F9411F20F94E0F18AE891EE60E01E +:10EAF0000F94C2F1E3E0F0E010935700E4918E2F01 +:10EB00000F9411F20F94E0F189E991EE60E00F9417 +:10EB1000C2F1E2E0F0E010935700E4918E2F0F94E1 +:10EB200011F20F94E0F188EA91EE60E00F94C2F1E7 +:10EB3000E1E0F0E0109357001491812F0F9411F24F +:10EB40000F94E0F107CF8BE892EE62E00F94F9F1B9 +:10EB50008BE492EE60E00F94F9F10F94E0F100E0A5 +:10EB600010E019C0C8016F2D0F9475FEFF2031F41D +:10EB700089E492EE60E00F94C2F10BC0F092C600FF +:10EB80008091C00086FFFCCF8091C000806480939C +:10EB9000C0000F5F1F4FC80181519F41AA2797FDF9 +:10EBA000A095BA2FABBFFC01F790BAE2FB1621F09B +:10EBB000E2E000301E07B1F60F94E0F10F94E0F1AF +:10EBC00087E592EE60E00F94F9F10F94E0F1CC2428 +:10EBD000DD2400E010E01EC0C8010F946DFEF82E89 +:10EBE000882331F489E492EE60E00F94C2F10BC007 +:10EBF0008093C6008091C00086FFFCCF8091C0004A +:10EC000080648093C000FE1419F00894C11CD11CCC +:10EC10000F5F1F4FC80181519F41AA2797FDA09503 +:10EC2000BA2FABBFFC01E790FAE2EF1621F022E029 +:10EC30000030120789F60F94E0F10F94E0F182E6BC +:10EC400092EE60E00F94C2F1C60161E070E00F94B3 +:10EC500038F20F94E0F10F94E0F11092020210925A +:10EC60000302109204021092050274CE89E992EE1A +:10EC700062E00F94F9F1279A2F9A16C02F9880E03E +:10EC800090E0E0EDF7E03197F1F7019684369105D9 +:10EC9000C1F72F9A80E090E0E0EDF7E03197F1F7CF +:10ECA000019684369105C1F78091C00087FFE6CFB9 +:10ECB0008091C00087FFFCCF64C485EA92EE62E0D9 +:10ECC0000F94F9F140910202509103026091040205 +:10ECD0007091050281E020E10F9495F2809102028B +:10ECE00090910302A0910402B091050280509F4FC1 +:10ECF000AF4FBF4F8093020290930302A093040290 +:10ED0000B093050280509041A040B04008F422CE5C +:10ED1000A4CF83EB92EE62E00F94F9F140910602EA +:10ED200050910702609108027091090280E020E191 +:10ED30000F9495F28091060290910702A09108022B +:10ED4000B091090280509F4FAF4FBF4F8093060292 +:10ED500090930702A0930802B0930902FBCD80ECC8 +:10ED600092EE62E00F94F9F183E792EE60E00F9487 +:10ED7000F9F18FE792EE60E00F94F9F18BE892EEF3 +:10ED800060E00F94F9F189E992EE60E00F94F9F1F7 +:10ED900085EA92EE60E00F94F9F183EB92EE60E089 +:10EDA0000F94F9F180EC92EE60E00F94F9F187ECAA +:10EDB00092EE60E00F94F9F188ED92EE60E00F942E +:10EDC000F9F18FED92EE60E00F94F9F18AEE92EE98 +:10EDD00060E00F94F9F183E093EEB9CD87EC92EE09 +:10EDE00062E00F94F9F181E40F947FF282E40F94D2 +:10EDF0007FF283E40F947FF284E40F947FF285E442 +:10EE00000F947FF286E40F947FF287E40F947FF2F1 +:10EE100088E40F947FF28AE40F947FF28BE40F94DE +:10EE20007FF28CE40F947FF295CD88ED92EE62E054 +:10EE30000F94F9F199249394AA24BB2409C48FED6B +:10EE400092EE62E00F94F9F140910A0250910B02A8 +:10EE500060910C0270910D0282E020E10F9495F216 +:10EE600080910A0290910B02A0910C02B0910D02C8 +:10EE700080509F4FAF4FBF4F80930A0290930B0279 +:10EE8000A0930C02B0930D0265CD8AEE92EE62E083 +:10EE90000F94F9F184EE90EE60E00F94F9F18FECAD +:10EEA00091EE60E00F94F9F1662477244301CC5D84 +:10EEB000DE4F19821882C452D140D401C301B695E5 +:10EEC000A79597958795CA5DDE4F88839983AA8316 +:10EED000BB83C652D140CC5DDE4FA881B981C452FC +:10EEE000D1401196CC5DDE4FB983A883C452D14086 +:10EEF000CD0162E070E00F9438F2B0E2B093C6004A +:10EF00008091C00086FFFCCF8091C0008064809318 +:10EF1000C000EDE2E093C6008091C00086FFFCCF08 +:10EF20008091C00080648093C000F0E2F093C6003E +:10EF30008091C00086FFFCCF8091C00080648093E8 +:10EF4000C000CA5DDE4FE880F9800A811B81C6528D +:10EF5000D140BB27A12F902F8F2D0F9411F2CA5DA6 +:10EF6000DE4F8881C652D1400F9411F2E0E2FE2EAE +:10EF7000F092C6008091C00086FFFCCF8091C00057 +:10EF800080648093C0000DE30093C6008091C000B0 +:10EF900086FFFCCF8091C00080648093C00010E2A7 +:10EFA0001093C6008091C00086FFFCCF8091C00006 +:10EFB00080648093C0008BBEF3012791C65DDE4F55 +:10EFC0002883CA52D140A22EBB24CC24DD2408942D +:10EFD000611C711C811C911C8BBEF3018791282E32 +:10EFE0003324442455240894611C711C811C911CF9 +:10EFF0008BBEF3013791C55DDE4F3883CB52D140D4 +:10F000000894611C711C811C911C8BBEF3014791FB +:10F01000C45DDE4F4883CC52D1407DEFE72E7FEFB9 +:10F02000F72E7FEF072F7FEF172F6E0C7F1C801EB0 +:10F03000911E142D032DF22CEE24EA0CFB1C0C1D4A +:10F040001D1D0F9411F220E22093C6008091C00094 +:10F0500086FFFCCF8091C00080648093C000C65DB5 +:10F06000DE4F8881CA52D1400F9411F230E23093C2 +:10F07000C6008091C00086FFFCCF8091C0008064F4 +:10F080008093C000C45DDE4F8881CC52D1400F9484 +:10F0900011F240E24093C6008091C00086FFFCCF91 +:10F0A0008091C00080648093C000C55DDE4F888180 +:10F0B000CB52D1400F9411F250E25093C600809190 +:10F0C000C00086FFFCCF8091C00080648093C000A8 +:10F0D0008FEFE8168FEFF80680E0080780E018074A +:10F0E00031F484E092EE60E00F94C2F1DFC0D80109 +:10F0F000C7018070907CA070B0708050904CA04090 +:10F10000B040D1F52FEF3FE340E050E0E222F322A0 +:10F1100004231523CA5DDE4FA880B980CA80DB8036 +:10F12000C652D140AE0CBF1CC01ED11EAA0CBB1CC7 +:10F13000CC1CDD1C8EE092EE60E00F94C2F1BB2788 +:10F14000A12F902F8F2D0F9411F28E2D0F9411F26D +:10F1500030E23093C6008091C00086FFFCCF8091E2 +:10F16000C00080648093C0004EE34093C60080914D +:10F17000C00086FFFCCF87C08EE09EEFA0E0B0E02D +:10F18000E822F9220A231B239CE0E91694E9F906F8 +:10F1900090E0090790E0190709F088C0C45DDE4FD0 +:10F1A000A881CC52D140EA2EFF2400E010E0102FBD +:10F1B0000F2DFE2CEE24C55DDE4FB881CB52D14021 +:10F1C000EB0EF11C011D111DD601C501817090705F +:10F1D000A070B070DC0199278827E80EF91E0A1F7D +:10F1E0001B1F20EF30E040E050E0A222B322C422F7 +:10F1F000D522A1E1AA0CBB1CCC1CDD1CAA95D1F721 +:10F20000EA0CFB1C0C1D1D1D81E090E0A0E0B0E0AD +:10F21000282239224A225B22F5E1220C331C441CAD +:10F22000551CFA95D1F7E20CF31C041D151D57016E +:10F230006801AA0CBB1CCC1CDD1C85E192EE60E0D1 +:10F240000F94C2F1C801AA27BB270F9411F2BB2764 +:10F25000A12F902F8F2D0F9411F28E2D0F9411F25C +:10F2600090E29093C6008091C00086FFFCCF809111 +:10F27000C00080648093C000AEE3A093C60080917C +:10F28000C00086FFFCCF8091C00080648093C000E6 +:10F29000C601AA27BB270F9411F2BB27AD2D9C2DC9 +:10F2A0008B2D0F9411F28A2D0F9411F20F94E0F12F +:10F2B000CC5DDE4FE881F981C452D140F99709F461 +:10F2C00049CB34E0E32EF12C012D112D6E0C7F1C67 +:10F2D000801E911EF2CD83E093EE62E00F94F9F16F +:10F2E0008AE192EE60E00F94C2F18091C00087FF46 +:10F2F000FCCF1091C6001F751093C6008091C0000E +:10F3000086FFFCCF8091C00080648093C0000F9482 +:10F31000E0F1812F81548A3108F036C1163409F4A6 +:10F3200095C0173490F4133409F44EC0143430F4FB +:10F330001134F1F0123409F01DC130C0143409F455 +:10F3400059C0153409F016C16BC01A3409F4C4C091 +:10F350001B3438F4173409F48FC0183409F00AC18B +:10F36000A1C01B3409F4D2C01C3409F003C1E8C0A9 +:10F370008FEF81B90DC082B1809582B980E090E0B5 +:10F38000E0EDF7E03197F1F70196883C9105C1F780 +:10F390008091C00087FFEFCF12B8EFC08FEF84B924 +:10F3A0000DC085B1809585B980E090E0E0EDF7E093 +:10F3B0003197F1F70196883C9105C1F78091C00023 +:10F3C00087FFEFCF15B8D9C08FEF87B90DC088B1CF +:10F3D000809588B980E090E0E0EDF7E03197F1F7B3 +:10F3E0000196883C9105C1F78091C00087FFEFCF5F +:10F3F00018B8C3C08FEF8AB90DC08BB180958BB997 +:10F4000080E090E0E0EDF7E03197F1F70196883C7D +:10F410009105C1F78091C00087FFEFCF1BB8ADC049 +:10F420008FEF8DB90DC08EB180958EB980E090E0E0 +:10F43000E0EDF7E03197F1F70196883C9105C1F7CF +:10F440008091C00087FFEFCF1EB897C08FEF80BBC1 +:10F450000DC081B3809581BB80E090E0E0EDF7E0E6 +:10F460003197F1F70196883C9105C1F78091C00072 +:10F4700087FFEFCF11BA81C08FEF83BB0DC084B37C +:10F48000809584BB80E090E0E0EDF7E03197F1F704 +:10F490000196883C9105C1F78091C00087FFEFCFAE +:10F4A00014BA6BC08FEF809301010FC080910201ED +:10F4B00080958093020180E090E0E0EDF7E03197E5 +:10F4C000F1F70196883C9105C1F78091C00087FF54 +:10F4D000EDCF1092020151C08FEF809304010FC055 +:10F4E0008091050180958093050180E090E0E0ED3A +:10F4F000F7E03197F1F70196883C9105C1F78091CB +:10F50000C00087FFEDCF1092050137C08FEF8093C9 +:10F5100007010FC08091080180958093080180E069 +:10F5200090E0E0EDF7E03197F1F70196883C910526 +:10F53000C1F78091C00087FFEDCF109208011DC078 +:10F540008FEF80930A010FC080910B01809580930B +:10F550000B0180E090E0E0EDF7E03197F1F70196E4 +:10F56000883C9105C1F78091C00087FFEDCF1092D4 +:10F570000B0103C085E292EEEAC98091C00087FFCB +:10F58000FCCF8091C600E6C988E392EEE0C98CE129 +:10F5900091EEDDC9AA24BB24933011F1943028F4F4 +:10F5A000913089F09230B8F408C0953061F195300F +:10F5B000F0F0963009F048C043C02B3109F03EC945 +:10F5C00091E06BE13BC96227C15DDE4F2883CF52DA +:10F5D000D14092E033C9B22FA0E0622793E02EC958 +:10F5E000822F90E0A82BB92B622794E027C92E30F8 +:10F5F00009F027C3622795E0C05DDE4F19821882AB +:10F60000C053D1401BC9E1E0F0E0EC0FFD1FC05D2D +:10F61000DE4F08811981C053D140E00FF11F2083D4 +:10F620000F5F1F4FC05DDE4F19830883C053D14069 +:10F6300062270A171B0709F001C9D80196E0FEC826 +:10F64000261709F0FEC203C0973009F0F7C89924C5 +:10F650009981933109F412C19431C8F4963009F4B8 +:10F66000D8C0973050F4923009F406C1933009F4B1 +:10F670006DC0913009F047C253C0913109F477C091 +:10F68000923108F0BBC0903109F03DC2F5C098310D +:10F6900009F487C0993150F4953109F4EFC09531E0 +:10F6A00008F4B4C1963109F02EC2B0C19A3109F400 +:10F6B0006CC09A3108F491C09B3109F45BC09D3154 +:10F6C00009F021C29D81903359F48F81882311F470 +:10F6D0009EE11CC0813011F091E018C098E916C07D +:10F6E000892F807591F0903539F4E0E0F0E089E001 +:10F6F0008093570094910AC0983539F4E3E0F0E024 +:10F7000089E080935700949101C090E01A821B8297 +:10F710008D818C831D829E831F8227E030E0F7C19C +:10F720001A8288E08B8381E48C8386E58D8382E571 +:10F730008E8389E48F8383E5888780E589878FE5D9 +:10F740008A8782E38B872BE030E0E1C18A818139AF +:10F7500041F0823941F0803911F48FE005C080E03A +:10F7600003C082E001C08AE01A828B8344C09924DE +:10F77000939482C08D81882311F48EE12CC0813056 +:10F7800011F081E028C088E926C01A82E1E0F0E0AB +:10F7900089E08093570084918B831C8224E030E0C1 +:10F7A000B6C18B81803589F48C81883039F4E2E0F0 +:10F7B000F0E089E08093570084910DC0E0E0F0E034 +:10F7C00089E080935700849106C0E3E0F0E089E08F +:10F7D0008093570084911A82DFCF8D81836C99E0EA +:10F7E000E1E0F0E0082E90935700E89507B600FCA2 +:10F7F000FDCF1A821B8223E030E089C180EC8A832E +:10F80000CE5CDE4F188219821A821B82C253D1400D +:10F810007CC18A8190E0A0E0B0E0582F44273327D4 +:10F8200022278B8190E0A0E0B0E0DC0199278827B7 +:10F83000282B392B4A2B5B2B8D8190E0A0E0B0E088 +:10F84000282B392B4A2B5B2B8C8190E0A0E0B0E079 +:10F85000BA2FA92F982F8827282B392B4A2B5B2BBF +:10F86000220F331F441F551FC05EDE4F288339838C +:10F870004A835B83C052D1401A8247C13A81C95C36 +:10F88000DE4F3883C753D140CA5CDE4F1882C6535F +:10F89000D1408B81A82FB0E0CA5CDE4F48815981EE +:10F8A000C653D140A42BB52B933109F077C0CE5C61 +:10F8B000DE4F088119812A813B81C253D14000303B +:10F8C00040EC140743E0240740E03407F0F483E001 +:10F8D000F80120935B0080935700E89507B600FC81 +:10F8E000FDCFCE5CDE4F088119812A813B81C25356 +:10F8F000D14000501F4F2F4F3F4FCE5CDE4F08834B +:10F9000019832A833B83C253D140C05EDE4F4881B6 +:10F9100059816A817B81C052D1408E01055F1F4FA2 +:10F9200031E0F801808121810E5F1F4FC75CDE4FFF +:10F930002883C953D140C85CDE4F1882C853D140D8 +:10F9400090E0C85CDE4FE880F980C853D1408E2932 +:10F950009F290C01FA0160935B0030935700E895F2 +:10F9600011244E5F5F4F6F4F7F4F1297D1F685E0A6 +:10F97000C05EDE4F088119812A813B81C052D1408F +:10F98000F80120935B0080935700E89507B600FCD0 +:10F99000FDCF81E180935700E8952EC0C05EDE4F19 +:10F9A000288139814A815B81C052D140FE013B965A +:10F9B00011977D0100E010E00894E11CF11C011D8D +:10F9C000111DE20EF31E041F151F21BDBB27A52F1D +:10F9D000942F832F82BD2F5F3F4F4F4F5F4F8191F9 +:10F9E00080BDFA9AF99AF999FECF2E153F05400786 +:10F9F000510759F7BA01A9011A82C05EDE4F488348 +:10FA000059836A837B83C052D1407FC01A81C55C11 +:10FA1000DE4F1883CB53D140C65CDE4F1882CA53E9 +:10FA2000D1408B81C82EDD24C65CDE4F2881398110 +:10FA3000CA53D140C22AD32A1A828981BE016D5F7E +:10FA40007F4F843121F59601C05EDE4FE880F9805A +:10FA50000A811B81C052D1400BBFF701879196915B +:10FA6000DB018C9311969C936E5F7F4FD801C70189 +:10FA70000296A11DB11DC05EDE4F88839983AA83C3 +:10FA8000BB83C052D14022503040F1F636C0C05E38 +:10FA9000DE4F288139814A815B81C052D140089470 +:10FAA000C108D108760100E010E00894C11CD11C07 +:10FAB0000894E11CF11C011D111DE20EF31E041F30 +:10FAC000151F21BDBB27A52F942F832F82BD2F5F2C +:10FAD0003F4F4F4F5F4FF89A80B5DB018D93BD01CB +:10FAE0002E153F054007510761F7C05EDE4F2883A2 +:10FAF00039834A835B83C052D14096012D5F3F4FCB +:10FB0000FB01108204C080EC8A8322E030E08BE1AC +:10FB10008093C6008091C00086FFFCCF8091C0001A +:10FB200080648093C000C15DDE4FF881CF52D14028 +:10FB3000F093C6008091C00086FFFCCF8091C0008A +:10FB400080648093C000432F3093C6008091C00032 +:10FB500086FFFCCF8091C00080648093C000922F0C +:10FB60002093C6008091C00086FFFCCF8091C0002A +:10FB700080648093C0008EE08093C6008091C000B6 +:10FB800086FFFCCF8091C00080648093C00065E157 +:10FB9000C15DDE4FE880CF52D1406E2569276427D2 +:10FBA000FE01319610C090819093C6008091C000F4 +:10FBB00086FFFCCF31968091C00080648093C000A6 +:10FBC0006927215030402115310569F76093C6003F +:10FBD0008091C00086FFFCCF8091C000806480933C +:10FBE000C00085B1805885B9992081F4C15DDE4F90 +:10FBF0000881CF52D1400F5FC15DDE4F0883CF52E5 +:10FC0000D14090E0A0E0B0E00D941EF427982F982A +:10FC100080E090E020ED37E0F9013197F1F70196AF +:10FC200084369105C9F700008091C0008D7F8093D4 +:10FC3000C00081E180935700E895EE27FF270994E3 +:10FC4000FFCF90E00D941EF497FB092E07260AD0F3 +:10FC500077FD04D02ED006D000201AF4709561955F +:10FC60007F4F0895F6F7909581959F4F0895A1E2F3 +:10FC70001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F26 +:10FC8000FF1FA217B307E407F50720F0A21BB30B71 +:10FC9000E40BF50B661F771F881F991F1A9469F7ED +:10FCA00060957095809590959B01AC01BD01CF0149 +:10FCB0000895AA1BBB1B51E107C0AA1FBB1FA617B3 +:10FCC000B70710F0A61BB70B881F991F5A95A9F705 +:10FCD00080959095BC01CD010895F999FECF92BD14 +:10FCE00081BDF89A992780B50895262FF999FECFFE +:10FCF0001FBA92BD81BD20BD0FB6F894FA9AF99A49 +:0AFD00000FBE01960895F894FFCF9E :040000033000E000E9 :00000001FF