[gnoduino] Arduino 1.0.4 sdk



commit c28da1dac5d5a491a5a1a59edb6fff7e690dcdce
Author: Pascal de Bruijn <pmjdebruijn pcode nl>
Date:   Mon May 6 09:53:22 2013 +0200

    Arduino 1.0.4 sdk

 hardware/arduino/bootloaders/stk500v2/Makefile     |    2 +-
 .../bootloaders/stk500v2/avrinterruptnames.h       |  314 ++++++-
 hardware/arduino/bootloaders/stk500v2/stk500boot.c |  467 ++++++----
 .../stk500v2/stk500boot_v2_mega2560.hex            |  970 ++++++++++----------
 hardware/arduino/cores/arduino/new.cpp             |   12 +-
 hardware/arduino/cores/arduino/new.h               |    4 +-
 hardware/arduino/cores/arduino/wiring_analog.c     |    2 +
 ...INED-dfu-usbserial-atmega16u2-Mega2560-Rev3.hex |  467 ----------
 ...BINED-dfu-usbserial-atmega16u2-MegaADK-Rev3.hex |  467 ----------
 ...-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex |  467 ----------
 .../firmwares/MEGA-dfu_and_usbserial_combined.hex  |  234 -----
 hardware/arduino/firmwares/README.txt              |   33 -
 .../firmwares/UNO-dfu_and_usbserial_combined.hex   |  234 -----
 .../firmwares/arduino-usbdfu/Arduino-usbdfu.c      |  728 ---------------
 .../firmwares/arduino-usbdfu/Arduino-usbdfu.h      |  220 -----
 .../arduino/firmwares/arduino-usbdfu/Board/LEDs.h  |  110 ---
 .../arduino/firmwares/arduino-usbdfu/Descriptors.c |  189 ----
 .../arduino/firmwares/arduino-usbdfu/Descriptors.h |  177 ----
 hardware/arduino/firmwares/arduino-usbdfu/makefile |  710 --------------
 .../arduino/firmwares/arduino-usbdfu/readme.txt    |    7 -
 .../Arduino-usbserial-atmega16u2-Mega2560-Rev3.hex |  254 -----
 .../Arduino-usbserial-atmega16u2-MegaADK-Rev3.hex  |  254 -----
 .../Arduino-usbserial-atmega16u2-Uno-Rev3.hex      |  254 -----
 .../arduino-usbserial/Arduino-usbserial-mega.hex   |  256 ------
 .../arduino-usbserial/Arduino-usbserial-uno.hex    |  256 ------
 .../arduino-usbserial/Arduino-usbserial.c          |  242 -----
 .../arduino-usbserial/Arduino-usbserial.h          |   79 --
 .../firmwares/arduino-usbserial/Board/LEDs.h       |  110 ---
 .../firmwares/arduino-usbserial/Descriptors.c      |  277 ------
 .../firmwares/arduino-usbserial/Descriptors.h      |   88 --
 .../arduino-usbserial/Lib/LightweightRingBuff.h    |  197 ----
 .../arduino/firmwares/arduino-usbserial/makefile   |  776 ----------------
 .../arduino/firmwares/arduino-usbserial/readme.txt |   13 -
 libraries/Esplora/Esplora.cpp                      |    9 +
 libraries/Esplora/Esplora.h                        |    4 +-
 .../examples/EsploraLedShow/EsploraLedShow.ino     |    4 +-
 .../Esplora/examples/EsploraMusic/EsploraMusic.ino |    5 +-
 .../examples/EsploraRemote/EsploraRemote.ino       |  124 ++-
 .../Esplora/examples/EsploraTable/EsploraTable.ino |   22 +-
 libraries/Esplora/keywords.txt                     |    1 +
 libraries/Ethernet/Dhcp.cpp                        |    1 +
 libraries/Ethernet/Ethernet.cpp                    |    3 +-
 .../Ethernet/examples/CosmClient/CosmClient.ino    |  159 ----
 .../examples/CosmClientString/CosmClientString.ino |  146 ---
 .../Ethernet/examples/WebServer/WebServer.ino      |    2 +-
 libraries/SD/examples/listfiles/listfiles.ino      |    1 +
 .../BarometricPressureSensor.ino                   |  143 ---
 .../examples/WifiCosmClient/WifiCosmClient.ino     |  188 ----
 .../WifiCosmClientString/WifiCosmClientString.ino  |  175 ----
 .../WiFi/examples/WifiWebServer/WifiWebServer.ino  |    6 +-
 50 files changed, 1191 insertions(+), 8672 deletions(-)
---
diff --git a/hardware/arduino/bootloaders/stk500v2/Makefile b/hardware/arduino/bootloaders/stk500v2/Makefile
index 54c5f85..6b66a26 100644
--- a/hardware/arduino/bootloaders/stk500v2/Makefile
+++ b/hardware/arduino/bootloaders/stk500v2/Makefile
@@ -124,7 +124,7 @@ CINCS =
 CFLAGS = -g$(DEBUG)
 CFLAGS += $(CDEFS) $(CINCS)
 CFLAGS += -O$(OPT)
-CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -mno-tablejump 
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -fno-jump-tables
 CFLAGS += -Wall -Wstrict-prototypes
 CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
 CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
diff --git a/hardware/arduino/bootloaders/stk500v2/avrinterruptnames.h 
b/hardware/arduino/bootloaders/stk500v2/avrinterruptnames.h
index 0ae80f9..f862f9a 100644
--- a/hardware/arduino/bootloaders/stk500v2/avrinterruptnames.h
+++ b/hardware/arduino/bootloaders/stk500v2/avrinterruptnames.h
@@ -13,6 +13,7 @@
 //*    Jul  4, 2010    <MLS> Started using vector defs for #ifdefs as defined in <avr/io.h>
 //*    Jul 13, 2010    <MLS> Added support for __AVR_ATmega128__
 //*    Aug 26, 2010    <MLS> Added support for __AVR_ATmega2561__
+//*    Sep 13, 2010    <MLS> Added support for __AVR_AT90CAN32__ __AVR_AT90CAN64__ __AVR_AT90CAN128__
 //**************************************************************************************************
 
 //#include     "avrinterruptnames.h"
@@ -253,13 +254,69 @@
        prog_char       gAvrInt_LCD_StartFrame[]        PROGMEM =       "LCD Start of Frame";
 #endif
 
+//*    these are for the chips with CAN bus support
+#ifdef CANIT_vect
+       prog_char       gAvrInt_CAN_TrafnsferCE[]       PROGMEM =       "CAN Transfer Complete or Error";
+#endif
+#ifdef OVRIT_vect
+       prog_char       gAvrInt_CAN_TimerOverRun[]      PROGMEM =       "CAN Timer Overrun";
+#endif
+
+//*    these are for __AVR_ATmega128RFA1__
+#ifdef TRX24_PLL_LOCK_vect
+       prog_char       gAvrInt_TRN_PLL_LOCK[]          PROGMEM =       "TRX24_PLL_LOCK";
+#endif
+#ifdef TRX24_PLL_UNLOCK_vect
+       prog_char       gAvrInt_TRN_PLL_UNLOCK[]        PROGMEM =       "TRX24_PLL_UNLOCK";
+#endif
+#ifdef TRX24_RX_START_vect
+       prog_char       gAvrInt_TRN_RX_START[]          PROGMEM =       "TRX24_RX_START";
+#endif
+#ifdef TRX24_RX_END_vect
+       prog_char       gAvrInt_TRN_RX_END[]            PROGMEM =       "TRX24_RX_END";
+#endif
+#ifdef TRX24_CCA_ED_DONE_vect
+       prog_char       gAvrInt_TRN_CAAED_DONE[]        PROGMEM =       "TRX24_CCA_ED_DONE";
+#endif
+#ifdef TRX24_XAH_AMI_vect
+       prog_char       gAvrInt_TRN_FRAME_MATCH[]       PROGMEM =       "TRX24_FRAME_ADDRESS_MATCH";
+#endif
+#ifdef TRX24_TX_END_vect
+       prog_char       gAvrInt_TRN_TX_END[]            PROGMEM =       "TRX24_TX_END";
+#endif
+#ifdef TRX24_AWAKE_vect
+       prog_char       gAvrInt_TRN_AWAKE[]                     PROGMEM =       "TRX24_AWAKE";
+#endif
+#ifdef SCNT_CMP1_vect
+       prog_char       gAvrInt_SCNT_CMP1[]                     PROGMEM =       "SCNT_CMP1";
+#endif
+#ifdef SCNT_CMP2_vect
+       prog_char       gAvrInt_SCNT_CMP2[]                     PROGMEM =       "SCNT_CMP2";
+#endif
+#ifdef SCNT_CMP3_vect
+       prog_char       gAvrInt_SCNT_CMP3[]                     PROGMEM =       "SCNT_CMP3";
+#endif
+#ifdef SCNT_OVFL_vect
+       prog_char       gAvrInt_SCNT_OVFL[]                     PROGMEM =       "SCNT_OVFL";
+#endif
+#ifdef SCNT_BACKOFF_vect
+       prog_char       gAvrInt_SCNT_BACKOFF[]          PROGMEM =       "SCNT_BACKOFF";
+#endif
+#ifdef AES_READY_vect
+       prog_char       gAvrInt_AES_READY[]                     PROGMEM =       "AES_READY";
+#endif
+#ifdef BAT_LOW_vect
+       prog_char       gAvrInt_BAT_LOW[]                       PROGMEM =       "BAT_LOW";
+#endif
+
+
 
 //**************************************************************************************************
 //*    these do not have vector defs and have to be done by CPU type
 #if defined(__AVR_ATmega645__ ) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__)
        prog_char       gAvrInt_NOT_USED[]              PROGMEM =       "NOT_USED";
 #endif
-#if defined(__AVR_ATmega32U4__)
+#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega128RFA1__)
        prog_char       gAvrInt_RESERVED[]              PROGMEM =       "Reserved";
 #endif
 
@@ -309,8 +366,8 @@ PGM_P gInterruptNameTable[] PROGMEM =
 #endif
 
 //**************************************************************************************************
-#pragma mark __AVR_ATmega169__
 #if defined(__AVR_ATmega169__)
+#pragma mark __AVR_ATmega169__
 
 #define        _INTERRUPT_NAMES_DEFINED_
 
@@ -439,8 +496,8 @@ PGM_P gInterruptNameTable[] PROGMEM =
 
 
 //**************************************************************************************************
-#if defined(__AVR_ATmega324P__ ) || defined(__AVR_ATmega644__ ) || defined(__AVR_ATmega644P__) || 
defined(__AVR_ATmega1284P__)
-#pragma mark __AVR_ATmega324P__  __AVR_ATmega644__ __AVR_ATmega644P__ __AVR_ATmega1284P__
+#if defined(__AVR_ATmega324P__ ) || defined(__AVR_ATmega644__ ) || defined(__AVR_ATmega644P__)
+#pragma mark __AVR_ATmega324P__  __AVR_ATmega644__ __AVR_ATmega644P__ 
 
 #define        _INTERRUPT_NAMES_DEFINED_
 
@@ -488,6 +545,61 @@ PGM_P gInterruptNameTable[]        PROGMEM =
 #endif
 
 //**************************************************************************************************
+#if defined(__AVR_ATmega1284P__ )
+#pragma mark __AVR_ATmega1284P__
+
+#define        _INTERRUPT_NAMES_DEFINED_
+
+PGM_P gInterruptNameTable[]    PROGMEM =
+{
+
+       gAvrInt_RESET,                  //      1
+       gAvrInt_INT0,                   //      2
+       gAvrInt_INT1,                   //      3
+       gAvrInt_INT2,                   //      4
+       gAvrInt_PCINT0,                 //      5
+       gAvrInt_PCINT1,                 //      6
+       gAvrInt_PCINT2,                 //      7
+       gAvrInt_PCINT3,                 //      8
+       gAvrInt_WDT,                    //      9
+       gAvrInt_TIMER2_COMPA,   //      10
+       gAvrInt_TIMER2_COMPB,   //      11
+       gAvrInt_TIMER2_OVF,             //      12
+       gAvrInt_TIMER1_CAPT,    //      13
+       gAvrInt_TIMER1_COMPA,   //      14
+       gAvrInt_TIMER1_COMPB,   //      15
+       gAvrInt_TIMER1_OVF,             //      16
+       gAvrInt_TIMER0_COMPA,   //      17
+       gAvrInt_TIMER0_COMPB,   //      18
+       gAvrInt_TIMER0_OVF,             //      19
+       gAvrInt_SPI_STC,                //      20
+       gAvrInt_USART0_RX,              //      21
+       gAvrInt_USART0_UDRE,    //      22
+       gAvrInt_USART0_TX,              //      23
+       gAvrInt_ANALOG_COMP,    //      24
+       gAvrInt_ADC,                    //      25
+       gAvrInt_EE_READY,               //      26
+       gAvrInt_TWI,                    //      27
+       gAvrInt_SPM_READY,              //      28
+
+       gAvrInt_USART1_RX,              //      29
+       gAvrInt_USART1_UDRE,    //      30
+       gAvrInt_USART1_TX,              //      31
+       //*     these are NOT documented in  doc8272.pdf 
+       //*     they are in iom1284p.h
+       gAvrInt_TIMER3_CAPT,    //      32
+       gAvrInt_TIMER3_COMPA,   //      33
+       gAvrInt_TIMER3_COMPB,   //      34
+       gAvrInt_TIMER3_OVF,             //      35
+       
+
+};
+
+
+#endif
+
+
+//**************************************************************************************************
 #if defined(__AVR_ATmega645__ )
 #pragma mark __AVR_ATmega645__
 
@@ -529,6 +641,41 @@ PGM_P gInterruptNameTable[]        PROGMEM =
 
 #endif
 
+//**************************************************************************************************
+#if defined(__AVR_ATmega16__ )
+#pragma mark __AVR_ATmega16__
+
+#define        _INTERRUPT_NAMES_DEFINED_
+
+PGM_P gInterruptNameTable[]    PROGMEM =
+{
+
+       gAvrInt_RESET,                  //      1
+       gAvrInt_INT0,                   //      2
+       gAvrInt_INT1,                   //      3
+       gAvrInt_TIMER2_COMP,    //      4
+       gAvrInt_TIMER2_OVF,             //      5
+       gAvrInt_TIMER1_CAPT,    //      6
+       gAvrInt_TIMER1_COMPA,   //      7
+       gAvrInt_TIMER1_COMPB,   //      8
+       gAvrInt_TIMER1_OVF,             //      9
+       gAvrInt_TIMER0_OVF,             //      10
+       gAvrInt_SPI_STC,                //      11
+       gAvrInt_USART_RX,               //      12
+       gAvrInt_USART_UDRE,             //      13
+       gAvrInt_USART_TX,               //      14
+       gAvrInt_ADC,                    //      15
+       gAvrInt_EE_READY,               //      16
+       gAvrInt_ANALOG_COMP,    //      17
+       gAvrInt_TWI,                    //      18
+       gAvrInt_INT2,                   //      19
+       gAvrInt_TIMER0_COMP,    //      20
+       gAvrInt_SPM_READY,              //      21
+
+};
+
+
+#endif
 
 //**************************************************************************************************
 #if defined(__AVR_ATmega32__ )
@@ -629,7 +776,7 @@ PGM_P gInterruptNameTable[] PROGMEM =
 #endif
 
 //**************************************************************************************************
-#if defined(__AVR_AT90USB1286__)
+#if defined(__AVR_AT90USB1286__) ||  defined(__AVR_AT90USB1287__)
 #pragma mark __AVR_AT90USB1286__
 //*    teensy++ 2.0
 //*    http://www.pjrc.com/teensy/pinout.html
@@ -689,8 +836,8 @@ PGM_P gInterruptNameTable[] PROGMEM =
 
 
 //**************************************************************************************************
-#if defined(__AVR_ATmega128__)
-#pragma mark __AVR_ATmega128__
+#if defined(__AVR_ATmega128__) || defined(__AVR_ATmega64__)
+#pragma mark __AVR_ATmega64__ __AVR_ATmega128__
 #define        _INTERRUPT_NAMES_DEFINED_
 
 
@@ -737,6 +884,157 @@ PGM_P gInterruptNameTable[]       PROGMEM =
 
 #endif
 
+//**************************************************************************************************
+#if defined(__AVR_AT90CAN32__) || defined(__AVR_AT90CAN64__) || defined(__AVR_AT90CAN128__)
+#pragma mark __AVR_AT90CAN32__ __AVR_AT90CAN64__ __AVR_AT90CAN128__
+
+#define        _INTERRUPT_NAMES_DEFINED_
+
+PGM_P gInterruptNameTable[]    PROGMEM =
+{
+
+       gAvrInt_RESET,                          //      1
+       gAvrInt_INT0,                           //      2
+       gAvrInt_INT1,                           //      3
+       gAvrInt_INT2,                           //      4
+       gAvrInt_INT3,                           //      5
+       gAvrInt_INT4,                           //      6
+       gAvrInt_INT5,                           //      7
+       gAvrInt_INT6,                           //      8
+       gAvrInt_INT7,                           //      9
+       gAvrInt_TIMER2_COMP,            //      10
+       gAvrInt_TIMER2_OVF,                     //      11
+       gAvrInt_TIMER1_CAPT,            //      12
+       gAvrInt_TIMER1_COMPA,           //      13
+       gAvrInt_TIMER1_COMPB,           //      14
+       gAvrInt_TIMER1_COMPC,           //      15
+       gAvrInt_TIMER1_OVF,                     //      16
+       gAvrInt_TIMER0_COMP,            //      17
+       gAvrInt_TIMER0_OVF,                     //      18
+       gAvrInt_CAN_TrafnsferCE,        //      19
+       gAvrInt_CAN_TimerOverRun,       //      20
+       gAvrInt_SPI_STC,                        //      21
+       gAvrInt_USART0_RX,                      //      22
+       gAvrInt_USART0_UDRE,            //      23
+       gAvrInt_USART0_TX,                      //      24
+       gAvrInt_ANALOG_COMP,            //      25
+       gAvrInt_ADC,                            //      26
+       gAvrInt_EE_READY,                       //      27
+       gAvrInt_TIMER3_CAPT,            //      28
+       gAvrInt_TIMER3_COMPA,           //      29
+       gAvrInt_TIMER3_COMPB,           //      30
+       gAvrInt_TIMER3_COMPC,           //      31
+       gAvrInt_TIMER3_OVF,                     //      32
+       gAvrInt_USART1_RX,                      //      33
+       gAvrInt_USART1_UDRE,            //      34
+       gAvrInt_USART1_TX,                      //      35
+       gAvrInt_TWI,                            //      36
+       gAvrInt_SPM_READY,                      //      37
+};
+
+#endif
+
+//**************************************************************************************************
+#if defined (__AVR_ATmega128RFA1__)
+#pragma mark __AVR_ATmega128RFA1__
+#define        _INTERRUPT_NAMES_DEFINED_
+
+PGM_P gInterruptNameTable[]    PROGMEM =
+{
+       //*     Atmel changed the number scheme for interrupt vectors
+       gAvrInt_RESET,                  //      0
+       gAvrInt_INT0,                   //      1
+       gAvrInt_INT1,                   //      2
+       gAvrInt_INT2,                   //      3
+       gAvrInt_INT3,                   //      4
+       gAvrInt_INT4,                   //      5
+       gAvrInt_INT5,                   //      6
+       gAvrInt_INT6,                   //      7
+       gAvrInt_INT7,                   //      8
+       gAvrInt_PCINT0,                 //      9
+       gAvrInt_PCINT1,                 //      10
+       gAvrInt_PCINT2,                 //      11
+       gAvrInt_WDT,                    //      12
+       gAvrInt_TIMER2_COMPA,   //      13
+       gAvrInt_TIMER2_COMPB,   //      14
+       gAvrInt_TIMER2_OVF,             //      15
+       gAvrInt_TIMER1_CAPT,    //      16
+       gAvrInt_TIMER1_COMPA,   //      17
+       gAvrInt_TIMER1_COMPB,   //      18
+       gAvrInt_TIMER1_COMPC,   //      19
+       gAvrInt_TIMER1_OVF,             //      20
+       gAvrInt_TIMER0_COMPA,   //      21
+       gAvrInt_TIMER0_COMPB,   //      22
+       gAvrInt_TIMER0_OVF,             //      23
+       gAvrInt_SPI_STC,                //      24
+       gAvrInt_USART0_RX,              //      25
+       gAvrInt_USART0_UDRE,    //      26
+       gAvrInt_USART0_TX,              //      27
+       gAvrInt_ANALOG_COMP,    //      28
+       gAvrInt_ADC,                    //      29
+       gAvrInt_EE_READY,               //      30
+       gAvrInt_TIMER3_CAPT,    //      31
+       gAvrInt_TIMER3_COMPA,   //      32
+       gAvrInt_TIMER3_COMPB,   //      33
+       gAvrInt_TIMER3_COMPC,   //      34
+       gAvrInt_TIMER3_OVF,             //      35
+       gAvrInt_USART1_RX,              //      36
+       gAvrInt_USART1_UDRE,    //      37
+       gAvrInt_USART1_TX,              //      38
+       gAvrInt_TWI,                    //      39
+       gAvrInt_SPM_READY,              //      40
+       gAvrInt_TIMER4_CAPT,    //      41
+       gAvrInt_TIMER4_COMPA,   //      42
+       gAvrInt_TIMER4_COMPB,   //      43
+       gAvrInt_TIMER4_COMPC,   //      44
+       gAvrInt_TIMER4_OVF,             //      45
+       gAvrInt_TIMER5_CAPT,    //      46
+       gAvrInt_TIMER5_COMPA,   //      47
+       gAvrInt_TIMER5_COMPB,   //      48
+       gAvrInt_TIMER5_COMPC,   //      49
+       gAvrInt_TIMER5_OVF,             //      50
+#if 1
+       gAvrInt_RESERVED,               //      51
+       gAvrInt_RESERVED,               //      52
+       gAvrInt_RESERVED,               //      53
+
+       gAvrInt_RESERVED,               //      54
+       gAvrInt_RESERVED,               //      55
+       gAvrInt_RESERVED,               //      56
+
+#else
+       gAvrInt_USART2_RX,              //      51
+       gAvrInt_USART2_UDRE,    //      52
+       gAvrInt_USART2_TX,              //      53
+
+       gAvrInt_USART3_RX,              //      54
+       gAvrInt_USART3_UDRE,    //      55
+       gAvrInt_USART3_TX,              //      56
+#endif
+       gAvrInt_TRN_PLL_LOCK,   //      57
+       gAvrInt_TRN_PLL_UNLOCK, //      58      
+       gAvrInt_TRN_RX_START,   //      59
+       gAvrInt_TRN_RX_END,             //      60
+       gAvrInt_TRN_CAAED_DONE, //      61
+       gAvrInt_TRN_FRAME_MATCH,//      62
+       gAvrInt_TRN_TX_END,             //      63
+       gAvrInt_TRN_AWAKE,              //      64
+       
+       gAvrInt_SCNT_CMP1,              //      65
+       gAvrInt_SCNT_CMP2,              //      66
+       gAvrInt_SCNT_CMP3,              //      67
+       gAvrInt_SCNT_OVFL,              //      68
+       gAvrInt_SCNT_BACKOFF,   //      69
+       gAvrInt_AES_READY,              //      70
+       gAvrInt_BAT_LOW,                //      71
+       
+       
+};
+
+#endif
+
+
 #if !defined(_INTERRUPT_NAMES_DEFINED_)
        #warning        No interrupt string defs for this cpu
-#endif
\ No newline at end of file
+#endif
+
diff --git a/hardware/arduino/bootloaders/stk500v2/stk500boot.c 
b/hardware/arduino/bootloaders/stk500v2/stk500boot.c
index 13dec89..e7494df 100644
--- a/hardware/arduino/bootloaders/stk500v2/stk500boot.c
+++ b/hardware/arduino/bootloaders/stk500v2/stk500boot.c
@@ -79,9 +79,27 @@ LICENSE:
 //*    Jul 29, 2010    <MLS> Added recchar_timeout for timing out on bootloading
 //*    Aug 23, 2010    <MLS> Added support for atmega2561
 //*    Aug 26, 2010    <MLS> Removed support for BOOT_BY_SWITCH
+//*    Sep  8, 2010    <MLS> Added support for atmega16
+//*    Nov  9, 2010    <MLS> Issue 392:Fixed bug that 3 !!! in code would cause it to jump to monitor
+//*    Jun 24, 2011    <MLS> Removed analogRead (was not used)
+//*    Dec 29, 2011    <MLS> Issue 181: added watch dog timmer support
+//*    Dec 29, 2011    <MLS> Issue 505:  bootloader is comparing the seqNum to 1 or the current sequence 
+//*    Jan  1, 2012    <MLS> Issue 543: CMD_CHIP_ERASE_ISP now returns STATUS_CMD_FAILED instead of 
STATUS_CMD_OK
+//*    Jan  1, 2012    <MLS> Issue 543: Write EEPROM now does something (NOT TESTED)
+//*    Jan  1, 2012    <MLS> 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       <inttypes.h>
 #include       <avr/io.h>
@@ -95,11 +113,20 @@ LICENSE:
 #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 @@ LICENSE:
        #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 @@ LICENSE:
        #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 @@ LICENSE:
        #define F_CPU 16000000UL
 #endif
 
+#define        _BLINK_LOOP_COUNT_      (F_CPU / 2250)
 /*
  * UART Baudrate, AVRStudio AVRISP only accepts 115200 bps
  */
@@ -228,12 +297,33 @@ LICENSE:
        #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 @@ LICENSE:
        #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    <MLS> 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<<PROGLED_PIN);       // turn LED ON
@@ -547,10 +681,13 @@ int main(void)
                                {
                                //      c       =       recchar();
                                        c       =       recchar_timeout();
+                                       
                                }
 
                        #ifdef ENABLE_MONITOR
-                               if (c == '!')
+                               rcvdCharCntr++;
+
+                               if ((c == '!')  && (rcvdCharCntr < 10))
                                {
                                        exPointCntr++;
                                        if (exPointCntr == 3)
@@ -579,6 +716,11 @@ int main(void)
                                                break;
 
                                        case ST_GET_SEQ_NUM:
+                                       #ifdef _FIX_ISSUE_505_
+                                               seqNum                  =       c;
+                                               msgParseState   =       ST_MSG_SIZE_1;
+                                               checksum                ^=      c;
+                                       #else
                                                if ( (c == 1) || (c == seqNum) )
                                                {
                                                        seqNum                  =       c;
@@ -589,6 +731,7 @@ int main(void)
                                                {
                                                        msgParseState   =       ST_START;
                                                }
+                                       #endif
                                                break;
 
                                        case ST_MSG_SIZE_1:
@@ -655,20 +798,41 @@ int main(void)
                                                        unsigned char signatureIndex    =       msgBuffer[6];
 
                                                        if ( signatureIndex == 0 )
-                                                               answerByte      =       (SIGNATURE_BYTES 
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 <Worapoht>
-       //                                              flag    =       1; // Remark this line for AVRDUDE 
<Worapoht>
                                                }
                                                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,23 +1020,17 @@ int main(void)
                                                }
                                                else
                                                {
-                                               #if (!defined(__AVR_ATmega1280__) && 
!defined(__AVR_ATmega2560__)  && !defined(__AVR_ATmega2561__))
+                                                       //*     issue 543, this should work, It has not been 
tested.
+                                                       uint16_t ii = address >> 1;
                                                        /* write EEPROM */
-                                                       do {
-                                                               EEARL   =       address;                      
  // Setup EEPROM address
-                                                               EEARH   =       (address >> 8);
-                                                               address++;                                    
          // Select next EEPROM byte
-
-                                                               EEDR    =       *p++;                         
  // get byte from buffer
-                                                               EECR    |=      (1<<EEMWE);                   
  // Write data into EEPROM
-                                                               EECR    |=      (1<<EEWE);
-
-                                                               while (EECR & (1<<EEWE));       // Wait for 
write operation to finish
-                                                               size--;                                       
  // Decrease number of bytes to write
-                                                       } while (size);                                 // 
Loop until all bytes written
-                                               #endif
+                                                       while (size) {
+                                                               eeprom_write_byte((uint8_t*)ii, *p++);
+                                                               address+=2;                                   
          // Select next EEPROM byte
+                                                               ii++;
+                                                               size--;
+                                                       }
                                                }
-                                                       msgLength       =       2;
+                                               msgLength               =       2;
                                                msgBuffer[1]    =       STATUS_CMD_OK;
                                        }
                                        break;
@@ -890,11 +1049,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 +1216,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,78 +1231,79 @@ unsigned long   gEepromIndex;
 
 void   PrintDecInt(int theNumber, int digitCnt);
 
-#ifdef kCPU_NAME
-       prog_char       gTextMsg_CPU_Name[]                     PROGMEM =       kCPU_NAME;
+#ifdef _AVR_CPU_NAME_
+       const char      gTextMsg_CPU_Name[]                     PROGMEM =       _AVR_CPU_NAME_;
 #else
-       prog_char       gTextMsg_CPU_Name[]                     PROGMEM =       "UNKNOWN";
+       const char      gTextMsg_CPU_Name[]                     PROGMEM =       "UNKNOWN";
 #endif
 
-       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_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__;
-       prog_char       gTextMsg_VECTOR_HEADER[]        PROGMEM =       "V#   ADDR   op code     instruction 
addr   Interrupt";
-       prog_char       gTextMsg_noVector[]                     PROGMEM =       "no vector";
-       prog_char       gTextMsg_rjmp[]                         PROGMEM =       "rjmp  ";
-       prog_char       gTextMsg_jmp[]                          PROGMEM =       "jmp ";
-       prog_char       gTextMsg_WHAT_PORT[]            PROGMEM =       "What port:";
-       prog_char       gTextMsg_PortNotSupported[]     PROGMEM =       "Port not supported";
-       prog_char       gTextMsg_MustBeLetter[]         PROGMEM =       "Must be a letter";
-       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_PORT[]                         PROGMEM =       "PORT";
+       const char      gTextMsg_Explorer[]                     PROGMEM =       "Arduino explorer stk500V2 by 
MLS";
+       const char      gTextMsg_Prompt[]                       PROGMEM =       "Bootloader>";
+       const char      gTextMsg_HUH[]                          PROGMEM =       "Huh?";
+       const char      gTextMsg_COMPILED_ON[]          PROGMEM =       "Compiled on = ";
+       const char      gTextMsg_CPU_Type[]                     PROGMEM =       "CPU Type    = ";
+       const char      gTextMsg_AVR_ARCH[]                     PROGMEM =       "__AVR_ARCH__= ";
+       const char      gTextMsg_AVR_LIBC[]                     PROGMEM =       "AVR LibC Ver= ";
+       const char      gTextMsg_GCC_VERSION[]          PROGMEM =       "GCC Version = ";
+       const char      gTextMsg_CPU_SIGNATURE[]        PROGMEM =       "CPU ID      = ";
+       const char      gTextMsg_FUSE_BYTE_LOW[]        PROGMEM =       "Low fuse    = ";
+       const char      gTextMsg_FUSE_BYTE_HIGH[]       PROGMEM =       "High fuse   = ";
+       const char      gTextMsg_FUSE_BYTE_EXT[]        PROGMEM =       "Ext fuse    = ";
+       const char      gTextMsg_FUSE_BYTE_LOCK[]       PROGMEM =       "Lock fuse   = ";
+       const char      gTextMsg_GCC_DATE_STR[]         PROGMEM =       __DATE__;
+       const char      gTextMsg_AVR_LIBC_VER_STR[]     PROGMEM =       __AVR_LIBC_VERSION_STRING__;
+       const char      gTextMsg_GCC_VERSION_STR[]      PROGMEM =       __VERSION__;
+       const char      gTextMsg_VECTOR_HEADER[]        PROGMEM =       "V#   ADDR   op code     instruction 
addr   Interrupt";
+       const char      gTextMsg_noVector[]                     PROGMEM =       "no vector";
+       const char      gTextMsg_rjmp[]                         PROGMEM =       "rjmp  ";
+       const char      gTextMsg_jmp[]                          PROGMEM =       "jmp ";
+       const char      gTextMsg_WHAT_PORT[]            PROGMEM =       "What port:";
+       const char      gTextMsg_PortNotSupported[]     PROGMEM =       "Port not supported";
+       const char      gTextMsg_MustBeLetter[]         PROGMEM =       "Must be a letter";
+       const char      gTextMsg_SPACE[]                        PROGMEM =       " ";
+       const char      gTextMsg_WriteToEEprom[]        PROGMEM =       "Writting EE";
+       const char      gTextMsg_ReadingEEprom[]        PROGMEM =       "Reading EE";
+       const char      gTextMsg_EEPROMerrorCnt[]       PROGMEM =       "EE err cnt=";
+       const char      gTextMsg_PORT[]                         PROGMEM =       "PORT";
 
 
 //************************************************************************
 //*    Help messages
-       prog_char       gTextMsg_HELP_MSG_0[]           PROGMEM =       "0=Zero address ctrs";
-       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";
-       prog_char       gTextMsg_HELP_MSG_E[]           PROGMEM =       "E=Dump EEPROM";
-       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_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";
-
-       prog_char       gTextMsg_END[]                          PROGMEM =       "*";
+       const char      gTextMsg_HELP_MSG_0[]           PROGMEM =       "0=Zero addr";
+       const char      gTextMsg_HELP_MSG_QM[]          PROGMEM =       "?=CPU stats";
+       const char      gTextMsg_HELP_MSG_AT[]          PROGMEM =       "@=EEPROM test";
+       const char      gTextMsg_HELP_MSG_B[]           PROGMEM =       "B=Blink LED";
+       const char      gTextMsg_HELP_MSG_E[]           PROGMEM =       "E=Dump EEPROM";
+       const char      gTextMsg_HELP_MSG_F[]           PROGMEM =       "F=Dump FLASH";
+       const char      gTextMsg_HELP_MSG_H[]           PROGMEM =       "H=Help";
+       const char      gTextMsg_HELP_MSG_L[]           PROGMEM =       "L=List I/O Ports";
+//     const char      gTextMsg_HELP_MSG_Q[]           PROGMEM =       "Q=Quit & jump to user pgm";
+       const char      gTextMsg_HELP_MSG_Q[]           PROGMEM =       "Q=Quit";
+       const char      gTextMsg_HELP_MSG_R[]           PROGMEM =       "R=Dump RAM";
+       const char      gTextMsg_HELP_MSG_V[]           PROGMEM =       "V=show interrupt Vectors";
+       const char      gTextMsg_HELP_MSG_Y[]           PROGMEM =       "Y=Port blink";
+
+       const char      gTextMsg_END[]                          PROGMEM =       "*";
 
 
 //************************************************************************
-void   PrintFromPROGMEM(void *dataPtr, unsigned char offset)
+void   PrintFromPROGMEM(const void *dataPtr, unsigned char offset)
 {
-uint8_t        ii;
 char   theChar;
 
-       ii                      =       offset;
-       theChar         =       1;
+       dataPtr         +=      offset;
 
-       while (theChar != 0)
-       {
-               theChar =       pgm_read_byte_far((uint32_t)dataPtr + ii);
+       do {
+       #if (FLASHEND > 0x10000)
+               theChar =       pgm_read_byte_far((uint16_t)dataPtr++);
+       #else
+               theChar =       pgm_read_byte_near((uint16_t)dataPtr++);
+       #endif
                if (theChar != 0)
                {
                        sendchar(theChar);
                }
-               ii++;
-       }
+       } while (theChar != 0);
 }
 
 //************************************************************************
@@ -1160,7 +1315,7 @@ void      PrintNewLine(void)
 
 
 //************************************************************************
-void   PrintFromPROGMEMln(void *dataPtr, unsigned char offset)
+void   PrintFromPROGMEMln(const void *dataPtr, unsigned char offset)
 {
        PrintFromPROGMEM(dataPtr, offset);
 
@@ -1293,46 +1448,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,11 +1503,15 @@ 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:
-                                       theValue        =       eeprom_read_byte((void *)myAddressPointer);
+                                       theValue        =       eeprom_read_byte((uint8_t 
*)(uint16_t)myAddressPointer);
                                        break;
 
                                case kDUMP_RAM:
@@ -1435,7 +1554,11 @@ int              errorCount;
        PrintFromPROGMEMln(gTextMsg_WriteToEEprom, 0);
        PrintNewLine();
        ii                      =       0;
-       while (((theChar = pgm_read_byte_far(gTextMsg_Explorer + ii)) != '*') && (ii < 512))
+#if (FLASHEND > 0x10000)
+       while (((theChar = pgm_read_byte_far(((uint16_t)gTextMsg_Explorer) + ii)) != '*') && (ii < 512))
+#else
+       while (((theChar = pgm_read_byte_near(((uint16_t)gTextMsg_Explorer) + ii)) != '*') && (ii < 512))
+#endif
        {
                eeprom_write_byte((uint8_t *)ii, theChar);
                if (theChar == 0)
@@ -1456,7 +1579,11 @@ int              errorCount;
        PrintNewLine();
        errorCount      =       0;
        ii                      =       0;
-       while (((theChar = pgm_read_byte_far(gTextMsg_Explorer + ii)) != '*') && (ii < 512))
+#if (FLASHEND > 0x10000)
+       while (((theChar = pgm_read_byte_far((uint16_t)gTextMsg_Explorer + ii)) != '*') && (ii < 512))
+#else
+       while (((theChar = pgm_read_byte_near((uint16_t)gTextMsg_Explorer + ii)) != '*') && (ii < 512))
+#endif
        {
                theEEPROMchar   =       eeprom_read_byte((uint8_t *)ii);
                if (theEEPROMchar == 0)
@@ -1487,10 +1614,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 +1663,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 +1731,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 +2034,7 @@ int                              ii, jj;
                {
                        theChar =       theChar & 0x5F;
                }
-       #if defined( _CEREBOTPLUS_BOARD_ )
-               if (theChar == 0x5F)
-               {
-                       
-               }
-               else
-       #endif
+
                if (theChar >= 0x20)
                {
                        sendchar(theChar);
@@ -1979,12 +2112,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 4f36699..68d2e18 100644
--- a/hardware/arduino/bootloaders/stk500v2/stk500boot_v2_mega2560.hex
+++ b/hardware/arduino/bootloaders/stk500v2/stk500boot_v2_mega2560.hex
@@ -1,513 +1,469 @@
 :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
+:10E1B000652020203D20004D617220203720323024
+:10E1C000313300312E362E3800342E332E350056A2
+:10E1D00023202020414444522020206F7020636F70
+:10E1E00064652020202020696E73747275637469E1
+:10E1F0006F6E2061646472202020496E74657272B3
+:10E20000757074006E6F20766563746F7200726A49
+:10E210006D702020006A6D70200057686174207056
+:10E220006F72743A00506F7274206E6F7420737541
+:10E2300070706F72746564004D7573742062652030
+:10E2400061206C6574746572002000577269747483
+:10E25000696E672045450052656164696E672045B7
+:10E26000450045452065727220636E743D00504F35
+:10E27000525400303D5A65726F2061646472003FF1
+:10E280003D43505520737461747300403D454550C3
+:10E29000524F4D207465737400423D426C696E6B41
+:10E2A000204C454400453D44756D70204545505215
+:10E2B0004F4D00463D44756D7020464C415348001B
+:10E2C000483D48656C70004C3D4C69737420492F83
+:10E2D0004F20506F72747300513D51756974005234
+:10E2E0003D44756D702052414D00563D73686F7707
+:10E2F00020696E7465727275707420566563746FF0
+:10E30000727300593D506F727420626C696E6B00BD
+:10E310002A0011241FBECFEFD1E2DEBFCDBF01E046
+:10E320000CBF12E0A0E0B2E0EEE1FDEF03E00BBFB6
+:10E3300002C007900D92A030B107D9F712E0A0E01B
+:10E34000B2E001C01D92AE30B107E1F70F9460F367
+:10E350000D948DFE01E20EBF0FEF0DBF11241FBE05
+:10E360000D9460F30D9400F020E030E040ED57E0B4
+:10E3700005C0FA013197F1F72F5F3F4F2817390792
+:10E38000C0F308959C01260F311DC901A0E0B0E043
+:10E390002F5F3F4FABBFFC018791882361F08093D3
+:10E3A000C6008091C00086FFFCCF8091C0008064D1
+:10E3B0008093C000EACF08958DE08093C6008091DD
+:10E3C000C00086FFFCCF8091C00080648093C000B5
+:10E3D0008AE08093C6008091C00086FFFCCF8091C8
+:10E3E000C00080648093C00008950F94C2F10F9420
+:10E3F000DCF10895FC019081992359F09093C600B7
+:10E400008091C00086FFFCCF8091C0008064809323
+:10E41000C0003196992379F70895282F982F929567
+:10E420009F70892F805D8A3308F0895F8093C600D2
+:10E430008091C00086FFFCCF8091C00080648093F3
+:10E44000C000822F8F70982F905D9A3308F0995FEB
+:10E450009093C6008091C00086FFFCCF8091C000E1
+:10E4600080648093C00008959C01FB01853691056E
+:10E470001CF46330710594F0C90164E670E00F94F8
+:10E480002EFE605D7F4F6093C6008091C00086FFC6
+:10E49000FCCF8091C00080648093C0002B30310598
+:10E4A00014F43297B4F0C90164E670E00F942EFEC4
+:10E4B0006AE070E00F942EFE605D7F4F6093C600AF
+:10E4C0008091C00086FFFCCF8091C0008064809363
+:10E4D000C000C9016AE070E00F942EFEC0968093E0
+:10E4E000C6008091C00086FFFCCF8091C000806490
+:10E4F0008093C00008951F93182F8EE692EE60E07F
+:10E500000F94C2F11093C6008091C00086FFFCCF2B
+:10E510008091C00080648093C0000F94DCF11F9153
+:10E5200008952F923F924F925F926F927F928F92B7
+:10E530009F92AF92BF92CF92DF92EF92FF920F9392
+:10E540001F93DF93CF93CDB7DEB762970FB6F894E2
+:10E55000DEBF0FBECDBF382E622ECA01DB015C01CB
+:10E560006D01772420E2222E2E010894411C511CBB
+:10E570008BC081E0A81680E0B80681E0C80680E084
+:10E58000D80628F0C601AA27BB270F940DF2BB2797
+:10E59000AD2D9C2D8B2D0F940DF28A2D0F940DF225
+:10E5A0002092C6008091C00086FFFCCF8091C00001
+:10E5B00080648093C0009DE29093C6008091C0006B
+:10E5C00086FFFCCF8091C00080648093C0002092C1
+:10E5D000C6008091C00086FFFCCF8091C00080649F
+:10E5E0008093C00019828601750188249924A1E0D6
+:10E5F0003A1651F03A1620F0B2E03B1661F409C029
+:10E600000BBFF701779007C0C7010F9477FE782EF4
+:10E6100002C0F7017080872D0F940DF22092C60082
+:10E620008091C00086FFFCCF8091C0008064809301
+:10E63000C000872D8052F401EF70F0708F3520F408
+:10E64000E40DF51D708204C0E40DF51D8EE280839B
+:10E650000894E11CF11C011D111D0894811C911CE2
+:10E6600090E18916910409F0C2CF80E190E0A0E02A
+:10E67000B0E0A80EB91ECA1EDB1E198AC2010F9493
+:10E68000FAF10F94DCF16A94662009F072CF629679
+:10E690000FB6F894DEBF0FBECDBFCF91DF911F91B3
+:10E6A0000F91FF90EF90DF90CF90BF90AF909F9031
+:10E6B0008F907F906F905F904F903F902F90089534
+:10E6C0002F923F924F925F926F927F928F929F9282
+:10E6D000AF92BF92CF92DF92EF92FF920F931F9370
+:10E6E000DF93CF93CDB7DEB7CD53D1400FB6F894BB
+:10E6F000DEBF0FBECDBF01E20EBF0FEF0DBF94B75F
+:10E70000F894A89514BE80916000886180936000A1
+:10E7100010926000789493FF05C0E0910002F091A0
+:10E7200001021995279A2F9A8091C00082608093E8
+:10E73000C00080E18093C40088E18093C1000000A4
+:10E74000EE24FF24870144E0A42EB12CCC24DD2448
+:10E7500024C0C5010197F1F70894E11CF11C011DCB
+:10E76000111D21E2E2162EE4F20620E0020720E06D
+:10E77000120718F031E0C32ED12CC801B70127ECE5
+:10E780003BE140E050E00F9441FE611571058105C9
+:10E79000910519F485B1805885B98091C00087FD35
+:10E7A00003C0C114D104A9F2A6014F5F5F4FC25E3E
+:10E7B000DE4F59834883CE51D140C25EDE4F8881FF
+:10E7C0009981CE51D140019711F00D9410FEC05D9A
+:10E7D000DE4F19821882C053D14060E0C15DDE4F28
+:10E7E0001882CF52D14088249924C35DDE4F19820C
+:10E7F0001882CD52D140C05EDE4F188219821A8233
+:10E800001B82C052D140CE5CDE4F188219821A8220
+:10E810001B82C253D140EE24FF2487010BBFF701B6
+:10E8200007911691C45CDE4F19830883CC53D14005
+:10E830000D940BFEC25EDE4F28813981CE51D1404E
+:10E840002130310509F52091C600C25EDE4F1982E4
+:10E850001882CE51D14022C02F5F3F4F4F4F5F4FA4
+:10E86000213082E138078AE7480780E0580780F0C6
+:10E87000C45CDE4FE881F981CC53D140EF5FFF4F9C
+:10E8800019F0EE27FF27099420E030E040E050E047
+:10E890008091C00087FFE0CF2091C600C35DDE4FAE
+:10E8A00048815981CD52D1404F5F5F4FC35DDE4FEC
+:10E8B00059834883CD52D140213209F063C64A3092
+:10E8C000510508F05FC60894811C911C53E0851621
+:10E8D000910409F059C600E010E018C081E280936D
+:10E8E000C6008091C00086FFFCCF8091C00080648C
+:10E8F0008093C0002F5F3F4F2931310579F70F9486
+:10E90000DCF10F5F1F4F0530110519F020E030E0FA
+:10E91000E5CF10920A0210920B0210920C02109294
+:10E920000D02109206021092070210920802109235
+:10E930000902109202021092030210920402109235
+:10E9400005028FEE90EE60E00F94F5F180E191EE1C
+:10E9500060E00F94C2F18091C00087FFFCCF9091DE
+:10E96000C600903608F09F759032B8F09093C600BC
+:10E970008091C00086FFFCCF8091C00080648093AE
+:10E98000C000A0E2A093C6008091C00086FFFCCF2B
+:10E990008091C00080648093C000983409F4D7C18E
+:10E9A0009934B8F4923409F459C1933458F490333B
+:10E9B00019F1903308F4E3C59F33A1F1903409F0C5
+:10E9C000DEC5BDC0953409F470C1963409F0D7C5D1
+:10E9D00098C1923509F42BC2933538F49C3409F46C
+:10E9E000F5C1913509F0CBC518C2963509F445C279
+:10E9F000993509F0C4C567C483E792EE62E00F94CD
+:10EA0000F5F110920602109207021092080210927D
+:10EA1000090210920A0210920B0210920C0210923C
+:10EA20000D0213C18FE792EE62E00F94F5F18FEEC5
+:10EA300090EE60E00F94F5F181E291EE60E00F94CA
+:10EA4000C2F187EB91EE60E00F94F5F180E391EE77
+:10EA500060E00F94C2F184EE90EE60E00F94F5F167
+:10EA60008FE391EE60E00F94C2F186E090E061E008
+:10EA700070E00F9434F20F94DCF18DE591EE60E0DC
+:10EA80000F94C2F189EC91EE60E00F94F5F18EE401
+:10EA900091EE60E00F94C2F183EC91EE60E00F9490
+:10EAA000F5F18CE691EE60E00F94C2F18EE10F94E7
+:10EAB0000DF288E90F940DF281E00F940DF20F949E
+:10EAC000DCF18BE791EE60E00F94C2F119E0E0E039
+:10EAD000F0E010935700E4918E2F0F940DF20F94F5
+:10EAE000DCF18AE891EE60E00F94C2F1E3E0F0E03F
+:10EAF00010935700E4918E2F0F940DF20F94DCF1D8
+:10EB000089E991EE60E00F94C2F1E2E0F0E0109349
+:10EB10005700E4918E2F0F940DF20F94DCF188EAE8
+:10EB200091EE60E00F94C2F1E1E0F0E01093570045
+:10EB30001491812F0F940DF20F94DCF107CF8BE825
+:10EB400092EE62E00F94F5F18BE492EE60E00F94A8
+:10EB5000F5F10F94DCF100E010E019C0C8016F2D51
+:10EB60000F947FFEFF2031F489E492EE60E00F9471
+:10EB7000C2F10BC0F092C6008091C00086FFFCCFAE
+:10EB80008091C00080648093C0000F5F1F4FC80158
+:10EB900081519F41A0E0B0E0ABBFFC01F790BAE229
+:10EBA000FB1621F0E2E000301E07C1F60F94DCF105
+:10EBB0000F94DCF187E592EE60E00F94F5F10F948D
+:10EBC000DCF1CC24DD2400E010E01EC0C8010F946D
+:10EBD00077FEF82E882331F489E492EE60E00F94FA
+:10EBE000C2F10BC08093C6008091C00086FFFCCFAD
+:10EBF0008091C00080648093C000FE1419F00894D6
+:10EC0000C11CD11C0F5F1F4FC80181519F41A0E063
+:10EC1000B0E0ABBFFC01E790FAE2EF1621F022E092
+:10EC20000030120799F60F94DCF10F94DCF182E6C4
+:10EC300092EE60E00F94C2F1C60161E070E00F94C3
+:10EC400034F20F94DCF10F94DCF110920202109276
+:10EC50000302109204021092050278CE89E992EE26
+:10EC600062E00F94F5F1279A2F9A16C02F9880E052
+:10EC700090E0E0EDF7E03197F1F7019684369105E9
+:10EC8000C1F72F9A80E090E0E0EDF7E03197F1F7DF
+:10EC9000019684369105C1F78091C00087FFE6CFC9
+:10ECA0008091C00087FFFCCF64C485EA92EE62E0E9
+:10ECB0000F94F5F140910202509103026091040219
+:10ECC0007091050281E020E10F9491F2809102029F
+:10ECD00090910302A0910402B091050280509F4FD1
+:10ECE000AF4FBF4F8093020290930302A0930402A0
+:10ECF000B093050280509041A040B04008F426CE69
+:10ED0000A4CF83EB92EE62E00F94F5F140910602FE
+:10ED100050910702609108027091090280E020E1A1
+:10ED20000F9491F28091060290910702A09108023F
+:10ED3000B091090280509F4FAF4FBF4F80930602A2
+:10ED400090930702A0930802B0930902FFCD80ECD4
+:10ED500092EE62E00F94F5F183E792EE60E00F949B
+:10ED6000F5F18FE792EE60E00F94F5F18BE892EE0B
+:10ED700060E00F94F5F189E992EE60E00F94F5F10F
+:10ED800085EA92EE60E00F94F5F183EB92EE60E09D
+:10ED90000F94F5F180EC92EE60E00F94F5F187ECC2
+:10EDA00092EE60E00F94F5F188ED92EE60E00F9442
+:10EDB000F5F18FED92EE60E00F94F5F18AEE92EEB0
+:10EDC00060E00F94F5F183E093EEBDCD87EC92EE19
+:10EDD00062E00F94F5F181E40F947BF282E40F94EA
+:10EDE0007BF283E40F947BF284E40F947BF285E45E
+:10EDF0000F947BF286E40F947BF287E40F947BF20E
+:10EE000088E40F947BF28AE40F947BF28BE40F94F6
+:10EE10007BF28CE40F947BF299CD88ED92EE62E068
+:10EE20000F94F5F1772473948824992409C48FED05
+:10EE300092EE62E00F94F5F140910A0250910B02BC
+:10EE400060910C0270910D0282E020E10F9491F22A
+:10EE500080910A0290910B02A0910C02B0910D02D8
+:10EE600080509F4FAF4FBF4F80930A0290930B0289
+:10EE7000A0930C02B0930D0269CD8AEE92EE62E08F
+:10EE80000F94F5F184EE90EE60E00F94F5F18FECC5
+:10EE900091EE60E00F94F5F1662477244301CC5D98
+:10EEA000DE4F19821882C452D140D401C301B695F5
+:10EEB000A79597958795CA5DDE4F88839983AA8326
+:10EEC000BB83C652D140CC5DDE4FA881B981C4520C
+:10EED000D1401196CC5DDE4FB983A883C452D14096
+:10EEE000CD0162E070E00F9434F2B0E2B093C6005E
+:10EEF0008091C00086FFFCCF8091C0008064809329
+:10EF0000C000EDE2E093C6008091C00086FFFCCF18
+:10EF10008091C00080648093C000F0E2F093C6004E
+:10EF20008091C00086FFFCCF8091C00080648093F8
+:10EF3000C000CA5DDE4FE880F9800A811B81C6529D
+:10EF4000D140BB27A12F902F8F2D0F940DF2CA5DBA
+:10EF5000DE4F8881C652D1400F940DF2B0E2FB2EF5
+:10EF6000F092C6008091C00086FFFCCF8091C00067
+:10EF700080648093C0000DE30093C6008091C000C0
+:10EF800086FFFCCF8091C00080648093C00010E2B7
+:10EF90001093C6008091C00086FFFCCF8091C00016
+:10EFA00080648093C0008BBEF3012791C65DDE4F65
+:10EFB0002883CA52D140A22EBB24CC24DD2408943D
+:10EFC000611C711C811C911C8BBEF3018791282E42
+:10EFD0003324442455240894611C711C811C911C09
+:10EFE0008BBEF3013791C55DDE4F3883CB52D140E4
+:10EFF0000894611C711C811C911C8BBEF30147910C
+:10F00000C45DDE4F4883CC52D140ADEFEA2EAFEF66
+:10F01000FA2EAFEF0A2FAFEF1A2F6E0C7F1C801E57
+:10F02000911E142D032DF22CEE24EA0CFB1C0C1D5A
+:10F030001D1D0F940DF220E22093C6008091C000A8
+:10F0400086FFFCCF8091C00080648093C000C65DC5
+:10F05000DE4F8881CA52D1400F940DF230E23093D6
+:10F06000C6008091C00086FFFCCF8091C000806404
+:10F070008093C000C45DDE4F8881CC52D1400F9494
+:10F080000DF240E24093C6008091C00086FFFCCFA5
+:10F090008091C00080648093C000C55DDE4F888190
+:10F0A000CB52D1400F940DF250E25093C6008091A4
+:10F0B000C00086FFFCCF8091C00080648093C000B8
+:10F0C0008FEFE8168FEFF80680E0080780E018075A
+:10F0D00031F484E092EE60E00F94C2F1DFC0D80119
+:10F0E000C7018070907CA070B0708050904CA040A0
+:10F0F000B040D1F52FEF3FE340E050E0E222F322B1
+:10F1000004231523CA5DDE4FA880B980CA80DB8046
+:10F11000C652D140AE0CBF1CC01ED11EAA0CBB1CD7
+:10F12000CC1CDD1C8EE092EE60E00F94C2F1BB2798
+:10F13000A12F902F8F2D0F940DF28E2D0F940DF285
+:10F1400030E23093C6008091C00086FFFCCF8091F2
+:10F15000C00080648093C0004EE34093C60080915D
+:10F16000C00086FFFCCF87C08EE09EEFA0E0B0E03D
+:10F17000E822F9220A231B239CE0E91694E9F90608
+:10F1800090E0090790E0190709F088C0C45DDE4FE0
+:10F19000A881CC52D140EA2EFF2400E010E0102FCD
+:10F1A0000F2DFE2CEE24C55DDE4FB881CB52D14031
+:10F1B000EB0EF11C011D111DD601C501817090706F
+:10F1C000A070B070DC0199278827E80EF91E0A1F8D
+:10F1D0001B1F20EF30E040E050E0A222B322C42207
+:10F1E000D52241E1AA0CBB1CCC1CDD1C4A95D1F7F1
+:10F1F000EA0CFB1C0C1D1D1D81E090E0A0E0B0E0BE
+:10F20000282239224A225B2235E1220C331C441C7D
+:10F21000551C3A95D1F7E20CF31C041D151D57013E
+:10F220006801AA0CBB1CCC1CDD1C85E192EE60E0E1
+:10F230000F94C2F1C801AA27BB270F940DF2BB2778
+:10F24000A12F902F8F2D0F940DF28E2D0F940DF274
+:10F2500090E29093C6008091C00086FFFCCF809121
+:10F26000C00080648093C000AEE3A093C60080918C
+:10F27000C00086FFFCCF8091C00080648093C000F6
+:10F28000C601AA27BB270F940DF2BB27AD2D9C2DDD
+:10F290008B2D0F940DF28A2D0F940DF20F94DCF14B
+:10F2A000CC5DDE4FE881F981C452D140F99709F471
+:10F2B0004DCBF4E0EF2EF12C012D112D6E0C7F1CA7
+:10F2C000801E911EF2CD83E093EE62E00F94F5F183
+:10F2D0008AE192EE60E00F94C2F18091C00087FF56
+:10F2E000FCCF1091C6001F751093C6008091C0001E
+:10F2F00086FFFCCF8091C00080648093C0000F9493
+:10F30000DCF1812F81548A3108F036C1163409F4BA
+:10F3100095C0173490F4133409F44EC0143430F40B
+:10F320001134F1F0123409F01DC130C0143409F465
+:10F3300059C0153409F016C16BC01A3409F4C4C0A1
+:10F340001B3438F4173409F48FC0183409F00AC19B
+:10F35000A1C01B3409F4D2C01C3409F003C1E8C0B9
+:10F360008FEF81B90DC082B1809582B980E090E0C5
+:10F37000E0EDF7E03197F1F70196883C9105C1F790
+:10F380008091C00087FFEFCF12B8EFC08FEF84B934
+:10F390000DC085B1809585B980E090E0E0EDF7E0A3
+:10F3A0003197F1F70196883C9105C1F78091C00033
+:10F3B00087FFEFCF15B8D9C08FEF87B90DC088B1DF
+:10F3C000809588B980E090E0E0EDF7E03197F1F7C3
+:10F3D0000196883C9105C1F78091C00087FFEFCF6F
+:10F3E00018B8C3C08FEF8AB90DC08BB180958BB9A7
+:10F3F00080E090E0E0EDF7E03197F1F70196883C8E
+:10F400009105C1F78091C00087FFEFCF1BB8ADC059
+:10F410008FEF8DB90DC08EB180958EB980E090E0F0
+:10F42000E0EDF7E03197F1F70196883C9105C1F7DF
+:10F430008091C00087FFEFCF1EB897C08FEF80BBD1
+:10F440000DC081B3809581BB80E090E0E0EDF7E0F6
+:10F450003197F1F70196883C9105C1F78091C00082
+:10F4600087FFEFCF11BA81C08FEF83BB0DC084B38C
+:10F47000809584BB80E090E0E0EDF7E03197F1F714
+:10F480000196883C9105C1F78091C00087FFEFCFBE
+:10F4900014BA6BC08FEF809301010FC080910201FD
+:10F4A00080958093020180E090E0E0EDF7E03197F5
+:10F4B000F1F70196883C9105C1F78091C00087FF64
+:10F4C000EDCF1092020151C08FEF809304010FC065
+:10F4D0008091050180958093050180E090E0E0ED4A
+:10F4E000F7E03197F1F70196883C9105C1F78091DB
+:10F4F000C00087FFEDCF1092050137C08FEF8093DA
+:10F5000007010FC08091080180958093080180E079
+:10F5100090E0E0EDF7E03197F1F70196883C910536
+:10F52000C1F78091C00087FFEDCF109208011DC088
+:10F530008FEF80930A010FC080910B01809580931B
+:10F540000B0180E090E0E0EDF7E03197F1F70196F4
+:10F55000883C9105C1F78091C00087FFEDCF1092E4
+:10F560000B0103C085E292EEEEC98091C00087FFD7
+:10F57000FCCF8091C600EAC988E392EEE4C98CE131
+:10F5800091EEE1C988249924933011F1943028F444
+:10F59000913089F09230B8F408C0953061F195301F
+:10F5A000F0F0963009F048C043C02B3109F042C951
+:10F5B00091E06BE13FC96227C15DDE4F2883CF52E6
+:10F5C000D14092E037C9B22FA0E0622793E032C960
+:10F5D000822F90E0A82BB92B622794E02BC92E3004
+:10F5E00009F039C3622795E0C05DDE4F19821882A9
+:10F5F000C053D1401FC9E1E0F0E0EC0FFD1FC05D3A
+:10F60000DE4F08811981C053D140E00FF11F2083E4
+:10F610000F5F1F4FC05DDE4F19830883C053D14079
+:10F6200062270A171B0709F005C9D80196E002C92D
+:10F63000261709F010C303C0973009F0FBC87724E0
+:10F640009981933109F412C19431C8F4963009F4C8
+:10F65000D8C0973050F4923009F406C1933009F4C1
+:10F660006DC0913009F059C253C0913109F477C08F
+:10F67000923108F0BBC0903109F04FC2F5C098310B
+:10F6800009F487C0993150F4953109F4EFC09531F0
+:10F6900008F4C6C1963109F040C2C2C19A3109F4DA
+:10F6A0006CC09A3108F491C09B3109F45BC09D3164
+:10F6B00009F033C29D81903359F48F81882311F46E
+:10F6C0009EE11CC0813011F091E018C098E916C08D
+:10F6D000892F807591F0903539F4E0E0F0E089E011
+:10F6E0008093570094910AC0983539F4E3E0F0E034
+:10F6F00089E080935700949101C090E01A821B82A8
+:10F700008D818C831D829E831F8227E030E009C299
+:10F710001A8288E08B8381E48C8386E58D8382E581
+:10F720008E8389E48F8383E5888780E589878FE5E9
+:10F730008A8782E38B872BE030E0F3C18A818139AD
+:10F7400041F0823941F0803911F48FE005C080E04A
+:10F7500003C082E001C08AE01A828B8344C0772410
+:10F76000739482C08D81882311F48EE12CC0813086
+:10F7700011F081E028C088E926C01A82E1E0F0E0BB
+:10F7800089E08093570084918B831C8224E030E0D1
+:10F79000C8C18B81803589F48C81883039F4E2E0EE
+:10F7A000F0E089E08093570084910DC0E0E0F0E044
+:10F7B00089E080935700849106C0E3E0F0E089E09F
+:10F7C0008093570084911A82DFCF8D81836C99E0FA
+:10F7D000E1E0F0E0082E90935700E89507B600FCB2
+:10F7E000FDCF1A821B8223E030E09BC180EC8A832C
+:10F7F000CE5CDE4F188219821A821B82C253D1401E
+:10F800008EC18A8190E0A0E0B0E0582F44273327D2
+:10F8100022278B8190E0A0E0B0E0DC0199278827C7
+:10F82000282B392B4A2B5B2B8D8190E0A0E0B0E098
+:10F83000282B392B4A2B5B2B8C8190E0A0E0B0E089
+:10F84000BA2FA92F982F8827282B392B4A2B5B2BCF
+:10F85000220F331F441F551FC05EDE4F288339839C
+:10F860004A835B83C052D1401A8259C13A81C95C34
+:10F87000DE4F3883C753D140CA5CDE4F1882C6536F
+:10F88000D1408B81C82EDD24CA5CDE4F488159816E
+:10F89000C653D140C42AD52A933109F082C0CE5C28
+:10F8A000DE4F88819981AA81BB81C253D1408050AB
+:10F8B000904CA340B04030F583E0CE5CDE4FE88052
+:10F8C000F9800A811B81C253D140F70100935B008C
+:10F8D00080935700E89507B600FCFDCFCE5CDE4F65
+:10F8E000088119812A813B81C253D14000501F4FAA
+:10F8F0002F4F3F4FCE5CDE4F088319832A833B8313
+:10F90000C253D140C05EDE4F488159816A817B81FC
+:10F91000C052D140DE011B9631E08C9111962C91A2
+:10F9200011971296C75CDE4F2883C953D140C85C3B
+:10F93000DE4F1882C853D14090E0C85CDE4FE881AA
+:10F94000F981C853D1408E2B9F2B0C01FA01609393
+:10F950005B0030935700E89511244E5F5F4F6F4F67
+:10F960007F4F0EEFE02E0FEFF02ECE0CDF1CC114F8
+:10F97000D10499F685E0C05EDE4F088119812A81A5
+:10F980003B81C052D140F80120935B008093570027
+:10F99000E89507B600FCFDCF81E180935700E8951C
+:10F9A00035C0C05EDE4F88819981AA81BB81C0527B
+:10F9B000D140B695A795979587957C018601ABE0D8
+:10F9C000AA2EB12CAC0EBD1E0BC0D5016D915D01F0
+:10F9D000C7010F947FFE0894E11CF11C01501040F8
+:10F9E0000115110591F7A60160E070E0440F551F65
+:10F9F000661F771FC05EDE4FE880F9800A811B8199
+:10FA0000C052D1404E0D5F1D601F711F1A82C05E33
+:10FA1000DE4F488359836A837B83C052D1407FC0C5
+:10FA2000FA80C55CDE4FF882CB53D140C65CDE4F16
+:10FA30001882CA53D1408B81C82EDD24C65CDE4FAC
+:10FA400008811981CA53D140C02AD12A1A828981DA
+:10FA5000BE016D5F7F4F843121F59601C05EDE4FA0
+:10FA6000E880F9800A811B81C052D1400BBFF701A9
+:10FA700087919691DB018C9311969C936E5F7F4FDB
+:10FA8000D801C7010296A11DB11DC05EDE4F88835B
+:10FA90009983AA83BB83C052D14022503040F1F6F3
+:10FAA00036C0C05EDE4F288139814A815B81C052F9
+:10FAB000D1400894C108D108760100E010E0089414
+:10FAC000C11CD11C0894E11CF11C011D111DE20E8A
+:10FAD000F31E041F151F21BDBB27A52F942F832FB5
+:10FAE00082BD2F5F3F4F4F4F5F4FF89A80B5DB01CC
+:10FAF0008D93BD012E153F054007510761F7C05E8C
+:10FB0000DE4F288339834A835B83C052D1409601FC
+:10FB10002D5F3F4FFB01108204C080EC8A8322E0FE
+:10FB200030E08BE18093C6008091C00086FFFCCF5F
+:10FB30008091C00080648093C000C15DDE4FF88179
+:10FB4000CF52D140F093C6008091C00086FFFCCF19
+:10FB50008091C00080648093C000432F3093C60022
+:10FB60008091C00086FFFCCF8091C00080648093AC
+:10FB7000C000922F2093C6008091C00086FFFCCF6A
+:10FB80008091C00080648093C0008EE08093C600A6
+:10FB90008091C00086FFFCCF8091C000806480937C
+:10FBA000C00065E1C15DDE4FE880CF52D1406E25D7
+:10FBB00069276427FE01319610C090819093C6009A
+:10FBC0008091C00086FFFCCF31968091C000806498
+:10FBD0008093C0006927215030402115310569F715
+:10FBE0006093C6008091C00086FFFCCF8091C0006A
+:10FBF00080648093C00085B1805885B9772081F4F6
+:10FC0000C15DDE4F0881CF52D1400F5FC15DDE4F35
+:10FC10000883CF52D14090E0A0E0B0E00D941AF4F8
+:10FC200027982F9880E090E020ED37E0F901319798
+:10FC3000F1F7019684369105C9F700008091C00064
+:10FC40008D7F8093C00081E180935700E895EE2777
+:10FC5000FF270994FFCF90E00D941AF497FB092E2B
+:10FC600007260AD077FD04D02ED006D000201AF443
+:10FC7000709561957F4F0895F6F7909581959F4F08
+:10FC80000895A1E21A2EAA1BBB1BFD010DC0AA1FDD
+:10FC9000BB1FEE1FFF1FA217B307E407F50720F0F5
+:10FCA000A21BB30BE40BF50B661F771F881F991F70
+:10FCB0001A9469F760957095809590959B01AC01B9
+:10FCC000BD01CF010895AA1BBB1B51E107C0AA1FAC
+:10FCD000BB1FA617B70710F0A61BB70B881F991FED
+:10FCE0005A95A9F780959095BC01CD010895F99991
+:10FCF000FECF92BD81BDF89A992780B50895262F31
+:10FD0000F999FECF1FBA92BD81BD20BD0FB6F89400
+:0EFD1000FA9AF99A0FBE01960895F894FFCF63
 :040000033000E000E9
 :00000001FF
diff --git a/hardware/arduino/cores/arduino/new.cpp b/hardware/arduino/cores/arduino/new.cpp
index 0f6d422..b81031e 100644
--- a/hardware/arduino/cores/arduino/new.cpp
+++ b/hardware/arduino/cores/arduino/new.cpp
@@ -5,10 +5,20 @@ void * operator new(size_t size)
   return malloc(size);
 }
 
+void * operator new[](size_t size)
+{
+  return malloc(size);
+}
+
 void operator delete(void * ptr)
 {
   free(ptr);
-} 
+}
+
+void operator delete[](void * ptr)
+{
+  free(ptr);
+}
 
 int __cxa_guard_acquire(__guard *g) {return !*(char *)(g);};
 void __cxa_guard_release (__guard *g) {*(char *)g = 1;};
diff --git a/hardware/arduino/cores/arduino/new.h b/hardware/arduino/cores/arduino/new.h
index cd940ce..991c86c 100644
--- a/hardware/arduino/cores/arduino/new.h
+++ b/hardware/arduino/cores/arduino/new.h
@@ -8,7 +8,9 @@
 #include <stdlib.h>
 
 void * operator new(size_t size);
-void operator delete(void * ptr); 
+void * operator new[](size_t size);
+void operator delete(void * ptr);
+void operator delete[](void * ptr);
 
 __extension__ typedef int __guard __attribute__((mode (__DI__)));
 
diff --git a/hardware/arduino/cores/arduino/wiring_analog.c b/hardware/arduino/cores/arduino/wiring_analog.c
index 23b01c6..3f19c7f 100644
--- a/hardware/arduino/cores/arduino/wiring_analog.c
+++ b/hardware/arduino/cores/arduino/wiring_analog.c
@@ -47,6 +47,8 @@ int analogRead(uint8_t pin)
        if (pin >= 18) pin -= 18; // allow for channel or pin numbers
 #elif defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644P__)
        if (pin >= 24) pin -= 24; // allow for channel or pin numbers
+#elif defined(analogPinToChannel) && (defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || 
defined(__AVR_ATtiny85__))
+       pin = analogPinToChannel(pin);
 #else
        if (pin >= 14) pin -= 14; // allow for channel or pin numbers
 #endif
diff --git a/libraries/Esplora/Esplora.cpp b/libraries/Esplora/Esplora.cpp
index 83df0d7..29c9e19 100644
--- a/libraries/Esplora/Esplora.cpp
+++ b/libraries/Esplora/Esplora.cpp
@@ -111,6 +111,15 @@ boolean _Esplora::readButton(byte ch) {
   return (val > 512) ? HIGH : LOW;
 }
 
+boolean _Esplora::readJoystickButton() {
+ if (readChannel(CH_JOYSTICK_SW) == 1023) {
+  return HIGH;
+ } else if (readChannel(CH_JOYSTICK_SW) == 0) {
+  return LOW;
+ }
+}
+
+
 void _Esplora::writeRGB(byte r, byte g, byte b) {
   writeRed(r);
   writeGreen(g);
diff --git a/libraries/Esplora/Esplora.h b/libraries/Esplora/Esplora.h
index 74fa88b..4f55345 100644
--- a/libraries/Esplora/Esplora.h
+++ b/libraries/Esplora/Esplora.h
@@ -21,7 +21,7 @@
 #ifndef ESPLORA_H_
 #define ESPLORA_H_
 
-#include "Arduino.h"
+#include <Arduino.h>
 
 /*
  * The following constants are used internally by the Esplora
@@ -141,6 +141,8 @@ public:
    * LOW if the button is pressed, and HIGH otherwise.
    */
   boolean readButton(byte channel);
+
+  boolean readJoystickButton();
   
   void writeRGB(byte red, byte green, byte blue);
   void writeRed(byte red);
diff --git a/libraries/Esplora/examples/EsploraLedShow/EsploraLedShow.ino 
b/libraries/Esplora/examples/EsploraLedShow/EsploraLedShow.ino
index 84f049a..3c617dc 100644
--- a/libraries/Esplora/examples/EsploraLedShow/EsploraLedShow.ino
+++ b/libraries/Esplora/examples/EsploraLedShow/EsploraLedShow.ino
@@ -6,7 +6,7 @@
   
   Created on 22 november 2012
   By Enrico Gueli <enrico gueli gmail com>
-  Modified 24 Nov 2012
+  Modified 22 Dec 2012
   by Tom Igoe
 */
 #include <Esplora.h>
@@ -24,7 +24,7 @@ void loop() {
   
   // convert the sensor readings to light levels:
   byte red   = map(xAxis, -512, 512, 0, 255);
-  byte green = map(xAxis, -512, 512, 0, 255);
+  byte green = map(yAxis, -512, 512, 0, 255);
   byte blue  = slider/4;
  
   // print the light levels:
diff --git a/libraries/Esplora/examples/EsploraMusic/EsploraMusic.ino 
b/libraries/Esplora/examples/EsploraMusic/EsploraMusic.ino
index 10c17f7..7a950fb 100644
--- a/libraries/Esplora/examples/EsploraMusic/EsploraMusic.ino
+++ b/libraries/Esplora/examples/EsploraMusic/EsploraMusic.ino
@@ -6,14 +6,15 @@
 
   Created on 22 november 2012
   By Enrico Gueli <enrico gueli gmail com>
-  modified 24 Nov 2012
+  modified 22 Dec 2012
   by Tom Igoe
 */
 
 
 #include <Esplora.h>
 
-
+// these are the frequencies for the notes from middle C
+// to one octave above middle C:
 const int note[] = {
 262, // C
 277, // C#
diff --git a/libraries/Esplora/examples/EsploraRemote/EsploraRemote.ino 
b/libraries/Esplora/examples/EsploraRemote/EsploraRemote.ino
index 135b26a..2701089 100644
--- a/libraries/Esplora/examples/EsploraRemote/EsploraRemote.ino
+++ b/libraries/Esplora/examples/EsploraRemote/EsploraRemote.ino
@@ -1,31 +1,33 @@
 /*
-  Esplora Slave
-
-  This sketch allows to test all the Esplora's peripherals.
-  It is also used with the ProcessingStart sketch (for Processing).
-  
-  When uploaded, you can open the Serial monitor and write one of
-  the following commands (without quotes) to get an answer:
-  
-  "D": prints the current value of all sensors, separated by a comma.
-       See the dumpInputs() function below to get the meaning of
-       each value.
-       
-  "Rxxx"
-  "Gxxx"
-  "Bxxx": set the color of the RGB led. For example, write "R255"
-          to turn on the red to full brightness, "G128" to turn
-          the green to half brightness, or "G0" to turn off
-          the green channel.
-  
-  "Txxxx": play a tone with the buzzer. The number is the
-           frequency, e.g. "T440" plays the central A note.
-           Write "T0" to turn off the buzzer.
-  
-
-  Created on 22 november 2012
-  By Enrico Gueli <enrico gueli gmail com>
-*/
+  Esplora Remote
+ 
+ This sketch allows to test all the Esplora's peripherals.
+ It is also used with the ProcessingStart sketch (for Processing).
+ 
+ When uploaded, you can open the Serial monitor and write one of
+ the following commands (without quotes) to get an answer:
+ 
+ "D": prints the current value of all sensors, separated by a comma.
+ See the dumpInputs() function below to get the meaning of
+ each value.
+ 
+ "Rxxx"
+ "Gxxx"
+ "Bxxx": set the color of the RGB led. For example, write "R255"
+ to turn on the red to full brightness, "G128" to turn
+ the green to half brightness, or "G0" to turn off
+ the green channel.
+ 
+ "Txxxx": play a tone with the buzzer. The number is the
+ frequency, e.g. "T440" plays the central A note.
+ Write "T0" to turn off the buzzer.
+ 
+ 
+ Created on 22 november 2012
+ By Enrico Gueli <enrico gueli gmail com>
+ Modified 23 Dec 2012
+ by Tom Igoe
+ */
 
 #include <Esplora.h>
 
@@ -47,34 +49,53 @@ void loop() {
 void parseCommand() {
   char cmd = Serial.read();
   switch(cmd) {
-    case 'D': dumpInputs(); break;
-    case 'R': setRed(); break;
-    case 'G': setGreen(); break;
-    case 'B': setBlue(); break;
-    case 'T': setTone(); break;
+  case 'D': 
+    dumpInputs(); 
+    break;
+  case 'R': 
+    setRed(); 
+    break;
+  case 'G': 
+    setGreen(); 
+    break;
+  case 'B': 
+    setBlue(); 
+    break;
+  case 'T': 
+    setTone(); 
+    break;
   }
 }
 
 void dumpInputs() {  
-  /*
-   * please note: a single row contains two instructions.
-   * one is to print the sensor value, the other to print the
-   * comma symbol.
-   */
-  Serial.print(Esplora.readButton(SWITCH_1)); Serial.print(',');
-  Serial.print(Esplora.readButton(SWITCH_2)); Serial.print(',');
-  Serial.print(Esplora.readButton(SWITCH_3)); Serial.print(',');
-  Serial.print(Esplora.readButton(SWITCH_4)); Serial.print(',');
-  Serial.print(Esplora.readSlider());         Serial.print(',');
-  Serial.print(Esplora.readLightSensor());    Serial.print(',');
-  Serial.print(Esplora.readTemperature(DEGREES_C)); Serial.print(',');
-  Serial.print(Esplora.readMicrophone());     Serial.print(',');
-  Serial.print(Esplora.readJoystickSwitch()); Serial.print(',');
-  Serial.print(Esplora.readJoystickX());      Serial.print(',');
-  Serial.print(Esplora.readJoystickY());      Serial.print(',');
-  Serial.print(Esplora.readAccelerometer(X_AXIS)); Serial.print(',');
-  Serial.print(Esplora.readAccelerometer(Y_AXIS)); Serial.print(',');
-  Serial.print(Esplora.readAccelerometer(Z_AXIS)); Serial.println();
+  Serial.print(Esplora.readButton(SWITCH_1)); 
+  Serial.print(',');
+  Serial.print(Esplora.readButton(SWITCH_2)); 
+  Serial.print(',');
+  Serial.print(Esplora.readButton(SWITCH_3)); 
+  Serial.print(',');
+  Serial.print(Esplora.readButton(SWITCH_4)); 
+  Serial.print(',');
+  Serial.print(Esplora.readSlider());         
+  Serial.print(',');
+  Serial.print(Esplora.readLightSensor());    
+  Serial.print(',');
+  Serial.print(Esplora.readTemperature(DEGREES_C)); 
+  Serial.print(',');
+  Serial.print(Esplora.readMicrophone());     
+  Serial.print(',');
+  Serial.print(Esplora.readJoystickSwitch()); 
+  Serial.print(',');
+  Serial.print(Esplora.readJoystickX());      
+  Serial.print(',');
+  Serial.print(Esplora.readJoystickY());      
+  Serial.print(',');
+  Serial.print(Esplora.readAccelerometer(X_AXIS)); 
+  Serial.print(',');
+  Serial.print(Esplora.readAccelerometer(Y_AXIS)); 
+  Serial.print(',');
+  Serial.print(Esplora.readAccelerometer(Z_AXIS)); 
+  Serial.println();
 }
 
 void setRed() {
@@ -92,3 +113,4 @@ void setBlue() {
 void setTone() {
   Esplora.tone(Serial.parseInt());
 }
+
diff --git a/libraries/Esplora/examples/EsploraTable/EsploraTable.ino 
b/libraries/Esplora/examples/EsploraTable/EsploraTable.ino
index 73d5652..712dffa 100644
--- a/libraries/Esplora/examples/EsploraTable/EsploraTable.ino
+++ b/libraries/Esplora/examples/EsploraTable/EsploraTable.ino
@@ -1,17 +1,16 @@
 /*
   Esplora Table
 
-  Acts like a keyboard that prints some of its sensors'
+  Acts like a keyboard that prints sensor
   data in a table-like text, row by row.
-  It is a sort of "data-logger".
   
-  At startup, it does nothing. It just waits for you to open a
-  spreadsheet (e.g. Google Drive spreadsheet) so it can put its
-  data. Then, by pressing Switch 1, it starts printing the table
+  At startup, it does nothing. It waits for you to open a
+  spreadsheet (e.g. Google Drive spreadsheet) so it can write
+  data. By pressing Switch 1, it starts printing the table
   headers and the first row of data. It waits a bit, then it
   will print another row, and so on.
   
-  The amount of time between each row is given by the slider.
+  The amount of time between each row is determined by the slider.
   If put to full left, the sketch will wait 10 seconds; at
   full right position, it will wait 5 minutes. An intermediate
   position will make the sketch wait for some time in-between.
@@ -175,17 +174,12 @@ void logAndPrint() {
 }
 
 /**
- * Similar to delay(), but allows to do something else
- * in the meanwhile. In particular, it calls waitLoop().
+ * Similar to delay(), but allows the program to do something else
+ * in the meanwhile. In particular, it calls checkSwitchPress().
  * Note 1: it may wait longer than the specified amount, not less;
  * Note 2: beware of data synchronization issues, e.g. if the
- * whileWaiting() function alters some variables used by the
+ * activeDelay() function alters some variables used by the
  * caller of this function.
- *
- * I discovered by chance that there's an ongoing discussion about
- * adding yield() in the Arduino API:
- * http://comments.gmane.org/gmane.comp.hardware.arduino.devel/1381
- * The purpose is the same, but for now I'm using this implementation.
  */
 void activeDelay(unsigned long amount) {
   unsigned long at = millis() + amount;
diff --git a/libraries/Esplora/keywords.txt b/libraries/Esplora/keywords.txt
index 02ba660..b225991 100644
--- a/libraries/Esplora/keywords.txt
+++ b/libraries/Esplora/keywords.txt
@@ -16,6 +16,7 @@ readLightSensor       KEYWORD2
 readTemperature        KEYWORD2
 readMicrophone KEYWORD2
 readJoystickSwitch     KEYWORD2
+readJoystickButton     KEYWORD2
 readJoystickX  KEYWORD2
 readJoystickY  KEYWORD2
 readAccelerometer      KEYWORD2
diff --git a/libraries/Ethernet/Dhcp.cpp b/libraries/Ethernet/Dhcp.cpp
index e4d27f7..56d5b69 100644
--- a/libraries/Ethernet/Dhcp.cpp
+++ b/libraries/Ethernet/Dhcp.cpp
@@ -43,6 +43,7 @@ int DhcpClass::request_DHCP_lease(){
     _dhcpTransactionId = random(1UL, 2000UL);
     _dhcpInitialTransactionId = _dhcpTransactionId;
 
+    _dhcpUdpSocket.stop();
     if (_dhcpUdpSocket.begin(DHCP_CLIENT_PORT) == 0)
     {
       // Couldn't get a socket
diff --git a/libraries/Ethernet/Ethernet.cpp b/libraries/Ethernet/Ethernet.cpp
index 5d28f71..c31a85f 100644
--- a/libraries/Ethernet/Ethernet.cpp
+++ b/libraries/Ethernet/Ethernet.cpp
@@ -10,7 +10,8 @@ uint16_t EthernetClass::_server_port[MAX_SOCK_NUM] = {
 
 int EthernetClass::begin(uint8_t *mac_address)
 {
-  _dhcp = new DhcpClass();
+  static DhcpClass s_dhcp;
+  _dhcp = &s_dhcp;
 
 
   // Initialise the basic info
diff --git a/libraries/Ethernet/examples/WebServer/WebServer.ino 
b/libraries/Ethernet/examples/WebServer/WebServer.ino
index ce8dbb1..0573f05 100644
--- a/libraries/Ethernet/examples/WebServer/WebServer.ino
+++ b/libraries/Ethernet/examples/WebServer/WebServer.ino
@@ -63,7 +63,7 @@ void loop() {
           // send a standard http response header
           client.println("HTTP/1.1 200 OK");
           client.println("Content-Type: text/html");
-          client.println("Connnection: close");
+          client.println("Connection: close");
           client.println();
           client.println("<!DOCTYPE HTML>");
           client.println("<html>");
diff --git a/libraries/SD/examples/listfiles/listfiles.ino b/libraries/SD/examples/listfiles/listfiles.ino
index 876c3f8..d403073 100644
--- a/libraries/SD/examples/listfiles/listfiles.ino
+++ b/libraries/SD/examples/listfiles/listfiles.ino
@@ -76,6 +76,7 @@ void printDirectory(File dir, int numTabs) {
        Serial.print("\t\t");
        Serial.println(entry.size(), DEC);
      }
+     entry.close();
    }
 }
 
diff --git a/libraries/WiFi/examples/WifiWebServer/WifiWebServer.ino 
b/libraries/WiFi/examples/WifiWebServer/WifiWebServer.ino
index ac5f056..7d7a247 100644
--- a/libraries/WiFi/examples/WifiWebServer/WifiWebServer.ino
+++ b/libraries/WiFi/examples/WifiWebServer/WifiWebServer.ino
@@ -1,5 +1,5 @@
 /*
-  Web  Server
+  WiFi Web Server
  
  A simple web server that shows the value of the analog input pins.
  using a WiFi shield.
@@ -15,7 +15,9 @@
  by dlf (Metodo2 srl)
  modified 31 May 2012
  by Tom Igoe
+
  */
+
 #include <SPI.h>
 #include <WiFi.h>
 
@@ -76,7 +78,7 @@ void loop() {
           // send a standard http response header
           client.println("HTTP/1.1 200 OK");
           client.println("Content-Type: text/html");
-          client.println("Connnection: close");
+          client.println("Connection: close");
           client.println();
           client.println("<!DOCTYPE HTML>");
           client.println("<html>");


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]