diff --git a/Bootloader_PIC32.X/Source/BoardCfg.h b/Bootloader_PIC32.X/Source/BoardCfg.h new file mode 100644 index 0000000..32cceb6 --- /dev/null +++ b/Bootloader_PIC32.X/Source/BoardCfg.h @@ -0,0 +1,49 @@ +/* + * File: BoardCfg.h + * Author: JF + * + * Created on November 26, 2018, 4:50 PM + */ + +#ifndef BOARDCFG_H +#define BOARDCFG_H + +#include "define.h" + +static inline __attribute__((always_inline)) unsigned char SPICalculateBRG(unsigned int pb_clk, unsigned int spi_clk) +{ + unsigned int brg; + + brg = pb_clk / (2 * spi_clk); + + if(pb_clk % (2 * spi_clk)) + brg++; + + if(brg > 0x100) + brg = 0x100; + + if(brg) + brg--; + + return (unsigned char) brg; +} +// +#ifdef FUBARINO_BRD +#include "BoardCfg_Fubarino.h" +#endif + +//#ifdef PINGUINO_BRD +//#include "BoardCfg_Pinguino.h" +//#endif + +#ifdef CHALETDUINO_BRD +#include "BoardCfg_Chaletduino.h" +#endif + +#ifdef CHALETDUINO_V2_BRD +#include "BoardCfg_ChaletduinoV2.h" +#endif +int InitBoard(); + +#endif /* BOARDCFG_H */ + diff --git a/Bootloader_PIC32.X/Source/BoardCfg_ChaletduinoV2.h b/Bootloader_PIC32.X/Source/BoardCfg_ChaletduinoV2.h new file mode 100644 index 0000000..7c0afa9 --- /dev/null +++ b/Bootloader_PIC32.X/Source/BoardCfg_ChaletduinoV2.h @@ -0,0 +1,166 @@ +/* + * File: DigitalIO_Chaletduino.h + * Author: JF + * + * Created on November 24, 2018, 3:20 PM + */ + +#ifndef DIGITALIO_CHALETDUINO_H +#define DIGITALIO_CHALETDUINO_H + + +#ifdef __cplusplus +extern "C" { +#endif + + + /* ************************************************************************** */ + /* Includes */ +#include "define.h" + /* ************************************************************************** */ + /* Defines */ + //#include +#define SYS_FREQ (80000000L) //Clock period = 12.5 ns +#define PERIPHERAL_FREQ (80000000L) + + + + //Output pins hardware definitions + // +#define HEARTBEAT_LED_2_PIN_DIR TRISEbits.TRISE6 +#define HEARTBEAT_LED_2_PIN LATEbits.LATE6 +#define HEARTBEAT_LED_2_TOGGLE_REG LATEINV +#define HEARTBEAT_LED_2_SET_REG LATESET +#define HEARTBEAT_LED_2_CLEAR_REG LATECLR +#define HEARTBEAT_LED_2_TOGGLE_MASK _LATG_LATE6_MASK + +#define HEARTBEAT_LED_1_PIN_DIR TRISEbits.TRISE5 +#define HEARTBEAT_LED_1_PIN LATEbits.LATE5 +#define HEARTBEAT_LED_1_TOGGLE_REG LATEINV +#define HEARTBEAT_LED_1_SET_REG LATESET +#define HEARTBEAT_LED_1_CLEAR_REG LATECLR +#define HEARTBEAT_LED_1_TOGGLE_MASK _LATE_LATE5_MASK + +#define LORA_ACTIVITY_LED_PIN_DIR TRISFbits.TRISF1 +#define LORA_ACTIVITY_LED_PIN LATFbits.LATF1 +#define LORA_ACTIVITY_LED_TOGGLE_REG LATFINV +#define LORA_ACTIVITY_LED_SET_REG LATFSET +#define LORA_ACTIVITY_LED_CLEAR_REG LATFCLR +#define LORA_ACTIVITY_LED_TOGGLE_MASK _LATE_LATF1_MASK + + // #define GP_DEBUG_1_PIN_DIR TRISEbits.TRISE5 + // #define GP_DEBUG_1_PIN LATEbits.LATE5 + // #define GP_DEBUG_2_PIN_DIR TRISEbits.TRISE6 + // #define GP_DEBUG_2_PIN LATEbits.LATE6 + + + // #define SD_CARD_DETECT_PIN_DIR TRISDbits.TRISD8 + // #define SD_CARD_DETECT_PIN LATDbits.LATD8 + + //SPI port defs +#define SPI_SDO_PIN_DIR TRISGbits.TRISG8 +#define SPI_SDI_PIN_DIR TRISGbits.TRISG7 +#define SPI_SCK_PIN_DIR TRISGbits.TRISG6 + + + + + //SD Card +#define SD_SPI_SS_PIN_DIR TRISBbits.TRISB13 +#define SD_SPI_SS_PIN LATBbits.LATB13 + + //SPI Flash +#define FLASH_SS_PIN_DIR TRISEbits.TRISE3 +#define FLASH_SS_PIN LATEbits.LATE3 + + + //Wifi (WINC3400 module) +#define WIFI_SPI_SS_PIN_DIR TRISEbits.TRISE0 +#define WIFI_SPI_SS_PIN LATEbits.LATE0 +#define WIFI_IRQ_PIN_DIR TRISDbits.TRISD0 +#define WIFI_IRQ_PIN PORTDbits.RD0 + + // #define WIFI_SPI_CFG_PIN_DIR TRISEbits.TRISE1 + // #define WIFI_SPI_CFG_PIN LATEbits.LATE1 +#define WIFI_CHP_EN_PIN_DIR TRISEbits.TRISE2 +#define WIFI_CHP_EN_PIN LATEbits.LATE2 +#define WIFI_CHP_RST_PIN_DIR TRISEbits.TRISE4 +#define WIFI_CHP_RST_PIN LATEbits.LATE4 + + //Chalet power relay +#define POWER_RELAY_ON_PIN_DIR TRISEbits.TRISE7 +#define POWER_RELAY_ON_PIN LATEbits.LATE7 //X2- +#define POWER_RELAY_OFF_PIN_DIR TRISGbits.TRISG9 +#define POWER_RELAY_OFF_PIN LATGbits.LATG9 //X3- + + //Harakiri relay +#define HARAKIRI_RELAY_ON_PIN_DIR TRISDbits.TRISD6 +#define HARAKIRI_RELAY_ON_PIN LATDbits.LATD6 + + //12V presence detection input +#define CHALET_12V_PRESENCE_PIN_DIR TRISBbits.TRISB15 +#define CHALET_12V_PRESENCE_PIN PORTBbits.RB15 //X2- + + //Battery voltage measurement (analog input) +#define BATTERY_VOLTAGE_ANALOG_PIN_DIR TRISBbits.TRISB1 //X2-7 + + // //Current sensor. Those pins tristate is controlled by the I2C module + //#define CURRENT_MODULE_I2C_SCL_PIN_DIR TRISDbits.TRISD3 + //#define CURRENT_MODULE_I2C_SDA_PIN_DIR TRISDbits.TRISD2 + + //Onboard temperature sensor (SPI) +#define TEMP_SENSOR_CS_PIN_DIR TRISDbits.TRISD4 +#define TEMP_SENSOR_CS_PIN LATDbits.LATD4 +#define TEMP_SENSOR_SPI_SDO_PIN_DIR TRISDbits.TRISD3 +#define TEMP_SENSOR_SPI_SDI_PIN_DIR TRISDbits.TRISD2 +#define TEMP_SENSOR_SPI_SCK_PIN_DIR TRISDbits.TRISD1 + + + //Analog (Hall effect) current sensor +#define CURRENT_SENSOR_IN1_PIN_DIR TRISBbits.TRISB2 +#define CURRENT_SENSOR_IN2_PIN_DIR TRISBbits.TRISB0 + + //LoRa +#define LORA_MODULE_RELAY_PIN_DIR TRISDbits.TRISD11 +#define LORA_MODULE_RELAY_PIN LATDbits.LATD11 +#define LORA_MODULE_M0_PIN_DIR TRISEbits.TRISE7 //FUCK, double assignation avec Inverter ON +#define LORA_MODULE_M0_PIN LATEbits.LATE7 +#define LORA_MODULE_M1_PIN_DIR TRISDbits.TRISD9 +#define LORA_MODULE_M1_PIN LATDbits.LATD9 +#define LORA_MODULE_INT_PIN_DIR TRISDbits.TRISD8 +#define LORA_MODULE_INT_PIN PORTDits.RD8 +#define LORA_MODULE_RX_LED_PIN_DIR TRISCbits.TRISC14 +#define LORA_MODULE_RX_LED_PIN LATCbits.LATC14 +#define LORA_MODULE_TX_LED_PIN_DIR TRISCbits.TRISC13 +#define LORA_MODULE_TX_LED_PIN LATCbits.LATC13 + + //LCD Screen +#define LCD_RS_PIN_DIR TRISDbits.TRISD5 +#define LCD_RS_PIN LATDbits.LATD5 +#define LCD_RW_PIN_DIR TRISBbits.TRISB13 +#define LCD_RW_PIN LATBbits.LATB13 +#define LCD_E_PIN_DIR TRISBbits.TRISB12 +#define LCD_E_PIN LATBbits.LATB12 +#define LCD_DB4_PIN_DIR TRISBbits.TRISB3 +#define LCD_DB4_PIN LATBbits.LATB3 +#define LCD_DB5_PIN_DIR TRISBbits.TRISB9 +#define LCD_DB5_PIN LATBbits.LATB9 +#define LCD_DB6_PIN_DIR TRISBbits.TRISB10 +#define LCD_DB6_PIN LATBbits.LATB10 +#define LCD_DB7_PIN_DIR TRISBbits.TRISB11 +#define LCD_DB7_PIN LATBbits.LATB11 + + //#define LCD_SCROLL_BTN_PIN_DIR TRISCbits.TRISC13 + //#define LCD_SCROLL_BTN_PIN PORTCbits.PORTC13 + + /* ************************************************************************** */ + /* Prototypes */ + void InitDigitalIO(void); + + +#ifdef __cplusplus +} +#endif + +#endif /* DIGITALIO_PINGUINO_H */ + diff --git a/Bootloader_PIC32.X/Source/BootloaderInterface.c b/Bootloader_PIC32.X/Source/BootloaderInterface.c new file mode 100644 index 0000000..cc4626c --- /dev/null +++ b/Bootloader_PIC32.X/Source/BootloaderInterface.c @@ -0,0 +1,1004 @@ +//#include + +#include "BootloaderInterface.h" +#include "FlashMapping.h" +#include "checksum.h" + +stBootloaderFlags_t mBootloaderFlags; + +#ifdef USE_FULL_IMPLEMENTATION + + +#include "BootloaderProtocol.h" +#include "ProtocolDefs.h" +#include "BoardCfg.h" +#include "timer.h" +#include "WiFiCtrl.h" +#include "SPI_Flash.h" +#include "NetworkProtocol.h" +#include "Syslog.h" + + + + +#define BOOTLOADER_FLASH_ERASE_POLL_TIMEOUT 25//100 //ms +#define BOOTLOADER_FLASH_ERASE_MAX_POLL_COUNT 40//10 //One sector should not take more than 1s to erase... +#define BOOTLOADER_FLASH_WRITE_POLL_TIMEOUT 25//100 //ms +#define BOOTLOADER_FLASH_WRITE_MAX_POLL_COUNT 40//10 //One sector should not take more than 1s to erase... + + +unsigned char BootloaderBuffer[300]; +int BootloaderInterfaceState; + + +int DataChunkWritten; +int CurDataChunkIndex; +int FirmwareUploaded; +int CurDataChunkSize; + +int BooloaderFlashEraseState; +int BootloaderFlashErased; +unsigned int BootloaderCurFlashEraseAddress; +int BooloaderFlashErasePollCount; + +int BootloaderFlashWriteState; +unsigned int BootloaderCurFlashWriteAddress; +int BootloaderFlashWritePollCount; +int BootloaderFirmwareChunkWriteCount; +char* BootloaderFlashWriteDataPtr; + + +int BootloaderInterfaceInit() +{ + BootloaderProtocolInit(); + BootloaderResetStateMachine(); + BootloaderCheckFlashBootloaderData(); + update_crc_32(0,0); //Force to populate the CRC32 table... + return 1; +} + +void BootloaderInterfaceTick() +{ + BootloaderInterfaceStateMachine(BOOTLOADER_TICK_EVENT,0); +} + +void BootloaderExecuteCmd(char Cmd,int CRCValid) +{ + unsigned char *DataBufPtr = BootloaderProtocolGetDataBufferPtr(); + if(CRCValid == 0) + { + BootloaderProtocolSendFrame(Cmd,BOOTLOADER_SM_INVALID_CRC_CMD); + return; + } + switch(Cmd) + { + case BOOTLOADER_HEARTBEAT_REQUEST: + { + printf("Bootloader Heartbeat Request\n"); + *DataBufPtr = 1; + BootloaderProtocolSendFrame(BOOTLOADER_HEARTBEAT_RESPONSE,1); + break; + } + case BOOTLOADER_ERASE_BOOTLOADER_FLASH_REQUEST: + { + printf("BOOTLOADER_ERASE_BOOTLOADER_FLASH_REQUEST\n"); + BootloaderInterfaceStateMachine(BOOTLOADER_NEW_CMD_EVENT,BOOTLOADER_SM_ERASE_FLASH_CMD); + break; + } + case BOOTLOADER_INIT_UPLOAD_REQUEST: + { + printf("BOOTLOADER_INIT_UPLOAD_REQUEST\n"); + BootloaderInterfaceStateMachine(BOOTLOADER_NEW_CMD_EVENT,BOOTLOADER_SM_INIT_UPLOAD_CMD); + break; + } + case BOOTLOADER_GET_STATE_REQUEST: + { + printf("BOOTLOADER_GET_STATE_REQUEST\n"); + BootloaderProtocolSendBootloaderState((char)BootloaderInterfaceState); + break; + } + case BOOTLOADER_SEND_DATA_CHUNK_REQUEST: + { +// printf("BOOTLOADER_SEND_DATA_CHUNK_REQUEST\n"); + BootloaderInterfaceStateMachine(BOOTLOADER_NEW_CMD_EVENT,BOOTLOADER_SM_NEW_DATA_CHUNK_CMD); + break; + } + case BOOTLOADER_UPLOAD_FINISHED_REQUEST: + { + printf("BOOTLOADER_UPLOAD_FINISHED_REQUEST\n"); + BootloaderInterfaceStateMachine(BOOTLOADER_NEW_CMD_EVENT,BOOTLOADER_SM_UPLOAD_FINISHED_CMD); + break; + } + case BOOTLOADER_EXECUTE_UPGRAGE_REQUEST: + { + printf("BOOTLOADER_EXECUTE_UPGRAGE_REQUEST\n"); + BootloaderInterfaceStateMachine(BOOTLOADER_NEW_CMD_EVENT,BOOTLOADER_SM_EXECUTE_UPGRAGE_CMD); + break; + } + case BOOTLOADER_ABORT_OPERATION_REQUEST: + { + printf("BOOTLOADER_ABORT_OPERATION_REQUEST\n"); + BootloaderInterfaceStateMachine(BOOTLOADER_NEW_CMD_EVENT,BOOTLOADER_SM_ABORT_CMD); + } + case BOOTLOADER_CHECK_FLASH_FIRMW_INTEGRITY_REQUEST: + { + printf("BOOTLOADER_CHECK_FLASH_FIRMW_INTEGRITY_REQUEST\n"); + BootloaderInterfaceStateMachine(BOOTLOADER_NEW_CMD_EVENT,BOOTLOADER_SM_CHECK_FLASH_CMD); + break; + } + default: + { + break; + } + } +} + +void BootloaderCRCError(char Cmd, int RxCRC, int ExpectedCRC) +{ + printf("BootloaderProtocol detected a CRC error. Cmd: %d, RxCRC:0x%x, Expected:[0x%x]\n",Cmd,RxCRC,ExpectedCRC); + BootloaderInterfaceStateMachine(BOOTLOADER_NEW_CMD_EVENT,BOOTLOADER_SM_INVALID_CRC_CMD); +} + +void BootloaderInterfaceStateMachine(int Event, int Param) +{ + + switch(BootloaderInterfaceState) + { + case BOOTLOADER_STANDBY_STATE: + { + switch(Event) + { + case BOOTLOADER_TICK_EVENT: + { + break; + } + case BOOTLOADER_NEW_CMD_EVENT: + { + if(Param == BOOTLOADER_SM_ACTIVATE_CMD) + { + BootloaderInterfaceState = BOOTLOADER_ACTIVE_STATE; + printf("Bootloader Interface going into active state\n"); + + } + break; + } + case BOOTLOADER_TIMEOUT_EVENT: + { + break; + } + } + + break; + } + case BOOTLOADER_ACTIVE_STATE: + { + switch(Event) + { + case BOOTLOADER_TICK_EVENT: + { + break; + } + case BOOTLOADER_NEW_CMD_EVENT: + { + switch(Param) + { + case BOOTLOADER_SM_ERASE_FLASH_CMD: + { + ResetBootloaderFlashEraseStateMachine(); //Setup the state machine + BootloaderProtocolSendACK(BOOTLOADER_ERASE_BOOTLOADER_FLASH_RESPONSE); + BootloaderInterfaceState = BOOTLOADER_ERASE_FLASH_STATE; + printf("Bootloader Interface going into Erase Flash state\n"); + break; + } + case BOOTLOADER_SM_INIT_UPLOAD_CMD: + { + + if(BootloaderFlashErased == 0) + { + BootloaderProtocolSendInitUploadResponse(BOOTLOADEDR_INIT_TRANSFER_ERROR_FLASH_NOT_ERASED); + } + else + { + BootloaderProtocolSendInitUploadResponse(BOOTLOADEDR_INIT_TRANSFER_OK); + + //TODO: Shall we prepare something before?? + BootloaderProtocolSendACK(BOOTLOADER_READY_FOR_DATA_RESPONSE); + + BootloaderInterfaceState = BOOTLOADER_RECEIVING_FIRMWARE_STATE; + printf("Bootloader Interface going into Firmware RX state\n"); + } + break; + } + case BOOTLOADER_SM_ABORT_CMD: + { + //TODO invalidate data in Flash + printf("Aborting upload, going into STANDBY mode\n"); + BootloaderResetStateMachine(); + break; + } + case BOOTLOADER_SM_EXECUTE_UPGRAGE_CMD: + { + if(FirmwareUploaded == 1) + { + //TODO: Do that! + BootloaderProtocolSendACK(BOOTLOADER_EXECUTE_UPGRADE_RESPONSE); + printf("Bootloader will now upgrade and reboot!!\n"); + } + else + { + BootloaderProtocolSendNACK(BOOTLOADER_EXECUTE_UPGRADE_RESPONSE); + printf("Bootloader upgrade request denied: Firmware not uploaded\n"); + } + break; + } + case BOOTLOADER_SM_CHECK_FLASH_CMD: + { + if(BootloaderCheckFlashBootloaderData() == RET_OK) + { + BootloaderProtocolSendFlashCheckResult(FLASH_CHECK_SUCCESS); + } + else + { + BootloaderProtocolSendFlashCheckResult(FLASH_CHECK_FAILED); + } + break; + } + default: + { + //SEND NACK + BootloaderProtocolSendNACK(Param); + break; + } + } + + break; + } + case BOOTLOADER_TIMEOUT_EVENT: + { + break; + } + } + + break; + } + case BOOTLOADER_ERASE_FLASH_STATE: + { + switch(Event) + { + case BOOTLOADER_TICK_EVENT: + { + int res = BootloaderFlashEraseStateMachine(BOOTLOADER_FLASH_ERASE_SM_TICK_EVENT); + switch(res) + { + case BOOTLOADER_FLASH_ERASE_RUNNING_RES: + { + break; + } + case BOOTLOADER_FLASH_ERASE_FINISHED_RES: + { + printf("Flash erase finished. Bootloader Interface going into Active state\n"); + BootloaderProtocolSendACK(BOOTLOADER_ERASE_BOOTLOADER_FLASH_RESULT_RESPONSE); //TODO: send result instead + BootloaderInterfaceState = BOOTLOADER_ACTIVE_STATE; + BootloaderFlashErased = 1; + break; + } + case BOOTLOADER_FLASH_ERASE_ERROR_RES: + { + printf("Flash erase error. Bootloader Interface going into Active state\n"); + BootloaderProtocolSendNACK(BOOTLOADER_ERASE_BOOTLOADER_FLASH_RESULT_RESPONSE); //TODO: send result instead + BootloaderInterfaceState = BOOTLOADER_ACTIVE_STATE; + break; + } + case BOOTLOADER_FLASH_ERASE_ABORT_RES: + { + printf("Flash erase abort. Bootloader Interface going into Active state\n"); + BootloaderProtocolSendNACK(BOOTLOADER_ERASE_BOOTLOADER_FLASH_RESULT_RESPONSE); //TODO: send result instead + BootloaderInterfaceState = BOOTLOADER_ACTIVE_STATE; + break; + } + } + + + break; + } + case BOOTLOADER_NEW_CMD_EVENT: + { + switch(Param) + { + case BOOTLOADER_SM_ABORT_CMD: + { + //TODO: stop erasing and reset SM. + //TODO invalidate data in Flash + BootloaderFlashEraseStateMachine(BOOTLOADER_FLASH_ERASE_SM_ABORT_EVENT); + printf("Aborting Flash erase, going into STANDBY mode\n"); + BootloaderResetStateMachine(); + break; + } + default: + { + //SEND NACK + BootloaderProtocolSendNACK(Param); + break; + } + } + break; + } + case BOOTLOADER_TIMEOUT_EVENT: + { + break; + } + } + + break; + } + case BOOTLOADER_RECEIVING_FIRMWARE_STATE: + { + switch(Event) + { + case BOOTLOADER_TICK_EVENT: + { + int res = BootloaderFlashWriteStateMachine(BOOTLOADER_FLASH_WRITE_SM_TICK_EVENT); + switch(res) + { + case BOOTLOADER_FLASH_WRITING_RES: + { + break; + } + case BOOTLOADER_FLASH_WRITE_FINISHED_RES: + { + BootloaderProtocolSendDataChunkResult(BOOTLOADER_CHUNK_TRANSFER_SUCCESS,CurDataChunkIndex); + printf("Bootloader Chunk %d successfuly written to flash\n",CurDataChunkIndex); + CurDataChunkIndex++; + break; + } + case BOOTLOADER_FLASH_WRITE_ERROR_RES: + { + BootloaderProtocolSendDataChunkResult(BOOTLOADER_CHUNK_TRANSFER_ERROR_FLASH_ERROR,CurDataChunkIndex); + BootloaderResetStateMachine(); + printf("Bootloader Flash write error. Aborting and going into STANDBY state\n"); + break; + } + case BOOTLOADER_FLASH_WRITE_ABORT_RES: + { + break; + } + } + + break; + } + case BOOTLOADER_NEW_CMD_EVENT: + { + switch(Param) + { + case BOOTLOADER_SM_NEW_DATA_CHUNK_CMD: + { + + //TODO:Check data validity + //TODO: Write data to flash + + //Extract index from buffer + unsigned int DataChunkIndex = 0; + unsigned int DataChunkSize = 0; + DataChunkSize = 0; + +// DataChunkIndex = BootloaderBuffer[0]; +// DataChunkIndex <<= 8; +// DataChunkIndex += BootloaderBuffer[1]; +// DataChunkIndex <<= 8; +// DataChunkIndex += BootloaderBuffer[2]; +// DataChunkIndex <<= 8; +// DataChunkIndex += BootloaderBuffer[3]; + DataChunkIndex = BootloaderBytesToInt(&BootloaderBuffer[0]); + +// DataChunkSize = BootloaderBuffer[4]; +// DataChunkSize <<= 8; +// DataChunkSize += BootloaderBuffer[5]; +// DataChunkSize <<= 8; +// DataChunkSize += BootloaderBuffer[6]; +// DataChunkSize <<= 8; +// DataChunkSize += BootloaderBuffer[7]; + DataChunkSize = BootloaderBytesToInt(&BootloaderBuffer[4]); + + + BootloaderFlashWriteDataPtr = &BootloaderBuffer[8]; + + //Check CRC + + + + if(CurDataChunkIndex != DataChunkIndex) + { + //Error... abort. + BootloaderProtocolSendDataChunkResult(BOOTLOADER_CHUNK_TRANSFER_ERROR_INVALID_CHUNK_INDEX,CurDataChunkIndex); + printf("Bootloader Interface ABORTING UPLOAD. Received invalid chunk index. Rx: [%d] - Expected: [%d]\n", DataChunkIndex,CurDataChunkIndex); + ResetBootloaderFlashWriteStateMachine(); + + } + else + { + CurDataChunkSize = DataChunkSize; + BootloaderFlashWriteStateMachine(BOOTLOADER_FLASH_WRITE_SM_NEW_BUFFER_EVENT); + printf("Bootloader Interface. Rx new data chunk. Writing to flash. Index: %d\n", DataChunkIndex); + } + + break; + } + case BOOTLOADER_SM_INVALID_CRC_CMD: + { + //BootloaderProtocol determined the CRC of the chunk was invalid. + BootloaderProtocolSendDataChunkResult(BOOTLOADER_CHUNK_TRANSFER_ERROR_RESEND,CurDataChunkIndex); + printf("Bootloader Interface invalid chunk CRC. Requesting resend chunk index [%d]\n", CurDataChunkIndex); + break; + } + case BOOTLOADER_SM_UPLOAD_FINISHED_CMD: + { + printf("Bootloader Interface firmware upload finished. Check flash integrity.\n"); + + if(BootloaderCheckFlashBootloaderData() == RET_OK) + { + BootloaderInterfaceState = BOOTLOADER_ACTIVE_STATE; + //BootloaderProtocolSendACK(BOOTLOADER_UPLOAD_FINISHED_RESPONSE); + BootloaderProtocolSendFirmwareUploadResult(BOOTLOADER_UPLOAD_SUCCESS); + FirmwareUploaded = 1; + } + else + { + printf("Firmware integrity check failed. Going back to STANDBY state.\n"); +// BootloaderProtocolSendNACK(BOOTLOADER_UPLOAD_FINISHED_RESPONSE); + BootloaderProtocolSendFirmwareUploadResult(BOOTLOADER_UPLOAD_FAILED_FLASH_VERIFICATION_ERROR); + BootloaderResetStateMachine(); + FirmwareUploaded = 0; + } + break; + } + case BOOTLOADER_SM_ABORT_CMD: + { + //TODO invalidate data in Flash + printf("Bootloader aborting firmware download. Going back to STANDBY state\n"); + BootloaderFlashWriteStateMachine(BOOTLOADER_FLASH_WRITE_SM_ABORT_EVENT); + BootloaderResetStateMachine(); + break; + } + default: + { + //WHAT TO DO??? + + break; + } + } + break; + } + case BOOTLOADER_TIMEOUT_EVENT: + { + break; + } + } + + break; + } + case BOOTLOADER_SENDING_FIRMWARE_COPY_STATE: + { + switch(Event) + { + case BOOTLOADER_TICK_EVENT: + { + break; + } + case BOOTLOADER_NEW_CMD_EVENT: + { + switch(Param) + { + case BOOTLOADER_SM_ABORT_CMD: + { + //TODO invalidate data in Flash + printf("Aborting upload, going into STANDBY mode\n"); + BootloaderResetStateMachine(); + break; + } + default: + { + //SEND NACK + BootloaderProtocolSendNACK(Param); + break; + } + } + break; + } + case BOOTLOADER_TIMEOUT_EVENT: + { + break; + } + } + + break; + } + case BOOTLOADER_PRINTING_FIRMWARE_STATE: + { + switch(Event) + { + case BOOTLOADER_TICK_EVENT: + { + break; + } + case BOOTLOADER_NEW_CMD_EVENT: + { + switch(Param) + { + case BOOTLOADER_SM_ABORT_CMD: + { + //TODO invalidate data in Flash + printf("Aborting upload, going into STANDBY mode\n"); + BootloaderResetStateMachine(); + break; + } + default: + { + //SEND NACK + BootloaderProtocolSendNACK(Param); + break; + } + } + break; + } + case BOOTLOADER_TIMEOUT_EVENT: + { + break; + } + } + + break; + } + } + +} + +void BootloaderResetStateMachine() +{ + BootloaderInterfaceState = BOOTLOADER_STANDBY_STATE; + DataChunkWritten = 0; + CurDataChunkIndex = 0; + FirmwareUploaded = 0; + CurDataChunkIndex = 0; + FirmwareUploaded = 0; + CurDataChunkSize = 0; + + + ResetBootloaderFlashEraseStateMachine(); + ResetBootloaderFlashWriteStateMachine(); + + CloseBootloaderServer(); +} + +void BootloaderActivateBootloader() +{ + OpenBootloaderServer(); + BootloaderInterfaceStateMachine(BOOTLOADER_NEW_CMD_EVENT,BOOTLOADER_SM_ACTIVATE_CMD); +} +void BootloaderDeactivateBootloader() +{ + BootloaderResetStateMachine(); +// CloseBootloaderServer(); +// BootloaderIterfaceStateMachine(BOOTLOADER_SM_ABORT_CMD,0); +} + +int BootloaderFlashEraseStateMachine(int event) +{ + if(event == BOOTLOADER_FLASH_ERASE_SM_ABORT_EVENT) + { + ResetBootloaderFlashEraseStateMachine(); + return BOOTLOADER_FLASH_ERASE_ABORT_RES; + } + + switch(BooloaderFlashEraseState) + { + case BOOTLOADER_FLASH_ERASE_SECTOR_STATE: + { + if(SPIFlashErase64KSector(BootloaderCurFlashEraseAddress,0) == RET_ERROR) + { + + printf("Bootloader Interface Erasing sector %0x%x\n", BootloaderCurFlashEraseAddress); + BooloaderFlashEraseState = BOOTLOADER_FLASH_ERASE_ERROR_STATE; + return BOOTLOADER_FLASH_ERASE_ERROR_RES; + } + BooloaderFlashErasePollCount = 0; + TimerStart(BOOTLOADER_FLASH_POLL_TIMER,BOOTLOADER_FLASH_ERASE_POLL_TIMEOUT); + BooloaderFlashEraseState = BOOTLOADER_FLASH_ERASE_WAIT_FOR_SECTOR_DONE; + break; + } + case BOOTLOADER_FLASH_ERASE_WAIT_FOR_SECTOR_DONE: + { + if(IsTimerExpired(BOOTLOADER_FLASH_POLL_TIMER) == 1) + { + if(SPIFlashCheckBusy() == 0) //sector erased + { + if(BootloaderCurFlashEraseAddress == FLASH_BTLDR_FIRMWARE_LAST_64K_SECTOR_ADD) + { + //Whole bootloader partition is erased. + printf("Bootloader Interface: Last sector 0x%x erased after %d polls\n",BootloaderCurFlashEraseAddress,BooloaderFlashErasePollCount); + BooloaderFlashEraseState = BOOTLOADER_FLASH_ERASE_FINISHED_STATE; + return BOOTLOADER_FLASH_ERASE_FINISHED_RES; + break; + } + else + { + printf("Bootloader Interface sector 0x%x erased after %d polls\n",BootloaderCurFlashEraseAddress,BooloaderFlashErasePollCount); + BootloaderCurFlashEraseAddress += SPI_FLASH_64K_SECTOR_SIZE; + BooloaderFlashEraseState = BOOTLOADER_FLASH_ERASE_SECTOR_STATE; + } + } + else + { + if(BooloaderFlashErasePollCount >= BOOTLOADER_FLASH_ERASE_MAX_POLL_COUNT) + { + printf("Bootloader Interface Flash erase error. Max poll count reached : %d!!!\n",BooloaderFlashErasePollCount); + BooloaderFlashEraseState = BOOTLOADER_FLASH_ERASE_ERROR_STATE; + return BOOTLOADER_FLASH_ERASE_ERROR_RES; + } + else + { + TimerStart(BOOTLOADER_FLASH_POLL_TIMER,BOOTLOADER_FLASH_ERASE_POLL_TIMEOUT); + BooloaderFlashErasePollCount++; + } + } + } + break; + } + case BOOTLOADER_FLASH_ERASE_CHECKBACK_STATE: + { + break; + } + case BOOTLOADER_FLASH_ERASE_FINISHED_STATE: + { + return BOOTLOADER_FLASH_ERASE_FINISHED_RES; + break; + } + case BOOTLOADER_FLASH_ERASE_ERROR_STATE: + { + return BOOTLOADER_FLASH_ERASE_ERROR_RES; + break; + } + } + + return BOOTLOADER_FLASH_ERASE_RUNNING_RES; +} + +int ResetBootloaderFlashEraseStateMachine() +{ + BooloaderFlashEraseState = BOOTLOADER_FLASH_ERASE_SECTOR_STATE; + BootloaderCurFlashEraseAddress = FLASH_BTLDR_FIRMWARE_START_ADDRESS; + BooloaderFlashErasePollCount = 0; + BootloaderFlashErased = 0; +} + +int BootloaderFlashWriteStateMachine(int event) +{ + switch(BootloaderFlashWriteState) + { + case BOOTLOADER_FLASH_WRITE_STANDBY_STATE: + { + if(event == BOOTLOADER_FLASH_WRITE_SM_TICK_EVENT) + { + //TODO: timeout + // return BOOTLOADER_FLASH_WRITE_ERROR_RES; + } + else if(event == BOOTLOADER_FLASH_WRITE_SM_NEW_BUFFER_EVENT) + { + // printf("Starting writing data to Flash\nFlash Address : Data\n"); + BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_BUFFER_STATE; + BootloaderFirmwareChunkWriteCount = 0; + return BOOTLOADER_FLASH_WRITING_RES; + } + break; + } + case BOOTLOADER_FLASH_WRITE_BUFFER_STATE: + { + if(BootloaderFlashWriteDataPtr == 0) + { + ResetBootloaderFlashWriteStateMachine(); + return BOOTLOADER_FLASH_WRITE_ERROR_RES; + } + + while(BootloaderFirmwareChunkWriteCount < CurDataChunkSize) + { + + //printf("%d : 0x%x\n",(BootloaderCurFlashWriteAddress-FLASH_BTLDR_FIRMWARE_START_ADDRESS),(unsigned int)*BootloaderFlashWriteDataPtr); + if(SPIFlashWriteByte(BootloaderCurFlashWriteAddress++,*BootloaderFlashWriteDataPtr++,1) == RET_ERROR) + { + printf("Bootloader flash error. Aborting and going back to STANDBY\n"); + BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_ERROR_STATE; + return BOOTLOADER_FLASH_WRITE_ERROR_RES; + } + + + int cnt = 0; + while(1) + { + if(SPIFlashCheckBusy() == 0) + { + break; + } + if(cnt++ > 200) + { + printf("Bootloader flash write timeout error. Aborting and going back to STANDBY\n"); + BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_ERROR_STATE; + return BOOTLOADER_FLASH_WRITE_ERROR_RES; + } + } + + BootloaderFirmwareChunkWriteCount++; + } + + BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_WAIT_FOR_BYTE_DONE; + return BOOTLOADER_FLASH_WRITING_RES; + + // BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_STANDBY_STATE; + // return BOOTLOADER_FLASH_WRITE_FINISHED_RES; + + + break; + } + case BOOTLOADER_FLASH_WRITE_WAIT_FOR_BYTE_DONE: + { + if(event == BOOTLOADER_FLASH_WRITE_SM_TICK_EVENT) + { + BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_STANDBY_STATE; + return BOOTLOADER_FLASH_WRITE_FINISHED_RES; +// if(SyslogIsBufferEmpty() == RET_OK) +// { +// BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_STANDBY_STATE; +// return BOOTLOADER_FLASH_WRITE_FINISHED_RES; +// } +// else +// { +// return BOOTLOADER_FLASH_WRITING_RES; +// } + } + break; + } + case BOOTLOADER_FLASH_WRITE_CHECKBACK_STATE: + { + break; + } + case BOOTLOADER_FLASH_WRITE_FINISHED_STATE: + { + return BOOTLOADER_FLASH_WRITE_FINISHED_RES; + break; + } + case BOOTLOADER_FLASH_WRITE_ERROR_STATE: + { + return BOOTLOADER_FLASH_WRITE_ERROR_RES; + break; + } + + } +} + +int BootloaderPrintFlashData() +{ + +} + + +int ResetBootloaderFlashWriteStateMachine() +{ + BootloaderFlashWriteState = BOOTLOADER_FLASH_WRITE_STANDBY_STATE; + BootloaderCurFlashWriteAddress = FLASH_BTLDR_FIRMWARE_START_ADDRESS; + BootloaderFlashWritePollCount = 0; + BootloaderFirmwareChunkWriteCount = 0; + BootloaderFlashWriteDataPtr = 0; + BootloaderFirmwareChunkWriteCount = 0; + return RET_OK; +} + +#endif + + +int BootloaderCheckFlashBootloaderData() +{ + + unsigned char FlashData[100]; + unsigned int FlashAddress = FLASH_BTLDR_FIRMWARE_START_ADDRESS; + unsigned int FileHeaderCode, FirmwareFlags, NbRecords, FirmwareSize, VersionCode, CRC32; + unsigned int ComputedCRC32 = CRC_START_32; + + //SPIFlashReadBuffer(FlashData,700,FlashAddress); + + + //printf("Checking Flash bootloader data integrity... \n"); + SPIFlashReadBuffer(FlashData,FLASH_BTLDR_HEADER_SIZE,FlashAddress); + + FileHeaderCode = BootloaderBytesToInt(FlashData); + FirmwareFlags = BootloaderBytesToInt(&FlashData[4]); + NbRecords = BootloaderBytesToInt(&FlashData[8]); + FirmwareSize = BootloaderBytesToInt(&FlashData[12]); + VersionCode = BootloaderBytesToInt(&FlashData[16]); + CRC32 = BootloaderBytesToInt(&FlashData[20]); + + +// printf("File Header: Code:[0x%x] - Flags:[0x%x] - Nb Records:[%d] - Firmware Size:[%d] - Version:[0x%x] - CRC32:[0x%x]\n",FileHeaderCode,FirmwareFlags,NbRecords,FirmwareSize,VersionCode,CRC32); + + + if(FileHeaderCode != BOOTLOADER_FILE_HEADER_CODE) + { + // printf("Invalid file header code, aborting\n"); + return RET_ERROR; + } + if(NbRecords == 0) + { + // printf("No records in file (NbRecords = 0), aborting\n"); + return RET_ERROR; + } + + FlashAddress += FLASH_BTLDR_HEADER_SIZE; //point to the start of bootloader data + + int CurRecord = 0; + unsigned int Done = false; + int RecHeader, RecSize, RecStartAddress; + + //Check the header of each sector. + while(Done == false) + { + SPIFlashReadBuffer(FlashData,12,FlashAddress); + RecHeader = BootloaderBytesToInt(FlashData); + RecSize = BootloaderBytesToInt(&FlashData[4]); + RecStartAddress = BootloaderBytesToInt(&FlashData[8]); + FlashAddress += 12; + + + if(RecHeader != BOOTLOADER_RECORD_HEADER_CODE) + { + // printf("Error in record #%d. Invalid header code : [0x%x]\n",CurRecord,RecHeader); + return RET_ERROR; + } + if(RecSize == 0) + { + // printf("Error in record #%d. Invalid record size (RecordSize = 0) \n"); + return RET_ERROR; + } + +// printf("Record #%d OK! Header:[0x%x] - Size:[%d] - Start Address:[0x%x]\n",CurRecord,RecHeader,RecSize,RecStartAddress); +// while(SyslogIsBufferEmpty() == RET_ERROR) +// { +// SyslogTick(); +// TickWiFi(); +// } + + CurRecord++; + if(CurRecord == NbRecords) + { + // Done = true; + // printf("All records checked OK! Computing CRC...\n"); + Done = true; + break; + //return RET_OK; + } + else + { + FlashAddress += RecSize; + } + } + + //Now, compute whole data CRC + FlashAddress = FLASH_BTLDR_FIRMWARE_START_ADDRESS + FLASH_BTLDR_HEADER_SIZE; + char Byte; + int i; + for(i = 0; i < FirmwareSize; i++) + { + SPIFlashReadBuffer(&Byte,1,FlashAddress++); + ComputedCRC32 = update_crc_32(ComputedCRC32,Byte); + } + ComputedCRC32 ^= 0xffffffffL; + + if(ComputedCRC32 == CRC32) + { + // printf("CRC32 matches. Computed:[0x%x] - Expected:[0x%x]\n",ComputedCRC32,CRC32); + // printf("Flash check success. Firmware is valid\n"); + char mbuf[30]; + mbuf[0] = 'F'; + mbuf[1] = 'i'; + mbuf[2] = 'r'; + mbuf[3] = 'm'; + mbuf[4] = 'w'; + mbuf[5] = 'a'; + mbuf[6] = 'r'; + mbuf[7] = 'e'; + mbuf[8] = ' '; + mbuf[9] = 'C'; + mbuf[10] = 'h'; + mbuf[11] = 'e'; + mbuf[12] = 'c'; + mbuf[13] = 'k'; + mbuf[14] = ' '; + mbuf[15] = 's'; + mbuf[16] = 'u'; + mbuf[17] = 'c'; + mbuf[18] = 'c'; + mbuf[19] = 'e'; + mbuf[20] = 's'; + mbuf[21] = 's'; + mbuf[22] = '\n'; + mbuf[23] = '\r'; + SendInternalUartData(&mbuf[0],24); + return RET_OK; + } + else + { + // printf("CRC32 mismatch. Computed:[0x%x] - Expected:[0x%x]\n",ComputedCRC32,CRC32); + // printf("Flash check failed.\n"); + char mbuf[30]; + mbuf[0] = 'F'; + mbuf[1] = 'i'; + mbuf[2] = 'r'; + mbuf[3] = 'm'; + mbuf[4] = 'w'; + mbuf[5] = 'a'; + mbuf[6] = 'r'; + mbuf[7] = 'e'; + mbuf[8] = ' '; + mbuf[9] = 'C'; + mbuf[10] = 'h'; + mbuf[11] = 'e'; + mbuf[12] = 'c'; + mbuf[13] = 'k'; + mbuf[14] = ' '; + mbuf[15] = 'F'; + mbuf[16] = 'a'; + mbuf[17] = 'i'; + mbuf[18] = 'l'; + mbuf[19] = 'e'; + mbuf[20] = 'd'; + mbuf[22] = '\n'; + mbuf[23] = '\r'; + SendInternalUartData(&mbuf[0],23); + return RET_ERROR; + } + + return RET_OK; + +} + +int BoootloaderGetBootloaderFlags() +{ + char BootloaderFlags[FLASH_BTLDR_FLAGS_SIZE]; + SPIFlashReadBuffer(BootloaderFlags,FLASH_BTLDR_FLAGS_SIZE,FLASH_BTLDR_FLAGS_ADDRESS); + + mBootloaderFlags.BootloaderAction = BootloaderFlags[BOOTLOADER_FLAGS_ACTION_FLAG_INDEX]; + mBootloaderFlags.BootloaderActionValidator = BootloaderFlags[BOOTLOADER_FLAGS_ACTION_VALIDATOR_INDEX]; + + return RET_OK; +} + +int BootloaderBytesToInt(unsigned char *Bytes) +{ + if(Bytes == 0) + { + return 0; + } + + int Output = Bytes[0]; + Output <<= 8; + Output += Bytes[1]; + Output <<= 8; + Output += Bytes[2]; + Output <<= 8; + Output += Bytes[3]; + + return Output; +} +int BootloaderBytesToIntLittleEndian(unsigned char *Bytes) +{ + if(Bytes == 0) + { + return 0; + } + + int Output = Bytes[3]; + Output <<= 8; + Output += Bytes[2]; + Output <<= 8; + Output += Bytes[1]; + Output <<= 8; + Output += Bytes[0]; + + return Output; +} \ No newline at end of file diff --git a/Bootloader_PIC32.X/Source/BootloaderInterface.h b/Bootloader_PIC32.X/Source/BootloaderInterface.h new file mode 100644 index 0000000..ccbcf9d --- /dev/null +++ b/Bootloader_PIC32.X/Source/BootloaderInterface.h @@ -0,0 +1,174 @@ +/* + * File: ChaletPowerRelay.h + * Author: JF + * + * Created on November 30, 2018, 7:33 PM + */ + +#ifndef BOOTLOADERINTERFACE_H +#define BOOTLOADERINTERFACE_H +#include "define.h" + +//#define USE_FULL_IMPLEMENTATION + +#define BOOTLOADER_FILE_HEADER_CODE (int)0xBAADBEEF +#define BOOTLOADER_RECORD_HEADER_CODE (int)0xDEADBEEF + +#define BOOTLOADER_FLASH_FIRMWARE_VALIDATOR 0xA8 +#define BOOTLOADER_ENTER_UPLOAD_MODE_VALIDATOR 0x5A + +typedef struct +{ + unsigned char BootloaderAction; + unsigned char BootloaderActionValidator; + +}stBootloaderFlags_t; + +extern stBootloaderFlags_t mBootloaderFlags; + +enum eBootloaderFlagsIndex +{ + BOOTLOADER_FLAGS_ACTION_FLAG_INDEX = 0, + BOOTLOADER_FLAGS_ACTION_VALIDATOR_INDEX, + + + BOOTLOADER_FLAGS_MAX_INDEX = 12 +}; + +enum eBootloaderActionFlagValues +{ + BOOTLOADER_ACTION_JUMP_TO_APP_VALUE = 0, + BOOTLOADER_ACTION_FLASH_FIRMWARE_VALUE = 1, + BOOTLOADER_ACTION_ENTER_UPDATE_MODE_VALUE = 2, + + BOOTLOADER_ACTION_MAX_VALUE + +}; + +#ifdef USE_FULL_IMPLEMENTATION +enum eBootloaderStates +{ + BOOTLOADER_STANDBY_STATE, + BOOTLOADER_ACTIVE_STATE, + BOOTLOADER_ERASE_FLASH_STATE, + BOOTLOADER_RECEIVING_FIRMWARE_STATE, + BOOTLOADER_SENDING_FIRMWARE_COPY_STATE, + BOOTLOADER_PRINTING_FIRMWARE_STATE, + + BOOTLOADER_MAX_STATE +}; + +enum eBootloaderStateMachineEvents +{ + BOOTLOADER_TICK_EVENT, + BOOTLOADER_NEW_CMD_EVENT, + BOOTLOADER_TIMEOUT_EVENT, + + BOOTLOADER_MAX_EVENT +}; + +enum eBootloaderFlashEraseStates +{ + BOOTLOADER_FLASH_ERASE_SECTOR_STATE, + BOOTLOADER_FLASH_ERASE_WAIT_FOR_SECTOR_DONE, + BOOTLOADER_FLASH_ERASE_CHECKBACK_STATE, + BOOTLOADER_FLASH_ERASE_FINISHED_STATE, + BOOTLOADER_FLASH_ERASE_ERROR_STATE, + + BOOTLOADER_FLASH_ERASE_MAX_STATE +}; + +enum eBootloaderFlashEraseResults +{ + BOOTLOADER_FLASH_ERASE_RUNNING_RES, + BOOTLOADER_FLASH_ERASE_FINISHED_RES, + BOOTLOADER_FLASH_ERASE_ERROR_RES, + BOOTLOADER_FLASH_ERASE_ABORT_RES, + + BOOTLOADER_FLASH_ERASE_MAX_RES +}; + +enum eBootloaderFlahsEraseSMEvents +{ + BOOTLOADER_FLASH_ERASE_SM_TICK_EVENT, + BOOTLOADER_FLASH_ERASE_SM_ABORT_EVENT, + + BOOTLOADER_FLASH_ERASE_SM_MAX_EVENT +}; + +enum eBootloaderFlashWriteStates +{ + BOOTLOADER_FLASH_WRITE_STANDBY_STATE, + BOOTLOADER_FLASH_WRITE_BUFFER_STATE, + BOOTLOADER_FLASH_WRITE_WAIT_FOR_BYTE_DONE, + BOOTLOADER_FLASH_WRITE_CHECKBACK_STATE, + BOOTLOADER_FLASH_WRITE_FINISHED_STATE, + BOOTLOADER_FLASH_WRITE_ERROR_STATE, + + BOOTLOADER_FLASH_WRITE_MAX_STATE +}; + +enum eBootloaderFlashWriteResults +{ + BOOTLOADER_FLASH_WRITING_RES, + BOOTLOADER_FLASH_WRITE_FINISHED_RES, + BOOTLOADER_FLASH_WRITE_ERROR_RES, + BOOTLOADER_FLASH_WRITE_ABORT_RES, + + BOOTLOADER_FLASH_WRITE_MAX_RES +}; + +enum eBootloaderFlahsWriteSMEvents +{ + BOOTLOADER_FLASH_WRITE_SM_TICK_EVENT, + BOOTLOADER_FLASH_WRITE_SM_NEW_BUFFER_EVENT, + BOOTLOADER_FLASH_WRITE_SM_ABORT_EVENT, + + BOOTLOADER_FLASH_WRITE_SM_MAX_EVENT +}; + + +enum eBootloaderStateMachineCmds +{ + BOOTLOADER_SM_ACTIVATE_CMD, + BOOTLOADER_SM_ABORT_CMD, + BOOTLOADER_SM_ERASE_FLASH_CMD, + BOOTLOADER_SM_INIT_UPLOAD_CMD, + BOOTLOADER_SM_NEW_DATA_CHUNK_CMD, + BOOTLOADER_SM_UPLOAD_FINISHED_CMD, + BOOTLOADER_SM_EXECUTE_UPGRAGE_CMD, + BOOTLOADER_SM_INVALID_CRC_CMD, + BOOTLOADER_SM_CHECK_FLASH_CMD +}; + + +extern unsigned char BootloaderBuffer[300]; + +int BootloaderInterfaceInit(); +void BootloaderExecuteCmd(char Cmd,int CRCValid); +void BootloaderCRCError(char Cmd, int RxCRC, int ExpectedCRC); + + +void BootloaderInterfaceTick(); +void BootloaderInterfaceStateMachine(int Event, int Param); +void BootloaderResetStateMachine(); +void BootloaderActivateBootloader(); +void BootloaderDeactivateBootloader(); + +int BootloaderFlashEraseStateMachine(int event); +int ResetBootloaderFlashEraseStateMachine(); + +int BootloaderFlashWriteStateMachine(int event); +int ResetBootloaderFlashWriteStateMachine(); +int BootloaderPrintFlashData(); +#endif + +int BootloaderCheckFlashBootloaderData(); +int BootloaderBytesToInt(unsigned char *Bytes); +int BoootloaderGetBootloaderFlags(); + + + + +#endif /* BOOTLOADERINTERFACE_H */ + diff --git a/Bootloader_PIC32.X/Source/BootloaderProtocol.h b/Bootloader_PIC32.X/Source/BootloaderProtocol.h index b3f660a..08dc694 100644 --- a/Bootloader_PIC32.X/Source/BootloaderProtocol.h +++ b/Bootloader_PIC32.X/Source/BootloaderProtocol.h @@ -4,17 +4,17 @@ #define BOOTLOADER_PROTOCOL_H #define PROTOCOL_HEADER 0xBA -#define MAX_SECTOR_SIZE 0x01000 +//#define MAX_SECTOR_SIZE 0x01000 #define MAX_RX_BUFF_SIZE 0x100 #define MAX_TX_BUFF_SIZE 0x100 -typedef struct -{ - unsigned int SectorStartAddress; - unsigned short SectorSize; - unsigned int SectorData[MAX_SECTOR_SIZE]; - -}stDataSector_t; +//typedef struct +//{ +// unsigned int SectorStartAddress; +// unsigned short SectorSize; +// unsigned int SectorData[MAX_SECTOR_SIZE]; +// +//}stDataSector_t; enum eBootloaderProtocolStates { @@ -77,7 +77,7 @@ enum eBootloaderAcknowledgement extern Bool e_CommandPending; extern Bool e_FlashUpdateMode; extern unsigned char RxDataBuffer[MAX_RX_BUFF_SIZE]; -extern stDataSector_t CurrentDataSector; +//extern stDataSector_t CurrentDataSector; diff --git a/Bootloader_PIC32.X/Source/BootloaderStateMachine.c b/Bootloader_PIC32.X/Source/BootloaderStateMachine.c index a45ac05..1e6b164 100644 --- a/Bootloader_PIC32.X/Source/BootloaderStateMachine.c +++ b/Bootloader_PIC32.X/Source/BootloaderStateMachine.c @@ -1,13 +1,13 @@ /******************************************************************************* -* * -* Copyright 2010 Rheinmetall Canada Inc. * -* * -* No part of this document may be reproduced, stored in * -* a retrieval system, or transmitted, in any form or by any means, * -* electronic, mechanical, photocopying, recording, or otherwise, * -* without the prior written permission of Rheinmetall Canada Inc. * -* * -*******************************************************************************/ + * * + * Copyright 2010 Rheinmetall Canada Inc. * + * * + * No part of this document may be reproduced, stored in * + * a retrieval system, or transmitted, in any form or by any means, * + * electronic, mechanical, photocopying, recording, or otherwise, * + * without the prior written permission of Rheinmetall Canada Inc. * + * * + *******************************************************************************/ /*---- example include file ---------------------------------------------------*/ @@ -16,6 +16,8 @@ #include "FlashInterface.h" #include "BootloaderProtocol.h" #include "InternalUart.h" +#include "BootloaderInterface.h" +#include "FlashMapping.h" #include //#include //#include @@ -24,304 +26,698 @@ unsigned int mSMState; unsigned int mPseudoTimer; extern unsigned long _app_start; +int mIsSPIFlashDetected; + void BootloaderSMInit(void) { - mSMState = SM_UPDATE_WAIT_STATE; + mSMState = SM_CHECK_BOOTLOADER_FLAGS; mPseudoTimer = 0; + mIsSPIFlashDetected = 0; } -#pragma CODE_SECTION(BootloaderSM,"ramfuncs"); +//#pragma CODE_SECTION(BootloaderSM,"ramfuncs"); void BootloaderSM(unsigned int event, unsigned int Data) { switch(mSMState) { - case SM_UPDATE_WAIT_STATE: + case SM_STANDBY_STATE: { - switch(event) - { - case SM_TICK_EVENT: - { - if(mPseudoTimer++ >= PSEUDO_TIMER_VALUE) - { - char mbuf[30]; - mbuf[0] = 'R'; - mbuf[1] = 'e'; - mbuf[2] = 'b'; - mbuf[3] = 'o'; - mbuf[4] = 'o'; - mbuf[5] = 't'; - mbuf[6] = 'i'; - mbuf[7] = 'n'; - mbuf[8] = 'g'; - mbuf[9] = ' '; - mbuf[10] = 'i'; - mbuf[11] = 'n'; - mbuf[12] = ' '; - mbuf[13] = 'a'; - mbuf[14] = 'p'; - mbuf[15] = 'p'; - mbuf[16] = '\r'; - SendInternalUartData(&mbuf[0],17); - mPseudoTimer = 0; -// #ifndef _DEBUG - JumpToApp(); -// #endif - } - break; - } - case SM_RX_CMD_EVENT: - { - if(Data == CONNECT_REQUEST_CMD) - { - mSMState = SM_IDLE_STATE; - ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); //Bootloader ack - } - - //Ignore any other command received... - - break; - } - case SM_ABORT_UPDATE: - { - break; - } - } - break; //case SM_UPDATE_WAIT_STATE: + break; } - case SM_IDLE_STATE: + case SM_CHECK_BOOTLOADER_FLAGS: { switch(event) { case SM_TICK_EVENT: - { - break; - } - case SM_RX_CMD_EVENT: { - switch(Data) + //First, check if SPI flash is functionnal + if(mIsSPIFlashDetected == 0) { - case START_UPDATE_REQUEST_CMD: + //Flash is not functionnal... + //TODO: Check if we need to update via serial port + + // JumpToApp(); + } + + //Flash is detected. Check the bootloader flags... + BoootloaderGetBootloaderFlags(); + +// if(BootloaderAction == 0) +// { +// JumpToApp(); +// } +// else if(BootloaderAction == 1) +// { +// if( BootloaderAction == 0xA8) +// { +// //It's requested to write the firmware to PIC's Flash. Let's check SPI flash data integrity. +// mSMState = SM_CHECK_FIRMWARE_VALIDITY; +// } +// else +// { +// //TODO: What should we do? +// JumpToApp(); +// } +// } +// else +// { +// //TODO +// JumpToApp(); +// } + + + + switch(mBootloaderFlags.BootloaderAction) + { + case BOOTLOADER_ACTION_JUMP_TO_APP_VALUE: { - mSMState = SM_WAIT_FOR_UNLOCK_STATE; - ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); //Bootloader ack + char mbuf[30]; + mbuf[0] = 'G'; + mbuf[1] = 'o'; + mbuf[2] = 'i'; + mbuf[3] = 'n'; + mbuf[4] = 'g'; + mbuf[5] = ' '; + mbuf[6] = 'S'; + mbuf[7] = 't'; + mbuf[8] = 'd'; + mbuf[9] = 'b'; + mbuf[10] = 'y'; + mbuf[11] = '\n'; + mbuf[12] = '\r'; + SendInternalUartData(&mbuf[0],13); + mSMState = SM_STANDBY_STATE; + JumpToApp(); break; } - case HEARTBEAT_REQUEST_CMD: + case BOOTLOADER_ACTION_FLASH_FIRMWARE_VALUE: { - ProtocolSendCmd(HEARTBEAT_CMD,0,0); + if( mBootloaderFlags.BootloaderActionValidator == BOOTLOADER_FLASH_FIRMWARE_VALIDATOR) + { + //It's requested to write the firmware to PIC's Flash. Let's check SPI flash data integrity. + mSMState = SM_CHECK_FIRMWARE_VALIDITY; + } + else + { + //TODO: What should we do? + JumpToApp(); + } break; } - case END_UPDATE_REQUEST_CMD: - { - ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); //Bootloader ack - SoftReset(); //simply reset cpu. - break; - } - case FLASH_API_VER_REQUEST_CMD: - { - char Version; - Version = 0x01; - ProtocolSendCmd(FLASH_API_VER_CMD,&Version,1); - break; - } - case SCRUB_FLASH_REQUEST_CMD: + case BOOTLOADER_ACTION_ENTER_UPDATE_MODE_VALUE: { //TODO + JumpToApp(); + break; + } + default: + { + JumpToApp(); break; } } +// break; } + case SM_RX_CMD_EVENT: case SM_ABORT_UPDATE: + default: { - ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); //Bootloader ack - SoftReset(); break; } } - break; //case SM_IDLE_STATE: + break; } - case SM_WAIT_FOR_UNLOCK_STATE: + case SM_CHECK_FIRMWARE_VALIDITY: { switch(event) { case SM_TICK_EVENT: { + if(BootloaderCheckFlashBootloaderData() == RET_OK) + { + //All is good, let's write the firmware to PIC's program Flash + mSMState = SM_ERASE_INTERNAL_FLASH; + } + else + { + //TODO: What should we do? + JumpToApp(); + } break; } - case SM_RX_CMD_EVENT: + default: { - if(Data == BOOTLOADER_UNLOCK_REQUEST_CMD) + break; + } + } + break; + } + case SM_ERASE_INTERNAL_FLASH: + { + switch(event) + { + case SM_TICK_EVENT: + { + if(FlashErase() == FLASH_STATUS_ERROR) { - if(RxDataBuffer[0] == BOOTLOADER_UNLOCK_CODE) - { - ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_FLASH_ERASE); //Inform PTE that flash is being erased - - // #ifndef _DEBUG //don't touch FLASH in debug mode... - //Erase FLASH - if(FlashErase() != FLASH_STATUS_OK) - { - ProtocolSendAck(PROTOCOL_NACK,RET_PROTOCOL_ERR_ERASE_FLASH_FAILED); //Acknowledge... - mSMState = SM_IDLE_STATE; - break; - } - // #endif - - mSMState = SM_WAIT_FOR_NEXT_RECORD; - ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); - } - else//Invalid unlock code... return to IDLE... - { - mSMState = SM_IDLE_STATE; - ProtocolSendAck(PROTOCOL_NACK,RET_PROTOCOL_ERR_INVALID_UNLOCK_CODE); - } + char mbuf[30]; + mbuf[0] = 'F'; + mbuf[1] = 'l'; + mbuf[2] = 'a'; + mbuf[3] = 's'; + mbuf[4] = 'h'; + mbuf[5] = ' '; + mbuf[6] = 'E'; + mbuf[7] = 'r'; + mbuf[8] = 'r'; + mbuf[9] = 'o'; + mbuf[10] = 'r'; + mbuf[11] = '\n'; + mbuf[12] = '\r'; + SendInternalUartData(&mbuf[0],13); + mSMState = SM_STANDBY_STATE; + break; } - else//If another command than UNLOCK is received... return to IDLE + else { - mSMState = SM_IDLE_STATE; - ProtocolSendAck(PROTOCOL_NACK,RET_PROTOCOL_ERR_UNLOCK_EXPECTED); +// mSMState = SM_STANDBY_STATE; + char mbuf[30]; + mbuf[0] = 'F'; + mbuf[1] = 'l'; + mbuf[2] = 'a'; + mbuf[3] = 's'; + mbuf[4] = 'h'; + mbuf[5] = ' '; + mbuf[6] = 'E'; + mbuf[7] = 'r'; + mbuf[8] = 'a'; + mbuf[9] = 's'; + mbuf[10] = 'e'; + mbuf[11] = 'd'; + mbuf[12] = '\n'; + mbuf[13] = '\r'; + SendInternalUartData(&mbuf[0],14); + mSMState = SM_WRITE_DATA_TO_PROGRAM_FLASH; + } + break; + } + default: + { + break; + } + } + break; + } + case SM_WRITE_DATA_TO_PROGRAM_FLASH: + { + switch(event) + { + case SM_TICK_EVENT: + { + //First, load the firmware info. + unsigned char FlashData[100]; + unsigned int FlashAddress = FLASH_BTLDR_FIRMWARE_START_ADDRESS; + unsigned int FileHeaderCode, FirmwareFlags, NbRecords, FirmwareSize, VersionCode, CRC32; + // unsigned int ComputedCRC32 = CRC_START_32; - } - - break; //case SM_RX_CMD_EVENT - } - case SM_ABORT_UPDATE: - { - break; - } - } - break; //case SM_WAIT_FOR_UNLOCK_STATE: - } - case SM_WAIT_FOR_NEXT_RECORD: - { - switch(event) - { - case SM_TICK_EVENT: - { - break; - } - case SM_RX_CMD_EVENT: - { - switch(Data) + //SPIFlashReadBuffer(FlashData,700,FlashAddress); + + + //printf("Checking Flash bootloader data integrity... \n"); + SPIFlashReadBuffer(FlashData,FLASH_BTLDR_HEADER_SIZE,FlashAddress); + + FileHeaderCode = BootloaderBytesToInt(FlashData); + FirmwareFlags = BootloaderBytesToInt(&FlashData[4]); + NbRecords = BootloaderBytesToInt(&FlashData[8]); + FirmwareSize = BootloaderBytesToInt(&FlashData[12]); + VersionCode = BootloaderBytesToInt(&FlashData[16]); + CRC32 = BootloaderBytesToInt(&FlashData[20]); + + //TODO: Do we need to recheck validity? It's just been done before... + + FlashAddress += FLASH_BTLDR_HEADER_SIZE; //point to the start of bootloader data + + if(NbRecords > 0) { - case SEND_RECORD_REQUEST_CMD: + int CurRecord = 0; + unsigned int Done = false; + unsigned int RecHeader, RecSize, RecStartAddress; + while(Done == false) { - //TODO: Address check... - ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_FLASH_WRITE); + SPIFlashReadBuffer(&FlashData[0],12,FlashAddress); + RecHeader = BootloaderBytesToInt(&FlashData[0]); + RecSize = BootloaderBytesToInt(&FlashData[4]); //This is in bytes + RecSize /= 4; + RecStartAddress = BootloaderBytesToInt(&FlashData[8]); + FlashAddress += 12; -// unsigned int SectorStartAddress; -// unsigned short SectorSize; -// unsigned int *RecordDataPtr; -// unsigned int data; -// -// SectorStartAddress = *(unsigned int*)(&RxDataBuffer[0]); -// SectorSize = *(unsigned short*)(&RxDataBuffer[4]); -// RecordDataPtr = (unsigned int*)&RxDataBuffer[8]; -// data = *RecordDataPtr; - - // unsigned int test = KVA_TO_PA(APPLICATION_START_ADDRESS); - + + if(RecHeader != BOOTLOADER_RECORD_HEADER_CODE) + { + //TODO: What + } + // if(RecSize == 0) + // { + //TODO: What + // return RET_ERROR; + // } + + //Load the firmware data from SPI Flash + CurrentDataSector.SectorStartAddress = RecStartAddress; + CurrentDataSector.SectorSize = RecSize; + int RecWord; + for(RecWord = 0; RecWord < RecSize; RecWord++) + { + char WordBytes[4]; + int Word; + SPIFlashReadBuffer(WordBytes,4,FlashAddress); +// Word = BootloaderBytesToInt(WordBytes); + Word = BootloaderBytesToIntLittleEndian(WordBytes); + CurrentDataSector.SectorData[RecWord] = Word; + FlashAddress += 4; + } + + + //Write it to PIC's internal flash if(CurrentDataSector.SectorStartAddress < KVA_TO_PA(APPLICATION_FLASH_START_ADDRESS)) { - ProtocolSendAck(PROTOCOL_NACK,RET_PROTOCOL_ERR_INVALID_ADDRESS); - break; + //TODO: Manage this! } else if(FlashProgramData((void*)(CurrentDataSector.SectorStartAddress), CurrentDataSector.SectorData , CurrentDataSector.SectorSize) != FLASH_STATUS_OK) { - ProtocolSendAck(PROTOCOL_NACK,RET_PROTOCOL_ERR_WRITE_FLASH_FAILED); - break; + //TODO: Manage this! + char mbuf[30]; + mbuf[0] = 'W'; + mbuf[1] = 'r'; + mbuf[2] = 'i'; + mbuf[3] = 't'; + mbuf[4] = 'e'; + mbuf[5] = ' '; + mbuf[6] = 'E'; + mbuf[7] = 'r'; + mbuf[8] = 'r'; + mbuf[9] = 'o'; + mbuf[10] = 'r'; + mbuf[11] = '\n'; + mbuf[12] = '\r'; + SendInternalUartData(&mbuf[0],13); + } + + + CurRecord++; + if(CurRecord == NbRecords) + { + Done = true; + break; } - - - ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); - - - break; } - case END_UPDATE_REQUEST_CMD: - { - ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); - - #ifndef _DEBUG - JumpToApp(); - #else - mSMState = SM_IDLE_STATE; - #endif - break; - } - } - - break; //case SM_RX_CMD_EVENT: + + //Fimware is all written successfully + mSMState = SM_CHECK_PROGRAM_FLASH_VALIDITY; + + break; } - case SM_ABORT_UPDATE: + default: { break; } + + // CurrentDataSector.SectorStartAddress + break; + } + case SM_CHECK_PROGRAM_FLASH_VALIDITY: + { + switch(event) + { + case SM_TICK_EVENT: + { + //TODO: Compute CRC32... + + mSMState = SM_STANDBY_STATE; + char mbuf[30]; + mbuf[0] = 'F'; + mbuf[1] = 'l'; + mbuf[2] = 'a'; + mbuf[3] = 's'; + mbuf[4] = 'h'; + mbuf[5] = ' '; + mbuf[6] = 'P'; + mbuf[7] = 'r'; + mbuf[8] = 'o'; + mbuf[9] = 'g'; + mbuf[10] = 'r'; + mbuf[11] = 'a'; + mbuf[12] = 'm'; + mbuf[13] = 'm'; + mbuf[14] = 'e'; + mbuf[15] = 'd'; + mbuf[16] = '\n'; + mbuf[17] = '\r'; + SendInternalUartData(&mbuf[0],19); + + char toto[2]; + toto[0] = 0; + toto[1] = 0; + SPIFlashWriteBuffer(toto,2,0x000000); + JumpToApp(); + } + break; + } + default: + { + break; + } + } + break; + } + case SM_ERROR_STATE: + { + // TODO: Manage this state + break; } - break; //case SM_WAIT_FOR_NEXT_RECORD: } } -} - -void JumpToApp() -{ -// CloseInternalUart(); - void (*fptr)(void); - fptr = (void (*)(void))APPLICATION_START_ADDRESS; - fptr(); -} - - -void DownloadFlash(unsigned int StartAddress, unsigned int EndAddress) -{ - /* - unsigned int CurAddress = StartAddress; - unsigned int Data; - unsigned int delay = 0; - char Buf[100]; - int i = 0; - - while(CurAddress < EndAddress) + //void BootloaderSM(unsigned int event, unsigned int Data) + //{ + // switch(mSMState) + // { + // case SM_UPDATE_WAIT_STATE: + // { + // switch(event) + // { + // case SM_TICK_EVENT: + // { + // if(mPseudoTimer++ >= PSEUDO_TIMER_VALUE) + // { + // char mbuf[30]; + // mbuf[0] = 'R'; + // mbuf[1] = 'e'; + // mbuf[2] = 'b'; + // mbuf[3] = 'o'; + // mbuf[4] = 'o'; + // mbuf[5] = 't'; + // mbuf[6] = 'i'; + // mbuf[7] = 'n'; + // mbuf[8] = 'g'; + // mbuf[9] = ' '; + // mbuf[10] = 'i'; + // mbuf[11] = 'n'; + // mbuf[12] = ' '; + // mbuf[13] = 'a'; + // mbuf[14] = 'p'; + // mbuf[15] = 'p'; + // mbuf[16] = '\r'; + // SendInternalUartData(&mbuf[0],17); + // mPseudoTimer = 0; + //// #ifndef _DEBUG + //// JumpToApp(); + //// #endif + // } + // break; + // } + // case SM_RX_CMD_EVENT: + // { + // if(Data == CONNECT_REQUEST_CMD) + // { + // mSMState = SM_IDLE_STATE; + // ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); //Bootloader ack + // } + // + // //Ignore any other command received... + // + // break; + // } + // case SM_ABORT_UPDATE: + // { + // break; + // } + // } + // break; //case SM_UPDATE_WAIT_STATE: + // } + // case SM_IDLE_STATE: + // { + // switch(event) + // { + // case SM_TICK_EVENT: + // { + // break; + // } + // case SM_RX_CMD_EVENT: + // { + // switch(Data) + // { + // case START_UPDATE_REQUEST_CMD: + // { + // mSMState = SM_WAIT_FOR_UNLOCK_STATE; + // ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); //Bootloader ack + // break; + // } + // case HEARTBEAT_REQUEST_CMD: + // { + // ProtocolSendCmd(HEARTBEAT_CMD,0,0); + // break; + // } + // case END_UPDATE_REQUEST_CMD: + // { + // ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); //Bootloader ack + // SoftReset(); //simply reset cpu. + // break; + // } + // case FLASH_API_VER_REQUEST_CMD: + // { + // char Version; + // Version = 0x01; + // ProtocolSendCmd(FLASH_API_VER_CMD,&Version,1); + // break; + // } + // case SCRUB_FLASH_REQUEST_CMD: + // { + // //TODO + // break; + // } + // } + // break; + // } + // case SM_ABORT_UPDATE: + // { + // ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); //Bootloader ack + // SoftReset(); + // break; + // } + // } + // break; //case SM_IDLE_STATE: + // } + // case SM_WAIT_FOR_UNLOCK_STATE: + // { + // switch(event) + // { + // case SM_TICK_EVENT: + // { + // break; + // } + // case SM_RX_CMD_EVENT: + // { + // if(Data == BOOTLOADER_UNLOCK_REQUEST_CMD) + // { + // if(RxDataBuffer[0] == BOOTLOADER_UNLOCK_CODE) + // { + // ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_FLASH_ERASE); //Inform PTE that flash is being erased + // + // // #ifndef _DEBUG //don't touch FLASH in debug mode... + // //Erase FLASH + // if(FlashErase() != FLASH_STATUS_OK) + // { + // ProtocolSendAck(PROTOCOL_NACK,RET_PROTOCOL_ERR_ERASE_FLASH_FAILED); //Acknowledge... + // mSMState = SM_IDLE_STATE; + // break; + // } + // // #endif + // + // mSMState = SM_WAIT_FOR_NEXT_RECORD; + // ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); + // } + // else//Invalid unlock code... return to IDLE... + // { + // mSMState = SM_IDLE_STATE; + // ProtocolSendAck(PROTOCOL_NACK,RET_PROTOCOL_ERR_INVALID_UNLOCK_CODE); + // } + // } + // else//If another command than UNLOCK is received... return to IDLE + // { + // mSMState = SM_IDLE_STATE; + // ProtocolSendAck(PROTOCOL_NACK,RET_PROTOCOL_ERR_UNLOCK_EXPECTED); + // + // } + // + // break; //case SM_RX_CMD_EVENT + // } + // case SM_ABORT_UPDATE: + // { + // break; + // } + // } + // break; //case SM_WAIT_FOR_UNLOCK_STATE: + // } + // case SM_WAIT_FOR_NEXT_RECORD: + // { + // switch(event) + // { + // case SM_TICK_EVENT: + // { + // break; + // } + // case SM_RX_CMD_EVENT: + // { + // switch(Data) + // { + // case SEND_RECORD_REQUEST_CMD: + // { + // //TODO: Address check... + // ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_FLASH_WRITE); + // + //// unsigned int SectorStartAddress; + //// unsigned short SectorSize; + //// unsigned int *RecordDataPtr; + //// unsigned int data; + //// + //// SectorStartAddress = *(unsigned int*)(&RxDataBuffer[0]); + //// SectorSize = *(unsigned short*)(&RxDataBuffer[4]); + //// RecordDataPtr = (unsigned int*)&RxDataBuffer[8]; + //// data = *RecordDataPtr; + // + // // unsigned int test = KVA_TO_PA(APPLICATION_START_ADDRESS); + // + // if(CurrentDataSector.SectorStartAddress < KVA_TO_PA(APPLICATION_FLASH_START_ADDRESS)) + // { + // ProtocolSendAck(PROTOCOL_NACK,RET_PROTOCOL_ERR_INVALID_ADDRESS); + // break; + // } + // else if(FlashProgramData((void*)(CurrentDataSector.SectorStartAddress), CurrentDataSector.SectorData , CurrentDataSector.SectorSize) != FLASH_STATUS_OK) + // { + // ProtocolSendAck(PROTOCOL_NACK,RET_PROTOCOL_ERR_WRITE_FLASH_FAILED); + // break; + // } + // + // + // ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); + // + // + // break; + // } + // case END_UPDATE_REQUEST_CMD: + // { + // ProtocolSendAck(PROTOCOL_ACK,RET_PROTOCOL_OK); + // + // #ifndef _DEBUG + // JumpToApp(); + // #else + // mSMState = SM_IDLE_STATE; + // #endif + // break; + // } + // + // } + // + // break; //case SM_RX_CMD_EVENT: + // } + // case SM_ABORT_UPDATE: + // { + // break; + // } + // } + // break; //case SM_WAIT_FOR_NEXT_RECORD: + // } + // } + //} + + void JumpToApp() + { + // CloseInternalUart(); + char mbuf[30]; + mbuf[0] = 'R'; + mbuf[1] = 'e'; + mbuf[2] = 'b'; + mbuf[3] = 'o'; + mbuf[4] = 'o'; + mbuf[5] = 't'; + mbuf[6] = 'i'; + mbuf[7] = 'n'; + mbuf[8] = 'g'; + mbuf[9] = ' '; + mbuf[10] = 'i'; + mbuf[11] = 'n'; + mbuf[12] = ' '; + mbuf[13] = 'a'; + mbuf[14] = 'p'; + mbuf[15] = 'p'; + mbuf[16] = '\r'; + SendInternalUartData(&mbuf[0],17); + void (*fptr)(void); + fptr = (void (*)(void))APPLICATION_START_ADDRESS; + fptr(); + } + + void BootloaderSMSetSPIFlashDetected(int Detected) { - Data = (CurAddress >> 16); - sprintf(Buf, "0x%.4X",Data); - SendInternalUartData(Buf,strlen(Buf)); -// ProtocolSendCmd(FLASH_DATA_CMD,Buf,strlen(Buf)); - Data = CurAddress; - sprintf(Buf, "%.4X ",Data); - SendInternalUartData(Buf,strlen(Buf)); -// ProtocolSendCmd(FLASH_DATA_CMD,Buf,strlen(Buf)); - - for(i = 0; i < 16; i++) - { - Data = *(unsigned int*)CurAddress; - if(i != 15) - sprintf(Buf, "%.4X ",Data); - else - sprintf(Buf, "%.4X \r",Data); - - SendInternalUartData(Buf,strlen(Buf)); - // ProtocolSendCmd(FLASH_DATA_CMD,Buf,strlen(Buf)); - CurAddress++; - // while(delay++ < 5000); - - delay = 0; - } - - + mIsSPIFlashDetected = Detected; } - e_FlashUpdateMode = false; - */ - -} - - -//EOf - - + void BootloaderSMReadBootloaderFlags() + { + + } + + void DownloadFlash(unsigned int StartAddress, unsigned int EndAddress) + { + /* + unsigned int CurAddress = StartAddress; + unsigned int Data; + unsigned int delay = 0; + char Buf[100]; + int i = 0; + + while(CurAddress < EndAddress) + { + Data = (CurAddress >> 16); + sprintf(Buf, "0x%.4X",Data); + SendInternalUartData(Buf,strlen(Buf)); + // ProtocolSendCmd(FLASH_DATA_CMD,Buf,strlen(Buf)); + Data = CurAddress; + sprintf(Buf, "%.4X ",Data); + SendInternalUartData(Buf,strlen(Buf)); + // ProtocolSendCmd(FLASH_DATA_CMD,Buf,strlen(Buf)); + + for(i = 0; i < 16; i++) + { + Data = *(unsigned int*)CurAddress; + if(i != 15) + sprintf(Buf, "%.4X ",Data); + else + sprintf(Buf, "%.4X \r",Data); + + SendInternalUartData(Buf,strlen(Buf)); + // ProtocolSendCmd(FLASH_DATA_CMD,Buf,strlen(Buf)); + CurAddress++; + // while(delay++ < 5000); + + delay = 0; + } + + + } + e_FlashUpdateMode = false; + + */ + + } + + + //EOf + + diff --git a/Bootloader_PIC32.X/Source/BootloaderStateMachine.h b/Bootloader_PIC32.X/Source/BootloaderStateMachine.h index 8ad0547..f2ddd79 100644 --- a/Bootloader_PIC32.X/Source/BootloaderStateMachine.h +++ b/Bootloader_PIC32.X/Source/BootloaderStateMachine.h @@ -10,10 +10,19 @@ enum eBootloaderSMStates { - SM_UPDATE_WAIT_STATE, - SM_IDLE_STATE, - SM_WAIT_FOR_UNLOCK_STATE, - SM_WAIT_FOR_NEXT_RECORD +// SM_UPDATE_WAIT_STATE, +// SM_IDLE_STATE, +// SM_WAIT_FOR_UNLOCK_STATE, +// SM_WAIT_FOR_NEXT_RECORD + + SM_STANDBY_STATE, + SM_CHECK_BOOTLOADER_FLAGS, + SM_CHECK_FIRMWARE_VALIDITY, + SM_ERASE_INTERNAL_FLASH, + SM_WRITE_DATA_TO_PROGRAM_FLASH, + SM_CHECK_PROGRAM_FLASH_VALIDITY, + SM_ERROR_STATE + }; enum eBootloaderEvents @@ -21,6 +30,7 @@ enum eBootloaderEvents SM_TICK_EVENT, SM_RX_CMD_EVENT, SM_ABORT_UPDATE + }; @@ -28,6 +38,8 @@ void BootloaderSMInit(void); void BootloaderSM( unsigned int event, unsigned int Data ); void JumpToApp(void); void DownloadFlash(unsigned int StartAddress, unsigned int EndAddress); +void BootloaderSMSetSPIFlashDetected(int Detected); +void BootloaderSMReadBootloaderFlags(); #endif diff --git a/Bootloader_PIC32.X/Source/ChaletduinoV2Board.c b/Bootloader_PIC32.X/Source/ChaletduinoV2Board.c new file mode 100644 index 0000000..c5f538e --- /dev/null +++ b/Bootloader_PIC32.X/Source/ChaletduinoV2Board.c @@ -0,0 +1,202 @@ +#include "BoardCfg.h" + +int InitBoard() +{ + HEARTBEAT_LED_1_PIN_DIR = PIN_OUTPUT; + HEARTBEAT_LED_2_PIN_DIR = PIN_OUTPUT; + + HEARTBEAT_LED_2_PIN = LED_OFF; + HEARTBEAT_LED_1_PIN = LED_ON; + + LORA_ACTIVITY_LED_PIN_DIR = PIN_OUTPUT; + LORA_ACTIVITY_LED_PIN = LED_OFF; + + // GP_DEBUG_1_PIN_DIR = PIN_OUTPUT; + // GP_DEBUG_1_PIN = 0; + // GP_DEBUG_2_PIN_DIR = PIN_OUTPUT; + // GP_DEBUG_2_PIN = 0; + + + SPI_SDI_PIN_DIR = PIN_INPUT; + SD_SPI_SS_PIN_DIR = PIN_OUTPUT; + SPI_SDO_PIN_DIR = PIN_OUTPUT; + SPI_SCK_PIN_DIR = PIN_OUTPUT; + + + //////////////// SPI FLASH ////////////////// + + FLASH_SS_PIN_DIR = PIN_OUTPUT; + FLASH_SS_PIN = 1; + + /////////////////////////// WIFI /////////////////// + //Wifi (WINC1500 module) + WIFI_SPI_SS_PIN_DIR = PIN_OUTPUT; + WIFI_SPI_SS_PIN = 1; + WIFI_IRQ_PIN_DIR = PIN_INPUT; + // WIFI_SPI_CFG_PIN_DIR = PIN_OUTPUT; + // WIFI_SPI_CFG_PIN = 0; + WIFI_CHP_EN_PIN_DIR = PIN_OUTPUT; + WIFI_CHP_EN_PIN = 0; + WIFI_CHP_RST_PIN_DIR = PIN_OUTPUT; + WIFI_CHP_RST_PIN = 0; + + //Wifi chip IRQ + IEC0bits.INT0IE = 0; + IFS0bits.INT0IF = 0; + INTCONbits.INT0EP = 0; //Falling edge + IPC0bits.INT0IP = 3; + IPC0bits.INT0IS = 0; + IEC0bits.INT0IE = 1; + + //Wifi chip SPI + SPI2CON = 0; + SPI2CONbits.MSTEN = 1; + SPI2CONbits.CKE = 1; + SPI2CONbits.SMP = 0; + SPI2CONbits.CKP = 0; + SPI2BRG = SPICalculateBRG(PERIPHERAL_FREQ, 1000000); + // SPI2BRG = SPICalculateBRG(PERIPHERAL_FREQ, 50000); + SPI2CONbits.ON = 1; + + + //////////////// INVERTER RELAY ////////////////// + //Chalet inverter power relay + POWER_RELAY_ON_PIN_DIR = PIN_OUTPUT; + POWER_RELAY_OFF_PIN_DIR = PIN_OUTPUT; + POWER_RELAY_ON_PIN = 0; + POWER_RELAY_OFF_PIN = 0; + + + //////////////// HARAKIRI RELAY ////////////////// + //Harakiri relay + HARAKIRI_RELAY_ON_PIN_DIR = PIN_OUTPUT; + HARAKIRI_RELAY_ON_PIN= 0; + + //12V presence detection input + CHALET_12V_PRESENCE_PIN_DIR = PIN_INPUT; + + + //////////////// BATTERY MONITOR ////////////////// + //Battery voltage measurement (analog input) + BATTERY_VOLTAGE_ANALOG_PIN_DIR = PIN_INPUT; + + //ADC Config + + AD1PCFG = 0xFFFF; //Sart with I/O pins configured as digital I/O + AD1PCFGbits.PCFG1 = 0; + TRISBbits.TRISB1 = PIN_INPUT; + + AD1CON1 = 0; + AD1CON2 = 0; + AD1CON3 = 0; + + AD1CHS = 0; + AD1CHSbits.CH0SA = 1; //AN1 + AD1CON3bits.ADCS = 0xF0; + AD1CON3bits.SAMC = 0x01; + AD1CON1bits.ON = 1; + AD1CON1bits.SAMP = 1; + + + //////////////// TEMPERATURE SENSOR ////////////////// + //Onboard temperature sensor (SPI) + TEMP_SENSOR_CS_PIN_DIR = PIN_OUTPUT; + TEMP_SENSOR_CS_PIN = 1; + TEMP_SENSOR_SPI_SDO_PIN_DIR = PIN_OUTPUT; + TEMP_SENSOR_SPI_SDI_PIN_DIR = PIN_INPUT; + TEMP_SENSOR_SPI_SCK_PIN_DIR = PIN_OUTPUT; + SPI3CON = 0; + SPI3CONbits.MSTEN = 1; + SPI3CONbits.CKE = 1; + SPI3CONbits.SMP = 0; + SPI3CONbits.CKP = 0; + SPI3BRG = SPICalculateBRG(PERIPHERAL_FREQ, 1000000); + SPI3CONbits.ON = 1; + + //////////////// CURRENT SENSOR ////////////////// + //Analog (Hall effect) current sensor + CURRENT_SENSOR_IN1_PIN_DIR = PIN_INPUT; //AN2 + CURRENT_SENSOR_IN2_PIN_DIR = PIN_INPUT; //AN0 + + //TODO + // AD1CHS = 0; + // AD1CHSbits.CH0SA = 1; //AN2 + // AD1CON3bits.ADCS = 0xF0; + // AD1CON3bits.SAMC = 0x01; + // AD1CON1bits.ON = 1; + // AD1CON1bits.SAMP = 1; + + + //////////////// LORA ////////////////// + LORA_MODULE_RELAY_PIN_DIR = PIN_OUTPUT; + LORA_MODULE_RELAY_PIN = 0; +// LORA_MODULE_M0_PIN_DIR = PIN_INPUT; +// LORA_MODULE_M0_PIN = 0; +// LORA_MODULE_M1_PIN_DIR = PIN_INPUT; +// LORA_MODULE_M1_PIN = 0; + LORA_MODULE_INT_PIN_DIR = PIN_INPUT; + LORA_MODULE_RX_LED_PIN_DIR = PIN_OUTPUT; + LORA_MODULE_RX_LED_PIN = LED_OFF; + LORA_MODULE_TX_LED_PIN_DIR = PIN_OUTPUT; + LORA_MODULE_TX_LED_PIN = LED_OFF; + + //////////////// LCD SCREEN ////////////////// + //LCD Screen + LCD_RS_PIN_DIR = PIN_OUTPUT; + LCD_RS_PIN = 0; + LCD_RW_PIN_DIR = PIN_OUTPUT; + LCD_RW_PIN = 0; + LCD_E_PIN_DIR = PIN_OUTPUT; + LCD_E_PIN = 0; + LCD_DB4_PIN_DIR = PIN_OUTPUT; + LCD_DB4_PIN = 0; + LCD_DB5_PIN_DIR = PIN_OUTPUT; + LCD_DB5_PIN = 0; + LCD_DB6_PIN_DIR = PIN_OUTPUT; + LCD_DB6_PIN = 0; + LCD_DB7_PIN_DIR = PIN_OUTPUT; + LCD_DB7_PIN = 0; + +// LCD_SCROLL_BTN_PIN_DIR = PIN_INPUT; + + + + + ////// MISC UNUSED STUFF /////////// + // IEC0bits.INT1IE = 0; + // IFS0bits.INT1IF = 0; + // INTCONbits.INT1EP = 1; //Rising edge + // IPC1bits.INT1IP = 2; + // IPC1bits.INT1IS = 1; + // IEC0bits.INT1IE = 1; + + + // OC3CON = 0; + // OC3R = 0; + // OC3RS = 2000; //50% PWM + // OC3CONbits.OCTSEL = 0; + // OC3CONbits.OCM = 0b110; //PWM mode, no fault protection + + //#ifdef __32MX330F064H__ + // RPD2Rbits.RPD2R = 0b1011; //RD2 peripheral selection = OC3 + //#endif + // + // T2CONbits.TON = 0; // Disable Timer + // // T2CONbits.TCS = 0; // Select internal instruction cycle clock + // T2CONbits.TGATE = 0; // Disable Gated Timer mode + // T2CONbits.TCKPS = 0b011; // Select 1:1 Prescaler + // TMR2 = 0x00; // Clear timer register + // + // + // IPC2bits.T2IP = 0x01; // Set Timer 2 Interrupt Priority Level + // IFS0bits.T2IF = 0; // Clear Timer 2 Interrupt Flag + // IEC0bits.T2IE = 0; // Disable Timer 2 interrupt + // T2CONbits.TON = 1; // Start Timer + // + // OC3CONbits.ON = 1; + + + + + return RET_OK; +} diff --git a/Bootloader_PIC32.X/Source/DigitalIO.c b/Bootloader_PIC32.X/Source/DigitalIO.c index 130f6f9..739e9bc 100644 --- a/Bootloader_PIC32.X/Source/DigitalIO.c +++ b/Bootloader_PIC32.X/Source/DigitalIO.c @@ -38,6 +38,11 @@ void InitDigitalIO(void) HEARTBEAT_LED_2_PIN = LED_OFF; HEARTBEAT_LED_1_PIN = LED_OFF; +// SD_SPI_CS_PIN_DIR = PIN_OUTPUT; +// SD_SPI_CS_PIN = 1; +// SD_SPI_SDI_PIN_DIR = PIN_INPUT; + + diff --git a/Bootloader_PIC32.X/Source/DigitalIO.h b/Bootloader_PIC32.X/Source/DigitalIO.h index 674b9be..c205d0d 100644 --- a/Bootloader_PIC32.X/Source/DigitalIO.h +++ b/Bootloader_PIC32.X/Source/DigitalIO.h @@ -40,8 +40,10 @@ #define HEARTBEAT_LED_2_PIN_DIR TRISEbits.TRISE6 #define HEARTBEAT_LED_2_PIN LATEbits.LATE6 #define SD_SPI_SDO_PIN_DIR TRISGbits.TRISG8 -#define SD_SPI_CS_PIN_DIR TRISGbits.TRISG9 -#define SD_SPI_CS_PIN LATGbits.LATG9 +#define SD_SPI_CS_PIN_DIR TRISEbits.TRISE1 +#define SD_SPI_CS_PIN LATEbits.LATE1 +//#define SD_SPI_CS_PIN_DIR TRISGbits.TRISG9 +//#define SD_SPI_CS_PIN LATGbits.LATG9 #define SD_SPI_SDI_PIN_DIR TRISGbits.TRISG7 #define SD_SPI_SCK_PIN_DIR TRISGbits.TRISG6 @@ -52,11 +54,11 @@ #define PIN_OUTPUT 0 -#define SD_SPI_SDO_PIN_DIR TRISGbits.TRISG8 -#define SD_SPI_CS_PIN_DIR TRISGbits.TRISG9 -#define SD_SPI_CS_PIN LATGbits.LATG9 -#define SD_SPI_SDI_PIN_DIR TRISGbits.TRISG7 -#define SD_SPI_SCK_PIN_DIR TRISGbits.TRISG6 +//#define SD_SPI_SDO_PIN_DIR TRISGbits.TRISG8 +//#define SD_SPI_CS_PIN_DIR TRISGbits.TRISG9 +//#define SD_SPI_CS_PIN LATGbits.LATG9 +//#define SD_SPI_SDI_PIN_DIR TRISGbits.TRISG7 +//#define SD_SPI_SCK_PIN_DIR TRISGbits.TRISG6 /* ************************************************************************** */ /* Prototypes */ diff --git a/Bootloader_PIC32.X/Source/FatFS/ff.c b/Bootloader_PIC32.X/Source/FatFS/ff.c index d29601d..e170654 100644 --- a/Bootloader_PIC32.X/Source/FatFS/ff.c +++ b/Bootloader_PIC32.X/Source/FatFS/ff.c @@ -3198,7 +3198,10 @@ BYTE check_fs ( /* 0:FAT, 1:exFAT, 2:Valid BS but not FAT, 3:Not a BS, 4:Disk er ) { fs->wflag = 0; fs->winsect = 0xFFFFFFFF; /* Invaidate window */ - if (move_window(fs, sect) != FR_OK) return 4; /* Load boot record */ + if (move_window(fs, sect) != FR_OK) + { + return 4; /* Load boot record */ + } if (ld_word(fs->win + BS_55AA) != 0xAA55) return 3; /* Check boot record signature (always placed here even if the sector size is >512) */ diff --git a/Bootloader_PIC32.X/Source/FatFS/ffconf.h b/Bootloader_PIC32.X/Source/FatFS/ffconf.h index 643a286..c7793ba 100644 --- a/Bootloader_PIC32.X/Source/FatFS/ffconf.h +++ b/Bootloader_PIC32.X/Source/FatFS/ffconf.h @@ -15,7 +15,7 @@ / and optional writing functions as well. */ -#define FF_FS_MINIMIZE 0 +#define FF_FS_MINIMIZE 3 /* This option defines minimization level to remove some basic API functions. / / 0: Basic functions are fully enabled. @@ -217,7 +217,7 @@ / System Configurations /---------------------------------------------------------------------------*/ -#define FF_FS_TINY 0 +#define FF_FS_TINY 1 /* This option switches tiny buffer configuration. (0:Normal or 1:Tiny) / At the tiny configuration, size of file object (FIL) is shrinked FF_MAX_SS bytes. / Instead of private sector buffer eliminated from the file object, common sector @@ -233,7 +233,7 @@ #define FF_FS_NORTC 1 #define FF_NORTC_MON 1 #define FF_NORTC_MDAY 1 -#define FF_NORTC_YEAR 2017 +#define FF_NORTC_YEAR 2020 /* The option FF_FS_NORTC switches timestamp functiton. If the system does not have / any RTC function or valid timestamp is not needed, set FF_FS_NORTC = 1 to disable / the timestamp function. All objects modified by FatFs will have a fixed timestamp diff --git a/Bootloader_PIC32.X/Source/FatFS/mmc_drv.c b/Bootloader_PIC32.X/Source/FatFS/mmc_drv.c index 1c823ef..207e12b 100644 --- a/Bootloader_PIC32.X/Source/FatFS/mmc_drv.c +++ b/Bootloader_PIC32.X/Source/FatFS/mmc_drv.c @@ -131,7 +131,7 @@ static void set_fast_clk(void) unsigned WasON = SPI2CONbits.ON; SPI2CONbits.ON = 0; - SPI2BRG = SPICalculateBRG(80000000,20000000); + SPI2BRG = SPICalculateBRG(80000000,/*20000000*/200000); SPI2CONbits.ON = WasON; } @@ -144,6 +144,7 @@ static void set_fast_clk(void) static BYTE xchg_spi (BYTE dat) { + // CS_LOW(); #ifndef USE_PINGUINO while( SPI2STATbits.SPITBF == 1 ) { @@ -152,12 +153,14 @@ static BYTE xchg_spi (BYTE dat) // ---------------- // sending data // ---------------- + SPI2BUF = dat; while(SPI2STATbits.SPIRBF == 0) { } + // CS_HIGH(); return (BYTE)SPI2BUF; /* Get received byte */ } diff --git a/Bootloader_PIC32.X/Source/FlashInterface.c b/Bootloader_PIC32.X/Source/FlashInterface.c index e65dff0..70e4cf6 100644 --- a/Bootloader_PIC32.X/Source/FlashInterface.c +++ b/Bootloader_PIC32.X/Source/FlashInterface.c @@ -14,6 +14,7 @@ #include "define.h" #include "FlashInterface.h" +stDataSector_t CurrentDataSector; void InitFlashInterface(void) { diff --git a/Bootloader_PIC32.X/Source/FlashInterface.h b/Bootloader_PIC32.X/Source/FlashInterface.h index b4ef76c..5abb1d5 100644 --- a/Bootloader_PIC32.X/Source/FlashInterface.h +++ b/Bootloader_PIC32.X/Source/FlashInterface.h @@ -4,19 +4,23 @@ #include "define.h" //for CPU selection -#define APPLICATION_START_ADDRESS 0x9D003000 -#define APPLICATION_FLASH_START_ADDRESS 0x9D002000 +//#define APPLICATION_START_ADDRESS 0x9D003000 +//#define APPLICATION_FLASH_START_ADDRESS 0x9D002000 + +#define APPLICATION_START_ADDRESS 0x9D005000 +#define APPLICATION_FLASH_START_ADDRESS 0x9D004000 #define FLASH_ROW_SIZE 128 #define FLASH_ROW_SIZE_IN_BYTES (4 * FLASH_ROW_SIZE) //512 #define FLASH_PAGE_SIZE (8 * FLASH_ROW_SIZE) //1024 #define FLASH_PAGE_SIZE_IN_BYTES (4 * FLASH_PAGE_SIZE) //4096 +#define MAX_SECTOR_SIZE FLASH_PAGE_SIZE_IN_BYTES //The number of pages of application program flash #ifdef USE_675F512_CPU #define FLASH_NB_APPLICATION_PAGES (0x40000 / FLASH_PAGE_SIZE_IN_BYTES) - 2 //0x40000 is the size of the flash (32MX675F512L), the 2 first pages are reserved for bootloader. (-2) #else -#define FLASH_NB_APPLICATION_PAGES (0x80000 / FLASH_PAGE_SIZE_IN_BYTES) - 2 //0x80000 is the size of the flash (32MX795F512L), the 2 first pages are reserved for bootloader. (-2) +#define FLASH_NB_APPLICATION_PAGES (0x80000 / FLASH_PAGE_SIZE_IN_BYTES) - 4 //0x80000 is the size of the flash (32MX795F512L), the 2 first pages are reserved for bootloader. (-2) #endif @@ -24,6 +28,14 @@ #define PROGRAM_FLASH_END_ADDRESS 0x1D07FFFF +typedef struct +{ + unsigned int SectorStartAddress; + unsigned short SectorSize; + unsigned int SectorData[MAX_SECTOR_SIZE]; + +}stDataSector_t; + enum eFlashOperations { FLASH_NOP_CMD = 0X0000, @@ -39,6 +51,7 @@ enum eFlashReturnValues FLASH_STATUS_ERROR }; +extern stDataSector_t CurrentDataSector; void InitFlashInterface(void); unsigned int FlashErase(void); diff --git a/Bootloader_PIC32.X/Source/FlashMapping.h b/Bootloader_PIC32.X/Source/FlashMapping.h new file mode 100644 index 0000000..8575fb0 --- /dev/null +++ b/Bootloader_PIC32.X/Source/FlashMapping.h @@ -0,0 +1,32 @@ +/* + * File: ChaletPowerRelay.h + * Author: JF + * + * Created on November 30, 2018, 7:33 PM + */ + +#ifndef FLASHMAPPING_H +#define FLASHMAPPING_H +#include "define.h" + +/* +0x180000 Firmware flags +0x180004 Nb Records +0x180008 Firmware Size +0x18000C Version code +*/ + +#define FLASH_END_ADDRESS 180000 + +#define FLASH_BTLDR_FIRMWARE_START_ADDRESS 0x180000 +#define FLASH_BTLDR_FIRMWARE_LAST_64K_SECTOR_ADD 0x1F0000 +#define FLASH_BTLDR_FLAGS_ADDRESS 0x000000 + + + +#define FLASH_BTLDR_HEADER_SIZE 24 +#define FLASH_BTLDR_FLAGS_SIZE 12 + + + +#endif /* HARAKIRIRELAY_H */ diff --git a/Bootloader_PIC32.X/Source/InternalUart.c b/Bootloader_PIC32.X/Source/InternalUart.c index 9b734b9..978918e 100644 --- a/Bootloader_PIC32.X/Source/InternalUart.c +++ b/Bootloader_PIC32.X/Source/InternalUart.c @@ -26,6 +26,7 @@ /* ************************************************************************** */ /* Includes */ #include "define.h" +#include "BoardCfg.h" #include "InternalUart.h" #include "uart.h" #include "BootloaderProtocol.h" @@ -501,6 +502,7 @@ int SendInternalUartData(char *p_pcDataBuf, int p_iDataSize) #ifdef USE_SERIAL_PORT_2 U2TXREG = *p_pcDataBuf++; while(U2STAbits.TRMT == 0); + Nop(); #endif @@ -553,7 +555,7 @@ int ReadInternalUart(void) while(U2STAbits.URXDA == 1) { byte = U2RXREG; - ProtocolRxData(byte); +// ProtocolRxData(byte); count++; } #endif diff --git a/Bootloader_PIC32.X/Source/SPI.c b/Bootloader_PIC32.X/Source/SPI.c index cb0eb2d..6f427c2 100644 --- a/Bootloader_PIC32.X/Source/SPI.c +++ b/Bootloader_PIC32.X/Source/SPI.c @@ -1,17 +1,20 @@ #include "define.h" -#include "DigitalIO.h" +//#include "BoardCfg.h" #include "SPI.h" -unsigned char SPITransaction(unsigned char OutBuf) +unsigned char SPITransaction(unsigned char OutBuf, unsigned char BaudRate) { - WIFI_SPI_SS_PIN = 0; + + SPI2BRG = BaudRate; + + // WIFI_SPI_SS_PIN = 0; SPI2BUF = OutBuf; while(!SPI2STATbits.SPIRBF); OutBuf = SPI2BUF; - WIFI_SPI_SS_PIN = 1; + // WIFI_SPI_SS_PIN = 1; return OutBuf; } diff --git a/Bootloader_PIC32.X/Source/SPI.h b/Bootloader_PIC32.X/Source/SPI.h index 263cb24..b464442 100644 --- a/Bootloader_PIC32.X/Source/SPI.h +++ b/Bootloader_PIC32.X/Source/SPI.h @@ -8,7 +8,7 @@ #ifndef SPI_H #define SPI_H -unsigned char SPITransaction(unsigned char OutBuf); +unsigned char SPITransaction(unsigned char OutBuf, unsigned char Baudrate); #endif /* SPI_H */ diff --git a/Bootloader_PIC32.X/Source/SPI_Flash.c b/Bootloader_PIC32.X/Source/SPI_Flash.c new file mode 100644 index 0000000..edceaf0 --- /dev/null +++ b/Bootloader_PIC32.X/Source/SPI_Flash.c @@ -0,0 +1,448 @@ +#include "SPI_Flash.h" +#include "SPI.h" +#include "BoardCfg.h" + +unsigned char mSPIFlashBaudrate; +unsigned char mSPIFlashHighSpeedBaudrate; +unsigned char mFlashSectorBuffer[SPI_FLASH_SECTOR_SIZE]; + +int InitSPIFlash() +{ + FLASH_SS_PIN = 1; + + mSPIFlashBaudrate = SPICalculateBRG(PERIPHERAL_FREQ, 25000000); +// mSPIFlashHighSpeedBaudrate = SPICalculateBRG(PERIPHERAL_FREQ, 50000000); + mSPIFlashHighSpeedBaudrate = SPICalculateBRG(PERIPHERAL_FREQ, 35000000); +} + +int SPIFlashCheckAndConfigure() +{ + + if(SPIFlashCheckChipID() == RET_OK) + { + SPIFlashWriteEnable(); + + FLASH_SS_PIN = 0; + SPITransaction(SPI_FLASH_WRITE_STATUS_REG,mSPIFlashHighSpeedBaudrate); + SPITransaction(0x00,mSPIFlashHighSpeedBaudrate); //Configure for write enable the whole memory + FLASH_SS_PIN = 1; + + SPIFlashReadStatusReg(1); + + // printf("SPI Flash configured\n"); + char mbuf[30]; + mbuf[0] = 'S'; + mbuf[1] = 'P'; + mbuf[2] = 'I'; + mbuf[3] = ' '; + mbuf[4] = 'F'; + mbuf[5] = 'l'; + mbuf[6] = 'a'; + mbuf[7] = 's'; + mbuf[8] = 'h'; + mbuf[9] = ' '; + mbuf[10] = 'C'; + mbuf[11] = 'o'; + mbuf[12] = 'n'; + mbuf[13] = 'f'; + mbuf[14] = 'i'; + mbuf[15] = 'g'; + mbuf[16] = 'u'; + mbuf[17] = 'r'; + mbuf[18] = 'e'; + mbuf[19] = 'd'; + mbuf[20] = '\n'; + mbuf[21] = '\r'; + SendInternalUartData(&mbuf[0],22); + + return RET_OK; + } + + // printf("ERROR: SPI Flash not detected\n"); + return RET_ERROR; + +} + +int SPIFlashWriteEnable() +{ + FLASH_SS_PIN = 0; + SPITransaction(SPI_FLASH_WRITE_ENABLE,mSPIFlashHighSpeedBaudrate); + FLASH_SS_PIN = 1; + + return RET_OK; +} + + + +unsigned char SPIFlashReadStatusReg(int print) +{ + unsigned char result; + + FLASH_SS_PIN = 0; + result = SPITransaction(SPI_FLASH_READ_STATUS_REG,mSPIFlashBaudrate); + result = SPITransaction(0x00,mSPIFlashBaudrate); //get data + FLASH_SS_PIN = 1; + + if(print) + { + // printf("Flash status register : 0x%x\n",result); + } + + return result; + +} + +int SPIFlashCheckBusy() +{ + unsigned char status = SPIFlashReadStatusReg(0); + if((status & SPI_FLASH_BUSY_MASK) != 0) + { + return 1; + } + + return 0; +} + + +int SPIFlashCheckChipID() +{ + unsigned char VendorID, ChipID; + + FLASH_SS_PIN = 0; + SPITransaction(SPI_FLASH_READ_ID,mSPIFlashBaudrate); + SPITransaction(0x00,mSPIFlashBaudrate); + SPITransaction(0x00,mSPIFlashBaudrate); + SPITransaction(0x00,mSPIFlashBaudrate); //Vendor address + VendorID = SPITransaction(0x00,mSPIFlashBaudrate); //Vendor ID, should be 0xBF + ChipID = SPITransaction(0x00,mSPIFlashBaudrate); //Device ID, should be 0x41 + FLASH_SS_PIN = 1; + + if(VendorID != SPI_FLASH_VENDOR_ID || ChipID != SPI_FLASH_CHIP_ID) + { + // printf("SPI Flash detection FAILED. Vendor: 0x%x, Chip ID: 0x%x\n",VendorID,ChipID); + return RET_ERROR; + } + // printf("SPI Flash detected. Vendor: 0x%x, Chip ID: 0x%x\n",VendorID,ChipID); + return RET_OK; + +} + + +int SPIFlashReadBuffer(unsigned char *Buf, int Size, int StartAddress) +{ + if(StartAddress + Size - 1 > SPI_FLASH_MAX_ADDRESS) + { + return RET_ERROR; + } + + FLASH_SS_PIN = 0; + SPITransaction(SPI_FLASH_HI_SPEED_READ,mSPIFlashBaudrate); + SPITransaction(((StartAddress & 0xFF0000) >> 16),mSPIFlashHighSpeedBaudrate); + SPITransaction(((StartAddress & 0x00FF00) >> 8),mSPIFlashHighSpeedBaudrate); + SPITransaction((StartAddress & 0x0000FF),mSPIFlashHighSpeedBaudrate); + SPITransaction((0x00),mSPIFlashHighSpeedBaudrate); //Chip requires a dummy read in high speed + + int i; + for(i = 0; i < Size; i++) + { + unsigned char tmp; + tmp =SPITransaction(0xDE,mSPIFlashHighSpeedBaudrate); + *Buf++ = tmp; + // *Buf++ = SPITransaction(0xDE,mSPIFlashHighSpeedBaudrate); + } + + FLASH_SS_PIN = 1; + + return RET_OK; +} + +int SPIFlashEraseSector(int SectorAddress) +{ + if(SectorAddress % SPI_FLASH_SECTOR_SIZE != 0) //Sectors are aligned on 0x1000 + { + return RET_ERROR; + } + + SPIFlashWriteEnable(); + + FLASH_SS_PIN = 0; + SPITransaction(SPI_FLASH_4KB_SECOTR_ERASE,mSPIFlashHighSpeedBaudrate); + SPITransaction(((SectorAddress & 0xFF0000) >> 16),mSPIFlashHighSpeedBaudrate); + SPITransaction(((SectorAddress & 0x00FF00) >> 8),mSPIFlashHighSpeedBaudrate); + SPITransaction((SectorAddress & 0x0000FF),mSPIFlashHighSpeedBaudrate); + FLASH_SS_PIN = 1; + + SectorAddress++; + + while( SPIFlashCheckBusy() == true); + //SPIFlashWriteEnable(); + + return RET_OK; +} + +int SPIFlashErase64KSector(int SectorAddress, int Blocking) +{ + if(SectorAddress % SPI_FLASH_64K_SECTOR_SIZE != 0) //Sectors are aligned on 0x1000 + { + return RET_ERROR; + } + if((SectorAddress + SPI_FLASH_64K_SECTOR_SIZE - 1) > SPI_FLASH_MAX_ADDRESS) + { + return RET_ERROR; + } + + SPIFlashWriteEnable(); + + FLASH_SS_PIN = 0; + SPITransaction(SPI_FLASH_64KB_BLOCK_ERASE,mSPIFlashHighSpeedBaudrate); + SPITransaction(((SectorAddress & 0xFF0000) >> 16),mSPIFlashHighSpeedBaudrate); + SPITransaction(((SectorAddress & 0x00FF00) >> 8),mSPIFlashHighSpeedBaudrate); + SPITransaction((SectorAddress & 0x0000FF),mSPIFlashHighSpeedBaudrate); + FLASH_SS_PIN = 1; + + if(Blocking != 0) + { + while( SPIFlashCheckBusy() == true); + // SPIFlashWriteEnable(); + } + + return RET_OK; +} + + + +int SPIFlashWriteSectorWorkingBuffer(int SectorAddress, int Erase) +{ + if(SectorAddress % SPI_FLASH_SECTOR_SIZE != 0) //Sectors are aligned on 0x1000 + { + return RET_ERROR; + } + + if(Erase == 1) + { + SPIFlashEraseSector(SectorAddress); + } + + unsigned char *DataPtr = &mFlashSectorBuffer[0]; + int j; + for(j = 0; j < SPI_FLASH_SECTOR_SIZE; j++) + { + unsigned char curbyte; + curbyte = *DataPtr; + SPIFlashWriteEnable(); + + + + char Add1, Add2, Add3; + Add1 = (unsigned char)((SectorAddress & 0xFF0000) >> 16); + Add2 = ((unsigned char)((SectorAddress & 0x00FF00) >> 8)); + Add3 = ((unsigned char)(SectorAddress & 0x0000FF)); + + int t; + t = 0; + + FLASH_SS_PIN = 0; + SPITransaction(SPI_FLASH_BYTE_PROGRAM,mSPIFlashHighSpeedBaudrate); +// SPITransaction((unsigned char)((SectorAddress & 0xFF0000) >> 16),mSPIFlashHighSpeedBaudrate); +// SPITransaction((unsigned char)((SectorAddress & 0x00FF00) >> 8),mSPIFlashHighSpeedBaudrate); +// SPITransaction((unsigned char)(SectorAddress & 0x0000FF),mSPIFlashHighSpeedBaudrate); + SPITransaction(Add1,mSPIFlashHighSpeedBaudrate); + SPITransaction(Add2,mSPIFlashHighSpeedBaudrate); + SPITransaction(Add3,mSPIFlashHighSpeedBaudrate); + + SPITransaction(curbyte,mSPIFlashHighSpeedBaudrate); +// SPITransaction(*DataPtr,mSPIFlashHighSpeedBaudrate); + FLASH_SS_PIN = 1; + + DataPtr++; + SectorAddress++; + + while( SPIFlashCheckBusy() == true); + } + + return RET_OK; +} + +int SPIFlashWriteByte(unsigned int ByteAddress, char byte, int blocking) +{ + if(ByteAddress > SPI_FLASH_MAX_ADDRESS) + { + return RET_ERROR; + } + + SPIFlashWriteEnable(); + + FLASH_SS_PIN = 0; + SPITransaction(SPI_FLASH_BYTE_PROGRAM,mSPIFlashHighSpeedBaudrate); + SPITransaction(((ByteAddress & 0xFF0000) >> 16),mSPIFlashHighSpeedBaudrate); + SPITransaction(((ByteAddress & 0x00FF00) >> 8),mSPIFlashHighSpeedBaudrate); + SPITransaction((ByteAddress & 0x0000FF),mSPIFlashHighSpeedBaudrate); + SPITransaction(byte,mSPIFlashHighSpeedBaudrate); + FLASH_SS_PIN = 1; + + if(blocking) + { + while( SPIFlashCheckBusy() == true); + } + + + return RET_OK; + +} + + + +//int SPIFlashEraseSectorForWrite(unsigned char StartAddress, int Size) +//{ +// //First, let's determine which sector to erase. +// +// int NbSectors = 1; +// int FirstSector = StartAddress / 0x1000; +// int LastSector = (StartAddress + Size) / 0x1000; +// +// if(LastSector > FirstSector) +// { +// NbSectors = LastSector - FirstSector; +// } +// +// int i; +// for(i = FirstSector; i < LastSector; i++ ) //Erase each sector one by one +// { +// +// } +// +//} + +//int SPIFlashWriteBuffer(unsigned char *Buf, int Size, int StartAddress) +//{ +// //First, we need to determine if the data overlaps or uses more than one sector +// //First, let's determine which sector to erase. +// int EndAddress = StartAddress + Size - 1; +// if(EndAddress > SPI_FLASH_MAX_ADDRESS) +// { +// return RET_ERROR; +// } +// +// int NbSectors = 1; +// int FirstSector = StartAddress / SPI_FLASH_SECTOR_SIZE; +// int LastSector = EndAddress / SPI_FLASH_SECTOR_SIZE; +// +// if(LastSector > FirstSector) +// { +// NbSectors = LastSector - FirstSector + 1; +// } +// +// int i; +// int FlashAddress = StartAddress; +// int CurSector = FirstSector; +// for(i = 0; i < NbSectors; i++ ) //Read, erase and write each sector one by one +// { +// //first we need to backup the data outside our buffer. +// //TODO: optimize +// int SectorStartAddress = CurSector++ * SPI_FLASH_SECTOR_SIZE; +// int SectorEndAddress = SectorStartAddress + SPI_FLASH_SECTOR_SIZE - 1; +// if(SectorEndAddress > EndAddress) +// { +// SectorEndAddress = EndAddress; +// } +// +// SPIFlashReadBuffer(mFlashSectorBuffer,SPI_FLASH_SECTOR_SIZE,SectorStartAddress); //Get local RAM buffer of the sector +// +// //Update the data to write. +// int RAMAddress = FlashAddress - SectorStartAddress; +// int RAMSectorSize = SectorEndAddress - FlashAddress + 1; +// FlashAddress += RAMSectorSize; +// +// unsigned char* RAMPtr = &mFlashSectorBuffer[RAMAddress]; +// int j; +// for(j = 0; j < RAMSectorSize; j++) +// { +// *RAMPtr++ = *Buf++; +// } +// +// int SectorAddress = SectorStartAddress; +// RAMPtr = mFlashSectorBuffer; +// +// for(j = 0; j < SPI_FLASH_SECTOR_SIZE; j++) +// { +// SPIFlashWriteEnable(); +// +// FLASH_SS_PIN = 0; +// SPITransaction(SPI_FLASH_BYTE_PROGRAM,mSPIFlashHighSpeedBaudrate); +// SPITransaction(((SectorAddress & 0xFF0000) >> 16),mSPIFlashBaudrate); +// SPITransaction(((SectorAddress & 0x00FF00) >> 8),mSPIFlashBaudrate); +// SPITransaction((SectorAddress & 0x0000FF),mSPIFlashBaudrate); +// SPITransaction(*RAMPtr++,mSPIFlashBaudrate); +// FLASH_SS_PIN = 1; +// +// SectorAddress++; +// +// while( SPIFlashCheckBusy() == true); +// } +// } +//} + +int SPIFlashWriteBuffer(unsigned char *Buf, int Size, int StartAddress) +{ + int CurDataFlashAddress, DataFlashEndAddress; + char *DataBufPtr, *WorkPagePtr; + int WriteFinished; + + + //Init stuff + WriteFinished = 0; + DataFlashEndAddress = StartAddress + Size; //Start + size means the data at "DataFlashEndAddress" should not be written. + CurDataFlashAddress = StartAddress; + DataBufPtr = Buf; + + if(DataFlashEndAddress > SPI_FLASH_MAX_ADDRESS) + { + return RET_ERROR; + } + + while(WriteFinished == 0) + { + //Determine the current sector start address. + int SectorStartAddress; + SectorStartAddress = ((CurDataFlashAddress / SPI_FLASH_SECTOR_SIZE) * SPI_FLASH_SECTOR_SIZE); //Weird but it works + + //Load the sector in RAM working buffer + if(SPIFlashReadBuffer(mFlashSectorBuffer,SPI_FLASH_SECTOR_SIZE,SectorStartAddress) != RET_OK) + { + return RET_ERROR; + } + + //Set the working buffer pointer to the right value. + WorkPagePtr = &mFlashSectorBuffer[CurDataFlashAddress - SectorStartAddress]; + + //Modify the working buffer with data to write. + int SectorFinished = 0; + while(SectorFinished == 0) + { + *WorkPagePtr++ = *DataBufPtr++; + CurDataFlashAddress++; + + //Are we at the end of the buffer to write? + if(CurDataFlashAddress == DataFlashEndAddress) + { + SectorFinished = 1; + WriteFinished = 1; +// SPIFlashEraseSector(SectorStartAddress); + SPIFlashWriteSectorWorkingBuffer(SectorStartAddress,1); + + break; + } + else if(CurDataFlashAddress % SPI_FLASH_SECTOR_SIZE == 0) //Are we at the beginning of the next sector? + { + SectorFinished = 1; +// SPIFlashEraseSector(SectorStartAddress); + SPIFlashWriteSectorWorkingBuffer(SectorStartAddress,1); + + break; + } + } + + } + + return 1; +} \ No newline at end of file diff --git a/Bootloader_PIC32.X/Source/SPI_Flash.h b/Bootloader_PIC32.X/Source/SPI_Flash.h new file mode 100644 index 0000000..adea425 --- /dev/null +++ b/Bootloader_PIC32.X/Source/SPI_Flash.h @@ -0,0 +1,48 @@ +#ifndef SPI_FLASH_H /* Guard against multiple inclusion */ +#define SPI_FLASH_H + +#define SPI_FLASH_READ 0x03 +#define SPI_FLASH_HI_SPEED_READ 0x0b +#define SPI_FLASH_4KB_SECOTR_ERASE 0x20 +#define SPI_FLASH_32KB_BLOCK_ERASE 0x52 +#define SPI_FLASH_64KB_BLOCK_ERASE 0xd8 +#define SPI_FLASH_CHIP_ERASE 0x60 +#define SPI_FLASH_BYTE_PROGRAM 0x02 +#define SPI_FLASH_AAI_WORD_PROGRAM 0xad +#define SPI_FLASH_READ_STATUS_REG 0x05 +#define SPI_FLASH_ENABLE_WRITE_STATUS_REG 0x50 +#define SPI_FLASH_WRITE_STATUS_REG 0x01 +#define SPI_FLASH_WRITE_ENABLE 0x06 +#define SPI_FLASH_WRITE_DISABLE 0x04 +#define SPI_FLASH_READ_ID 0x90 +#define SPI_FLASH_READ_JEDEC_ID 0x9f +#define SPI_FLASH_ENABLE_SO_BUSY 0x70 +#define SPI_FLASH_DISABLE_SO_BUSY 0x80 + + +#define SPI_FLASH_BUSY_MASK 0x01 + +#define SPI_FLASH_VENDOR_ID 0xBF +#define SPI_FLASH_CHIP_ID 0x41 +#define SPI_FLASH_MAX_ADDRESS 0x1FFFFF +#define SPI_FLASH_SECTOR_SIZE 0x1000 +#define SPI_FLASH_64K_SECTOR_SIZE 0x10000 +#define SPI_NB_SECTORS 0x1FF //511 sectors = SPI_FLASH_MAX_ADDRESS / SPI_FLASH_SECTOR_SIZE + + +int InitSPIFlash(); +int SPIFlashCheckChipID(); +unsigned char SPIFlashReadStatusReg(int print); +int SPIFlashCheckAndConfigure(); +int SPIFlashReadBuffer(unsigned char *Buf, int Size, int StartAddress); +int SPIFlashCheckBusy(); +int SPIFlashWriteEnable(); +int SPIFlashEraseSector(int SectorAddress); +int SPIFlashErase64KSector(int SectorAddress, int Blocking); +int SPIFlashWriteSectorWorkingBuffer(int SectorAddress, int Erase); +int SPIFlashWriteBuffer(unsigned char *Buf, int Size, int StartAddress); +int SPIFlashWriteByte(unsigned int ByteAddress, char byte, int blocking); + + +#endif /* SPI_FLASH_H */ + diff --git a/Bootloader_PIC32.X/Source/checksum.h b/Bootloader_PIC32.X/Source/checksum.h new file mode 100644 index 0000000..37d4110 --- /dev/null +++ b/Bootloader_PIC32.X/Source/checksum.h @@ -0,0 +1,94 @@ +/* + * Library: libcrc + * File: include/checksum.h + * Author: Lammert Bies + * + * This file is licensed under the MIT License as stated below + * + * Copyright (c) 1999-2016 Lammert Bies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Description + * ----------- + * The headerfile include/checksum.h contains the definitions and prototypes + * for routines that can be used to calculate several kinds of checksums. + */ + +#ifndef DEF_LIBCRC_CHECKSUM_H +#define DEF_LIBCRC_CHECKSUM_H + +#include + +/* + * #define CRC_POLY_xxxx + * + * The constants of the form CRC_POLY_xxxx define the polynomials for some well + * known CRC calculations. + */ + +#define CRC_POLY_16 0xA001 +#define CRC_POLY_32 0xEDB88320L +#define CRC_POLY_CCITT 0x1021 +#define CRC_POLY_DNP 0xA6BC +#define CRC_POLY_KERMIT 0x8408 +#define CRC_POLY_SICK 0x8005 + +/* + * #define CRC_START_xxxx + * + * The constants of the form CRC_START_xxxx define the values that are used for + * initialization of a CRC value for common used calculation methods. + */ + +#define CRC_START_8 0x00 +#define CRC_START_16 0x0000 +#define CRC_START_MODBUS 0xFFFF +#define CRC_START_XMODEM 0x0000 +#define CRC_START_CCITT_1D0F 0x1D0F +#define CRC_START_CCITT_FFFF 0xFFFF +#define CRC_START_KERMIT 0x0000 +#define CRC_START_SICK 0x0000 +#define CRC_START_DNP 0x0000 +#define CRC_START_32 0xFFFFFFFFL + +/* + * Prototype list of global functions + */ + +unsigned char * checksum_NMEA( const unsigned char *input_str, unsigned char *result ); +uint8_t crc_8( const unsigned char *input_str, size_t num_bytes ); +uint16_t crc_16( const unsigned char *input_str, size_t num_bytes ); +uint32_t crc_32( const unsigned char *input_str, size_t num_bytes ); +uint16_t crc_ccitt_1d0f( const unsigned char *input_str, size_t num_bytes ); +uint16_t crc_ccitt_ffff( const unsigned char *input_str, size_t num_bytes ); +uint16_t crc_dnp( const unsigned char *input_str, size_t num_bytes ); +uint16_t crc_kermit( const unsigned char *input_str, size_t num_bytes ); +uint16_t crc_modbus( const unsigned char *input_str, size_t num_bytes ); +uint16_t crc_sick( const unsigned char *input_str, size_t num_bytes ); +uint16_t crc_xmodem( const unsigned char *input_str, size_t num_bytes ); +uint8_t update_crc_8( uint8_t crc, unsigned char c ); +uint16_t update_crc_16( uint16_t crc, unsigned char c ); +uint32_t update_crc_32( uint32_t crc, unsigned char c ); +uint16_t update_crc_ccitt( uint16_t crc, unsigned char c ); +uint16_t update_crc_dnp( uint16_t crc, unsigned char c ); +uint16_t update_crc_kermit( uint16_t crc, unsigned char c ); +uint16_t update_crc_sick( uint16_t crc, unsigned char c, unsigned char prev_byte ); + +#endif // DEF_LIBCRC_CHECKSUM_H diff --git a/Bootloader_PIC32.X/Source/crc32.c b/Bootloader_PIC32.X/Source/crc32.c new file mode 100644 index 0000000..3a0f007 --- /dev/null +++ b/Bootloader_PIC32.X/Source/crc32.c @@ -0,0 +1,131 @@ +/* + * Library: libcrc + * File: src/crc32.c + * Author: Lammert Bies + * + * This file is licensed under the MIT License as stated below + * + * Copyright (c) 1999-2016 Lammert Bies + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Description + * ----------- + * The source file src/crc32.c contains the routines which are needed to + * calculate a 32 bit CRC value of a sequence of bytes. + */ + +#include +#include +#include "checksum.h" + +static void init_crc32_tab( void ); + +static bool crc_tab32_init = false; +static uint32_t crc_tab32[256]; + +/* + * uint32_t crc_32( const unsigned char *input_str, size_t num_bytes ); + * + * The function crc_32() calculates in one pass the common 32 bit CRC value for + * a byte string that is passed to the function together with a parameter + * indicating the length. + */ + +uint32_t crc_32( const unsigned char *input_str, size_t num_bytes ) { + + uint32_t crc; + uint32_t tmp; + uint32_t long_c; + const unsigned char *ptr; + size_t a; + + if ( ! crc_tab32_init ) init_crc32_tab(); + + crc = CRC_START_32; + ptr = input_str; + + if ( ptr != NULL ) for (a=0; a> 8) ^ crc_tab32[ tmp & 0xff ]; + + ptr++; + } + + crc ^= 0xffffffffL; + + return crc & 0xffffffffL; + +} /* crc_32 */ + +/* + * uint32_t update_crc_32( uint32_t crc, unsigned char c ); + * + * The function update_crc_32() calculates a new CRC-32 value based on the + * previous value of the CRC and the next byte of the data to be checked. + */ + +uint32_t update_crc_32( uint32_t crc, unsigned char c ) { + + uint32_t tmp; + uint32_t long_c; + + long_c = 0x000000ffL & (uint32_t) c; + + if ( ! crc_tab32_init ) init_crc32_tab(); + + tmp = crc ^ long_c; + crc = (crc >> 8) ^ crc_tab32[ tmp & 0xff ]; + + return crc & 0xffffffffL;; + +} /* update_crc_32 */ + +/* + * static void init_crc32_tab( void ); + * + * For optimal speed, the CRC32 calculation uses a table with pre-calculated + * bit patterns which are used in the XOR operations in the program. This table + * is generated once, the first time the CRC update routine is called. + */ + +static void init_crc32_tab( void ) { + + uint32_t i; + uint32_t j; + uint32_t crc; + + for (i=0; i<256; i++) { + + crc = i; + + for (j=0; j<8; j++) { + + if ( crc & 0x00000001L ) crc = ( crc >> 1 ) ^ CRC_POLY_32; + else crc = crc >> 1; + } + + crc_tab32[i] = crc; + } + + crc_tab32_init = true; + +} /* init_crc32_tab */ diff --git a/Bootloader_PIC32.X/Source/define.h b/Bootloader_PIC32.X/Source/define.h index 129b172..ffe55ec 100644 --- a/Bootloader_PIC32.X/Source/define.h +++ b/Bootloader_PIC32.X/Source/define.h @@ -26,8 +26,8 @@ /* ************************************************************************** */ /* Defines */ -#define SYS_FREQ (77824000L) -#define PERIPHERAL_FREQ (77824000L) +//#define SYS_FREQ (77824000L) +//#define PERIPHERAL_FREQ (77824000L) #define PIN_INPUT 1 #define PIN_OUTPUT 0 #define false 0 @@ -36,8 +36,10 @@ #define LSB8(x) (x & 0xFF) #define USE_BLOCKING_PRINTF #define NO_EXTERNAL_UART +#define LED_ON 0 +#define LED_OFF 1 -#define USE_675F512_CPU //For prototype board, 795F512 CPUs were backordered. +//#define USE_675F512_CPU //For prototype board, 795F512 CPUs were backordered. /* ************************************************************************** */ /* Type definitions */ diff --git a/Bootloader_PIC32.X/Source/main.c b/Bootloader_PIC32.X/Source/main.c index f52dded..130c81b 100644 --- a/Bootloader_PIC32.X/Source/main.c +++ b/Bootloader_PIC32.X/Source/main.c @@ -10,11 +10,15 @@ *******************************************************************************/ #include "define.h" +#include "BoardCfg.h" #include "InternalUart.h" #include "FlashInterface.h" #include "BootloaderProtocol.h" #include "BootloaderStateMachine.h" +#include "BootloaderInterface.h" #include "DigitalIO.h" +#include "SPI_Flash.h" +//#include "FatFS/ff.h" //#pragma config FMIIEN = OFF, FSRSSEL = PRIORITY_7, FETHIO = ON //#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF @@ -30,16 +34,27 @@ //#pragma config ICESEL = ICS_PGx1, BWP = ON -#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF, WDTPS = PS128 +//#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF, WDTPS = PS128 +//#pragma config POSCMOD = EC, FNOSC = PRIPLL, FPBDIV = DIV_1 +//#pragma config POSCMOD = XT, FNOSC = PRIPLL, FPBDIV = DIV_1 +//#pragma config ICESEL = ICS_PGx2, BWP = OFF + +#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF, WDTPS = PS4096 //Watchdog timeout = 4,096s #pragma config POSCMOD = EC, FNOSC = PRIPLL, FPBDIV = DIV_1 //#pragma config POSCMOD = XT, FNOSC = PRIPLL, FPBDIV = DIV_1 #pragma config ICESEL = ICS_PGx2, BWP = OFF +#pragma config FSOSCEN = OFF -//void _general_exception_handler(void); + +void _general_exception_handler(void); int main(void) { - +// FATFS fs; +// FRESULT fr; +// FIL fil; + char RdBuf[256]; + unsigned int rd,wr; @@ -48,19 +63,45 @@ int main(void) // INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);// configure for multi-vectored mode interrupts AD1PCFG = 0xFFFF; //Sart with I/O pins configured as digital I/O + InitBoard(); InternalUartInit(); InitFlashInterface(); - ProtocolInit(); +// ProtocolInit(); BootloaderSMInit(); InitDigitalIO(); - OpenInternalPort(0,0,115200,INT_UART_ONE_STOP_BIT,INT_UART_NO_PARITY); + OpenInternalPort(0,0,9600,INT_UART_ONE_STOP_BIT,INT_UART_NO_PARITY); + + InitSPIFlash(); + + if(SPIFlashCheckAndConfigure() == RET_OK) + { + BootloaderSMSetSPIFlashDetected(RET_OK); + } + else + { + BootloaderSMSetSPIFlashDetected(RET_ERROR); + } + + +// fr = f_mount(&fs,"",1); +// fr = f_open(&fil,"JF.txt",FA_READ | FA_WRITE | FA_OPEN_ALWAYS); +// if(fr == FR_OK) +// { +// fr = f_read(&fil,RdBuf,100,&rd); +// fr = f_write(&fil,RdBuf,rd,&wr); +// } +// else +// { +// int toto = 0xDEADBEEF; +// } +// f_close(&fil); - ProtocolSendCmd(BOOTLOADER_READY_CMD,0,0); +// ProtocolSendCmd(BOOTLOADER_READY_CMD,0,0); HEARTBEAT_LED_1_PIN = 0; - char mbuf[30]; + char mbuf[30]; mbuf[0] = 'B'; mbuf[1] = 'o'; mbuf[2] = 'o'; @@ -77,8 +118,11 @@ int main(void) mbuf[13] = '.'; mbuf[14] = '0'; mbuf[15] = '1'; - mbuf[16] = '\r'; - SendInternalUartData(&mbuf[0],17); + mbuf[16] = '\n'; + mbuf[17] = '\r'; + SendInternalUartData(&mbuf[0],18); + + int i,j; i =0; @@ -93,17 +137,17 @@ int main(void) // could flash a led HEARTBEAT_LED_2_PIN = !HEARTBEAT_LED_2_PIN; } - - if(e_CommandPending) - { - //Valid command received. - ProtocolExecCmd(); - e_CommandPending = false; - } - +// +// if(e_CommandPending) +// { +// //Valid command received. +// ProtocolExecCmd(); +// e_CommandPending = false; +// } +// BootloaderSM(SM_TICK_EVENT,SM_NULL_DATA); - if(++i >= 100000) + if(++i >= 30000) { // if(++j >= 10000000) { @@ -148,7 +192,9 @@ void _general_exception_handler(void) mbuf[18] = '\r'; SendInternalUartData(&mbuf[0],19); - SoftReset(); + SoftReset(); + + while(1); } diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderProtocol.o b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderProtocol.o deleted file mode 100644 index debfcee..0000000 Binary files a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderProtocol.o and /dev/null differ diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderProtocol.o.d b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderProtocol.o.d deleted file mode 100644 index f587c1d..0000000 --- a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderProtocol.o.d +++ /dev/null @@ -1,6 +0,0 @@ -build/ChaletDuino_795/production/Source/BootloaderProtocol.o: \ - Source/BootloaderProtocol.c \ -Source/define.h \ -Source/BootloaderProtocol.h \ - Source/BootloaderStateMachine.h \ -Source/internaluart.h diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderStateMachine.o b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderStateMachine.o index 154e144..4a674b4 100644 Binary files a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderStateMachine.o and b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderStateMachine.o differ diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderStateMachine.o.d b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderStateMachine.o.d index 0fe102f..122a7ec 100644 --- a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderStateMachine.o.d +++ b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/BootloaderStateMachine.o.d @@ -4,4 +4,6 @@ Source/define.h \ Source/BootloaderStateMachine.h \ Source/FlashInterface.h \ Source/BootloaderProtocol.h \ -Source/InternalUart.h +Source/InternalUart.h \ + Source/BootloaderInterface.h \ +Source/FlashMapping.h diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/DigitalIO.o b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/DigitalIO.o index 9b909f1..056beca 100644 Binary files a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/DigitalIO.o and b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/DigitalIO.o differ diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ff.o b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ff.o deleted file mode 100644 index ddd3fcc..0000000 Binary files a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ff.o and /dev/null differ diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ff.o.d b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ff.o.d deleted file mode 100644 index 818ae8c..0000000 --- a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ff.o.d +++ /dev/null @@ -1,6 +0,0 @@ -build/ChaletDuino_795/production/Source/FatFS/ff.o: \ -Source/FatFS/ff.c \ - Source/FatFS/ff.h \ -Source/FatFS/integer.h \ -Source/FatFS/ffconf.h \ - Source/FatFS/diskio.h diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ffsystem.o b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ffsystem.o deleted file mode 100644 index 18ff351..0000000 Binary files a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ffsystem.o and /dev/null differ diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ffsystem.o.d b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ffsystem.o.d deleted file mode 100644 index 3a78357..0000000 --- a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ffsystem.o.d +++ /dev/null @@ -1,5 +0,0 @@ -build/ChaletDuino_795/production/Source/FatFS/ffsystem.o: \ - Source/FatFS/ffsystem.c \ -Source/FatFS/ff.h \ -Source/FatFS/integer.h \ - Source/FatFS/ffconf.h diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ffunicode.o b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ffunicode.o deleted file mode 100644 index 86a59c3..0000000 Binary files a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ffunicode.o and /dev/null differ diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ffunicode.o.d b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ffunicode.o.d deleted file mode 100644 index c641ffe..0000000 --- a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/ffunicode.o.d +++ /dev/null @@ -1,5 +0,0 @@ -build/ChaletDuino_795/production/Source/FatFS/ffunicode.o: \ - Source/FatFS/ffunicode.c \ -Source/FatFS/ff.h \ -Source/FatFS/integer.h \ - Source/FatFS/ffconf.h diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o deleted file mode 100644 index d8f088f..0000000 Binary files a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o and /dev/null differ diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o.d b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o.d deleted file mode 100644 index 586f60d..0000000 --- a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o.d +++ /dev/null @@ -1,5 +0,0 @@ -build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o: \ - Source/FatFS/mmc_drv.c \ -Source/DigitalIO.h \ -Source/FatFS/diskio.h \ - Source/FatFS/integer.h diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FlashInterface.o b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FlashInterface.o index 7ae173c..cc1bbd1 100644 Binary files a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FlashInterface.o and b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/FlashInterface.o differ diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/InternalUart.o b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/InternalUart.o index 8bb8695..967847a 100644 Binary files a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/InternalUart.o and b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/InternalUart.o differ diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/InternalUart.o.d b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/InternalUart.o.d index 632b2d5..b7d369f 100644 --- a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/InternalUart.o.d +++ b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/InternalUart.o.d @@ -1,6 +1,8 @@ build/ChaletDuino_795/production/Source/InternalUart.o: \ Source/InternalUart.c \ Source/define.h \ +Source/BoardCfg.h \ + Source/BoardCfg_ChaletduinoV2.h \ Source/InternalUart.h \ - Source/uart.h \ -Source/BootloaderProtocol.h +Source/uart.h \ + Source/BootloaderProtocol.h diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/main.o b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/main.o index bb9512e..5d9d83b 100644 Binary files a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/main.o and b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/main.o differ diff --git a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/main.o.d b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/main.o.d index fb2c97b..3ba74b4 100644 --- a/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/main.o.d +++ b/Bootloader_PIC32.X/build/ChaletDuino_795/production/Source/main.o.d @@ -1,8 +1,12 @@ build/ChaletDuino_795/production/Source/main.o: \ Source/main.c \ Source/define.h \ -Source/InternalUart.h \ +Source/BoardCfg.h \ +Source/BoardCfg_ChaletduinoV2.h \ + Source/InternalUart.h \ Source/FlashInterface.h \ Source/BootloaderProtocol.h \ Source/BootloaderStateMachine.h \ - Source/DigitalIO.h + Source/BootloaderInterface.h \ +Source/DigitalIO.h \ +Source/SPI_Flash.h diff --git a/Bootloader_PIC32.X/dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.elf b/Bootloader_PIC32.X/dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.elf index efeb0aa..45870c8 100644 Binary files a/Bootloader_PIC32.X/dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.elf and b/Bootloader_PIC32.X/dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.elf differ diff --git a/Bootloader_PIC32.X/dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.hex b/Bootloader_PIC32.X/dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.hex index 484d1a6..daa3e53 100644 --- a/Bootloader_PIC32.X/dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.hex +++ b/Bootloader_PIC32.X/dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.hex @@ -3,23 +3,23 @@ :042ff400d9fff8ff0a :020000040000fa :020000041fc01b -:042ff800fbcc67ffa8 +:042ff800dbcc6cffc3 :020000040000fa :020000041fc01b :042ffc00ffffff7f55 :020000040000fa :020000041fc01b :100000000200f00f0000000000601a40c0045a7f98 -:100010000500401300000000019d1a3c2c925a2755 -:10002000080040030000000000a01d3cf07fbd2739 +:100010000500401300000000009d1a3c84395a2757 +:10002000080040030000000000a01d3cf87fbd2731 :1000300000a01c3cf07f9c27026009402058200152 :10004000801e2a7d8449497d02608940c0000000ed -:1000500000e0dc4102608b40c0000000019d083cd4 -:100060004c92082509f800010000000000a0083c9f -:100070000400082500a0093c744229250600001050 +:1000500000e0dc4102608b40c0000000009d083cd5 +:10006000a439082509f800010000000000a0083ca0 +:100070000000082500a0093c40502925060000107a :1000800000000000000000ad040000ad080000ad5d :100090000c0000ad100008252b080901f9ff201401 -:1000a00000000000019d083c809008250000098d9b +:1000a00000000000009d083cc03808250000098db4 :1000b000180020110400082500000a8d04000825fe :1000c00000000b8d090060110400082500000c9150 :1000d000ffff4a250100082500002ca1fbff401569 @@ -36,2594 +36,1173 @@ :1001800000000a2444492a7d01608a408000093c1d :1001900000688940008008408005097d404c0900c6 :1001a000006008405800013c24400101254028011e -:1001b00000608840019d083c5492082509f8000120 +:1001b00000608840009d083cac39082509f8000122 :1001c0000000000000600840bfff013cffff213439 :1001d0002440010100608840000084300000a53008 -:1001e000019d083cd0900825080000010000000097 +:1001e000009d083ce83708250800000100000000d9 :020000040000fa :020000041fc01b -:10038000019d1a3c1c915a27080040030000000000 +:10038000009d1a3c34385a27080040030000000042 :020000040000fa :020000041fc01b -:10118000019d1a3c288e5a270800400300000000e9 +:10118000009d1a3cbc355a270800400300000000af :020000040000fa :020000041fc01b -:081200006a24400b000000000d +:08120000400e400b000000004d :020000040000fa :020000041fc01b -:081220006a24400b00000000ed +:08122000400e400b000000002d :020000040000fa :020000041fc01b -:081240006a24400b00000000cd +:08124000400e400b000000000d :020000040000fa :020000041fc01b -:081260006a24400b00000000ad +:08126000400e400b00000000ed :020000040000fa :020000041fc01b -:081280006a24400b000000008d +:08128000400e400b00000000cd :020000040000fa :020000041fc01b -:0812a0006a24400b000000006d +:0812a000400e400b00000000ad :020000040000fa :020000041fc01b -:0812c0006a24400b000000004d +:0812c000400e400b000000008d :020000040000fa :020000041fc01b -:0812e0006a24400b000000002d +:0812e000400e400b000000006d :020000040000fa :020000041fc01b -:081300006a24400b000000000c +:08130000400e400b000000004c :020000040000fa :020000041fc01b -:081320006a24400b00000000ec +:08132000400e400b000000002c :020000040000fa :020000041fc01b -:081340006a24400b00000000cc +:08134000400e400b000000000c :020000040000fa :020000041fc01b -:081360006a24400b00000000ac +:08136000400e400b00000000ec :020000040000fa :020000041fc01b -:081380006a24400b000000008c +:08138000400e400b00000000cc :020000040000fa :020000041fc01b -:0813a0006a24400b000000006c +:0813a000400e400b00000000ac :020000040000fa :020000041fc01b -:0813c0006a24400b000000004c +:0813c000400e400b000000008c :020000040000fa :020000041fc01b -:0813e0006a24400b000000002c +:0813e000400e400b000000006c :020000040000fa :020000041fc01b -:081400006a24400b000000000b +:08140000400e400b000000004b :020000040000fa :020000041fc01b -:081420006a24400b00000000eb +:08142000400e400b000000002b :020000040000fa :020000041fc01b -:081440006a24400b00000000cb +:08144000400e400b000000000b :020000040000fa :020000041fc01b -:081460006a24400b00000000ab +:08146000400e400b00000000eb :020000040000fa :020000041fc01b -:081480006a24400b000000008b +:08148000400e400b00000000cb :020000040000fa :020000041fc01b -:0814a0006a24400b000000006b +:0814a000400e400b00000000ab :020000040000fa :020000041fc01b -:0814c0006a24400b000000004b +:0814c000400e400b000000008b :020000040000fa :020000041fc01b -:0814e0006a24400b000000002b +:0814e000400e400b000000006b :020000040000fa :020000041fc01b -:081500006a24400b000000000a +:08150000400e400b000000004a :020000040000fa :020000041fc01b -:081520006a24400b00000000ea +:08152000400e400b000000002a :020000040000fa :020000041fc01b -:081540006a24400b00000000ca +:08154000400e400b000000000a :020000040000fa :020000041fc01b -:081560006a24400b00000000aa +:08156000400e400b00000000ea :020000040000fa :020000041fc01b -:081580006a24400b000000008a +:08158000400e400b00000000ca :020000040000fa :020000041fc01b -:0815a0006a24400b000000006a +:0815a000400e400b00000000aa :020000040000fa :020000041fc01b -:0815c0006a24400b000000004a +:0815c000400e400b000000008a :020000040000fa :020000041fc01b -:0815e0006a24400b000000002a +:0815e000400e400b000000006a :020000040000fa :020000041fc01b -:081600006a24400b0000000009 +:08160000400e400b0000000049 :020000040000fa :020000041fc01b -:081620006a24400b00000000e9 +:08162000400e400b0000000029 :020000040000fa :020000041fc01b -:081640006a24400b00000000c9 +:08164000400e400b0000000009 :020000040000fa :020000041fc01b -:081660006a24400b00000000a9 +:08166000400e400b00000000e9 :020000040000fa :020000041fc01b -:081680006a24400b0000000089 +:08168000400e400b00000000c9 :020000040000fa :020000041fc01b -:0816a0006a24400b0000000069 +:0816a000400e400b00000000a9 :020000040000fa :020000041fc01b -:0816c0006a24400b0000000049 +:0816c000400e400b0000000089 :020000040000fa :020000041fc01b -:0816e0006a24400b0000000029 +:0816e000400e400b0000000069 :020000040000fa :020000041fc01b -:081700006a24400b0000000008 +:08170000400e400b0000000048 :020000040000fa :020000041fc01b -:081720006a24400b00000000e8 +:08172000400e400b0000000028 :020000040000fa :020000041fc01b -:081740006a24400b00000000c8 +:08174000400e400b0000000008 :020000040000fa :020000041fc01b -:081760006a24400b00000000a8 +:08176000400e400b00000000e8 :020000040000fa :020000041fc01b -:081780006a24400b0000000088 +:08178000400e400b00000000c8 :020000040000fa :020000041fc01b -:0817a0006a24400b0000000068 +:0817a000400e400b00000000a8 :020000040000fa :020000041fc01b -:0817c0006a24400b0000000048 +:0817c000400e400b0000000088 :020000040000fa :020000041fc01b -:0817e0006a24400b0000000028 +:0817e000400e400b0000000068 :020000040000fa :020000041fc01b -:081800006a24400b0000000007 +:08180000400e400b0000000047 :020000040000fa :020000041fc01b -:081820006a24400b00000000e7 +:08182000400e400b0000000027 :020000040000fa :020000041fc01b -:081840006a24400b00000000c7 +:08184000400e400b0000000007 :020000040000fa :020000041fc01b -:081860006a24400b00000000a7 +:08186000400e400b00000000e7 :020000040000fa :020000041fc01b -:081880006a24400b0000000087 +:08188000400e400b00000000c7 :020000040000fa :020000041fc01b -:0818a0006a24400b0000000067 +:0818a000400e400b00000000a7 :020000040000fa :020000041fc01b -:0818c0006a24400b0000000047 +:0818c000400e400b0000000087 :020000040000fa :020000041fc01b -:0818e0006a24400b0000000027 +:0818e000400e400b0000000067 :020000040000fa :020000041fc01b -:081900006a24400b0000000006 +:08190000400e400b0000000046 :020000040000fa :020000041fc01b -:081920006a24400b00000000e6 +:08192000400e400b0000000026 :020000040000fa :020000041fc01b -:081940006a24400b00000000c6 +:08194000400e400b0000000006 :020000040000fa :020000041fc01b -:081960006a24400b00000000a6 +:08196000400e400b00000000e6 :020000040000fa :020000041fc01b -:081980006a24400b0000000086 +:08198000400e400b00000000c6 :020000040000fa :020000041fc01b -:0819a0006a24400b0000000066 +:0819a000400e400b00000000a6 :020000040000fa :020000041fc01b -:0819c0006a24400b0000000046 +:0819c000400e400b0000000086 :020000040000fa :020000041fc01b -:0819e0006a24400b0000000026 +:0819e000400e400b0000000066 :020000040000fa :020000041fc01b -:1004800000f89b40c0000000019d1b3c64917b274d +:1004800000f89b40c0000000009d1b3c7c387b278f :10049000020060130000000000c09b4000f81b40f9 :0c04a000c00000001f000042000000002f :020000040000fa :020000041d00dd -:10000000f0ffbd270c00beaf21f0a0031000c4af6d -:100010001000c28f01004224000042900000c2a7dd -:100020000000c29700120200201e027c1000c28f46 -:10003000000042902016027c251062002016027cef -:100040000000c2a70000c29721e8c0030c00be8fc9 -:100050001000bd270800e00300000000f0ffbd27ee -:100060000c00beaf21f0a0031000c4af1000c28f7f -:1000700003004224000042900000c2af0000c28f83 -:10008000001a02001000c28f0200422400004290b9 -:10009000251062000000c2af0000c28f001a0200eb -:1000a0001000c28f0100422400004290251062001f -:1000b0000000c2af0000c28f001a02001000c28f01 -:1000c00000004290251062000000c2af0000c28f05 -:1000d00021e8c0030c00be8f1000bd270800e0031c -:1000e00000000000f8ffbd270400beaf21f0a00310 -:1000f0000800c4af2110a0000c00c2a70c00c297da -:10010000ff0043300800c28f000043a00800c28fe8 -:10011000010042240800c2af0c00c2970212020084 -:100120000c00c2a70c00c297ff0043300800c28f2a -:10013000000043a00800c28f010042240800c2afa3 -:1001400021e8c0030400be8f0800bd270800e003bb -:1001500000000000f8ffbd270400beaf21f0a0039f -:100160000800c4af0c00c5af0c00c28fff004330c5 -:100170000800c28f000043a00800c28f0100422483 -:100180000800c2af0c00c28f021202000c00c2af06 -:100190000c00c28fff0043300800c28f000043a054 -:1001a0000800c28f010042240800c2af0c00c28fb9 -:1001b000021202000c00c2af0c00c28fff004330dd -:1001c0000800c28f000043a00800c28f0100422433 -:1001d0000800c2af0c00c28f021202000c00c2afb6 -:1001e0000c00c28fff0043300800c28f000043a004 -:1001f0000800c28f010042240800c2af21e8c003fa -:100200000400be8f0800bd270800e00300000000c6 -:10021000f0ffbd270c00beaf21f0a0031000c4af5b -:100220001400c5af1800c6af1000c28f0000c2afe7 -:100230001400c28f0400c2af1800c28f110040101a -:10024000000000000400c28f000043900000c28f35 -:10025000000043a00000c28f010042240000c2af92 -:100260000400c28f010042240400c2af1800c28ff4 -:10027000ffff42241800c2af1800c28ff1ff4014e4 -:100280000000000021e8c0030c00be8f1000bd2755 -:100290000800e00300000000f0ffbd270c00beaf27 -:1002a00021f0a0031000c4af1400c5af1800c6af02 -:1002b0001000c28f0000c2af1400c28fff00433095 -:1002c0000000c28f000043a00000c28f0100422442 -:1002d0000000c2af1800c28fffff42241800c2af57 -:1002e0001800c28ff4ff40140000000021e8c00392 -:1002f0000c00be8f1000bd270800e00300000000c6 -:10030000e8ffbd271400beaf21f0a0031800c4af62 -:100310001c00c5af2000c6af1800c28f0000c2afde -:100320001c00c28f0400c2af0800c0af0000c28f23 -:1003300000004290211840000400c28f000042904b -:10034000231062000800c2af0000c28f01004224e7 -:100350000000c2af0400c28f010042240400c2affb -:100360002000c28fffff42242000c2af2000c28fb6 -:1003700004004010000000000800c28febff401096 -:10038000000000000800c28f21e8c0031400be8fe7 -:100390001800bd270800e00300000000f8ffbd279b -:1003a0000400beaf21f0a0030800c4af0c00c5af2d -:1003b000f100400b000000000800c28f0100422441 -:1003c0000800c2af0800c28f000042800700401042 -:1003d000000000000800c28f000042802118400089 -:1003e0000c00c28ff4ff6214000000000800c28fee -:1003f0000000428021e8c0030400be8f0800bd2732 -:100400000800e00300000000f8ffbd270400beafb5 -:1004100021f0a003211080000800c2a30800c293ad -:100420000400401000000000211000000e01400bed -:10043000000000002110000021e8c0030400be8f6e -:100440000800bd270800e00300000000f8ffbd27fa -:100450000400beaf21f0a003211080000800c2a359 -:100460000800c293040040100000000021100000aa -:100470001f01400b000000002110000021e8c00314 -:100480000400be8f0800bd270800e0030000000044 -:10049000e0ffbd271c00bfaf1800beaf21f0a003d6 -:1004a0002000c4af1000c0af2000c28f03004290f4 -:1004b00033004010000000002000c28f0100429075 -:1004c000212040002000c28f300043242000c28f32 -:1004d0002c00428c212860002130400001000724bc -:1004e000761a400f000000002300401400000000b6 -:1004f0002000c28f030040a02000c28f2c00438c3c -:100500002000c28f2000428c231862002000c28f7e -:100510001800428c2b1062001900401000000000ef -:100520002000c28f020043900200022414006214d3 -:10053000000000002000c28f0100429021204000f6 -:100540002000c28f300043242000c28f2c00458c35 -:100550002000c28f1800428c2110a20021286000c8 -:100560002130400001000724761a400f00000000ef -:100570006001400b00000000010002241000c2af27 -:100580001000c28f21e8c0031c00bf8f1800be8f6f -:100590002000bd270800e00300000000e0ffbd27a9 -:1005a0001c00bfaf1800beaf21f0a0032000c4aff5 -:1005b0002400c5af1000c0af2000c28f2c00438cb8 -:1005c0002400c28f1c006210000000002000c48fb5 -:1005d0002401400f000000001000c2af1000c28fc5 -:1005e00015004014000000002000c28f010042905e -:1005f000211840002000c28f3000422421206000da -:10060000212840002400c68f010007241b1a400f38 -:10061000000000000500401000000000ffff022461 -:100620002400c2af010002241000c2af2000c28f1c -:100630002400c38f2c0043ac1000c28f21e8c003fc -:100640001c00bf8f1800be8f2000bd270800e003ec -:1006500000000000e0ffbd271c00bfaf1800beafc8 -:1006600021f0a0032000c4af2000c48f2401400f5c -:10067000000000001000c2af1000c28f54004014f0 -:10068000000000002000c28f0000439003000224fd -:1006900044006214000000002000c28f0400439058 -:1006a000010002243f006214000000002000c28ffd -:1006b00030004224212040002128000000020624ae -:1006c000a600400f000000002000c28f2e0242242e -:1006d0002120400055aa05343900400f00000000d9 -:1006e0002000c28f30004224212040006141023ca2 -:1006f000525245345500400f000000002000c28fc8 -:1007000014024224212040004161023c72724534af -:100710005500400f000000002000c28f1802432443 -:100720002000c28f1000428c212060002128400050 -:100730005500400f000000002000c28f1c0243241f -:100740002000c28f0c00428c212060002128400034 -:100750005500400f000000002000c28f1c00428c9a -:10076000010043242000c28f2c0043ac2000c28f24 -:1007700001004290212040002000c28f300043241d -:100780002000c28f2c00428c2128600021304000c4 -:1007900001000724761a400f000000002000c28fdd -:1007a000040040a02000c28f0100429021204000a0 -:1007b0002128000021300000e51a400f0000000051 -:1007c0000300401000000000010002241000c2af2e -:1007d0001000c28f21e8c0031c00bf8f1800be8f1d -:1007e0002000bd270800e00300000000f8ffbd273f -:1007f0000400beaf21f0a0030800c4af0c00c5afd9 -:100800000c00c28ffeff42240c00c2af0800c28f52 -:100810001400428cfeff43240c00c28f2b104300b7 -:100820000400401400000000211000001502400bdd -:10083000000000000800c28f2800428c0800c38f0f -:100840000a006394212060000c00c38f021883709b -:100850002110430021e8c0030400be8f0800bd271b -:100860000800e00300000000d8ffbd272400bfaf50 -:100870002000beaf21f0a0032800c4af2c00c5affc -:100880002800c28f0000428c1400c2af2c00c28f1f -:100890000200422c07004014000000001400c28f28 -:1008a0001400438c2c00c28f2b1043000500401411 -:1008b00000000000010002241000c2afb802400b8b -:1008c00000000000ffff02241000c2af1400c28f1e -:1008d0000000429002000324440043100000000086 -:1008e000030003245800431000000000010003240b -:1008f0006d004314000000002c00c28f1800c2af2e -:100900001800c28f421002001800c38f211062002d -:100910001800c2af1400c28f2000438c1800c28f91 -:1009200042120200211062001400c48f21284000ee -:100930006701400f000000005f004014000000004d -:100940001800c28fff0142301400c38f21106200d3 -:10095000300042901c00c2af1800c28f0100422438 -:100960001800c2af1400c28f2000438c1800c28f41 -:1009700042120200211062001400c48f212840009e -:100980006701400f000000004e004014000000000e -:100990001800c28fff0142301400c38f2110620083 -:1009a00030004290001202001c00c38f251062002c -:1009b0001c00c2af2c00c28f01004230ff00423049 -:1009c00005004010000000001c00c28f0211020050 -:1009d0007802400b000000001c00c28fff0f423065 -:1009e0001000c2afb802400b000000001400c28f1c -:1009f0002000438c2c00c28f0212020021106200e2 -:100a00001400c48f212840006701400f000000003f -:100a10002f004014000000001400c28f3000432457 -:100a20002c00c28f40100200ff01423021106200f2 -:100a3000212040000000400f000000001000c2af65 -:100a4000b802400b000000001400c28f2000438c4d -:100a50002c00c28fc2110200211062001400c48f4a -:100a6000212840006701400f000000001b004014d7 -:100a7000000000001400c28f300043242c00c28ffd -:100a800080100200ff01423021106200212040004e -:100a90001700400f0000000000d8427c1000c2afd9 -:100aa000b802400b00000000010002241000c2af99 -:100ab000b802400b0000000000000000b802400b2c -:100ac0000000000000000000b802400b0000000021 -:100ad00000000000b802400b000000000000000011 -:100ae0001000c28f21e8c0032400bf8f2000be8ffa -:100af0002800bd270800e00300000000d0ffbd274c -:100b00002c00bfaf2800beaf2400b0af21f0a0037f -:100b10003000c4af3400c5af3800c6af02000224b5 -:100b20001000c2af3400c28f0200422ccf0040142c -:100b3000000000003000c28f1400438c3400c28fcc -:100b40002b104300c9004010000000003000c28f8d -:100b500000004290020003247000431000000000d7 -:100b6000030003248b004310000000000100032455 -:100b7000be004314000000003400c28f1400c2af56 -:100b80001400c28f421002001400c38f21106200b3 -:100b90001400c2af3000c28f2000438c1400c28ffb -:100ba00042120200211062003000c48f2128400050 -:100bb0006701400f000000001000c2af1000c28f9c -:100bc000a0004014000000003000c28f3000432419 -:100bd0001400c28fff014230211062001800c2af22 -:100be0001400c28f010042241400c2af3400c28f2f -:100bf00001004230ff0042300f00401000000000b2 -:100c00001800c28f000042902014027c0f00423076 -:100c1000201c027c3800c28fff004230001102000d -:100c20002014027c251062002014027cff00423058 -:100c30001003400b000000003800c28fff0042305c -:100c40001800c38f000062a03000c28f010003248f -:100c5000030043a03000c28f2000438c1400c28fd9 -:100c600042120200211062003000c48f212840008f -:100c70006701400f000000001000c2af1000c28fdb -:100c800073004014000000003000c28f3000432485 -:100c90001400c28fff014230211062001800c2af61 -:100ca0003400c28f01004230ff0042300600401085 -:100cb000000000003800c28f02110200ff00423025 -:100cc0004003400b000000001800c28f000042905b -:100cd000201c027cf0ff022424106200201c027cf5 -:100ce0003800c28f021202002014027c0f00423032 -:100cf0002014027c251062002014027cff00423088 -:100d00001800c38f000062a03000c28f01000324ce -:100d1000030043a09b03400b000000003000c28f83 -:100d20002000438c3400c28f0212020021106200a6 -:100d30003000c48f212840006701400f00000000f0 -:100d40001000c2af1000c28f440040140000000029 -:100d50003000c28f300043243400c28f40100200a4 -:100d6000ff014230211862003800c28fffff42307d -:100d700021206000212840003900400f00000000c1 -:100d80003000c28f01000324030043a09b03400beb -:100d9000000000003000c28f2000438c3400c28f5e -:100da000c2110200211062003000c48f21284000cf -:100db0006701400f000000001000c2af1000c28f9a -:100dc00029004014000000003800c28f00d8507c79 -:100dd0003000c28f300043243400c28f80100200e4 -:100de000ff01423021106200212040001700400f17 -:100df000000000002118400000f0023c24106200b6 -:100e0000251002023800c2af3000c28f30004324e8 -:100e10003400c28f80100200ff01423021106200b6 -:100e2000212040003800c58f5500400f0000000011 -:100e30003000c28f01000324030043a09b03400b3a -:100e400000000000000000009b03400b00000000b9 -:100e5000000000009b03400b0000000000000000a9 -:100e60009b03400b00000000000000001000c28f38 -:100e700021e8c0032c00bf8f2800be8f2400b08f54 -:100e80003000bd270800e00300000000d8ffbd27a8 -:100e90002400bfaf2000beaf21f0a0032800c4afe4 -:100ea0002c00c5af3000c6af1000c0af2800c28f05 -:100eb0000000428c1400c2af2c00c28f0200422cf2 -:100ec00007004014000000001400c28f1400438c7f -:100ed0002c00c28f2b1043000400401400000000bf -:100ee000020002240b04400b000000003000c28fff -:100ef0000d004010000000001400c48f3000c58faa -:100f0000ffff0624bf02400f000000001000c2af28 -:100f10001000c28f04004010000000001000c28fbb -:100f20000b04400b000000002800c48f2c00c58f6c -:100f30001a02400f000000001800c2af1800c28f54 -:100f400038004010000000001800c38f0100022488 -:100f50000400621400000000020002240b04400b95 -:100f6000000000001800c38fffff02240400621479 -:100f700000000000010002240b04400b00000000f0 -:100f80001400c48f2c00c58f21300000bf02400f19 -:100f9000000000001000c2af1000c28f040040101b -:100fa000000000001000c28f0b04400b0000000086 -:100fb0001400c28f1000438c1400c28f1400428ca6 -:100fc000feff42242b1062000c00401000000000c5 -:100fd0001400c28f1000428c010043241400c28f01 -:100fe000100043ac1400c28f040042900100423450 -:100ff000ff0043301400c28f040043a01800c28fca -:101000002c00c2af1400c28f1400438c2c00c28f7e -:101010002b104300c4ff4014000000000a04400be2 -:1010200000000000000000002110000021e8c003c3 -:101030002400bf8f2000be8f2800bd270800e003da -:1010400000000000d0ffbd272c00bfaf2800beafbe -:1010500021f0a0033000c4af3400c5af3000c28f10 -:101060000000428c1c00c2af3400c28f110040143b -:10107000000000001c00c28f0c00428c1400c2afa4 -:101080001400c28f07004010000000001c00c28f37 -:101090001400438c1400c28f2b1043002300401413 -:1010a00000000000010002241400c2af4b04400bfa -:1010b000000000003000c48f3400c58f1a02400fba -:1010c000000000002000c2af2000c28f0200422cae -:1010d000040040100000000001000224f204400b54 -:1010e000000000002000c38fffff022404006214f0 -:1010f000000000002000c28ff204400b000000003e -:101100001c00c28f1400438c2000c28f2b104300a0 -:1011100004004010000000002000c28ff204400bc9 -:10112000000000003400c28f1400c2af1c00c28f48 -:101130001000428c04004014000000002110000048 -:10114000f204400b000000001000c0af1400c38f79 -:101150003400c28f2f006214000000001400c28f00 -:10116000010042241000c2af1c00c28f1400438c47 -:101170001000c28f2b104300030040140000000039 -:10118000020002241000c2af3000c48f1000c58fcf -:101190001a02400f000000002000c2af2000c38fe1 -:1011a0000100022405006210000000002000c38f2f -:1011b000ffff022404006214000000002000c28f20 -:1011c000f204400b000000002000c28f110040100c -:1011d000000000001c00c28f0c00428c2000c2af37 -:1011e0002000c28f0200422c0900401400000000c1 -:1011f0001c00c28f1400438c2000c28f2b104300b0 -:1012000003004010000000002000c28f1400c2af95 -:101210001000c0af1000c28f340040140000000066 -:101220001400c28f1000c2af8d04400b00000000fc -:10123000000000001000c28f010042241000c2af65 -:101240001c00c28f1400438c1000c28f2b1043006f -:101250000b00401400000000020002241000c2af86 -:101260001000c38f1400c28f2b10430004004010e5 -:101270000000000021100000f204400b00000000fc -:101280003000c48f1000c58f1a02400f000000000c -:101290002000c2af2000c28f1300401000000000e9 -:1012a0002000c38f0100022405006210000000002e -:1012b0002000c38fffff022404006214000000001e -:1012c0002000c28ff204400b000000001000c38f0a -:1012d0001400c28fd6ff621400000000211000002d -:1012e000f204400b00000000000000001c00c48f4e -:1012f0001000c58fffff0624bf02400f0000000052 -:101300001800c2af1800c28f0a004014000000008d -:101310003400c28f07004010000000001c00c48f82 -:101320003400c58f1000c68fbf02400f00000000c0 -:101330001800c2af1800c28f19004014000000004e -:101340001c00c28f1000c38f0c0043ac1c00c28f66 -:101350001000438c1c00c28f1400428cfeff4224fc -:101360002b10430006004014000000001c00c28f38 -:101370001000428cffff43241c00c28f100043acbe -:101380001c00c28f0400429001004234ff00433031 -:101390001c00c28f040043a0f104400b00000000b9 -:1013a0001800c38f01000224040062140000000032 -:1013b000ffff0224f004400b0000000001000224a3 -:1013c0001000c2af1000c28f21e8c0032c00bf8ff5 -:1013d0002800be8f3000bd270800e0030000000099 -:1013e000d8ffbd272400bfaf2000beaf21f0a0036f -:1013f0002800c4af2c00c5af2800c48f2401400fc3 -:101400000000000004004010000000000100022461 -:101410003c05400b000000002800c48f2c00c58f45 -:10142000fb01400f000000001400c2af2800c28f73 -:101430001400c38f2c0043ac2800c28f300042241c -:10144000212040002128000000020624a600400fb1 -:10145000000000002800c28f300042241800c2aff4 -:10146000010002241c00c2af1000c0af2105400bd8 -:10147000000000001000c38f1c00c28f211062000a -:101480001000c2af2800c28f0a0042942118400009 -:101490001000c28f2b1043000f004010000000000e -:1014a0002800c28f01004290211840001400c48f10 -:1014b0001000c28f21108200212060001800c58f0b -:1014c000213040001c00c78f761a400f000000003a -:1014d000e8ff4010000000002800c28f0a0042947c -:1014e000211840001000c28f261062002b1002004d -:1014f00021e8c0032400bf8f2000be8f2800bd2735 -:101500000800e00300000000d8ffbd272400bfafa3 -:101510002000beaf21f0a0032800c4af2c00c5af4f -:101520002800c28f0000428c1400c2af2c00c38f71 -:101530002000023c2b10620005004010000000005b -:101540002c00c28f1f004230040040100000000039 -:1015500002000224c405400b000000002800c28fd6 -:101560002c00c38f100043ac2800c28f0800428caf -:101570001000c2af1000c28f09004014000000002c -:101580001400c28f000042900300422c040040145b -:10159000000000001400c28f2400428c1000c2af73 -:1015a0001000c28f11004014000000002c00c28ff8 -:1015b000421902001400c28f080042942b106200ee -:1015c000040040140000000002000224c405400b87 -:1015d000000000001400c28f2400438c2800c28f3a -:1015e000180043acab05400b000000001400c28f94 -:1015f0000a004294401202001800c2af9f05400b3f -:10160000000000002800c28f212040001000c58f7c -:101610001a02400f000000001000c2af1000c38f7c -:10162000ffff0224040062140000000001000224f5 -:10163000c405400b000000001000c28f0200422cc5 -:1016400007004014000000001400c28f1400438cf7 -:101650001000c28f2b104300040040140000000053 -:1016600002000224c405400b000000002c00c38fc0 -:101670001800c28f231062002c00c2af2c00c38f51 -:101680001800c28f2b106200deff40100000000027 -:101690001400c48f1000c58ffb01400f0000000034 -:1016a000211840002800c28f180043ac2800c28fc8 -:1016b0001000c38f140043ac2800c28f1800428c66 -:1016c000040040140000000002000224c405400b86 -:1016d000000000002800c28f1800438c2c00c28f2d -:1016e00042120200211862002800c28f180043ac89 -:1016f0001400c28f300043242c00c28fff014230ff -:10170000211862002800c28f1c0043ac2110000089 -:1017100021e8c0032400bf8f2000be8f2800bd2712 -:101720000800e00300000000d8ffbd272400bfaf81 -:101730002000beaf21f0a0032800c4af2c00c5af2d -:101740002800c28f0000428c1400c2af2800c28f54 -:101750001000428c200042241800c2af2800c28f23 -:101760001800428c06004010000000001800c38fd3 -:101770002000023c2b106200040040140000000016 -:10178000040002246206400b000000001800c28f13 -:10179000ff01423071004014000000002800c28f99 -:1017a0001800428c010043242800c28f180043ac6b -:1017b0002800c28f1400428c0d004014000000006d -:1017c0001800c28f421902001400c28f0800429410 -:1017d0002b10620061004014000000002800c28f3e -:1017e000180040ac040002246206400b0000000018 -:1017f0001800c28f421a02001400c28f0a004294dd -:10180000ffff422424106200540040140000000036 -:101810002800c38f2800c28f1400428c2120600052 -:10182000212840001a02400f000000001000c2af43 -:101830001000c28f0200422c040040100000000083 -:10184000020002246206400b000000001000c38f5b -:10185000ffff0224040062140000000001000224c3 -:101860006206400b000000001400c28f1400438c7d -:101870001000c28f2b1043002e0040140000000007 -:101880002c00c28f06004014000000002800c28f08 -:10189000180040ac040002246206400b0000000067 -:1018a0002800c38f2800c28f1400428c21206000c2 -:1018b000212840001104400f000000001000c2afba -:1018c0001000c28f04004014000000000700022432 -:1018d0006206400b000000001000c38f01000224cc -:1018e0000400621400000000020002246206400ba3 -:1018f000000000001000c38fffff022404006214e8 -:1019000000000000010002246206400b00000000fd -:101910001400c48f1000c58ff804400f00000000b1 -:101920000400401000000000010002246206400b89 -:10193000000000002800c28f1000c38f140043acc9 -:101940001400c48f1000c58ffb01400f0000000081 -:10195000211840002800c28f180043ac2800c28f15 -:101960001800c38f100043ac1400c28f3000432412 -:101970001800c28fff014230211862002800c28f78 -:101980001c0043ac2110000021e8c0032400bf8fdd -:101990002000be8f2800bd270800e00300000000e3 -:1019a000d8ffbd272400bfaf2000beaf21f0a003a9 -:1019b0002800c4af2c00c5af2800c28f0000428ca5 -:1019c0001800c2af2800c48f212800004205400f34 -:1019d000000000001000c2af1000c28f2c004014a5 -:1019e000000000001400c0af2800c28f1800428c15 -:1019f0001800c48f212840006701400f000000003c -:101a00001000c2af1000c28f200040140000000080 -:101a10002800c28f1c00428c00004390e500022485 -:101a200006006210000000002800c28f1c00428cdb -:101a3000000042900a004014000000001400c28f11 -:101a4000010042241400c2af1400c38f2c00c28fc7 -:101a50000400621400000000a406400b0000000017 -:101a60001400c0af2800c48f01000524ca05400f30 -:101a7000000000001000c2af1000c28fdaff40105b -:101a800000000000a406400b000000000000000061 -:101a90001000c38f04000224030062140000000041 -:101aa000070002241000c2af1000c28f21e8c0035b -:101ab0002400bf8f2000be8f2800bd270800e00350 -:101ac00000000000e0ffbd271c00bfaf1800beaf44 -:101ad00021f0a0032000c4af2400c5af2400c28fb2 -:101ae0001a004224212040000000400f00000000a6 -:101af0001000c2af2000c28f0000439003000224f8 -:101b00000a006214000000002400c28f1400422466 -:101b1000212040000000400f0000000000140200df -:101b20001000c38f251062001000c2af1000c28fda -:101b300021e8c0031c00bf8f1800be8f2000bd2706 -:101b40000800e00300000000e8ffbd271400bfaf5d -:101b50001000beaf21f0a0031800c4af1c00c5af39 -:101b60002000c6af1c00c28f1a0043242000c28f81 -:101b7000ffff423021206000212840003900400f43 -:101b8000000000001800c28f0000439003000224f0 -:101b90000a006214000000001c00c28f14004324dd -:101ba0002000c28f02140200ffff4230212060009b -:101bb000212840003900400f0000000021e8c00348 -:101bc0001400bf8f1000be8f1800bd270800e0036f -:101bd00000000000d8ffbd272400bfaf2000beaf2b -:101be00021f0a0032800c4af2c00c5af04000224dc -:101bf0001000c2af2800c28f0000428c1400c2af98 -:101c00003c07400b000000002800c28f1800428ce7 -:101c10001400c48f212840006701400f000000001d -:101c20001000c2af1000c28f370040140000000047 -:101c30002800c28f1c00428c000042901800c2a3f2 -:101c40001800c293050040140000000004000224a4 -:101c50001000c2af4907400b000000002800c28fef -:101c60001c00428c0b004224000042903f00423096 -:101c70001900c2a32800c28f1900c393060043a015 -:101c80001800c393e5000224110062100000000058 -:101c90001800c3932e0002240d0062100000000003 -:101ca0001900c3930f000224090062100000000015 -:101cb0001900c393dfff0224241062000800423899 -:101cc0000100432c2c00c28f1200621000000000a3 -:101cd0002800c48f21280000ca05400f0000000022 -:101ce0001000c2af1000c28f0d00401400000000b1 -:101cf0002800c28f1800428cc3ff4014000000006f -:101d00004907400b00000000000000004907400b9d -:101d100000000000000000004907400b0000000028 -:101d2000000000001000c28f0300401000000000ff -:101d30002800c28f180040ac1000c28f21e8c003f9 -:101d40002400bf8f2000be8f2800bd270800e003bd -:101d500000000000d8ffbd272400bfaf2000beafa9 -:101d600021f0a0032800c4af2800c28f0000428cdd -:101d70001400c2af2800c48f212800004205400f84 -:101d8000000000001000c2af1000c28f040040101d -:101d9000000000001000c28fa607400b00000000ea -:101da0002800c28f1800428c1400c48f21284000e4 -:101db0006701400f000000001000c2af1000c28f8a -:101dc00030004014000000002800c28f1c00428c2c -:101dd000000042901800c2a31800c29305004014ee -:101de00000000000040002241000c2afa507400b51 -:101df000000000002800c28f1c00428c0b0042240f -:101e0000000042903f004230ff0043302800c28f64 -:101e1000060043a02800c28f1c00428c0b00422405 -:101e200000004290080042300c0040140000000006 -:101e30002800c28f1c00438c2800c28f200042243f -:101e400021206000212840000b000624c000400f24 -:101e5000000000000e004010000000002800c48fa9 -:101e600021280000ca05400f000000001000c2af8a -:101e70001000c28fcaff401000000000a507400bf1 -:101e80000000000000000000a507400b000000005b -:101e9000000000001000c28f21e8c0032400bf8fa3 -:101ea0002000be8f2800bd270800e00300000000ce -:101eb000e0ffbd271c00bfaf1800beaf21f0a0039c -:101ec0002000c4af2000c28f0000428c1400c2afbb -:101ed0002000c48f010005246806400f00000000a8 -:101ee0001000c2af1000c28f1e004014000000009e -:101ef0002000c28f1800428c1400c48f212840009b -:101f00006701400f000000001000c2af1000c28f38 -:101f100014004014000000002000c28f1c00428cfe -:101f2000212040002128000020000624a600400fa8 -:101f3000000000002000c28f1c00438c2000c28fd4 -:101f40002000422421206000212840000b000624ac -:101f50008400400f000000001400c28f0100032421 -:101f6000030043a01000c28f21e8c0031c00bf8ff4 -:101f70001800be8f2000bd270800e003000000000d -:101f8000e0ffbd271c00bfaf1800beaf21f0a003cb -:101f90002000c4af2000c28f0000428c1000c2afee -:101fa0002000c28f1800428c1000c48f21284000ee -:101fb0006701400f000000001400c2af1400c28f80 -:101fc00008004014000000002000c28f1c00428c5a -:101fd000e5ff0324000043a01000c28f010003248a -:101fe000030043a01400c28f21e8c0031c00bf8f70 -:101ff0001800be8f2000bd270800e003000000008d -:10200000d8ffbd272400bfaf2000beaf21f0a00342 -:102010002800c4af2c00c5af2c00c28f090040a01f -:102020002800c28f1800428c5b00401000000000a6 -:102030001400c0af1400c28f1000c2af3b08400ba9 -:10204000000000002800c28f1c00438c1000c28fcb -:1020500021106200000042901800c2a31000c28f3d -:10206000010042241000c2af1800c38320000224e4 -:102070001d006210000000001800c3830500022448 -:102080000300621400000000e5ff02241800c2a350 -:102090001000c38f09000224090062140000000030 -:1020a0002c00c38f1400c28f211062002e00032465 -:1020b000090043a01400c28f010042241400c2afe3 -:1020c0002c00c38f1400c28f211062001800c3932c -:1020d000090043a01400c28f010042241400c2afc3 -:1020e0003b08400b00000000000000001000c28f01 -:1020f0000b00422cd3ff4014000000002c00c38fc3 -:102100001400c28f21106200090040a02800c28f75 -:102110001c00428c0b004224000043902c00c28f14 -:10212000080043a02800c28f1c00428c1c004224df -:10213000212040001700400f00000000211840003f -:102140002c00c28f000043ac2800c28f1c00428cc0 -:1021500016004224212040000000400f0000000033 -:10216000211840002c00c28f060043a42800c28f13 -:102170001c00428c18004224212040000000400f27 -:1021800000000000211840002c00c28f040043a46e -:102190006708400b000000000000000021e8c003b9 -:1021a0002400bf8f2000be8f2800bd270800e00359 -:1021b00000000000c8ffbd273400bfaf3000beaf35 -:1021c00021f0a0033800c4af3c00c5af3c00c28f73 -:1021d0000000428c2000c2af3800c28f2000422491 -:1021e0002400c2af2400c48f200005240b00062465 -:1021f000a600400f000000001c00c0af1c00c28ff2 -:102200001800c2af080002241400c2af2000c38f20 -:102210001800c28f21106200000042801000c2a38b -:102220001800c28f010042241800c2af1000c293f0 -:102230002100422c95004014000000001000c393c0 -:102240002f0002240c006210000000001000c39355 -:102250005c00022419006214000000009f08400b7b -:10226000000000001800c28f010042241800c2af15 -:102270009f08400b00000000000000002000c38ffa -:102280001800c28f21106200000043802f0002243a -:10229000f4ff6210000000002000c38f1800c28ffe -:1022a00021106200000043805c000224edff6210f8 -:1022b000000000002409400b000000001000c39340 -:1022c0002e00022406006210000000001c00c38fd4 -:1022d0001400c28f2b106200130040140000000095 -:1022e0001400c38f0b0002240500621000000000e0 -:1022f0001000c3932e0002240400621000000000ae -:10230000060002244309400b0000000008000224dc -:102310001c00c2af0b0002241400c2af000000007a -:102320008308400b000000001000c2830800410435 -:10233000000000001000c2937f004330019d023c6a -:10234000048f422421106200000042901000c2a3ba -:102350001000c293212040000201400f0000000045 -:102360002a004010000000002000c38f1800c28f18 -:1023700021106200000042802800c2a31800c28f12 -:10238000010042241800c2af2800c293212040005f -:102390001301400f00000000070040100000000083 -:1023a0001400c28fffff43241c00c28f2b10430078 -:1023b0000400401400000000060002244309400b02 -:1023c000000000002400c38f1c00c28f2110620097 -:1023d0001000c393000043a01c00c28f01004224e0 -:1023e0001c00c2af2400c38f1c00c28f21106200ea -:1023f0002800c393000043a01c00c28f01004224a8 -:102400001c00c2af8308400b000000001000c29304 -:10241000019d033c848f642421284000e700400f85 -:10242000000000000400401000000000060002242c -:102430004309400b000000001000c2936100422cd1 -:1024400008004014000000001000c2937b00422ce2 -:1024500004004010000000001000c293e0ff42247e -:102460001000c2a32400c38f1c00c28f2110620081 -:102470001000c393000043a01c00c28f010042243f -:102480001c00c2af8308400b0000000000000000e9 -:102490002000c38f1800c28f211862003c00c28f39 -:1024a000000043ac1c00c28f040040140000000078 -:1024b000060002244309400b000000002400c28fe4 -:1024c00000004390e50002240400621400000000b4 -:1024d0002400c28f05000324000043a02400c28f03 -:1024e0000b0043241000c2932100422c0400401032 -:1024f00000000000040002244109400b000000001d -:1025000021100000000062a02110000021e8c0039b -:102510003400bf8f3000be8f3800bd270800e003b5 -:1025200000000000d8ffbd272400bfaf2000beafd1 -:1025300021f0a0032800c4af2c00c5af2800c28f33 -:102540000000428c1400c2af5709400b000000008d -:102550002c00c28f010042242c00c2af2c00c28f7d -:10256000000043802f000224f9ff621000000000e9 -:102570002c00c28f000043805c000224f4ff621034 -:10258000000000002800c28f080040ac2c00c28f61 -:1025900000004280ff0042302000422c0b0040101f -:1025a000000000002800c28f80ff03242b0043a0fe -:1025b0002800c48f212800004205400f00000000c1 -:1025c0001000c2afb809400b000000002c00c22769 -:1025d0002800c48f212840006d08400f0000000033 -:1025e0001000c2af1000c28f330040140000000082 -:1025f0002800c48f5507400f000000001000c2af34 -:102600002800c28f2b0042901800c2a31000c28f76 -:102610000d004010000000001000c38f04000224d1 -:1026200028006214000000001800c2930400423029 -:102630002700401400000000050002241000c2af73 -:10264000b809400b000000001800c293040042309b -:1026500022004014000000002800c28f06004290b3 -:102660001000423005004014000000000500022464 -:102670001000c2afb809400b000000001400c28f68 -:10268000300043242800c28f1000428cff014230ea -:10269000211062001400c48f21284000b106400fb1 -:1026a00000000000211840002800c28f080043ac41 -:1026b0007309400b0000000000000000b809400b47 -:1026c0000000000000000000b809400b00000000fe -:1026d00000000000b809400b0000000000000000ee -:1026e0001000c28f21e8c0032400bf8f2000be8fde -:1026f0002800bd270800e00300000000e8ffbd2718 -:102700001400beaf21f0a0031800c4afffff0224e5 -:102710000400c2af1800c28f0000428c3f0040107e -:10272000000000001800c28f0000428c0000c2af01 -:10273000d109400b000000000000c28f01004224bc -:102740000000c2af0000c28f00004280ff00423094 -:102750002100422c06004014000000000000c28f3f -:10276000000043803a000224f3ff621400000000de -:102770000000c28f000043803a0002242600621449 -:10278000000000001800c28f0000428c0800c2af99 -:102790000800c28f000042800c00c2af0800c28f48 -:1027a000010042240800c2af0c00c28f3000422c4e -:1027b0001a004014000000000c00c28f3a00422ca6 -:1027c00016004010000000000800c38f0000c28ff8 -:1027d00012006214000000000c00c28fd0ff4224df -:1027e0000c00c2af0c00c28f0c00401400000000af -:1027f0000c00c28f0400c2af0000c28f010042244f -:102800000000c2af1800c28f0000c38f000043acad -:10281000070a400b000000000400c0af0400c28f94 -:1028200021e8c0031400be8f1800bd270800e00394 -:1028300000000000e8ffbd271400bfaf1000beafce -:1028400021f0a0031800c4af1c00c5af1800c28f50 -:10285000030040a01800c28fffff03242c0043acec -:102860001800c48f1c00c58f6701400f00000000d6 -:10287000040040100000000004000224590a400b2c -:10288000000000001800c28f2e02422421204000c8 -:102890000000400f000000002118400055aa02343b -:1028a000040062100000000003000224590a400bdb -:1028b000000000001800c28f30004390e90002249d -:1028c0000b006210000000001800c28f300043901f -:1028d000eb00022406006210000000001800c28f06 -:1028e00030004390e80002241d0062140000000044 -:1028f0001800c28f300042243600422421204000bc -:10290000019d023c948f452403000624c000400f23 -:10291000000000000400401400000000211000002e -:10292000590a400b000000001800c28f30004224fa -:102930005200422421204000019d023c988f4524f2 -:1029400005000624c000400f0000000004004014f1 -:102950000000000021100000590a400b0000000098 -:102960000200022421e8c0031400bf8f1000be8fb4 -:102970001800bd270800e00300000000a0ffbd27ed -:102980005c00bfaf5800beaf21f0a0036000c4af31 -:102990006400c5af2110c0006800c2a36400c28fec -:1029a000000040ac6000c48fbf09400f0000000071 -:1029b0002800c2af2800c28f0400410400000000bc -:1029c0000b000224890c400b000000002800c28f7d -:1029d0008018020014808227211062000000428cbf -:1029e0002c00c2af2c00c28f040040140000000075 -:1029f0000c000224890c400b000000006400c28f10 -:102a00002c00c38f000043ac6800c393feff022478 -:102a1000241062006800c2a32c00c28f0000429004 -:102a200018004010000000002c00c28f01004290ee -:102a3000212040004319400f000000003000c2a3d5 -:102a40003000c293010042300e004014000000002c -:102a50006800c29308004010000000003000c293dc -:102a60000400423004004010000000000a0002246c -:102a7000890c400b0000000021100000890c400b65 -:102a8000000000002c00c28f000040a02800c28f70 -:102a9000ff0043302c00c28f010043a02c00c28fe6 -:102aa00001004290212040005519400f0000000015 -:102ab0003000c2a33000c29301004230ff00423018 -:102ac000040040100000000003000224890c400ba9 -:102ad000000000006800c2930800401000000000e1 -:102ae0003000c29304004230040040100000000097 -:102af0000a000224890c400b000000001400c0af43 -:102b00002c00c48f1400c58f0d0a400f0000000078 -:102b10001000c2a31000c3930200022448006214f4 -:102b2000000000002400c0afe90a400b00000000d4 -:102b30002c00c28f300043242400c28f00110200f9 -:102b4000be014224211062003400c2af3400c28fa3 -:102b500004004224000042900900401000000000e0 -:102b60003400c28f08004224212040001700400f8b -:102b70000000000021184000e10a400b00000000a6 -:102b8000211800002400c28f801002001000c4270a -:102b900021108200340043ac2400c28f0100422483 -:102ba0002400c2af2400c28f0400422ce0ff401476 -:102bb000000000002400c0af2400c28f04004010b9 -:102bc000000000002400c28fffff42242400c2af97 -:102bd0002400c28f801002001000c3272110620061 -:102be0003400428c1400c2af1400c28f07004010a2 -:102bf000000000002c00c48f1400c58f0d0a400f88 -:102c000000000000040b400b000000000300022441 -:102c10001000c2a31000c2930200422c080040140e -:102c2000000000002400c28f010042242400c2af33 -:102c30002400c28f0400422ce5ff40140000000075 -:102c40001000c3930400022404006214000000007a -:102c500001000224890c400b000000001000c29308 -:102c60000200422c04004014000000000d00022469 -:102c7000890c400b000000002c00c28f3b00422456 -:102c8000212040000000400f0000000021184000fb -:102c90000002022404006210000000000d00022463 -:102ca000890c400b000000002c00c28f460042241b -:102cb000212040000000400f000000001800c2afbb -:102cc0001800c28f07004014000000002c00c28fc3 -:102cd00054004224212040001700400f0000000053 -:102ce0001800c2af2c00c28f1800c38f180043ac6d -:102cf0002c00c28f400043902c00c28f020043a0e2 -:102d00002c00c28f020043900100022409006210cf -:102d1000000000002c00c28f020043900200022439 -:102d200004006210000000000d000224890c400b1a -:102d3000000000002c00c28f020042901800c38fd8 -:102d4000021062701800c2af2c00c28f3d0042908a -:102d5000211840002c00c28f0a0043a42c00c28f0f -:102d60000a0042940a004010000000002c00c28fac -:102d70000a004294211840002c00c28f0a0042949d -:102d8000ffff4224241062000400401000000000f5 -:102d90000d000224890c400b000000002c00c28fa3 -:102da00041004224212040000000400f00000000ac -:102db000211840002c00c28f080043a42c00c28fb1 -:102dc000080042940f004230ffff423004004010e0 -:102dd000000000000d000224890c400b00000000e0 -:102de0002c00c28f43004224212040000000400fed -:102df000000000001c00c2af1c00c28f070040147e -:102e0000000000002c00c28f50004224212040000e -:102e10001700400f000000001c00c2af2c00c28f42 -:102e20003e004224212040000000400f000000002e -:102e30003800c2a73800c297040040140000000008 -:102e40000d000224890c400b000000003800c397dd -:102e50001800c28f211862002c00c28f0800429413 -:102e600002110200ffff4230211062003c00c2af9d -:102e70001c00c38f3c00c28f2b1062000400401066 -:102e8000000000000d000224890c400b000000002f -:102e90001c00c38f3c00c28f231862002c00c28f1d -:102ea0000a0042941b006200f40140001018000068 -:102eb000121000004000c2af4000c28f0400401456 -:102ec000000000000d000224890c400b00000000ef -:102ed0001000c0a34000c38fff0f023cf6ff423436 -:102ee0002b106200030040100000000003000224c9 -:102ef0001000c2a34000c38ff6ff02342b10620003 -:102f00000300401000000000020002241000c2a3d1 -:102f10004000c28ff60f422c03004010000000005a -:102f2000010002241000c2a31000c2930400401448 -:102f3000000000000d000224890c400b000000007e -:102f40004000c28f020043242c00c28f140043ac07 -:102f50002c00c28f1400c38f1c0043ac3800c397f1 -:102f60001400c28f211862002c00c28f200043acd5 -:102f70001400c38f3c00c28f211862002c00c28f46 -:102f8000280043ac1000c393030002242000621405 -:102f9000000000002c00c28f5a0042242120400073 -:102fa0000000400f0000000004004010000000007e -:102fb0000d000224890c400b000000002c00c28f81 -:102fc0000800429404004010000000000d0002249c -:102fd000890c400b000000002c00c28f5c004224d2 -:102fe000212040001700400f000000002118400081 -:102ff0002c00c28f240043ac2c00c28f1400428ce2 -:10300000801002002000c2af250c400b0000000021 -:103010002c00c28f080042940400401400000000fd -:103020000d000224890c400b000000002c00c28f10 -:103030002000438c1800c28f211862002c00c28f20 -:10304000240043ac1000c393020002240600621463 -:10305000000000002c00c28f1400428c40100200bf -:10306000240c400b000000002c00c28f1400438c85 -:10307000211060004010020021104300421802009d -:103080002c00c28f1400428c0100423021106200db -:103090002000c2af2c00c28f1800438c2000c28fca -:1030a000ff014224421202002b1062000400401073 -:1030b000000000000d000224890c400b00000000fd -:1030c0002c00c28fffff0324100043ac2c00c28fe2 -:1030d0001000438c2c00c28f0c0043ac2c00c28f1c -:1030e00080ff0324040043a01000c39303000224c4 -:1030f00041006214000000002c00c28f60004224d6 -:10310000212040000000400f000000002118400076 -:103110000100022438006214000000001400c28f75 -:10312000010042242c00c48f212840006701400f79 -:103130000000000030004014000000002c00c28f8e -:10314000040040a02c00c28f2e0242242120400007 -:103150000000400f000000002118400055aa023472 -:1031600025006214000000002c00c28f30004224b1 -:10317000212040001700400f0000000021184000ef -:103180006141023c525242341b00621400000000b4 -:103190002c00c28f14024224212040001700400f4f -:1031a00000000000211840004161023c727242346c -:1031b00011006214000000002c00c28f180242248b -:1031c000212040001700400f00000000211840009f -:1031d0002c00c28f100043ac2c00c28f1c02422472 -:1031e000212040001700400f00000000211840007f -:1031f0002c00c28f0c0043ac2c00c28f1000c39374 -:10320000000043a01880829701004224ffff423053 -:10321000188082a7188083972c00c28f060043a4d1 -:103220002110000021e8c0035c00bf8f5800be8f52 -:103230006000bd270800e00300000000e0ffbd279c -:103240001c00bfaf1800beaf21f0a0032000c4af28 -:103250002400c5af090002241000c2af2000c28fb5 -:103260001b004010000000002000c28f0000428cb4 -:1032700017004010000000002000c28f0000428ca8 -:103280000000429012004010000000002000c28f99 -:10329000040043942000c28f0000428c0600429438 -:1032a0000b006214000000002000c28f0000428c5e -:1032b00001004290212040004319400f000000000f -:1032c0000100423002004014000000001000c0afb6 -:1032d0001000c28f05004014000000002000c28fc3 -:1032e0000000428cbc0c400b0000000021100000cc -:1032f0002400c38f000062ac1000c28f21e8c0031d -:103300001c00bf8f1800be8f2000bd270800e003ff -:1033100000000000d8ffbd272400bfaf2000beafd3 -:1033200021f0a0032800c4af2c00c5af2110c000bd -:103330003000c2a32c00c28f1c00c2af1c00c227e9 -:1033400021204000bf09400f000000001000c2af64 -:103350001000c28f04004104000000000b00022492 -:10336000fe0c400b000000001000c28f801802000d -:1033700014808227211062000000428c1400c2af2a -:103380001400c28f03004010000000001400c28f20 -:10339000000040a02800c28f030040100000000081 -:1033a0002800c28f000040a02800c38f1000c28fe9 -:1033b000802002001480822721108200000043ac8c -:1033c0003000c293040040140000000021100000ef -:1033d000fe0c400b000000002c00c2272120400002 -:1033e0002800c527213000005f0a400f00000000c0 -:1033f0001800c2af1800c28f21e8c0032400bf8f9d -:103400002000be8f2800bd270800e0030000000058 -:1034100098ffbd276400bfaf6000beaf21f0a003de -:103420006800c4af6c00c5af2110c0007000c2a31b -:103430006800c28f0400401400000000090002244c -:10344000540e400b000000007000c2933f00423059 -:103450007000c2a37000c2936c00c4275800c32739 -:1034600021286000213040005f0a400f000000006a -:103470001000c2af1000c28f2f01401400000000e6 -:103480005800c28f2c00c2af6c00c28f2c00c32723 -:1034900021206000212840004909400f0000000061 -:1034a0001000c2af1000c28f0700401400000000df -:1034b0005700c2932014027c030041040000000066 -:1034c000060002241000c2af7000c2931c004230fc -:1034d00064004010000000001000c28f0f00401078 -:1034e000000000001000c38f0400022406006214d4 -:1034f000000000002c00c22721204000ac07400f34 -:10350000000000001000c2af7000c29308004234f7 -:103510007000c2a3550d400b000000003200c293a2 -:103520001100423005004010000000000700022496 -:103530001000c2af550d400b000000007000c29398 -:103540000400423003004010000000000800022484 -:103550001000c2af1000c28f5800401400000000dd -:103560007000c29308004230540040100000000078 -:103570005800c38f4800c28f2120600021284000de -:10358000b106400f000000001c00c2af4800c28f0f -:103590000e00422421204000214a053c5500400fe6 -:1035a000000000004800c28f0b00422420000324ca -:1035b000000043a05800c38f4800c28f2120600044 -:1035c0002128400021300000d206400f00000000fa -:1035d0004800c28f1c004224212040002128000006 -:1035e0005500400f000000005800c28f0100032466 -:1035f000030043a01c00c28f3000401000000000f8 -:103600005800c28f2c00428c2000c2af2c00c22771 -:10361000212040001c00c58f21300000a303400f73 -:10362000000000001000c2af1000c28f2300401441 -:10363000000000005800c28f212040002000c58fec -:103640006701400f000000001000c2af5800c28f99 -:103650001c00c38fffff63240c0043acaf0d400b75 -:10366000000000001000c28f140040140000000091 -:103670003200c293100042300500401000000000ec -:10368000040002241000c2afaf0d400b0000000088 -:103690007000c29302004230080040100000000099 -:1036a0003200c29301004230ff004230030040105c -:1036b00000000000070002241000c2af1000c28ffb -:1036c0000f004014000000007000c2930800423058 -:1036d00004004010000000007000c293400042341b -:1036e0007000c2a35800c28f2c00438c6800c28fa8 -:1036f000200043ac4800c38f6800c28f240043ac55 -:103700001000c28f8c004014000000005800c38fce -:103710004800c28f2120600021284000b106400fe0 -:1037200000000000211840006800c28f080043ac70 -:103730004800c28f1c004224212040001700400f87 -:1037400000000000211840006800c28f0c0043ac4c -:103750005800c38f6800c28f000043ac5800c28f6e -:10376000060043946800c28f040043a46800c28f1f -:103770007000c393100043a06800c28f110040a0e6 -:103780006800c28f1c0040ac6800c28f140040acbf -:103790006800c28f28004224212040002128000018 -:1037a00000020624a600400f000000007000c29333 -:1037b0002000423060004010000000006800c28f0e -:1037c0000c00428c5c004010000000006800c28fba -:1037d0000c00438c6800c28f140043ac5800c28fa9 -:1037e0000a004294401202002400c2af6800c28f57 -:1037f0000800428c1400c2af6800c28f0c00428cdb -:103800001800c2af190e400b000000006800c28f04 -:10381000212040001400c58f1a02400f0000000054 -:103820001400c2af1400c28f0200422c03004010eb -:1038300000000000020002241000c2af1400c38f79 -:10384000ffff0224030062140000000001000224b4 -:103850001000c2af1800c38f2400c28f2310620073 -:103860001800c2af1000c28f060040140000000014 -:103870001800c38f2400c28f2b104300e3ff4014b5 -:10388000000000006800c28f1400c38f180043ac12 -:103890001000c28f28004014000000001800c28fe2 -:1038a000ff01423024004010000000005800c28f89 -:1038b000212040001400c58ffb01400f00000000d4 -:1038c0002800c2af2800c28f05004014000000008d -:1038d000020002241000c2af4e0e400b0000000098 -:1038e0001800c28f421a02002800c28f21186200fd -:1038f0006800c28f1c0043ac5800c28f0100429088 -:10390000212040006800c28f280043246800c28f35 -:103910001c00428c21286000213040000100072457 -:103920001b1a400f000000000300401000000000c0 -:10393000010002241000c2af1000c28f030040102b -:10394000000000006800c28f000040ac1000c28f71 -:1039500021e8c0036400bf8f6000be8f6800bd27f0 -:103960000800e00300000000c0ffbd273c00bfaf1f -:103970003800beaf21f0a0034000c4af4400c5af83 -:103980004800c6af4c00c7af4400c28f2000c2af92 -:103990004c00c28f000040ac4000c38f3000c227f3 -:1039a00021206000212840008f0c400f0000000003 -:1039b0001000c2af1000c28f0700401400000000ca -:1039c0004000c28f110042901000c2af1000c28fa1 -:1039d00004004010000000001000c28f8b0f400b4d -:1039e000000000004000c28f1000429001004230f1 -:1039f0000400401400000000070002248b0f400b5d -:103a0000000000004000c28f0c00438c4000c28fb9 -:103a10001400428c231062002400c2af4800c38f00 -:103a20002400c28f2b104300fc0040100000000057 -:103a30002400c28f4800c2af870f400b0000000077 -:103a40004000c28f1400428cff014230c700401476 -:103a5000000000004000c28f1400428c421a020095 -:103a60003000c28f0a004294ffff422424106200fb -:103a70002800c2af2800c28f2900401400000000b7 -:103a80004000c28f1400428c060040140000000069 -:103a90004000c28f0800428c1400c2afb10e400b30 -:103aa000000000004000c38f4000c28f1800428c0d -:103ab00021206000212840001a02400f0000000071 -:103ac0001400c2af1400c28f0200422c0700401045 -:103ad000000000004000c28f02000324110043a038 -:103ae000020002248b0f400b000000001400c38f63 -:103af000ffff022407006214000000004000c28f94 -:103b000001000324110043a0010002248b0f400b8d -:103b1000000000004000c28f1400c38f180043aca7 -:103b20003000c38f4000c28f1800428c21206000fb -:103b300021284000fb01400f000000002c00c2af14 -:103b40002c00c28f07004014000000004000c28f0c -:103b500002000324110043a0020002248b0f400b3b -:103b6000000000002c00c38f2800c28f21106200cb -:103b70002c00c2af4800c28f421202001c00c2af2c -:103b80001c00c28f3f004010000000002800c38fbf -:103b90001c00c28f211862003000c28f0a004294bc -:103ba0002b10430007004010000000003000c28fbf -:103bb0000a004294211840002800c28f231062009e -:103bc0001c00c2af3000c28f010042902120400093 -:103bd0002000c58f2c00c68f1c00c78f1b1a400ffa -:103be0000000000007004010000000004000c28fed -:103bf00001000324110043a0010002248b0f400b9d -:103c0000000000004000c28f100042902014027c8f -:103c100017004104000000004000c28f1c00438ccc -:103c20002c00c28f231862001c00c28f2b10620070 -:103c30000f004010000000004000c28f1c00438ca9 -:103c40002c00c28f23106200401202002000c38f9c -:103c5000211862004000c28f280042242120600009 -:103c600021284000000206248400400f00000000cc -:103c70001c00c28f401202001800c2af730f400b2d -:103c8000000000004000c28f1c00438c2c00c28f3b -:103c900033006210000000004000c28f100042900c -:103ca0002014027c1b004104000000003000c28f81 -:103cb00001004290212040004000c28f2800432490 -:103cc0004000c28f1c00428c21286000213040003f -:103cd00001000724761a400f000000000700401082 -:103ce000000000004000c28f01000324110043a027 -:103cf000010002248b0f400b000000004000c28f27 -:103d0000100042907f004230ff0043304000c28fdd -:103d1000100043a03000c28f0100429021184000e3 -:103d20004000c28f2800422421206000212840004a -:103d30002c00c68f010007241b1a400f0000000052 -:103d400007004010000000004000c28f0100032463 -:103d5000110043a0010002248b0f400b0000000063 -:103d60004000c28f2c00c38f1c0043ac4000c28fa8 -:103d70001400428cff014230000203242310620031 -:103d80001800c2af1800c38f4800c28f2b10430029 -:103d900003004010000000004800c28f1800c2afae -:103da0004000c28f280043244000c28f1400428c80 -:103db000ff014230211062002000c48f2128400002 -:103dc0001800c68f8400400f000000004800c38f19 -:103dd0001800c28f231062004800c2af4c00c28f8f -:103de0000000438c1800c28f211862004c00c28f63 -:103df000000043ac2000c38f1800c28f2110620066 -:103e00002000c2af4000c28f1400438c1800c28f44 -:103e1000211862004000c28f140043ac4800c28fda -:103e200007ff4014000000002110000021e8c0033b -:103e30003c00bf8f3800be8f4000bd270800e00364 -:103e400000000000c8ffbd273400bfaf3000beaf88 -:103e500021f0a0033800c4af3c00c5af4000c6af9e -:103e60004400c7af3c00c28f2000c2af4400c28fe5 -:103e7000000040ac3800c38f2c00c2272120600016 -:103e8000212840008f0c400f000000001000c2af3e -:103e90001000c28f07004014000000003800c28fdd -:103ea000110042901000c2af1000c28f04004010f9 -:103eb000000000001000c28ff510400b0000000051 -:103ec0003800c28f100042900200423004004014bb -:103ed0000000000007000224f510400b0000000065 -:103ee0003800c28f1400438c4000c28f211862003a -:103ef0003800c28f1400428c2b1062002801401041 -:103f0000000000003800c28f1400428c271002000d -:103f10004000c2afe810400b000000003800c28f24 -:103f20001400428cff014230e20040140000000007 -:103f30003800c28f1400428c421a02002c00c28f3b -:103f40000a004294ffff4224241062002400c2af02 -:103f50002400c28f3c004014000000003800c28fd3 -:103f60001400428c0f004014000000003800c28f83 -:103f70000800428c1400c2af1400c28f110040141c -:103f8000000000003800c28f2120400021280000de -:103f90001104400f000000001400c2aff10f400bed -:103fa000000000003800c38f3800c28f1800428c18 -:103fb00021206000212840001104400f0000000073 -:103fc0001400c2af1400c28ffa00401000000000bd -:103fd0001400c38f010002240700621400000000d7 -:103fe0003800c28f02000324110043a00200022403 -:103ff000f510400b000000001400c38fffff0224e7 -:1040000007006214000000003800c28f0100032482 -:10401000110043a001000224f510400b0000000035 -:104020003800c28f1400c38f180043ac3800c28f11 -:104030000800428c04004014000000003800c28fc9 -:104040001400c38f080043ac3800c28f10004290a8 -:104050002014027c1b004104000000002c00c28fd1 -:1040600001004290212040003800c28f28004324e4 -:104070003800c28f1c00428c212860002130400093 -:1040800001000724761a400f0000000007004010ce -:10409000000000003800c28f01000324110043a07b -:1040a00001000224f510400b000000003800c28f10 -:1040b000100042907f004230ff0043303800c28f32 -:1040c000100043a02c00c38f3800c28f1800428c10 -:1040d0002120600021284000fb01400f000000006b -:1040e0002800c2af2800c28f070040140000000063 -:1040f0003800c28f02000324110043a002000224f2 -:10410000f510400b000000002800c38f2400c28f70 -:10411000211062002800c2af4000c28f421202008c -:104120001c00c2af1c00c28f400040100000000005 -:104130002400c38f1c00c28f211862002c00c28f84 -:104140000a0042942b1043000700401000000000ba -:104150002c00c28f0a004294211840002400c28f14 -:10416000231062001c00c2af2c00c28f01004290dd -:10417000212040002000c58f2800c68f1c00c78f5b -:10418000761a400f000000000700401000000000f9 -:104190003800c28f01000324110043a00100022453 -:1041a000f510400b000000003800c28f1c00438c4b -:1041b0002800c28f231862001c00c28f2b106200df -:1041c00015004010000000003800c28f2800432472 -:1041d0003800c28f1c00448c2800c28f231082003c -:1041e000401202002000c48f2110820021206000b4 -:1041f00021284000000206248400400f0000000037 -:104200003800c28f100042907f004230ff004330e0 -:104210003800c28f100043a01c00c28f4012020061 -:104220001800c2afcc10400b000000003800c28f55 -:104230001c00438c2800c28f1b006210000000008d -:104240003800c28f1400438c3800c28f0c00428c9f -:104250002b10620014004010000000002c00c28fe0 -:1042600001004290211840003800c28f28004224eb -:1042700021206000212840002800c68f010007246b -:104280001b1a400f00000000070040100000000053 -:104290003800c28f01000324110043a00100022452 -:1042a000f510400b000000003800c28f2800c38fbb -:1042b0001c0043ac3800c28f1400428cff01423016 -:1042c00000020324231062001800c2af1800c38f3d -:1042d0004000c28f2b10430003004010000000007c -:1042e0004000c28f1800c2af3800c28f280043249c -:1042f0003800c28f1400428cff014230211062004e -:10430000212040002000c58f1800c68f8400400f78 -:10431000000000003800c28f1000439080ff02248c -:1043200025106200ff0043303800c28f100043a008 -:104330004000c38f1800c28f231062004000c2af3c -:104340004400c28f0000438c1800c28f2118620005 -:104350004400c28f000043ac2000c38f1800c28ffe -:10436000211062002000c2af3800c28f1400438cbd -:104370001800c28f211862003800c28f140043acad -:104380003800c28f0c00438c3800c28f1400428c5e -:104390002b2062000b1844003800c28f0c0043ac85 -:1043a0004000c28fddfe401400000000ee10400b04 -:1043b00000000000000000003800c28f1000429092 -:1043c00040004234ff0043303800c28f100043a049 -:1043d0002110000021e8c0033400bf8f3000be8fe1 -:1043e0003800bd270800e00300000000d8ffbd270b -:1043f0002400bfaf2000beaf21f0a0032800c4af4f -:104400002800c38f1c00c227212060002128400003 -:104410008f0c400f000000001000c2af1000c28fd0 -:1044200066004014000000002800c28f1000429077 -:104430004000423061004010000000002800c28fa0 -:10444000100042902014027c18004104000000007b -:104450001c00c28f01004290212040002800c28f22 -:10446000280043242800c28f1c00428c21286000b1 -:104470002130400001000724761a400f00000000a0 -:104480000400401000000000010002247011400be5 -:10449000000000002800c28f100042907f004230d0 -:1044a000ff0043302800c28f100043a0214a023c85 -:1044b0001400c2af1c00c38f2800c28f2000428ca2 -:1044c00021206000212840006701400f000000000b -:1044d0001000c2af1000c28f38004014000000006e -:1044e0002800c28f2400428c1800c2af1800c28f6f -:1044f0000b0042241800c38f0b006324000063905c -:1045000020006334ff006330000043a02800c28f06 -:104510000000438c2800c28f0800428c21206000dc -:104520001800c58f21304000d206400f0000000067 -:104530001800c28f1c0043242800c28f0c00428c3c -:1045400021206000212840005500400f000000009d -:104550001800c28f16004224212040001400c58f8d -:104560005500400f000000001800c28f12004224c6 -:1045700021204000212800003900400f00000000e9 -:104580001c00c28f01000324030043a01c00c28f43 -:10459000212040009501400f000000001000c2af34 -:1045a0002800c28f10004390bfff02242410620035 -:1045b000ff0043302800c28f100043a01000c28fbc -:1045c00021e8c0032400bf8f2000be8f2800bd2734 -:1045d0000800e00300000000e0ffbd271c00bfafa3 -:1045e0001800beaf21f0a0032000c4af2000c48f8c -:1045f000fb10400f000000001000c2af1000c28f7f -:104600000d004014000000002000c38f1400c227da -:1046100021206000212840008f0c400f0000000086 -:104620001000c2af1000c28f030040140000000051 -:104630002000c28f000040ac1000c28f21e8c003f0 -:104640001c00bf8f1800be8f2000bd270800e003ac -:1046500000000000d0ffbd272c00bfaf2800beaf78 -:1046600021f0a0033000c4af3400c5af3000c38fc9 -:104670002400c22721206000212840008f0c400f19 -:10468000000000001000c2af1000c28f04004014f0 -:10469000000000003000c28f110042901000c2af35 -:1046a0001000c28f04004010000000001000c28ff4 -:1046b000cd12400b000000003000c28f0c00438c74 -:1046c0003400c28f2b10620009004010000000006f -:1046d0003000c28f100042900200423004004014ab -:1046e000000000003000c28f0c00428c3400c2afca -:1046f0003000c28f1400428c1c00c2af1800c0af43 -:104700003000c28f1800c38f140043ac3400c28f36 -:10471000b7004010000000002400c28f0a0042943d -:10472000401202002000c2af1c00c28f24004010c3 -:10473000000000003400c28fffff43242000c28f1e -:104740001b006200f401400010180000121000006d -:10475000211840001c00c28fffff44242000c28f9c -:104760001b008200f4014000102000001210000025 -:104770002b10620012004014000000001c00c28fc9 -:10478000ffff43242000c28f231002002418620080 -:104790003000c28f140043ac3000c28f1400428c32 -:1047a0003400c38f231062003400c2af3000c28fc8 -:1047b0001800428c1400c2af1612400b000000001b -:1047c0003000c28f0800428c1400c2af1400c28fa8 -:1047d0001e004014000000003000c28f2120400065 -:1047e000212800001104400f000000001400c2af97 -:1047f0001400c38f010002240700621400000000af -:104800003000c28f02000324110043a002000224e2 -:10481000cd12400b000000001400c38fffff0224e4 -:1048200007006214000000003000c28f0100032462 -:10483000110043a001000224cd12400b0000000033 -:104840003000c28f1400c38f080043ac3000c28f09 -:104850001400c38f180043ac1400c28f64004010d2 -:10486000000000005912400b000000003400c38f0c -:104870002000c28f231062003400c2af3000c28f0c -:104880001400438c2000c28f211862003000c28fb8 -:10489000140043ac3000c28f10004290020042303e -:1048a0000d004010000000003000c28f21204000a9 -:1048b0001400c58f1104400f000000001400c2afa7 -:1048c0001400c28f0a004014000000003400c0af82 -:1048d0005e12400b000000003000c28f212040001b -:1048e0001400c58f1a02400f000000001400c2af70 -:1048f0001400c38fffff02240700621400000000b1 -:104900003000c28f01000324110043a001000224e3 -:10491000cd12400b000000001400c28f0200422c98 -:1049200007004014000000002400c28f1400438cd4 -:104930001400c28f2b104300070040140000000039 -:104940003000c28f02000324110043a002000224a1 -:10495000cd12400b000000003000c28f1400c38f46 -:10496000180043ac3400c38f2000c28f2b104300cb -:10497000beff4014000000003000c28f1400438cc2 -:104980003400c28f211862003000c28f140043ac83 -:104990003400c28fff0142301500401000000000bb -:1049a0002400c28f212040001400c58ffb01400f5e -:1049b000000000001800c2af1800c28f07004014aa -:1049c000000000003000c28f02000324110043a049 -:1049d00002000224cd12400b000000003400c28f00 -:1049e000421202001800c38f211062001800c2afeb -:1049f0003000c28f1400438c3000c28f0c00428cf8 -:104a00002b1043000b004010000000003000c28f4c -:104a10001400438c3000c28f0c0043ac3000c28fb6 -:104a20001000429040004234ff0043303000c28ffb -:104a3000100043a03000c28f1400428cff014230ae -:104a40003b004010000000003000c28f1c00438c6f -:104a50001800c28f36006210000000003000c28fc4 -:104a6000100042902014027c1b0041040000000052 -:104a70002400c28f01004290212040003000c28fec -:104a8000280043243000c28f1c00428c2128600083 -:104a90002130400001000724761a400f000000007a -:104aa00007004010000000003000c28f0100032406 -:104ab000110043a001000224cd12400b00000000b1 -:104ac0003000c28f100042907f004230ff00433020 -:104ad0003000c28f100043a02400c28f010042901a -:104ae000211840003000c28f28004224212060009d -:104af000212840001800c68f010007241b1a400f10 -:104b00000000000007004010000000003000c28fcd -:104b100001000324110043a001000224cd12400b28 -:104b2000000000003000c28f1800c38f1c0043ac8f -:104b30001000c28f21e8c0032c00bf8f2800be8f59 -:104b40003000bd270800e00300000000e0ffbd27a3 -:104b50001c00bfaf1800beaf21f0a0032000c4afff -:104b60002400c5af2000c28f0400401400000000e4 -:104b7000090002242613400b000000002400c32774 -:104b80001400c227212060002128400021300000ad -:104b90005f0a400f000000001000c2af1000c28f7b -:104ba00037004014000000001400c38f2000c28fa3 -:104bb000000043ac2400c28f2000c48f2128400095 -:104bc0004909400f000000001000c2af1000c28f62 -:104bd00025004014000000002000c28f2b004290ee -:104be0002014027c14004004000000002000c28f4a -:104bf00006004290100042300d00401000000000fe -:104c00001400c38f2000c28f1c00428c2120600042 -:104c100021284000b106400f00000000211840008c -:104c20002000c28f080043ac0e13400b00000000b0 -:104c3000050002241000c2af1000c28f0a00401409 -:104c4000000000001400c28f060043942000c28fb1 -:104c5000040043a42000c48f212800004205400f17 -:104c6000000000001000c2af1000c38f0400022437 -:104c70000300621400000000050002241000c2af0f -:104c80001000c28f03004010000000002000c28fff -:104c9000000040ac1000c28f21e8c0031c00bf8f91 -:104ca0001800be8f2000bd270800e00300000000b0 -:104cb000e0ffbd271c00bfaf1800beaf21f0a0036e -:104cc0002000c4af2000c38f1400c2272120600041 -:104cd000212840008f0c400f000000001000c2afe0 -:104ce0001000c28f03004014000000002000c28f9b -:104cf000000040ac1000c28f21e8c0031c00bf8f31 -:104d00001800be8f2000bd270800e003000000004f -:104d1000e0ffbd271c00bfaf1800beaf21f0a0030d -:104d20002000c4af2400c5af2000c38f1400c227e9 -:104d300021206000212840008f0c400f000000005f -:104d40001000c2af1000c28f260040140000000007 -:104d50002400c28f08004014000000002000c48f0f -:104d6000212800004205400f000000001000c2afe3 -:104d70007913400b000000002000c48f21280000a0 -:104d8000f506400f000000001000c2af1000c38ff6 -:104d90000400022402006214000000001000c0aff2 -:104da0001000c28f0f004014000000002000c48fcc -:104db0002400c58f0008400f000000002000c48fb1 -:104dc00021280000ca05400f000000001000c2affb -:104dd0001000c38f040002240200621400000000cf -:104de0001000c0af1000c28f21e8c0031c00bf8fad -:104df0001800be8f2000bd270800e003000000005f -:104e0000b8ffbd274400bfaf4000beaf21f0a003f4 -:104e10004800c4af4c00c5af1400c2274800c427e7 -:104e200021284000213000005f0a400f00000000f0 -:104e30001000c2af1000c28f1b0040140000000021 -:104e40004800c28f1400c3272120600021284000a1 -:104e50004909400f000000001000c2af1000c28fcf -:104e600011004014000000003f00c2932014027c97 -:104e70000500410400000000060002241000c2af3b -:104e8000aa13400b000000004c00c28f0600401027 -:104e9000000000001400c227212040004c00c58ff4 -:104ea0000008400f000000001000c28f21e8c0037e -:104eb0004400bf8f4000be8f4800bd270800e003bc -:104ec00000000000b8ffbd274400bfaf4000beafe8 -:104ed00021f0a0034800c4af4c00c5af5000c6afde -:104ee0002800c2274800c4272128400021300000a4 -:104ef0005f0a400f000000001000c2af1000c28f18 -:104f000099004014000000002800c38f5000c28f99 -:104f1000000043ac2800c28f1000438c2800c28fd1 -:104f20001400428cfeff42242b1043000700401463 -:104f3000000000002800c28f1000438c4c00c28f7c -:104f4000000043ac5a14400b000000001400c0af36 -:104f50002800c28f00004390010002242d0062143b -:104f600000000000020002241800c2af2800c28f17 -:104f70002c00c2af2c00c227212040001800c58f92 -:104f80001a02400f000000002400c2af2400c38fab -:104f9000ffff02240500621400000000010002244b -:104fa0001000c2af4e14400b000000002400c38f5d -:104fb0000100022406006214000000000200022426 -:104fc0001000c2af000000004e14400b00000000b3 -:104fd0002400c28f04004014000000001400c28f9f -:104fe000010042241400c2af1800c28f0100422405 -:104ff0001800c2af2800c28f1400428c1800c38f63 -:105000002b106200dbff4014000000004e14400b28 -:10501000000000002800c28f1400428c1800c2afac -:105020002800c28f2000428c1c00c2af2000c0affd -:105030002000c28f0e004014000000002800c38f23 -:105040001c00c28f1c00c48f010084241c00c4af4c -:1050500021206000212840006701400f000000006f -:105060001000c2af1000c28f3200401400000000d8 -:105070002800c28f00004390020002241200621434 -:10508000000000002800c28f300043242000c28f9f -:1050900021106200212040000000400f00000000ad -:1050a00004004014000000001400c28f01004224dc -:1050b0001400c2af2000c28f020042242000c2af01 -:1050c0004214400b000000002800c28f300043242f -:1050d0002000c28f21106200212040001700400fe5 -:1050e0000000000000d8427c0400401400000000d2 -:1050f0001400c28f010042241400c2af2000c28fee -:10510000040042242000c2af2000c28fff014230c1 -:105110002000c2af1800c28fffff42241800c2afa8 -:105120001800c28fc2ff4014000000004e14400b54 -:1051300000000000000000004c00c28f1400c38f6c -:10514000000043ac2800c28f1400c38f100043ac92 -:105150002800c28f2800c38f0400639001006334cd -:10516000ff006330040043a01000c28f21e8c00399 -:105170004400bf8f4000be8f4800bd270800e003f9 -:1051800000000000d8ffbd272400bfaf2000beaf45 -:1051900021f0a0032800c4af2800c38f1800c22745 -:1051a00021206000212840008f0c400f00000000eb -:1051b0001000c2af1000c28f0700401400000000b2 -:1051c0002800c28f110042901000c2af1000c28fa1 -:1051d00004004010000000001000c28ff514400bc6 -:1051e000000000002800c28f1000429002004230f0 -:1051f000040040140000000007000224f514400bd6 -:10520000000000002800c28f1400438c2800c28fc9 -:105210000c00428c2b1062006d004010000000005a -:105220002800c28f1400428c0e00401400000000c1 -:105230002800c38f2800c28f0800428c2120600004 -:105240002128400021300000a303400f000000008f -:105250001000c2af2800c28f080040acc014400b41 -:10526000000000002800c38f2800c28f1800428c65 -:1052700021206000212840001a02400f0000000099 -:105280001400c2af1000c0af1400c38fffff022490 -:105290000300621400000000010002241000c2afed -:1052a0001400c38f010002240300621400000000f8 -:1052b000020002241000c2af1000c28f1000401480 -:1052c000000000001800c28f1400438c1400c28f2d -:1052d0002b1043000a004010000000002800c38f7c -:1052e0002800c28f1800428c212060001400c58f56 -:1052f00021304000a303400f000000001000c2afa7 -:105300002800c28f1400438c2800c28f0c0043accd -:105310002800c28f1000429040004234ff0043300a -:105320002800c28f100043a01000c28f1e0040143e -:10533000000000002800c28f100042902014027c60 -:1053400019004104000000001800c28f01004290c3 -:10535000212040002800c28f280043242800c28f4b -:105360001c00428c212860002130400001000724ed -:10537000761a400f000000000500401000000000f9 -:10538000010002241000c2afea14400b000000002c -:105390002800c28f100042907f004230ff0043304f -:1053a0002800c28f100043a01000c28f08004010d8 -:1053b000000000001000c28fff0043302800c28fa1 -:1053c000110043a01000c28ff514400b0000000034 -:1053d0001000c28f21e8c0032400bf8f2000be8fc1 -:1053e0002800bd270800e0030000000080ffbd2763 -:1053f0007c00bfaf7800beaf21f0a0038000c4af37 -:105400001400c0af7000c2278000c42721284000cc -:10541000020006245f0a400f000000001000c2af27 -:105420001000c28f64004014000000007000c28fa2 -:105430001800c2af8000c28f1800c327212060006f -:10544000212840004909400f000000001000c2afb1 -:105450001000c28f58004014000000004300c293a7 -:105460002014027c05004104000000000600022414 -:105470001000c2af2615400b000000001e00c293b2 -:1054800001004230ff0042300300401000000000e5 -:10549000070002241000c2af1000c28f2900401480 -:1054a000000000007000c38f3400c28f2120600014 -:1054b00021284000b106400f000000001400c2afd8 -:1054c0001e00c293100042301e0040100000000079 -:1054d0007000c28f4400c2af1400c28f4c00c2af34 -:1054e0004400c22721204000212800004205400f2f -:1054f000000000001000c2af1000c28f1100401465 -:10550000000000004400c2272120400021280000a4 -:10551000f506400f000000001000c2af1000c28f5f -:105520000300401400000000070002241000c2af76 -:105530001000c38f04000224020062140000000067 -:105540001000c0af1000c28f1b004014000000000c -:105550001800c22721204000e007400f0000000093 -:105560001000c2af1000c28f0b00401400000000fa -:105570001400c28f08004010000000001800c2276d -:10558000212040001400c58f21300000a303400fec -:10559000000000001000c2af1000c28f06004014cf -:1055a000000000007000c28f212040009501400fd4 -:1055b000000000001000c2af1000c28f21e8c0033d -:1055c0007c00bf8f7800be8f8000bd270800e003fd -:1055d00000000000a0ffbd275c00bfaf5800beafb9 -:1055e00021f0a0036000c4af5000c2276000c427b0 -:1055f00021284000020006245f0a400f000000003e -:105600001000c2af1000c28fa800401400000000bc -:105610005000c28f2400c2af6000c28f2400c32795 -:1056200021206000212840004909400f00000000af -:105630001000c2af1000c28f030040140000000031 -:10564000080002241000c2af1000c38f040002241f -:1056500096006214000000002400c22721204000b0 -:10566000212800001104400f000000001400c2af08 -:105670005000c28f0a004294401202003000c2afb4 -:105680001000c0af1400c28f0300401400000000df -:10569000070002241000c2af1400c38f01000224cf -:1056a0000300621400000000020002241000c2afd8 -:1056b0001400c38fffff02240300621400000000e7 -:1056c000010002241000c2af1000c28f0600401477 -:1056d000000000005000c28f212040002401400f34 -:1056e000000000001000c2af214a023c1800c2af07 -:1056f0001000c28f3d004014000000005000c28f17 -:10570000212040001400c58ff804400f0000000065 -:105710001000c2af1000c28f34004014000000001f -:105720005000c28f300042241c00c2af1c00c48f46 -:10573000200005240b000624a600400f00000000f6 -:105740001c00c28f2e000324000043a01c00c28f47 -:105750000b00422410000324000043a01c00c28f51 -:1057600016004224212040001800c58f5500400f2c -:10577000000000005000c28f212040001c00c58f97 -:105780001400c68fd206400f000000001c00c28f1c -:1057900020004224212040001c00c58f2000062448 -:1057a0008400400f000000001c00c28f2100422432 -:1057b0002e000324000043a02c00c28f2000c2afa3 -:1057c0005000c38f1c00c28f2000422421206000a3 -:1057d000212840002000c68fd206400f00000000a4 -:1057e0005000c28f01000324030043a01000c28fa9 -:1057f00006004014000000002400c22721204000c1 -:10580000ac07400f000000001000c2af1000c28fb4 -:1058100020004014000000004000c28f1c00c2aff6 -:105820001c00c28f16004224212040001800c58fa2 -:105830005500400f000000005000c28f21204000a2 -:105840001c00c58f1400c68fd206400f0000000058 -:105850001c00c28f0b00422410000324000043a050 -:105860005000c28f01000324030043a01000c28f28 -:105870000e004014000000005000c28f21204000a4 -:105880009501400f000000001000c2af2b16400b26 -:10589000000000002400c227212040001400c58f12 -:1058a00021300000a303400f000000001000c28f51 -:1058b00021e8c0035c00bf8f5800be8f6000bd2789 -:1058c0000800e0030000000058ffbd27a400bfafa0 -:1058d000a000beaf9c00b0af21f0a003a800c4aff1 -:1058e000ac00c5afac00c22721204000bf09400f6b -:1058f000000000007400c227a800c427212840002f -:10590000020006245f0a400f000000001000c2af32 -:105910001000c28faf004014000000007400c28f5e -:105920001c00c2afa800c28f1c00c327212060004a -:10593000212840004909400f000000001000c2afbc -:105940001000c28f07004014000000004700c293ff -:10595000a0004230030040100000000006000224b6 -:105960001000c2af1000c28f9a0040140000000067 -:105970003800c28f7800c327212060002128400012 -:10598000200006248400400f000000004800c327c8 -:105990001c00c22721206000212840002c00062482 -:1059a0008400400f00000000ac00c28f4800c327f5 -:1059b00021206000212840004909400f000000001c -:1059c0001000c2af1000c28f0e0040140000000093 -:1059d0005000c38f2400c28f080062140000000032 -:1059e0005800c38f2c00c28f040062140000000016 -:1059f000040002248016400b00000000080002246e -:105a00001000c2af1000c38f0400022461006214b2 -:105a1000000000004800c22721204000ac07400fd2 -:105a2000000000001000c2af1000c28f59004014e7 -:105a3000000000006400c28f1400c2af1400c28fc7 -:105a40000d0043247800c2270d004224212060006d -:105a500021284000130006248400400f00000000ad -:105a60001400c28f0b0042248300c393000043a0a4 -:105a70001400c28f0b0042240000429010004230fc -:105a800009004014000000001400c28f0b004224e3 -:105a90001400c38f0b006324000063902000633464 -:105aa000ff006330000043a07400c28f0100032494 -:105ab000030043a01400c28f0b0042240000429058 -:105ac0001000423033004010000000002400c38f5b -:105ad0005000c28f2f006210000000007400d08fb1 -:105ae0007400c28f212040001400c58fb106400f02 -:105af000000000002120000221284000fb01400f8f -:105b0000000000001800c2af1800c28f050040144a -:105b100000000000020002241000c2afe516400b96 -:105b2000000000007400c28f212040001800c58fc3 -:105b30006701400f000000001000c2af7400c28f68 -:105b4000500042241400c2af1000c28f1100401454 -:105b5000000000001400c28f0100422400004390a6 -:105b60002e0002240b006214000000007400c38f9a -:105b70005000c28f212060001400c58f21304000ea -:105b8000d206400f000000007400c28f0100032401 -:105b9000030043a01000c28f0e004014000000005c -:105ba0001c00c22721204000e007400f0000000039 -:105bb0001000c2af1000c28f0600401400000000a9 -:105bc0007400c28f212040009501400f00000000aa -:105bd0001000c2af1000c28f21e8c003a400bf8f25 -:105be000a000be8f9c00b08fa800bd270800e00376 -:105bf00000000000e8ffbd271400bfaf1000beafdb -:105c000021f0a00380bf023c005a40ac80bf033c9f -:105c1000005a628c010004244429827c005a62ac40 -:105c200080bf033c005a628c0442027c005a62ac82 -:105c300080bf033c005a628c010004248431827cc2 -:105c4000005a62ac2a17400f0000000080bf033cde -:105c5000005a628c01000424c47b827c005a62ac2e -:105c600021e8c0031400bf8f1000be8f1800bd27ad -:105c70000800e00300000000f8ffbd270400beafed -:105c800021f0a00380bf033c005a628cc47b027cdd -:105c9000005a62ac21e8c0030400be8f0800bd2793 -:105ca0000800e00300000000e8ffbd271400beafbd -:105cb00021f0a00380bf023c005a428cc003427c0a -:105cc000ff0042300000c2af80bf033c005a628c2c -:105cd000c47b027c005a62acc404023c00b442346f -:105ce0000400c2af409c02340800c2af0800c28f5b -:105cf000401002000400c38f1b006200f40140004a -:105d000010180000121000000c00c2af0800c28f73 -:105d1000401002000400c38f1b006200f401400029 -:105d20001010000004004010000000000c00c28fa2 -:105d3000010042240c00c2af0c00c28f0101422cb2 -:105d40000300401400000000000102240c00c2af58 -:105d50000c00c28f04004010000000000c00c28f35 -:105d6000ffff42240c00c2af0c00c28fff00423084 -:105d70002118400080bf023c305a43ac0000c28f63 -:105d8000ff00423001004230ff00443080bf033c3e -:105d9000005a628cc47b827c005a62ac21e8c0034a -:105da0001400be8f1800bd270800e00300000000ab -:105db000e8ffbd271400beaf21f0a00380bf023c66 -:105dc000005a428cc003427cff0042300000c2af48 -:105dd00080bf033c005a628cc47b027c005a62acd8 -:105de000c404023c00b442340400c2af3101023c9e -:105df000002d42340800c2af0800c28f40100200dc -:105e00000400c38f1b006200f40140001018000062 -:105e1000121000000c00c2af0800c28f4010020038 -:105e20000400c38f1b006200f4014000101000004a -:105e300004004010000000000c00c28f010042244a -:105e40000c00c2af0c00c28f0101422c03004014b1 -:105e500000000000000102240c00c2af0c00c28f41 -:105e600004004010000000000c00c28fffff42241d -:105e70000c00c2af0c00c28fff004230211840005e -:105e800080bf023c305a43ac0000c28fff0042305a -:105e900001004230ff00443080bf033c005a628c56 -:105ea000c47b827c005a62ac21e8c0031400be8f20 -:105eb0001800bd270800e00300000000f8ffbd2720 -:105ec0000400beaf21f0a003211080000800c2a38f -:105ed0000000000080bf023c105a428c0200423099 -:105ee000fcff4014000000000800c39380bf023c88 -:105ef000205a43ac0000000080bf023c105a428c84 -:105f000001004230fcff40100000000080bf023c56 -:105f1000205a428cff00423021e8c0030400be8fab -:105f20000800bd270800e00300000000f8ffbd27bf -:105f30000400beaf21f0a0030800c4af0c00c5af41 -:105f40000800c28f000042902118400080bf023c30 -:105f5000205a43ac0800c28f010042240800c2af9f -:105f60000000000080bf023c105a428c0100423009 -:105f7000fcff40100000000080bf023c205a428c11 -:105f80000800c28f000042902118400080bf023cf0 -:105f9000205a43ac0800c28f010042240800c2af5f -:105fa0000000000080bf023c105a428c01004230c9 -:105fb000fcff40100000000080bf023c205a428cd1 -:105fc0000c00c28ffeff42240c00c2af0c00c28f37 -:105fd000dbff40140000000021e8c0030400be8f76 -:105fe0000800bd270800e00300000000f8ffbd27ff -:105ff0000400beaf21f0a0030800c4af0c00c5af81 -:1060000080bf023cff000324205a43ac0000000084 -:1060100080bf023c105a428c01004230fcff40100d -:106020000000000080bf023c205a428cff00433039 -:106030000800c28f000043a00800c28f0100422464 -:106040000800c2af80bf023cff000324205a43accb -:106050000000000080bf023c105a428c0100423018 -:10606000fcff40100000000080bf023c205a428c20 -:10607000ff0043300800c28f000043a00800c28f19 -:10608000010042240800c2af0c00c28ffeff422470 -:106090000c00c2af0c00c28fd9ff401400000000fa -:1060a00021e8c0030400be8f0800bd270800e003fc -:1060b00000000000e0ffbd271c00bfaf1800beaf0e -:1060c00021f0a003f4010224208082afff00042409 -:1060d000af17400f000000001000c2a31000c393d0 -:1060e000ff00022404006210000000002080828f64 -:1060f000f6ff4014000000001000c293ff00423879 -:106100000100422c21e8c0031c00bf8f1800be8f85 -:106110002000bd270800e00300000000e8ffbd27c5 -:106120001400bfaf1000beaf21f0a00388bf033c36 -:10613000a061628c01000424444a827ca06162acac -:10614000ff000424af17400f0000000021e8c00347 -:106150001400bf8f1000be8f1800bd270800e00399 -:1061600000000000e8ffbd271400bfaf1000beaf65 -:1061700021f0a00388bf033ca061628c444a027cea -:10618000a06162acff000424af17400f00000000c4 -:106190002d18400f00000000040040100000000017 -:1061a000010002246e18400b000000004718400f49 -:1061b000000000002110000021e8c0031400bf8f80 -:1061c0001000be8f1800bd270800e003000000008b -:1061d000e0ffbd271c00bfaf1800beaf21f0a00339 -:1061e0002000c4af2400c5af640002241c8082af2d -:1061f000ff000424af17400f000000001000c2a3ee -:106200001000c393ff000224040062140000000089 -:106210001c80828ff6ff4014000000001000c39322 -:10622000fe000224040062100000000021100000a3 -:106230009918400b000000002000c48f2400c58f77 -:10624000fb17400f00000000ff000424af17400fb1 -:1062500000000000ff000424af17400f0000000002 -:106260000100022421e8c0031c00bf8f1800be8f6c -:106270002000bd270800e00300000000e0ffbd276c -:106280001c00bfaf1800beaf21f0a0032000c4afb8 -:106290002110a0002400c2a32d18400f0000000010 -:1062a000040040140000000021100000cc18400b36 -:1062b000000000002400c29321204000af17400fcf -:1062c000000000002400c393fd00022417006210a8 -:1062d000000000002000c48f00020524cb17400fef -:1062e00000000000ff000424af17400f0000000072 -:1062f000ff000424af17400f00000000ff0004243b -:10630000af17400f000000001000c2a31000c2939e -:106310001f0043300500022404006210000000004a -:1063200021100000cc18400b0000000001000224e6 -:1063300021e8c0031c00bf8f1800be8f2000bd27be -:106340000800e00300000000e0ffbd271c00bfaf15 -:106350001800beaf21f0a003211080002400c5afbb -:106360002000c2a32000c2831000410400000000ee -:106370002000c2937f0042302000c2a337000424d3 -:1063800021280000d218400f000000001100c2a315 -:106390001100c2930200422c0400401400000000cf -:1063a0001100c2933d19400b000000002000c39370 -:1063b0000c0002240a006210000000004718400f81 -:1063c000000000005918400f0000000004004014b5 -:1063d00000000000ff0002243d19400b00000000f7 -:1063e0002000c29340004234ff0042302120400090 -:1063f000af17400f000000002400c28f02160200f9 -:10640000ff00423021204000af17400f0000000085 -:106410002400c28f02140200ff00423021204000fd -:10642000af17400f000000002400c28f02120200cc -:10643000ff00423021204000af17400f0000000055 -:106440002400c28fff00423021204000af17400fd0 -:1064500000000000010002241000c2a32000c2932b -:10646000030040140000000095ff02241000c2a3a6 -:106470002000c393080002240300621400000000ff -:1064800087ff02241000c2a31000c2932120400005 -:10649000af17400f000000002000c3930c0002243f -:1064a0000400621400000000ff000424af17400f36 -:1064b000000000000a0002241000c2a3ff00042410 -:1064c000af17400f000000001100c2a31100c283eb -:1064d00007004104000000001000c293ffff4224a7 -:1064e0001000c2a31000c293f4ff4014000000008b -:1064f0001100c29321e8c0031c00bf8f1800be8f9b -:106500002000bd270800e00300000000f8ffbd27c1 -:106510000400beaf21f0a003211080000800c2a338 -:106520000800c29304004010000000000100022493 -:106530005019400b0000000010808293ff00423091 -:1065400021e8c0030400be8f0800bd270800e00357 -:1065500000000000d8ffbd272400bfaf2000beaf61 -:106560001c00b0af21f0a003211080002800c2a3be -:106570002800c29304004010000000000100022423 -:10658000141a400b0000000010808293ff0042307c -:10659000020042300500401000000000108082938d -:1065a000ff004230141a400b00000000fd16400f9f -:1065b000000000002a17400f000000000a0002241b -:1065c0001000c2a37919400b00000000ff00042452 -:1065d000af17400f000000001000c293ffff4224dd -:1065e0001000c2a31000c293f8ff40140000000086 -:1065f0001200c0a32120000021280000d218400f63 -:106600000000000021184000010002247b006214f9 -:1066100000000000e80302241c8082af080004246c -:10662000aa010524d218400f0000000021184000e4 -:10663000010002244b006214000000001000c0a3ff -:106640009d19400b000000001000d093ff000424af -:10665000af17400f00000000211840001000c227b3 -:1066600021105000040043a01000c29301004224f6 -:106670001000c2a31000c2930400422cf2ff401489 -:10668000000000001600c393010002245b006214a6 -:10669000000000001700c393aa00022457006214f0 -:1066a00000000000000000001c80828f07004010e6 -:1066b00000000000a90004240040053cd218400f4f -:1066c00000000000f8ff4014000000001c80828fd2 -:1066d0004a004010000000003a0004242128000075 -:1066e000d218400f000000004400401400000000d9 -:1066f0001000c0a3ca19400b000000001000d09386 -:10670000ff000424af17400f0000000021184000d4 -:106710001000c22721105000040043a01000c293b3 -:10672000010042241000c2a31000c2930400422cb6 -:10673000f2ff4014000000001400c29340004230f9 -:1067400004004010000000000c000224d619400b89 -:1067500000000000040002241200c2a3ff19400b35 -:1067600000000000a900042421280000d218400fd6 -:10677000000000000200422c070040100000000052 -:10678000020002241200c2a3a9ff02241100c2a326 -:10679000eb19400b00000000010002241200c2a30c -:1067a000010002241100c2a3000000001c80828f9f -:1067b00008004010000000001100c293212040009a -:1067c00021280000d218400f00000000f7ff4014fd -:1067d000000000001c80828f0700401000000000b5 -:1067e0001000042400020524d218400f000000000d -:1067f00002004010000000001200c0a31200c2936b -:10680000248082af4718400f000000001200c2939e -:106810000b0040100000000010808293ff00433006 -:10682000feff022424106200ff004230108082a389 -:106830006c17400f00000000121a400b000000000f -:106840001e17400f0000000010808293ff004230ae -:1068500021e8c0032400bf8f2000be8f1c00b08f32 -:106860002800bd270800e00300000000e8ffbd2766 -:106870001400bfaf1000beaf21f0a00321108000b4 -:106880001c00c5af2000c6af2400c7af1800c2a3cc -:106890001800c29304004014000000002400c28fbe -:1068a000040040140000000004000224701a400b91 -:1068b0000000000010808293ff004230010042304f -:1068c000ff004230040040100000000003000224da -:1068d000701a400b000000002480828f08004230b4 -:1068e00004004014000000002000c28f401202008b -:1068f0002000c2af2400c38f0100022410006214e4 -:1069000000000000110004242000c58fd218400fa1 -:106910000000000026004014000000001c00c48f8e -:10692000000205247418400f0000000020004010f1 -:10693000000000002400c0af6c1a400b00000000f3 -:10694000120004242000c58fd218400f0000000060 -:1069500017004014000000001c00c48f0002052432 -:106960007418400f000000000c00401000000000f0 -:106970001c00c28f000242241c00c2af2400c28f40 -:10698000ffff42242400c2af2400c28ff2ff401454 -:1069900000000000681a400b00000000000000002a -:1069a0000c00042421280000d218400f0000000031 -:1069b0004718400f000000002400c28f2b10020077 -:1069c00021e8c0031400bf8f1000be8f1800bd2740 -:1069d0000800e00300000000e8ffbd271400bfaf7f -:1069e0001000beaf21f0a003211080001c00c5af35 -:1069f0002000c6af2400c7af1800c2a31800c2937e -:106a000004004014000000002400c28f0400401461 -:106a10000000000004000224df1a400b0000000008 -:106a200010808293ff00423001004230ff0042306c -:106a3000040040100000000003000224df1a400b95 -:106a40000000000010808293ff00423004004230ba -:106a5000040040100000000002000224df1a400b76 -:106a6000000000002480828f08004230040040149f -:106a7000000000002000c28f401202002000c2afc0 -:106a80002400c38f010002241000621400000000e3 -:106a9000180004242000c58fd218400f0000000009 -:106aa00032004014000000001c00c48ffe000524ca -:106ab0009f18400f000000002c0040100000000054 -:106ac0002400c0afdb1a400b000000002480828f3e -:106ad000060042300500401000000000970004242a -:106ae0002400c58fd218400f0000000019000424b4 -:106af0002000c58fd218400f000000001b0040147a -:106b0000000000001c00c48ffc0005249f18400feb -:106b1000000000000c004010000000001c00c28fac -:106b2000000242241c00c2af2400c28fffff422497 -:106b30002400c2af2400c28ff2ff40140000000006 -:106b4000d31a400b000000000000000021200000cc -:106b5000fd0005249f18400f0000000003004014b2 -:106b600000000000010002242400c2af4718400fbb -:106b7000000000002400c28f2b10020021e8c00397 -:106b80001400bf8f1000be8f1800bd270800e0035f -:106b900000000000c0ffbd273c00bfaf3800beaf03 -:106ba0003400b0af21f0a003211880002110a00014 -:106bb0004800c6af4000c3a34400c2a34800c28f30 -:106bc0001800c2af4000c293040040100000000053 -:106bd00004000224631c400b00000000108082931c -:106be000ff00423001004230ff00423004004010fc -:106bf0000000000003000224631c400b00000000a2 -:106c0000010002241000c2af4400c2930f00432cc5 -:106c10002c0160100000000080180200009d023c62 -:106c2000346c4224211062000000428c08004000b5 -:106c300000000000706c009d8c6c009dc470009d75 -:106c4000bc6d009dc470009dc470009dc470009d0b -:106c50009c70009dc470009dc470009d3c6f009da1 -:106c6000586f009d986f009dd86f009d4070009deb -:106c70005918400f000000001601401000000000ed -:106c80001000c0af601c400b00000000090004248d -:106c900021280000d218400f00000000100140140d -:106ca000000000002000c227212040001000052421 -:106cb0007418400f000000000c014010000000009c -:106cc0002000c29382110200ff0043300100022421 -:106cd00013006214000000002900c2932118400034 -:106ce0002800c29300120200211062002118400007 -:106cf0002700c2933f0042300014020021106200be -:106d0000010042241c00c2af4800c28f1c00c38f88 -:106d1000801a0300000043ac6c1b400b0000000015 -:106d20002500c2930f004230ff0043302a00c29377 -:106d3000c2110200ff00423021106200ff00433008 -:106d40002900c29303004230ff004230401002008d -:106d5000ff00423021106200ff0042300200422456 -:106d60001400c2a32800c29382110200ff00423027 -:106d7000211840002700c2938010020021186200f1 -:106d80002600c293030042308012020021106200ec -:106d9000010042241c00c2af4800c28f1400c393fc -:106da000f7ff63241c00c48f04186400000043ac88 -:106db0001000c0af601c400b000000002480828fd8 -:106dc0000400423028004010000000008d00042420 -:106dd00021280000d218400f00000000c600401417 -:106de00000000000ff000424af17400f0000000067 -:106df0002000c22721204000100005247418400ff5 -:106e000000000000bf00401000000000300002241d -:106e10001400c2a38d1b400b00000000ff000424df -:106e2000af17400f000000001400c293ffff422480 -:106e30001400c2a31400c293f8ff40140000000025 -:106e40004800c28f2a00c39302190300ff00633079 -:106e50001000042404186400000043ac1000c0af0c -:106e6000601c400b000000000900042421280000e1 -:106e7000d218400f00000000a500401400000000e0 -:106e80002000c22721204000100005247418400f64 -:106e900000000000a1004010000000002480828f4c -:106ea0000200423012004010000000004800c28f73 -:106eb0002a00c3933f006330402003002b00c3939c -:106ec000c2190300ff00633021188300010064240d -:106ed0002d00c39382190300ff006330ffff63247a -:106ee00004186400000043accc1b400b0000000001 -:106ef0004800c28f2a00c3937c00633083180300cc -:106f0000ffff6330010065242b00c393030063304f -:106f1000c02003002b00c39342190300ff0063301d -:106f200021188300010063240218a370000043ac01 -:106f30001000c0af601c400b000000002480828f56 -:106f4000ff0043301800c28f000043a01000c0af04 -:106f5000601c400b000000000900042421280000f0 -:106f6000d218400f000000006f0040140000000025 -:106f70004800c28f21204000100005247418400fe3 -:106f8000000000006b004010000000001000c0afc7 -:106f9000601c400b000000000a00042421280000af -:106fa000d218400f000000006500401400000000ef -:106fb0004800c28f21204000100005247418400fa3 -:106fc0000000000061004010000000001000c0af91 -:106fd000601c400b000000003a000424212800003f -:106fe000d218400f000000005b00401400000000b9 -:106ff0001400c0a3091c400b000000004800c38f10 -:107000001400c29321806200ff000424af17400fd8 -:1070100000000000000002a21400c29301004224fc -:107020001400c2a31400c2930400422cf3ff4014c6 -:10703000000000001000c0af601c400b000000000a -:107040002480828f0400423046004010000000007f -:107050008d00042421280000d218400f00000000f9 -:107060004300401400000000ff000424af17400f4d -:10707000000000004800c28f21204000400005248d -:107080007418400f000000003c0040100000000099 -:107090001000c0af601c400b000000001e17400f26 -:1070a0000000000010808293ff0042300100423453 -:1070b000ff004230108082a31000c0af601c400b64 -:1070c00000000000040002241000c2af601c400b4e -:1070d0000000000000000000601c400b00000000e9 -:1070e00000000000601c400b0000000000000000d9 -:1070f000601c400b0000000000000000601c400b02 -:107100000000000000000000601c400b00000000b8 -:1071100000000000601c400b0000000000000000a8 -:10712000601c400b0000000000000000601c400bd1 -:107130000000000000000000601c400b0000000088 -:1071400000000000601c400b000000000000000078 -:10715000601c400b0000000000000000601c400ba1 -:107160000000000000000000601c400b0000000058 -:1071700000000000601c400b000000000000000048 -:107180004718400f000000001000c28f21e8c00324 -:107190003c00bf8f3800be8f3400b08f4000bd2749 -:1071a0000800e00300000000f0ffbd270c00beafa8 -:1071b00021f0a0031c80828f0000c2af0000c28fac -:1071c00006004010000000000000c28fffff4224b4 -:1071d0000000c2af0000c28f1c8082af2080828f6f -:1071e0000000c2af0000c28f060040100000000087 -:1071f0000000c28fffff42240000c2af0000c28f18 -:10720000208082af108082930400c2a30400c39345 -:10721000fbff0224241062000400c2a30400c393f5 -:10722000fdff0224241062000400c2a30400c293e4 -:10723000108082a321e8c0030c00be8f1000bd2780 -:107240000800e00300000000e8ffbd271400bfaf06 -:107250001000beaf21f0a003bc1d400f00000000d5 -:10726000488080af408080af508080af21e8c0036d -:107270001400bf8f1000be8f1800bd270800e00368 -:1072800000000000e8ffbd271400bfaf1000beaf34 -:1072900021f0a003211080001800c2a34880838f32 -:1072a00001000224070062140000000021200000f9 -:1072b00008000524241e400f000000007b1d400b29 -:1072c000000000004080838f01000224040062144b -:1072d00000000000408080af7b1d400b00000000dc -:1072e0002880828f0900432cba0060100000000043 -:1072f00080180200009d023c0c73422421106200a1 -:107300000000428c08004000000000003073009d27 -:107310005073009d6c73009d9073009dd475009d0b -:10732000d475009dd475009d5474009d9475009d86 -:107330001800c383baff0224ab00621400000000ef -:1073400001000224288082af7b1d400b000000005a -:107350001800c283ff004230348082af0200022452 -:10736000288082af7b1d400b000000001800c28304 -:10737000ffff4230ff004230ffff42303c8082a7d7 -:1073800003000224288082af7b1d400b0000000018 -:107390001800c28300120200201e027c3c808297eb -:1073a0002016027c251062002016027cffff42306e -:1073b0003c8082a73c8082970140422c0900401407 -:1073c00000000000bc1d400f000000002120000054 -:1073d00005000524241e400f000000007b1d400b0b -:1073e000000000003c80829705004014000000006f -:1073f00008000224288082af7b1d400b00000000a3 -:107400003480838f070002240e0062140000000005 -:107410003c808297faff422403004230090040106a -:1074200000000000bc1d400f0000000021200000f3 -:1074300006000524241e400f000000007b1d400ba9 -:107440000000000007000224288082af7b1d400b53 -:10745000000000002c8083831800c2932610620075 -:107460002014027c2c8082a33080828f1800c3936a -:10747000000043a001004224308082af3480838f1b -:107480000700022432006214000000004480838f51 -:1074900003000224090062140000000000a0023c66 -:1074a0004c0042240000438c00a0023c4c0143ac41 -:1074b00000a0023c4c004224308082af4480838f85 -:1074c000050002240a0062140000000000a0023c33 -:1074d0004c0042240000439400a0023c4c01422492 -:1074e000040043a400a0023c4c004224308082af40 -:1074f0004480828f0600422c1500401400000000da -:107500005080838f030002240e00621400000000ec -:10751000508080af3880828f00a0033c4c006324f1 -:107520000000638c000043ac04004224388082af2a -:1075300000a0023c4c004224308082af541d400b1e -:10754000000000005080828f01004224508082aff2 -:107550004480828f01004224448082af3c80829725 -:10756000211840004480828f2b10430005004014f6 -:107570000000000008000224288082af7b1d400b21 -:107580000000000007000224288082af7b1d400b12 -:10759000000000002c8082831800c3830500621461 -:1075a0000000000001000224488082af7b1d400bd8 -:1075b000000000002120000004000524241e400fcc -:1075c00000000000bc1d400f000000007b1d400bb0 -:1075d00000000000bc1d400f000000000000000083 -:1075e0007b1d400b000000000000000021e8c003ec -:1075f0001400bf8f1000be8f1800bd270800e003e5 -:1076000000000000e8ffbd271400bfaf1000beafb0 -:1076100021f0a0033480828f0900432c0a006010ff -:10762000000000000500432c17006010000000005f -:10763000feff42240200422c200040100000000007 -:10764000a21d400b000000000c0003241700431093 -:10765000000000000d00432c060060100000000038 -:107660000a00422c1500401400000000a21d400b2f -:1076700000000000fa0003240a004310000000008c -:10768000af1d400b000000003480828f01000424f5 -:1076900021284000b81f400f00000000b41d400b1f -:1076a00000000000e823400f000000000100022459 -:1076b000408082afb41d400b00000000212000007c -:1076c00007000524241e400f0000000000000000f9 -:1076d000bc1d400f0000000021e8c0031400bf8f54 -:1076e0001000be8f1800bd270800e0030000000056 -:1076f000f8ffbd270400beaf21f0a003288080afb3 -:107700004c8080af448080af3c8080a7348080afc5 -:1077100000a0023c4c004224308082af2c8080a329 -:1077200000a0023c54014224388082af21e8c0030b -:107730000400be8f0800bd270800e0030000000021 -:10774000e0ffbd271c00bfaf1800beaf21f0a003b3 -:107750002000c4af2400c5af2800c6af1400c0a3ea -:107760002800c28f050042240101422c040040146d -:1077700000000000211000001e1e400b0000000051 -:1077800000a0023cbaff0324544143a02000c28f52 -:10779000201c027c00a0023c54414224010043a072 -:1077a0002800c28f201c027c00a0023c54414224cd -:1077b000020043a02800c28f02120200201c027c9b -:1077c00000a0023c54414224030043a01000c0af7b -:1077d000091e400b000000002400c28f00004380ff -:1077e0001400c293261062001400c2a31000c28fbe -:1077f000040044242400c28f0000438000a0023c07 -:107800005441422421108200000043a02400c28f72 -:10781000010042242400c2af1000c28f01004224a4 -:107820001000c2af1000c38f2800c28f2b1062005f -:10783000e9ff4014000000002800c28f0400432428 -:1078400000a0023c54414224211062001400c39362 -:10785000000043a02800c28f0500422400a0033c82 -:1078600054416424212840001e23400f00000000e2 -:107870002800c28f0500422421e8c0031c00bf8fee -:107880001800be8f2000bd270800e00300000000a4 -:10789000e0ffbd271c00bfaf1800beaf21f0a00362 -:1078a0002000c4af2400c5af2000c28f2014027c8a -:1078b0001000c2a32400c28f2014027c1100c2a3b6 -:1078c000212000001000c2272128400002000624c9 -:1078d000d01d400f0000000021e8c0031c00bf8f36 -:1078e0001800be8f2000bd270800e0030000000044 -:1078f000f8ffbd270400beaf21f0a00321e8c003bc -:107900000400be8f0800bd270800e003000000004f -:10791000f0ffbd270c00beaf21f0a0031000c4afe4 -:1079200081bf023c1000c38f00f443ac0000c0af25 -:10793000521e400b0000c0af400000000000c28f8c -:10794000010042240000c2af0000c28ff4014228af -:10795000f9ff40140000000081bf023c99aa033cdb -:107960005566633410f443ac81bf023c6655033c5a -:10797000aa99633410f443ac81bf023c0080033405 -:1079800008f443ac0000000081bf023c00f4428ccc -:1079900000804230fcff4014000000004000000066 -:1079a00081bf023c0040032404f443ac81bf023c8d -:1079b00000f4428c0030423021e8c0030c00be8f3e -:1079c0000800e0031000bd27e0ffbd271c00bfaf8b -:1079d0001800beaf21f0a0032000c4af2400c5af43 -:1079e00081bf023c2400c38f30f443ac2000c28f1f -:1079f00000e0437c81bf023c20f443ac01400424fe -:107a0000441e400f000000001000c2af1000c28fe3 -:107a100021e8c0031c00bf8f1800be8f2000bd27c7 -:107a20000800e00300000000e0ffbd271c00bfaf1e -:107a30001800beaf21f0a0032000c4af2400c5afe2 -:107a40002000c28f00e0437c81bf023c20f443aca5 -:107a50002400c28f00e0437c81bf023c40f443ac71 -:107a600003400424441e400f000000001000c2af79 -:107a70001000c28f21e8c0031c00bf8f1800be8f0a -:107a80002000bd270800e00300000000c8ffbd275c -:107a90003400bfaf3000beaf21f0a0033800c4af48 -:107aa0003c00c5af4000c6af4000c28f801002004e -:107ab0001c00c2af1800c0af3c00c28f0000428c57 -:107ac0002000c2af3800c28f1000c2af4000c28f8a -:107ad0008000422c25004010000000001400c0afc0 -:107ae000cd1e400b000000003c00c28f0000428c05 -:107af0002000c2af3c00c28f040042243c00c2af51 -:107b00001000c48f2000c58f721e400f00000000bf -:107b10001800c38f251062001800c2af1000c28f7a -:107b2000040042241000c2af1400c28f010042249e -:107b30001400c2af1400c38f4000c28f2b1062002c -:107b4000e9ff4014000000001800c28f040040103c -:107b50000000000001000224671f400b000000002d -:107b600021100000671f400b000000004000c28f82 -:107b7000c21102002400c2af2800c0afe21e400bb9 -:107b800000000000000000001000c28fff01423022 -:107b90001c004010000000003c00c28f0000428c1e -:107ba0003c00c38f040063243c00c3af1000c48fab -:107bb00021284000721e400f000000001800c38ff3 -:107bc000251062001800c2af1000c28f04004224ca -:107bd0001000c2af4000c28fffff42244000c2af7e -:107be0001000c28fff0142303b0040100000000037 -:107bf0004000c28fe8ff401400000000361f400b19 -:107c0000000000004000c28f7f004230220040147c -:107c1000000000001400c0af181f400b000000005f -:107c20001000c48f3c00c58f8a1e400f000000006a -:107c30001800c38f251062001800c2af1000c28f59 -:107c4000000242241000c2af3c00c28f0002422456 -:107c50003c00c2af1400c28f010042241400c2af26 -:107c60001400c38f2400c28f2b106200ecff40145d -:107c7000000000001800c28f040040100000000047 -:107c800001000224671f400b0000000021100000cb -:107c9000671f400b000000001000c48f3c00c58f20 -:107ca0008a1e400f000000001800c38f25106200dc -:107cb0001800c2af1000c28f000242241000c2aff1 -:107cc0003c00c28f000242243c00c2af4000c28f81 -:107cd00080ff42244000c2af4000c28f8000422c8f -:107ce00024004010000000001400c0af4f1f400be4 -:107cf000000000003c00c28f0000428c3c00c38f9b -:107d0000040063243c00c3af1000c48f212840004e -:107d1000721e400f000000001800c38f2510620083 -:107d20001800c2af1000c28f040042241000c2af7e -:107d30001400c28f010042241400c2af1400c38f8c -:107d40004000c28f2b106200eaff401400000000c8 -:107d50001800c28f0400401000000000010002243f -:107d6000671f400b0000000021100000671f400b40 -:107d7000000000004000c28f82ff4014000000009d -:107d80001800c28f0400401000000000010002240f -:107d9000671f400b000000002110000021e8c00315 -:107da0003400bf8f3000be8f3800bd270800e003cd -:107db00000000000d8ffbd272400bfaf2000beafe9 -:107dc00021f0a0031000c0af009d023c002042340f -:107dd0001800c2af1400c0af891f400b00000000a4 -:107de0001800c48f9a1f400f000000001000c38fbe -:107df000251062001000c2af1000c28f03004010b7 -:107e0000000000001800c28f1c00c2af1800c28f13 -:107e1000001042241800c2af1400c28f0100422497 -:107e20001400c2af1400c28f3e00422cecff40147d -:107e3000000000001000c28f04004010000000008d -:107e400001000224941f400b0000000021100000dc -:107e500021e8c0032400bf8f2000be8f2800bd276b -:107e60000800e00300000000e0ffbd271c00bfafda -:107e70001800beaf21f0a0032000c4af2000c28fc5 -:107e800000e0437c81bf023c20f443ac0440042466 -:107e9000441e400f000000001000c2af1000c28f4f -:107ea00021e8c0031c00bf8f1800be8f2000bd2733 -:107eb0000800e00300000000f8ffbd270400beaf8b -:107ec00021f0a003548080af588080af21e8c00328 -:107ed0000400be8f0800bd270800e003000000007a -:107ee000c8ffbd273400bfaf3000beaf21f0a003f4 -:107ef0003800c4af3c00c5af5480828f010003241a -:107f00005d004310000000000100432c09006014d4 -:107f10000000000002000324a20043100000000043 -:107f200003000324e100431000000000f920400b8f -:107f3000000000003800c28f010003243f004310fe -:107f4000000000000100432c060060140000000047 -:107f5000020003244500431000000000f920400bfc -:107f6000000000005880828f1600033c60e36334f9 -:107f70002b18430001006338ff00633001004224e6 -:107f8000588082af2b0060100000000052000224d5 -:107f90001000c2a3650002241100c2a362000224e3 -:107fa0001200c2a36f0002241300c2a36f000224b8 -:107fb0001400c2a3740002241500c2a369000224a5 -:107fc0001600c2a36e0002241700c2a36700022499 -:107fd0001800c2a3200002241900c2a369000224d1 -:107fe0001a00c2a36e0002241b00c2a320000224b8 -:107ff0001c00c2a3610002241d00c2a37000022461 -:108000001e00c2a3700002241f00c2a30d000224a0 -:108010002000c2a31000c227212040001100052427 -:108020001e23400f00000000588080afff20400f4b -:10803000000000001c20400b000000003c00c38f2b -:108040000200022407006214000000000100022464 -:10805000548082af0100042421280000241e400f18 -:10806000000000001c20400b000000000000000089 -:10807000f920400b000000003800c28f01000324eb -:108080000b004310000000000100432c06006014a8 -:1080900000000000020003243a004310000000002a -:1080a000f920400b000000006720400b000000009a -:1080b0003c00c28ffbff42240700432c2f006010be -:1080c0000000000080180200019d023ce080422474 -:1080d000211062000000428c0800400000000000f7 -:1080e0001c81009dfc80009d7c81009d3881009d4d -:1080f0007c81009d5081009d7881009d02000224ba -:10810000548082af0100042421280000241e400f67 -:10811000000000005f20400b000000000400042469 -:108120002128000021300000d01d400f0000000079 -:108130005f20400b00000000010004242128000003 -:10814000241e400f00000000e823400f0000000044 -:10815000010002242e00c2a32e00c227090004241d -:108160002128400001000624d01d400f000000001f -:108170005f20400b00000000000000006720400b63 -:10818000000000000100042421280000241e400fec -:1081900000000000e823400f00000000f920400b21 -:1081a000000000003800c28f010003240b004310c0 -:1081b000000000000100432c0600601400000000d5 -:1081c000020003243600431000000000f920400b99 -:1081d00000000000a920400b000000003c00c38ffd -:1081e00003000224260062140000000000a0023cec -:1081f0004c004390a5000224190062140000000006 -:108200000100042402000524241e400f0000000089 -:108210006d1f400f0000000009004010000000002a -:10822000212000000c000524241e400f0000000047 -:1082300001000224548082afa920400b00000000fe -:1082400003000224548082af01000424212800008e -:10825000241e400f00000000a620400b000000007c -:1082600001000224548082af212000000a0005246e -:10827000241e400f00000000a620400b000000005c -:1082800001000224548082af212000000b0005244d -:10829000241e400f00000000a920400b0000000039 -:1082a00000000000f920400b000000003800c28fe1 -:1082b0000100032409004310000000000100432cca -:1082c0004300601400000000020003244300431038 -:1082d00000000000f920400b000000003c00c28fad -:1082e00007000324060043100000000008000324d8 -:1082f0002e00431000000000f820400b000000009a -:108300000100042403000524241e400f0000000087 -:1083100000a0023c4c01438c001d023c0020423472 -:108320002b10620007004010000000002120000018 -:108330000e000524241e400f00000000f220400b18 -:108340000000000000a0023c4c01428c21184000bb -:1083500000a0023c4c014224040042942120600011 -:1083600000a0033c5401652421304000a31e400faf -:108370000000000007004010000000002120000065 -:108380000d000524241e400f00000000f220400bc9 -:10839000000000000100042421280000241e400fda -:1083a00000000000f220400b000000000100042447 -:1083b00021280000241e400f00000000ff20400f75 -:1083c0000000000000000000f820400b000000004a -:1083d00000000000f820400b00000000000000003a -:1083e0000000000021e8c0033400bf8f3000be8fc2 -:1083f0003800bd270800e00300000000e0ffbd27b3 -:108400001c00bfaf1800beaf21f0a003009d023cce -:10841000003042341000c2af1000c28f09f8400093 -:108420000000000021e8c0031c00bf8f1800be8fb1 -:108430002000bd270800e00300000000f8ffbd2772 -:108440000400beaf21f0a0030800c4af0c00c5af0c -:1084500021e8c0030400be8f0800bd270800e00328 -:108460000000000070ffbd278c00bfaf8800beafca -:1084700021f0a003a304023c008042342000c2afdc -:10848000050002242400c2af9124400f0000000028 -:108490002800c2af88bf023c40000324042043ac44 -:1084a0002400c28f01004230ff0042301d00401006 -:1084b000000000002000c28f2c00c2af3000c0af0f -:1084c0003a21400b000000003000c28f010042241e -:1084d0003000c2af2c00c38f36fe023c803c4234d9 -:1084e000211062002c00c2af2c00c38fc901023cd6 -:1084f00081c342342b106200f3ff401000000000e3 -:108500009124400f000000003400c2af88bf023c3d -:108510003000c38f004043ac3400c48f7824400f38 -:10852000000000002400c28f0200423068004010aa -:10853000000000002000c28f3800c2af3800c28f98 -:108540003c00c2af3800c38fc404023c01b44234c3 -:108550002b10620008004014000000000800023cdc -:108560004000c2af3c00c28f421002003c00c2afcc -:108570005f21400b000000004000c0af4000c28ff0 -:108580004400c2af9124400f000000004800c2af79 -:1085900088bf023c0030428c0003427cff00423026 -:1085a0004c00c2af4c00c28f090040140000000014 -:1085b00088bf023c00100324083043ac88bf023c53 -:1085c0000030428c00084230fcff401400000000e4 -:1085d0004c00c28f5000c2af81bf023c30f240acb1 -:1085e00081bf023c99aa033c5566633430f243ac28 -:1085f00081bf023c6655033caa99633430f243ac18 -:1086000081bf023c00f0428c8400c2af8400c28f64 -:10861000c4a4027c8400c2af8400c38f4400c28f14 -:10862000251062008400c2af8400c38f81bf023c6a -:1086300000f043ac81bf023c00f0428c8400c2af2a -:1086400081bf023c3333033c3333633430f243acf9 -:108650005000c28f5400c2af5400c28f13004010ac -:108660000000000088bf023c0030428c0003427cc6 -:10867000ff0042305800c2af5800c28f10004014b3 -:108680000000000088bf023c00100324083043ac07 -:1086900088bf023c0030428c00084230fcff40148e -:1086a00000000000b121400b0000000088bf023c28 -:1086b00000100324043043acb121400b0000000043 -:1086c000000000004800c48f7824400f0000000024 -:1086d0002400c28f040042300c0040100000000053 -:1086e00088bf023c0040428c5c00c2af5c00c28f7d -:1086f000300042345c00c2af88bf023c5c00c38fd4 -:10870000004043ac8524400f000000002000c28fd1 -:108710006000c2af81bf023c00f0428cc00c427cc2 -:10872000ff0042306000c38f061043006000c2affc -:108730002800c48f7824400f0000000081bf023c55 -:10874000ffff0334609043ac7a22400f000000002a -:108750003c1e400f00000000921c400f0000000073 -:10876000ae1f400f000000000624400f0000000074 -:108770001000a0af21200000212800000100023cd1 -:1087800000c2463421380000cc22400f0000000017 -:10879000010004242128000021300000d01d400fda -:1087a0000000000088bf033c2061628c4429027ce9 -:1087b000206162ac420002246400c2a36f00022464 -:1087c0006500c2a36f0002246600c2a374000224e5 -:1087d0006700c2a36c0002246800c2a36f000224d9 -:1087e0006900c2a3610002246a00c2a364000224db -:1087f0006b00c2a3650002246c00c2a372000224b5 -:108800006d00c2a3200002246e00c2a35600022401 -:108810006f00c2a3300002247000c2a32e00022405 -:108820007100c2a3300002247200c2a331000224ee -:108830007300c2a30d0002247400c2a36400c22707 -:1088400021204000110005241e23400f00000000dd -:108850001800c0af1c00c0af1922400b0000000080 -:10886000000000005f23400f000000000a004018d5 -:108870000000000088bf023c2061428c4000423072 -:108880000100422cff00443088bf033c2061628c11 -:108890008431827c206162ac4880828f0400401069 -:1088a00000000000811d400f00000000488080afe4 -:1088b0002120000021280000b81f400f0000000008 -:1088c0001800c28f010042241800c2af1800c38fe5 -:1088d0000100023ca08642342a106200e0ff4014ee -:1088e0000000000088bf023c2061428c4001427cb5 -:1088f000ff00423027100200ff00423001004230ea -:10890000ff00443088bf033c2061628c4429827c94 -:10891000206162ac1800c0af1c00c0af1922400b30 -:1089200000000000c8ffbd273400bfaf3000beaf5d -:1089300021f0a003450002241000c2a37800022405 -:108940001100c2a3630002241200c2a36500022426 -:108950001300c2a3700002241400c2a374000224f6 -:108960001500c2a3690002241600c2a36f000224ee -:108970001700c2a36e0002241800c2a32000022424 -:108980001900c2a36f0002241a00c2a363000224cc -:108990001b00c2a3630002241c00c2a375000224b2 -:1089a0001d00c2a3720002241e00c2a37200022492 -:1089b0001f00c2a3650002242000c2a36400022499 -:1089c0002100c2a30d0002242200c2a31000c2276e -:1089d00021204000130005241e23400f000000004a -:1089e000e823400f00000000f8ffbd270400beafe1 -:1089f00021f0a00380bf023c106840ac80bf033c64 -:108a00001068628c010004248452827c106862ac7d -:108a100088bf033c1011628c050004248420827cf2 -:108a2000101162ac88bf033c1011628c0200042458 -:108a30000408827c101162ac80bf033c1068628c19 -:108a400001000424847b827c106862ac88bf033cf4 -:108a50004010628c8452027c401062ac88bf033ca0 -:108a60007010628c8452027c701062ac80bf033c38 -:108a70001068628c8439027c106862ac88bf033c49 -:108a80004010628c444a027c401062ac88bf033cb8 -:108a90007010628c444a027c701062ac80bf033c50 -:108aa0001068628c010004240463827c106862ac4c -:108ab00080bf033c0068628cc47b027c006862acaf -:108ac00000a0023c544240ac00a0023c544242246c -:108ad000040040ac00a0023c54424224080040acd8 -:108ae00000a0023c544242240c0040ac00a0023cd6 -:108af00054424224100040ac00a0023c54424224a4 -:108b0000140040ac00a0023c54424224180040ac87 -:108b100000a0023c544242241c0040ac21e8c003a7 -:108b20000400be8f0800bd270800e003000000001d -:108b3000f0ffbd270c00beaf21f0a0031000c4afb2 -:108b40001400c5af1800c6af1c00c7af1800c28f15 -:108b500080180200a304023c008042341a00430043 -:108b6000f40160001018000012100000ffff422402 -:108b70000400c2af0000c0af1c00c28f090040104b -:108b8000000000000100032407004314000000005f -:108b90000000c28f010042340000c2afea22400b45 -:108ba000000000000000000000a0023c54424224eb -:108bb0001400c38f040043ac00a0023c5442422482 -:108bc0001000c38f080043ac2000c28f01000324b3 -:108bd00006004310000000000200032408004310b8 -:108be000000000000423400b000000000000c28fc2 -:108bf000020042340000c2af0423400b000000001a -:108c00000000c28f040042340000c2af0000000028 -:108c10000000c38f80bf023c006843ac80bf033cb0 -:108c20000068628c01000424c418827c006862ac75 -:108c30000400c38f80bf023c406843ac80bf033c4c -:108c40000068628c01000424c47b827c006862acf2 -:108c500000a0023c5442422401000324180043ac0b -:108c60000100022421e8c0030c00be8f1000bd27c4 -:108c70000800e00300000000f0ffbd270c00beafbd -:108c800021f0a0031000c4af1400c5af00a0023c47 -:108c9000544242241800428c04004014000000009a -:108ca000030002245a23400b0000000000a0023cf5 -:108cb000544242241400428c040040100000000082 -:108cc000020002245a23400b0000000000a0023cd6 -:108cd0001000c38f544243ac00a0023c54424224d3 -:108ce0001400c38f0c0043ac00a0023c5442422449 -:108cf000100040ac00a0023c54424224140040ac9e -:108d00000000c0af5423400b000000001000c28fd1 -:108d1000000042802118400080bf023c206843ac24 -:108d20001000c28f010042241000c2af00000000fa -:108d300080bf023c1068428c00014230fcff4010b2 -:108d4000000000000000c28f010042240000c2affa -:108d50000000c38f1400c28f2a106200ebff401482 -:108d6000000000000100022421e8c0030c00be8fb7 -:108d70001000bd270800e00300000000e0ffbd2751 -:108d80001c00bfaf1800beaf21f0a0031000c0afa1 -:108d90007023400b0000000080bf023c3068428c12 -:108da0001400c2a31400c28321204000a11c400f64 -:108db000000000001000c28f010042241000c2af6a -:108dc00080bf023c1068428c01004230f2ff401428 -:108dd000000000001000c28f21e8c0031c00bf8ffc -:108de0001800be8f2000bd270800e003000000002f -:108df000f8ffbd270400beaf21f0a00380bf033cf5 -:108e00000068628cc47b027c006862ac80bf023c5c -:108e1000106840ac21e8c0030400be8f0800bd27e5 -:088e20000800e003000000005f +:10000000e0ffbd271c00beaf21f0a00388bf033c6a +:100010002061628c01000424c418827c206162acdf +:10002000c404023c00b442340000c2af7d01023c73 +:10003000407842340400c2af0400c28f4010020076 +:100040000000c38f1b006200f40140001018000084 +:10005000121000000800c2af0400c28f401002005e +:100060000000c38f1b006200f4014000101000006c +:1000700004004010000000000800c28f010042246c +:100080000800c2af0800c28f0101422c03004014d7 +:1000900000000000000102240800c2af0800c28f67 +:1000a00004004010000000000800c28fffff42243f +:1000b0000800c2af0800c28fff004230218082a337 +:1000c000c404023c00b442340c00c2af1602023c2d +:1000d000c00e42341000c2af1000c28f40100200a8 +:1000e0000c00c38f1b006200f401400010180000d8 +:1000f000121000001400c2af1000c28f40100200a6 +:100100000c00c38f1b006200f401400010100000bf +:1001100004004010000000001400c28f01004224bf +:100120001400c2af1400c28f0101422c030040141e +:1001300000000000000102241400c2af1400c28fae +:1001400004004010000000001400c28fffff422492 +:100150001400c2af1400c28fff004230208082a37f +:1001600021e8c0031c00be8f2000bd270800e0036b +:1001700000000000c8ffbd273400bfaf3000beaf95 +:1001800021f0a0030b01400f0000000021184000e7 +:10019000010002244d00621400000000ba00400f6c +:1001a0000000000088bf033c2061628cc418027c00 +:1001b000206162ac20808293010004242128400049 +:1001c000c40d400f00000000208082932120000019 +:1001d00021284000c40d400f0000000088bf033cf0 +:1001e0002061628c01000424c418827c206162ac0e +:1001f00001000424d300400f00000000530002243b +:100200001000c2a3500002241100c2a3490002241e +:100210001200c2a3200002241300c2a3460002243d +:100220001400c2a36c0002241500c2a361000224c2 +:100230001600c2a3730002241700c2a368000224a0 +:100240001800c2a3200002241900c2a34300022404 +:100250001a00c2a36f0002241b00c2a36e00022476 +:100260001c00c2a3660002241d00c2a36900022470 +:100270001e00c2a3670002241f00c2a3750002244f +:100280002000c2a3720002242100c2a36500022440 +:100290002200c2a3640002242300c2a30a00022495 +:1002a0002400c2a30d0002242500c2a31000c2270f +:1002b0002120400016000524710c400f00000000b2 +:1002c00001000224b400400b0000000021100000d7 +:1002d00021e8c0033400bf8f3000be8f3800bd2737 +:1002e0000800e00300000000e8ffbd271400bfafd6 +:1002f0001000beaf21f0a00388bf033c2061628cd8 +:10030000c418027c206162ac208082930600042421 +:1003100021284000c40d400f0000000088bf033cae +:100320002061628c01000424c418827c206162accc +:100330000100022421e8c0031400bf8f1000be8f0b +:100340001800bd270800e00300000000e0ffbd2703 +:100350001c00bfaf1800beaf21f0a0032000c4af47 +:1003600088bf033c2061628cc418027c206162acaf +:10037000218082930500042421284000c40d400ff1 +:10038000000000001000c2a3218082932120000001 +:1003900021284000c40d400f000000001000c2a33f +:1003a00088bf033c2061628c01000424c418827c55 +:1003b000206162ac1000c29321e8c0031c00bf8f13 +:1003c0001800be8f2000bd270800e00300000000d9 +:1003d000e0ffbd271c00bfaf1800beaf21f0a00397 +:1003e00021200000d300400f000000001000c2a335 +:1003f0001000c29301004230ff0042300400401060 +:1004000000000000010002240501400b0000000074 +:100410002110000021e8c0031c00bf8f1800be8f10 +:100420002000bd270800e00300000000e0ffbd271a +:100430001c00bfaf1800beaf21f0a00388bf033c73 +:100440002061628cc418027c206162ac218082939e +:100450009000042421284000c40d400f000000003b +:10046000218082932120000021284000c40d400fec +:1004700000000000218082932120000021284000fc +:10048000c40d400f00000000218082932120000055 +:1004900021284000c40d400f0000000021808293fd +:1004a0002120000021284000c40d400f0000000062 +:1004b0001000c2a321808293212000002128400047 +:1004c000c40d400f000000001100c2a388bf033c10 +:1004d0002061628c01000424c418827c206162ac1b +:1004e0001000c393bf000224050062140000000046 +:1004f0001100c393410002240400621000000000b8 +:10050000211000004401400b000000000100022403 +:1005100021e8c0031c00bf8f1800be8f2000bd273c +:100520000800e00300000000e0ffbd271c00bfaf93 +:100530001800beaf21f0a0032000c4af2400c5af57 +:100540002800c6af2800c38f2400c28f211062008c +:10055000ffff43242000023c2a10620004004014e4 +:100560000000000021100000a401400b000000006a +:1005700088bf033c2061628cc418027c206162ac9d +:10058000218082930b00042421284000c40d400fd9 +:10059000000000002800c38fff00023c241062000e +:1005a00003140200ff004230211840002080829393 +:1005b0002120600021284000c40d400f00000000f1 +:1005c0002800c28f00ff423003120200ff004230b9 +:1005d00021184000208082932120600021284000c3 +:1005e000c40d400f000000002800c28fff00423001 +:1005f00021184000208082932120600021284000a3 +:10060000c40d400f000000002080829321200000d4 +:1006100021284000c40d400f000000001000c0afb2 +:100620009901400b0000000020808293de0004242a +:1006300021284000c40d400f000000001400c2a398 +:100640002000c28f1400c393000043a02000c28f7b +:10065000010042242000c2af1000c28f01004224da +:100660001000c2af1000c38f2400c28f2a10620096 +:10067000edff40140000000088bf033c2061628c45 +:1006800001000424c418827c206162ac01000224b1 +:1006900021e8c0031c00bf8f1800be8f2000bd27bb +:1006a0000800e00300000000e8ffbd271400bfaf12 +:1006b0001000beaf21f0a0031800c4af1800c28f15 +:1006c000ff0f423004004010000000002110000025 +:1006d000ee01400b00000000ba00400f00000000d7 +:1006e00088bf033c2061628cc418027c206162ac2c +:1006f000208082932000042421284000c40d400f54 +:10070000000000001800c38fff00023c24106200ac +:1007100003140200ff004230211840002080829321 +:100720002120600021284000c40d400f000000007f +:100730001800c28f00ff423003120200ff00423057 +:100740002118400020808293212060002128400051 +:10075000c40d400f000000001800c28fff0042309f +:100760002118400020808293212060002128400031 +:10077000c40d400f0000000088bf033c2061628c64 +:1007800001000424c418827c206162ac1800c28f6e +:10079000010042241800c2af00000000f400400f26 +:1007a000000000002118400001000224fbff62103d +:1007b000000000000100022421e8c0031400bf8fe4 +:1007c0001000be8f1800bd270800e00300000000e5 +:1007d000e8ffbd271400bfaf1000beaf21f0a0039b +:1007e0001800c4af1c00c5af1800c28fffff423015 +:1007f0000400401000000000211000004302400be4 +:10080000000000001800c38fffff023421186200af +:100810002000023c2a106200040040140000000086 +:10082000211000004302400b00000000ba00400ffe +:100830000000000088bf033c2061628cc418027c69 +:10084000206162ac20808293d800042421284000db +:10085000c40d400f000000001800c38fff00023cd1 +:100860002410620003140200ff00423021184000ef +:10087000208082932120600021284000c40d400f79 +:10088000000000001800c28f00ff42300312020077 +:10089000ff00423021184000208082932120600018 +:1008a00021284000c40d400f000000001800c28f36 +:1008b000ff004230211840002080829321206000f8 +:1008c00021284000c40d400f0000000088bf033cf9 +:1008d0002061628c01000424c418827c206162ac17 +:1008e0001c00c28f08004010000000000000000043 +:1008f000f400400f00000000211840000100022415 +:10090000fbff6210000000000100022421e8c00388 +:100910001400bf8f1000be8f1800bd270800e00331 +:1009200000000000d8ffbd272400bfaf2000beafed +:1009300021f0a0032800c4af2c00c5af2800c28f4f +:10094000ff0f4230040040100000000021100000a2 +:10095000b202400b000000002c00c38f01000224f3 +:1009600004006214000000002800c48faa01400f98 +:100970000000000000a0023c404042241000c2af32 +:100980001400c0afad02400b000000001000c28f89 +:10099000000042901800c2a3ba00400f00000000ff +:1009a0002800c38fff00023c2410620003140200e1 +:1009b0001900c2a32800c28f00ff423003120200b8 +:1009c0001a00c2a32800c28f1b00c2a31c00c0af24 +:1009d00088bf033c2061628cc418027c206162ac39 +:1009e000208082930200042421284000c40d400f7f +:1009f000000000001900c29321184000208082935b +:100a00002120600021284000c40d400f000000009c +:100a10001a00c29321184000208082932120600098 +:100a200021284000c40d400f000000001b00c293ad +:100a3000211840002080829321206000212840005e +:100a4000c40d400f000000001800c3932080829363 +:100a50002120600021284000c40d400f000000004c +:100a600088bf033c2061628c01000424c418827c8e +:100a7000206162ac1000c28f010042241000c2af9e +:100a80002800c28f010042242800c2af00000000ed +:100a9000f400400f00000000211840000100022473 +:100aa000fbff6210000000001400c28f010042240e +:100ab0001400c2af1400c28f00104228b3ff4014cc +:100ac000000000000100022421e8c0032400bf8fc1 +:100ad0002000be8f2800bd270800e00300000000b2 +:100ae000e8ffbd271400bfaf1000beaf21f0a00388 +:100af0001800c4af2110a0002000c6af1c00c2a384 +:100b00001800c38f2000023c2b1062000400401428 +:100b100000000000211000000703400b000000004f +:100b2000ba00400f0000000088bf033c2061628cc7 +:100b3000c418027c206162ac2080829302000424ed +:100b400021284000c40d400f000000001800c38f92 +:100b5000ff00023c2410620002140200ff00423039 +:100b6000211840002080829321206000212840002d +:100b7000c40d400f000000001800c28f00ff42307b +:100b800002120200ff0042302118400020808293b0 +:100b90002120600021284000c40d400f000000000b +:100ba0001800c28fff00423021184000208082933d +:100bb0002120600021284000c40d400f00000000eb +:100bc0001c00c293211840002080829321206000e5 +:100bd00021284000c40d400f0000000088bf033ce6 +:100be0002061628c01000424c418827c206162ac04 +:100bf0002000c28f0800401000000000000000002c +:100c0000f400400f00000000211840000100022401 +:100c1000fbff6210000000000100022421e8c00375 +:100c20001400bf8f1000be8f1800bd270800e0031e +:100c300000000000c8ffbd273400bfaf3000beafca +:100c400021f0a0033800c4af3c00c5af4000c6afe0 +:100c50001c00c0af4000c38f3c00c28f2110620057 +:100c60002000c2af4000c28f1000c2af3800c28f58 +:100c70001400c2af2000c38f2000023c2a10620083 +:100c80004c00401400000000211000007103400bd4 +:100c9000000000001000c28fff0f43240000442812 +:100ca0000b10640003130200001302002400c2af03 +:100cb00000a0023c40404424001005242400c68fbc +:100cc0004a01400f000000002118400001000224ea +:100cd0000400621000000000211000007103400bae +:100ce0000000000000a0023c404043241000c48fdc +:100cf0002400c28f23108200211062001800c2afae +:100d00002800c0af6a03400b000000001400c28f2f +:100d1000000043801800c28f000043a01800c28f5b +:100d2000010042241800c2af1400c28f0100422407 +:100d30001400c2af1000c28f010042241000c2afe5 +:100d40001000c38f2000c28f0b006214000000004f +:100d5000010002242800c2af010002241c00c2af1f +:100d60002400c48f010005244902400f0000000048 +:100d70006d03400b000000001000c28fff0f4230d7 +:100d80000900401400000000010002242800c2af46 +:100d90002400c48f010005244902400f0000000018 +:100da0006d03400b000000002800c28fd7ff4010e9 +:100db000000000001c00c28fb6ff401000000000c1 +:100dc0000100022421e8c0033400bf8f3000be8f31 +:100dd0003800bd270800e00300000000f8ffbd2731 +:100de0000400beaf21f0a00301000224188082afee +:100df0001c8080af148080af21e8c0030400be8f48 +:100e00000800bd270800e00300000000a0febd2789 +:100e10005c01bfaf5801beaf21f0a0036001c4afb9 +:100e20006401c5af1880828f0700432cbf0160109a +:100e30000000000080180200009d023c500e422479 +:100e4000211062000000428c0800400000000000f9 +:100e50003815009d6c0e009d940f009de40f009dc1 +:100e60003011009d4414009d3815009d6001c28f13 +:100e70000300401000000000e303400b00000000ee +:100e80008308400f000000002480829301000324a7 +:100e90002a00431000000000020003243300431026 +:100ea000000000003500401400000000470002244c +:100eb0004800c2a36f0002244900c2a369000224b3 +:100ec0004a00c2a36e0002244b00c2a367000224a2 +:100ed0004c00c2a3200002244d00c2a353000224f0 +:100ee0004e00c2a3740002244f00c2a36400022477 +:100ef0005000c2a3620002245100c2a37900022460 +:100f00005200c2a30a0002245300c2a30d0002240f +:100f10005400c2a34800c227212040000d00052430 +:100f2000710c400f00000000188080af5805400f82 +:100f300000000000e203400b0000000025808393c6 +:100f4000a800022405006214000000000200022430 +:100f5000188082afd903400b000000005805400ff5 +:100f600000000000e203400b000000005805400fa5 +:100f700000000000e203400b000000005805400f95 +:100f80000000000000000000000000005205400bbf +:100f9000000000006001c28f03004010000000004c +:100fa000f703400b000000006b07400f000000003b +:100fb0002118400001000224050062140000000016 +:100fc00003000224188082aff603400b00000000eb +:100fd0005805400f00000000000000005205400bc3 +:100fe000000000006001c28f0300401000000000fc +:100ff0004a04400b00000000270a400f00000000d8 +:1010000021184000010002242300621400000000a7 +:10101000460002246800c2a36c0002246900c2a337 +:10102000610002246a00c2a3730002246b00c2a301 +:10103000680002246c00c2a3200002246d00c2a339 +:10104000450002246e00c2a3720002246f00c2a3f6 +:10105000720002247000c2a36f0002247100c2a3b8 +:10106000720002247200c2a30a0002247300c2a309 +:101070000d0002247400c2a36800c2272120400092 +:101080000d000524710c400f00000000188080af97 +:101090004a04400b00000000460002248800c2a35e +:1010a0006c0002248900c2a3610002248a00c2a34a +:1010b000730002248b00c2a3680002248c00c2a328 +:1010c000200002248d00c2a3450002248e00c2a38a +:1010d000720002248f00c2a3610002249000c2a308 +:1010e000730002249100c2a3650002249200c2a3ef +:1010f000640002249300c2a30a0002249400c2a345 +:101100000d0002249500c2a38800c22721204000c0 +:101110000e000524710c400f0000000004000224a2 +:10112000188082af000000005205400b0000000054 +:101130006001c28fc2004014000000001800023c91 +:101140001000c2aff000c227212040001800052483 +:101150001000c68f4a01400f00000000f000c227b7 +:10116000212040009a08400f000000001c00c2af80 +:10117000f000c22704004224212040009a08400fba +:10118000000000002000c2aff000c2270800422487 +:10119000212040009a08400f000000002400c2af48 +:1011a000f000c2270c004224212040009a08400f82 +:1011b000000000002800c2aff000c2271000422447 +:1011c000212040009a08400f000000002c00c2af10 +:1011d000f000c22714004224212040009a08400f4a +:1011e000000000003000c2af1000c28f180042247f +:1011f0001000c2af2400c28f8d004010000000001c +:101200001400c0af3400c0af0905400b000000005f +:10121000f000c227212040000c0005241000c68fda +:101220004a01400f00000000f000c22721204000ca +:101230009a08400f000000003800c2aff000c2273b +:1012400004004224212040009a08400f00000000c2 +:101250003c00c2af3c00c28f821002003c00c2af13 +:10126000f000c22708004224212040009a08400fc5 +:10127000000000004000c2af1000c28f0c004224ea +:101280001000c2af00a0023c4000c38f180043ac66 +:101290003c00c28fffff433000a0023c18004224f4 +:1012a000040043a41800c0afc504400b00000000b8 +:1012b000a800c22721204000040005241000c68f8a +:1012c0004a01400f00000000a800c2272120400072 +:1012d000c808400f000000004400c2af4400c38fa4 +:1012e00000a0023c1800c48f020084248020040067 +:1012f0001800422421108200000043ac1000c28f6d +:10130000040042241000c2af1800c28f0100422422 +:101310001800c2af1800c38f3c00c28f2b106200b0 +:10132000e3ff40140000000000a0023c1800438cc2 +:10133000001d023c004042342b1062002e0040147d +:101340000000000000a0023c1800428c2118400060 +:1013500000a0023c180042240400429421206000b6 +:1013600000a0033c20006524213040005d09400faf +:101370000000000020004010000000005700022480 +:10138000ac00c2a372000224ad00c2a36900022413 +:10139000ae00c2a374000224af00c2a36500022401 +:1013a000b000c2a320000224b100c2a34500022461 +:1013b000b200c2a372000224b300c2a372000224ce +:1013c000b400c2a36f000224b500c2a372000224bd +:1013d000b600c2a30a000224b700c2a30d00022473 +:1013e000b800c2a3ac00c227212040000d00052494 +:1013f000710c400f000000001400c28f0100422455 +:101400001400c2af1400c38f2400c28f0500621401 +:1014100000000000010002243400c2af0c05400ba4 +:10142000000000003400c28f79ff4010000000006f +:1014300005000224188082af1105400b0000000057 +:10144000000000006001c28f3e0040140000000058 +:10145000188080af46000224cc00c2a36c00022496 +:10146000cd00c2a361000224ce00c2a373000224f7 +:10147000cf00c2a368000224d000c2a3200002242f +:10148000d100c2a350000224d200c2a372000224e1 +:10149000d300c2a36f000224d400c2a367000224b9 +:1014a000d500c2a372000224d600c2a361000224a8 +:1014b000d700c2a36d000224d800c2a36d0002248d +:1014c000d900c2a365000224da00c2a3640002248a +:1014d000db00c2a30a000224dc00c2a30d00022428 +:1014e000dd00c2a3cc00c227212040001300052448 +:1014f000710c400f00000000ec00c0a3ed00c0a381 +:10150000ec00c22721204000020005242130000009 +:101510000d03400f000000005805400f00000000c0 +:10152000000000005205400b000000000000000019 +:101530005205400b00000000000000005205400b67 +:10154000000000000000000021e8c0035c01bf8f24 +:101550005801be8f6001bd270800e00300000000b5 +:10156000c0ffbd273c00bfaf3800beaf21f0a003d5 +:10157000520002241400c2a3650002241500c2a375 +:10158000620002241600c2a36f0002241700c2a347 +:101590006f0002241800c2a3740002241900c2a321 +:1015a000690002241a00c2a36e0002241b00c2a319 +:1015b000670002241c00c2a3200002241d00c2a355 +:1015c000690002241e00c2a36e0002241f00c2a3f1 +:1015d000200002242000c2a3610002242100c2a333 +:1015e000700002242200c2a3700002242300c2a3c0 +:1015f0000d0002242400c2a31400c22721204000b1 +:1016000011000524710c400f00000000009d023cf9 +:10161000005042341000c2af1000c28f09f84000e1 +:101620000000000021e8c0033c00bf8f3800be8fdf +:101630004000bd270800e00300000000f8ffbd27c0 +:101640000400beaf21f0a0030800c4af0800c28fa1 +:10165000148082af21e8c0030400be8f0800bd27bc +:101660000800e00300000000f8ffbd270400beaf43 +:1016700021f0a00321e8c0030400be8f0800bd27ad +:101680000800e00300000000f8ffbd270400beaf23 +:1016900021f0a0030800c4af0c00c5af21e8c003cf +:1016a0000400be8f0800bd270800e0030000000012 +:1016b000e0ffbd271c00beaf21f0a00388bf033ca4 +:1016c0000061628c4429027c006162ac88bf033ceb +:1016d0000061628c8431027c006162ac88bf033c93 +:1016e0002061628c010004248431827c206162ac20 +:1016f00088bf033c2061628c4429027c206162ac7b +:1017000088bf033c4061628c4408027c406162ac4b +:1017100088bf033c6061628c010004244408827c21 +:10172000606162ac88bf033c8061628c010004246c +:10173000c439827c806162ac88bf033c4060628cab +:10174000446b027c406062ac88bf033c8061628c69 +:101750000442027c806162ac88bf033c8061628c81 +:101760008431027c806162ac88bf033c0061628c82 +:10177000c418027c006162ac88bf033c2061628cab +:1017800001000424c418827c206162ac88bf033c41 +:101790000061628c0400027c006162ac88bf033c83 +:1017a0002061628c010004240400827c206162ac10 +:1017b00088bf033cc060628c010004240400827c6a +:1017c000c06062ac88bf033c0061628c8410027c04 +:1017d000006162ac88bf033c2061628c8410027c93 +:1017e000206162ac88bf033c0061628c0421027cf2 +:1017f000006162ac88bf033c2061628c0421027ce2 +:10180000206162ac88bf033c6010628cc418027c0b +:10181000601062ac88bf033c3010628cc418027c3c +:10182000301062ac88bf033c0010628c0400027c64 +:10183000001062ac88bf033c9010628c030004244b +:1018400084e6827c901062ac88bf033c9010628c6e +:1018500004ce027c901062ac88bf033c6010628ca6 +:1018600001000424c418827c601062ac80bf023c7a +:10187000005a40ac80bf033c005a628c0100042433 +:101880004429827c005a62ac80bf033c005a628cbf +:10189000010004240442827c005a62ac80bf033cf5 +:1018a000005a628c444a027c005a62ac80bf033cfe +:1018b000005a628c8431027c005a62acc404023c3f +:1018c00000b442340000c2af0f00023c4042423438 +:1018d0000400c2af0400c28f401002000000c38f9a +:1018e0001b006200f40140001018000012100000fc +:1018f0000800c2af0400c28f401002000000c38f76 +:101900001b006200f40140001010000004004010b1 +:10191000000000000800c28f010042240800c2af8e +:101920000800c28f0101422c030040140000000097 +:10193000000102240800c2af0800c28f040040105a +:10194000000000000800c28fffff42240800c2af61 +:101950000800c28fff0042302118400080bf023cc7 +:10196000305a43ac80bf033c005a628c010004240f +:10197000c47b827c005a62ac88bf033c0061628ced +:10198000c439027c006162ac88bf033c8061628c18 +:10199000444a027c806162ac88bf033c2061628c57 +:1019a000c439027c206162ac88bf033ca061628cb8 +:1019b000444a027ca06162ac88bf033cc060628c78 +:1019c0008431027cc06062ac88bf033ce060628c02 +:1019d0008431027ce06062ac88bf033c4060628c72 +:1019e00001000424c47b827c406062ac88bf033c5d +:1019f0004060628c010004244408827c406062ac38 +:101a000081bf023cffff0334609043ac81bf033cc5 +:101a10006090628c4408027c609062ac88bf033c9a +:101a20004060628c010004244408827c406062ac07 +:101a300081bf023c009040ac81bf023c109040aca2 +:101a400081bf023c209040ac81bf023c409040ac42 +:101a500081bf033c4090628c01000424049c827c82 +:101a6000409062ac81bf023cf0ff0324209043a071 +:101a700081bf033c2090628c010004240462827cbc +:101a8000209062ac81bf033c0090628c0100042472 +:101a9000c47b827c009062ac81bf033c0090628c6e +:101aa000010004244408827c009062ac88bf033c9f +:101ab000c060628c0421027cc06062ac88bf033cc1 +:101ac000e060628c010004240421827ce06062ac4e +:101ad00088bf033cc060628cc418027cc06062acea +:101ae00088bf033cc060628c010004248410827ca7 +:101af000c06062ac88bf033cc060628c4408027c5a +:101b0000c06062ac80bf023c005840ac80bf033c68 +:101b10000058628c010004244429827c005862ac85 +:101b200080bf033c0058628c010004240442827c84 +:101b3000005862ac80bf033c0058628c444a027c6f +:101b4000005862ac80bf033c0058628c8431027c38 +:101b5000005862acc404023c00b442340c00c2af72 +:101b60000f00023c404242341000c2af1000c28f4e +:101b7000401002000c00c38f1b006200f401400003 +:101b800010180000121000001400c2af1000c28f25 +:101b9000401002000c00c38f1b006200f4014000e3 +:101ba0001010000004004010000000001400c28f5c +:101bb000010042241400c2af1400c28f0101422c64 +:101bc0000300401400000000000102241400c2af12 +:101bd0001400c28f04004010000000001400c28fe7 +:101be000ffff42241400c2af1400c28fff00423036 +:101bf0002118400080bf023c305843ac80bf033cfa +:101c00000058628c01000424c47b827c005862acc2 +:101c100088bf033c4060628c010004248410827cf5 +:101c2000406062ac88bf033c4060628c01000424c9 +:101c30000400827c406062ac88bf033cc060628c60 +:101c4000c45a027cc06062ac88bf033ce060628c16 +:101c5000c45a027ce06062ac88bf033cc060628c06 +:101c6000010004240442827cc06062ac88bf033c53 +:101c70008060628c8473027c806062ac88bf033cad +:101c8000a060628c010004248473827ca06062ac3a +:101c900088bf033c8060628c446b027c806062acd5 +:101ca00088bf033ca060628c01000424446b827cea +:101cb000a06062ac88bf033cc060628c4429027c97 +:101cc000c06062ac88bf033ce060628c4429027c47 +:101cd000e06062ac88bf033c4060628c446b027c75 +:101ce000406062ac88bf033c6060628c446b027ce5 +:101cf000606062ac88bf033c4060628c0463027c1d +:101d0000406062ac88bf033c6060628c0463027c0c +:101d1000606062ac88bf033c4060628cc418027c87 +:101d2000406062ac88bf033c6060628cc418027c77 +:101d3000606062ac88bf033c4060628c444a027cb5 +:101d4000406062ac88bf033c6060628c444a027ca5 +:101d5000606062ac88bf033c4060628c8452027c4d +:101d6000406062ac88bf033c6060628c8452027c3d +:101d7000606062ac88bf033c4060628cc45a027ce5 +:101d8000406062ac88bf033c6060628cc45a027cd5 +:101d9000606062ac0100022421e8c0031c00be8f19 +:101da0002000bd270800e0030000000008ffbd2759 +:101db000f400bfaff000beaf21f0a0031800023c5a +:101dc0001000c2afffff02241400c2af4800c227b8 +:101dd00021204000180005241000c68f4a01400f42 +:101de000000000004800c227212040009a08400f50 +:101df000000000002000c2af4800c22704004224b7 +:101e0000212040009a08400f000000002400c2afcb +:101e10004800c22708004224212040009a08400fb1 +:101e2000000000002800c2af4800c2270c00422476 +:101e3000212040009a08400f000000002c00c2af93 +:101e40004800c22710004224212040009a08400f79 +:101e5000000000003000c2af4800c2271400422436 +:101e6000212040009a08400f000000003400c2af5b +:101e70002000c38fadba023cefbe423404006210b2 +:101e800000000000211000007d08400b0000000051 +:101e90002800c28f04004014000000002110000040 +:101ea0007d08400b000000001000c28f1800422483 +:101eb0001000c2af1800c0af3800c0afe807400b39 +:101ec000000000004800c227212040000c0005242b +:101ed0001000c68f4a01400f000000004800c227d2 +:101ee000212040009a08400f000000003c00c2afd3 +:101ef0004800c22704004224212040009a08400fd5 +:101f0000000000004000c2af4800c2270800422481 +:101f1000212040009a08400f000000004400c2af9a +:101f20001000c28f0c0042241000c2af3c00c38fcf +:101f3000adde023cefbe423404006210000000003f +:101f4000211000007d08400b000000004000c28fff +:101f50000400401400000000211000007d08400b28 +:101f6000000000001800c28f010042241800c2af18 +:101f70001800c38f2800c28f050062140000000003 +:101f8000010002243800c2afeb07400b0000000044 +:101f90004000c28f1000c38f211062001000c2af3a +:101fa0003800c28fc7ff4010000000001800023c3c +:101fb000180042341000c2af1c00c0af0508400b2f +:101fc000000000001000c28f1000c38f01006324c6 +:101fd0001000c3afac00c32721206000010005241e +:101fe000213040004a01400f00000000ac00c283d5 +:101ff000ff0042301400c48f21284000120d400f12 +:10200000000000001400c2af1c00c28f0100422477 +:102010001c00c2af1c00c38f2c00c28f2b106200ab +:10202000e8ff4014000000001400c28f27100200d7 +:102030001400c2af1400c38f3400c28f3900621481 +:102040000000000046000224b000c2a36900022480 +:10205000b100c2a372000224b200c2a36d00022428 +:10206000b300c2a377000224b400c2a3610002241b +:10207000b500c2a372000224b600c2a36500022408 +:10208000b700c2a320000224b800c2a34300022468 +:10209000b900c2a368000224ba00c2a365000224ea +:1020a000bb00c2a363000224bc00c2a36b000224d5 +:1020b000bd00c2a320000224be00c2a373000224fc +:1020c000bf00c2a375000224c000c2a363000224a3 +:1020d000c100c2a363000224c200c2a3650002249f +:1020e000c300c2a373000224c400c2a3730002246d +:1020f000c500c2a30a000224c600c2a30d00022428 +:10210000c700c2a3b000c227212040001800052448 +:10211000710c400f00000000010002247d08400bfc +:102120000000000046000224d000c2a3690002247f +:10213000d100c2a372000224d200c2a36d00022407 +:10214000d300c2a377000224d400c2a361000224fa +:10215000d500c2a372000224d600c2a365000224e7 +:10216000d700c2a320000224d800c2a34300022447 +:10217000d900c2a368000224da00c2a365000224c9 +:10218000db00c2a363000224dc00c2a36b000224b4 +:10219000dd00c2a320000224de00c2a34600022408 +:1021a000df00c2a361000224e000c2a36900022490 +:1021b000e100c2a36c000224e200c2a36500022475 +:1021c000e300c2a364000224e400c2a30a000224c4 +:1021d000e600c2a30d000224e700c2a3d000c2277c +:1021e0002120400017000524710c400f0000000062 +:1021f0002110000021e8c003f400bf8ff000be8f63 +:10220000f800bd270800e00300000000d8ffbd274c +:102210002400bfaf2000beaf21f0a0031000c227f2 +:10222000212040000c000524213000004a01400f0d +:10223000000000001000c283ff004230248082a30f +:102240001100c283ff004230258082a301000224d6 +:1022500021e8c0032400bf8f2000be8f2800bd27c7 +:102260000800e00300000000f0ffbd270c00beaf37 +:1022700021f0a0031000c4af1000c28f040040146e +:102280000000000021100000c308400b0000000007 +:102290001000c28f000042900000c2af0000c28f49 +:1022a000001202000000c2af1000c28f01004224e1 +:1022b000000042900000c38f211062000000c2aff6 +:1022c0000000c28f001202000000c2af1000c28fd7 +:1022d00002004224000042900000c38f21106200df +:1022e0000000c2af0000c28f001202000000c2afa7 +:1022f0001000c28f03004224000042900000c38ff0 +:10230000211062000000c2af0000c28f21e8c003ac +:102310000c00be8f1000bd270800e0030000000085 +:10232000f0ffbd270c00beaf21f0a0031000c4af2a +:102330001000c28f040040140000000021100000b3 +:10234000f108400b000000001000c28f030042247f +:10235000000042900000c2af0000c28f00120200d5 +:102360000000c2af1000c28f020042240000429061 +:102370000000c38f211062000000c2af0000c28fb6 +:10238000001202000000c2af1000c28f0100422400 +:10239000000042900000c38f211062000000c2af15 +:1023a0000000c28f001202000000c2af1000c28ff6 +:1023b000000042900000c38f211062000000c2aff5 +:1023c0000000c28f21e8c0030c00be8f1000bd27a3 +:1023d0000800e00300000000f8ffbd270400beafc6 +:1023e00021f0a00321e8c0030400be8f0800bd2730 +:1023f0000800e00300000000f0ffbd270c00beafa6 +:1024000021f0a0031000c4af81bf023c1000c38fb5 +:1024100000f443ac0000c0af0c09400b0000c0af9b +:10242000400000000000c28f010042240000c2af43 +:102430000000c28ff4014228f9ff401400000000a0 +:1024400081bf023c99aa033c5566633410f443ac47 +:1024500081bf023c6655033caa99633410f443ac37 +:1024600081bf023c0080033408f443ac000000004c +:1024700081bf023c00f4428c00804230fcff4014db +:10248000000000004000000081bf023c0040032427 +:1024900004f443ac81bf023c00f4428c0030423073 +:1024a00021e8c0030c00be8f0800e0031000bd2728 +:1024b000e0ffbd271c00bfaf1800beaf21f0a00396 +:1024c0002000c4af2400c5af81bf023c2400c38fed +:1024d00030f443ac2000c28f00e0437c81bf023c5b +:1024e00020f443ac01400424fe08400f000000002b +:1024f0001000c2af1000c28f21e8c0031c00bf8fc4 +:102500001800be8f2000bd270800e0030000000077 +:10251000e0ffbd271c00bfaf1800beaf21f0a00335 +:102520002000c4af2400c5af2000c28f00e0437c70 +:1025300081bf023c20f443ac2400c28f00e0437c06 +:1025400081bf023c40f443ac03400424fe08400f2a +:10255000000000001000c2af1000c28f21e8c003cd +:102560001c00bf8f1800be8f2000bd270800e003ad +:1025700000000000c8ffbd273400bfaf3000beaf71 +:1025800021f0a0033800c4af3c00c5af4000c6af87 +:102590004000c28f801002001c00c2af1800c0af04 +:1025a0003c00c28f0000428c2000c2af3800c28fb6 +:1025b0001000c2af4000c28f8000422c25004010a6 +:1025c000000000001400c0af8709400b00000000ad +:1025d0003c00c28f0000428c2000c2af3c00c28f82 +:1025e000040042243c00c2af1000c48f2000c58ffd +:1025f0002c09400f000000001800c38f2510620056 +:102600001800c2af1000c28f040042241000c2aff5 +:102610001400c28f010042241400c2af1400c38f03 +:102620004000c28f2b106200e9ff40140000000040 +:102630001800c28f040040100000000001000224b6 +:10264000210a400b0000000021100000210a400b6d +:10265000000000004000c28fc21102002400c2af7f +:102660002800c0af9c09400b0000000000000000e3 +:102670001000c28fff0142301c004010000000001b +:102680003c00c28f0000428c3c00c38f04006324d6 +:102690003c00c3af1000c48f212840002c09400f1c +:1026a000000000001800c38f251062001800c2afa0 +:1026b0001000c28f040042241000c2af4000c28f3d +:1026c000ffff42244000c2af1000c28fff01423022 +:1026d0003b004010000000004000c28fe8ff4014a3 +:1026e00000000000f009400b000000004000c28f15 +:1026f0007f00423022004014000000001400c0aff0 +:10270000d209400b000000001000c48f3c00c58fb0 +:102710004409400f000000001800c38f251062001c +:102720001800c2af1000c28f000242241000c2afd6 +:102730003c00c28f000242243c00c2af1400c28f92 +:10274000010042241400c2af1400c38f2400c28fc2 +:102750002b106200ecff4014000000001800c28f34 +:10276000040040100000000001000224210a400b78 +:102770000000000021100000210a400b00000000b2 +:102780001000c48f3c00c58f4409400f00000000ba +:102790001800c38f251062001800c2af1000c28f4e +:1027a000000242241000c2af3c00c28f000242244b +:1027b0003c00c2af4000c28f80ff42244000c2af45 +:1027c0004000c28f8000422c240040100000000016 +:1027d0001400c0af090a400b000000003c00c28f8b +:1027e0000000428c3c00c38f040063243c00c3af54 +:1027f0001000c48f212840002c09400f0000000069 +:102800001800c38f251062001800c2af1000c28fdd +:10281000040042241000c2af1400c28f0100422401 +:102820001400c2af1400c38f4000c28f2b1062008f +:10283000eaff4014000000001800c28f040040109e +:102840000000000001000224210a400b00000000eb +:1028500021100000210a400b000000004000c28f40 +:1028600082ff4014000000001800c28f04004010d6 +:102870000000000001000224210a400b00000000bb +:102880002110000021e8c0033400bf8f3000be8f4c +:102890003800bd270800e00300000000d8ffbd2776 +:1028a0002400bfaf2000beaf21f0a0031000c0afd6 +:1028b000009d023c004042341800c2af1400c0af7b +:1028c000430a400b000000001800c48f540a400f58 +:1028d000000000001000c38f251062001000c2af7e +:1028e0001000c28f03004010000000001800c28fcb +:1028f0001c00c2af1800c28f001042241800c2afe3 +:102900001400c28f010042241400c2af1400c28f11 +:102910007c00422cecff4014000000001000c28f2d +:102920000400401000000000010002244e0a400b89 +:10293000000000002110000021e8c0032400bf8f28 +:102940002000be8f2800bd270800e0030000000023 +:10295000e0ffbd271c00bfaf1800beaf21f0a003f1 +:102960002000c4af2000c28f00e0437c81bf023c46 +:1029700020f443ac04400424fe08400f0000000093 +:102980001000c2af1000c28f21e8c0031c00bf8f2f +:102990001800be8f2000bd270800e00300000000e3 +:1029a00070febd278c01bfaf8801beaf21f0a00330 +:1029b000c404023c00b442342000c2af050002242b +:1029c0002400c2af670e400f000000002800c2af15 +:1029d00088bf023c40000324042043ac2400c28f83 +:1029e00001004230ff0042301d0040100000000096 +:1029f0002000c28f2c00c2af3000c0af890a400b4c +:102a0000000000003000c28f010042243000c2af3d +:102a10002c00c38f36fe023c803c42342110620001 +:102a20002c00c2af2c00c38fc901023c81c34234c9 +:102a30002b106200f3ff401000000000670e400ff3 +:102a4000000000003400c2af88bf023c3000c38fda +:102a5000004043ac3400c48f4e0e400f0000000015 +:102a60002400c28f020042306800401000000000c5 +:102a70002000c28f3800c2af3800c28f3c00c2af06 +:102a80003800c38fc404023c01b442342b106200ee +:102a900008004014000000000800023c4000c2afe3 +:102aa0003c00c28f421002003c00c2afae0a400b95 +:102ab000000000004000c0af4000c28f4400c2af21 +:102ac000670e400f000000004800c2af88bf023c04 +:102ad0000030428c0003427cff0042304c00c2af09 +:102ae0004c00c28f090040140000000088bf023c67 +:102af00000100324083043ac88bf023c0030428cf5 +:102b000000084230fcff4014000000004c00c28f5f +:102b10005000c2af81bf023c30f240ac81bf023cea +:102b200099aa033c5566633430f243ac81bf023c42 +:102b30006655033caa99633430f243ac81bf023c32 +:102b400000f0428c8401c2af8401c28fc4a4027c15 +:102b50008401c2af8401c38f4400c28f251062007c +:102b60008401c2af8401c38f81bf023c00f043ac3b +:102b700081bf023c00f0428c8401c2af81bf023ca5 +:102b80003333033c3333633430f243ac5000c28ff1 +:102b90005400c2af5400c28f130040100000000068 +:102ba00088bf023c0030428c0003427cff00423070 +:102bb0005800c2af5800c28f10004014000000003f +:102bc00088bf023c00100324083043ac88bf023c9d +:102bd0000030428c00084230fcff4014000000002e +:102be000000b400b0000000088bf023c00100324d3 +:102bf000043043ac000b400b00000000000000005c +:102c00004800c48f4e0e400f000000002400c28f09 +:102c1000040042300c0040100000000088bf023c5d +:102c20000040428c5c00c2af5c00c28f3000423476 +:102c30005c00c2af88bf023c5c00c38f004043ac65 +:102c40005b0e400f000000002000c28f6000c2af8a +:102c500081bf023c00f0428cc00c427cff0042303d +:102c60006000c38f061043006000c2af2800c48f0d +:102c70004e0e400f0000000081bf023cffff0334f6 +:102c8000609043acac05400f00000000cd0b400f3e +:102c900000000000f608400f000000007703400f1e +:102ca00000000000e00d400f000000001000a0af89 +:102cb0002120000021280000802506242138000062 +:102cc0001f0c400f000000000000400f000000003b +:102cd0005d00400f000000002118400001000224a8 +:102ce0000600621400000000010004248f05400f5c +:102cf00000000000420b400b0000000021200000fb +:102d00008f05400f0000000088bf033c2061628ceb +:102d10004429027c206162ac420002246401c2a307 +:102d20006f0002246501c2a36f0002246601c2a3e2 +:102d3000740002246701c2a36c0002246801c2a3cc +:102d40006f0002246901c2a3610002246a01c2a3c8 +:102d5000640002246b01c2a3650002246c01c2a3bb +:102d6000720002246d01c2a3200002246e01c2a3de +:102d7000560002246f01c2a3300002247001c2a3d6 +:102d80002e0002247101c2a3300002247201c2a3ea +:102d9000310002247301c2a30a0002247401c2a3f9 +:102da0000d0002247501c2a36401c2272120400046 +:102db00012000524710c400f000000001800c0af85 +:102dc0001c00c0af740b400b0000000000000000ae +:102dd000af0c400f000000000a0040180000000087 +:102de00088bf023c2061428c400042300100422cee +:102df000ff00443088bf033c2061628c8431827cb8 +:102e0000206162ac21200000212800008303400fd4 +:102e1000000000001800c28f010042241800c2af59 +:102e20001800c28f30754228e8ff401400000000ef +:102e300088bf023c2061428c4001427cff0042304e +:102e400027100200ff00423001004230ff004430f2 +:102e500088bf033c2061628c4429827c206162ac83 +:102e60001800c0af1c00c0af740b400b0000000086 +:102e7000c8ffbd273400bfaf3000beaf21f0a003b4 +:102e8000450002241000c2a3780002241100c2a34e +:102e9000630002241200c2a3650002241300c2a32f +:102ea000700002241400c2a3740002241500c2a3ff +:102eb000690002241600c2a36f0002241700c2a3f7 +:102ec0006e0002241800c2a3200002241900c2a32d +:102ed0006f0002241a00c2a3630002241b00c2a3d5 +:102ee000630002241c00c2a3750002241d00c2a3bb +:102ef000720002241e00c2a3720002241f00c2a39b +:102f0000650002242000c2a3640002242100c2a3a1 +:102f10000d0002242200c2a31000c227212040007d +:102f200013000524710c400f00000000a60d400f97 +:102f300000000000f8ffbd270400beaf21f0a00391 +:102f400080bf023c106840ac80bf033c1068628cbc +:102f5000010004248452827c106862ac88bf033c68 +:102f60001011628c050004248420827c101162ac54 +:102f700088bf033c1011628c020004240408827c88 +:102f8000101162ac80bf033c1068628c0100042405 +:102f9000847b827c106862ac88bf033c4010628cea +:102fa0008452027c401062ac88bf033c7010628c7b +:102fb0008452027c701062ac80bf033c1068628c4b +:102fc0008439027c106862ac88bf033c4010628c7c +:102fd000444a027c401062ac88bf033c7010628c93 +:102fe000444a027c701062ac80bf033c1068628c63 +:102ff000010004240463827c106862ac80bf033c3f +:103000000068628cc47b027c006862ac00a0023c59 +:10301000204040ac00a0023c20404224040040acd0 +:1030200000a0023c20404224080040ac00a0023c2a +:10303000204042240c0040ac00a0023c204042242e +:10304000100040ac00a0023c20404224140040ace0 +:1030500000a0023c20404224180040ac00a0023cea +:10306000204042241c0040ac21e8c0030400be8f75 +:103070000800bd270800e00300000000f0ffbd27a6 +:103080000c00beaf21f0a0031000c4af1400c5af08 +:103090001800c6af1c00c7af1800c28f801802000e +:1030a000c404023c00b442341a004300f40160003e +:1030b0001018000012100000ffff42240400c2afed +:1030c0000000c0af1c00c28f0900401000000000cb +:1030d0000100032407004314000000000000c28f19 +:1030e000010042340000c2af3d0c400b0000000064 +:1030f0000000000000a0023c204042241400c38fc6 +:10310000040043ac00a0023c204042241000c38fc6 +:10311000080043ac2000c28f0100032406004310c6 +:10312000000000000200032408004310000000001b +:10313000570c400b000000000000c28f0200423418 +:103140000000c2af570c400b000000000000c28f0f +:10315000040042340000c2af000000000000c38f32 +:1031600080bf023c006843ac80bf033c0068628cb7 +:1031700001000424c418827c006862ac0400c38f80 +:1031800080bf023c406843ac80bf033c0068628c57 +:1031900001000424c47b827c006862ac00a0023c75 +:1031a0002040422401000324180043ac0100022403 +:1031b00021e8c0030c00be8f1000bd270800e0030b +:1031c00000000000f0ffbd270c00beaf21f0a003ff +:1031d0001000c4af1400c5af00a0023c2040422440 +:1031e0001800428c0300401400000000ab0c400ba0 +:1031f0000300022400a0023c204042241400428c20 +:103200000300401000000000ab0c400b0200022441 +:1032100000a0023c1000c38f204043ac00a0023c41 +:10322000204042241400c38f0c0043ac00a0023c99 +:1032300020404224100040ac00a0023c2040422428 +:10324000140040aca50c400b0000c0af1000c28fb2 +:10325000000042802118400080bf023c206843ac3f +:103260001000c28f010042241000c2af0000000015 +:1032700080bf023c1068428c00014230fcff4010cd +:1032800000000000400000000000c28f0100422446 +:103290000000c2af0000c38f1400c28f2a1062006a +:1032a000eaff4014000000000100022421e8c003ee +:1032b0000c00be8f0800e0031000bd27f0ffbd2703 +:1032c0000c00beaf21f0a0030000c0afbb0c400b50 +:1032d0000000000080bf023c3068428c0400c2a3a2 +:1032e0000000c28f010042240000c2af80bf023c38 +:1032f0001068428c01004230f6ff401400000000cc +:103300000000c28f21e8c0030c00be8f1000bd2753 +:103310000800e00300000000f8ffbd270400beaf76 +:1033200021f0a00380bf033c0068628cc47b027c58 +:10333000006862ac80bf023c106840ac21e8c0036a +:103340000400be8f0800bd270800e0030000000055 +:10335000d0ffbd272c00bfaf2800beaf21f0a003d7 +:103360003000c4af3400c5af1080829301004238f2 +:10337000ff0042300300401000000000380d400ff5 +:1033800000000000ffff02241000c2af3000c28f17 +:103390001400c2af1400c28f2100401000000000d2 +:1033a0001800c0af030d400b000000001400c28fd6 +:1033b000000042901c00c2af1000c38f1c00c28fdf +:1033c000261062002000c2af1000c28f021a020055 +:1033d0002000c28fff00443000a0023c8020040087 +:1033e00040504224211082000000428c26106200ce +:1033f0001000c2af1400c28f010042241400c2affb +:103400001800c28f010042241800c2af1800c38ff9 +:103410003400c28f2b106200e4ff40140000000053 +:103420001000c28f271002001000c2af1000c28f20 +:1034300021e8c0032c00bf8f2800be8f3000bd27bd +:103440000800e00300000000e0ffbd271c00bfaf44 +:103450001800beaf21f0a0032000c4af2110a000cf +:103460002400c2a32400c2931000c2af1080829334 +:1034700001004238ff00423003004010000000000d +:10348000380d400f000000002000c38f1000c28fd5 +:10349000261062001400c2af2000c28f021a020080 +:1034a0001400c28fff00443000a0023c80200400c2 +:1034b00040504224211082000000428c26106200fd +:1034c0002000c2af2000c28f21e8c0031c00bf8fc4 +:1034d0001800be8f2000bd270800e0030000000098 +:1034e000e8ffbd271400beaf21f0a0030000c0af6d +:1034f000640d400b000000000000c28f0800c2af46 +:103500000400c0af560d400b000000000800c28f41 +:1035100001004230ff00423009004010000000006e +:103520000800c28f42180200b8ed023c20834234ea +:10353000261062000800c2af530d400b00000000cf +:103540000800c28f421002000800c2af0400c28f00 +:10355000010042240400c2af0400c28f0800422cc4 +:10356000eaff40140000000000a0023c0000c38fee +:103570008018030040504224211062000800c38fcd +:10358000000043ac0000c28f010042240000c2af23 +:103590000000c28f0001422cd7ff40140000000041 +:1035a00001000224108082a321e8c0031400be8f12 +:0c35b0001800bd270800e0030000000028 :020000040000fa :020000041d00dd -:108e2800a8ffbd270400a1af0800a2af0c00a3afa4 -:108e38001000a4af1400a5af1800a6af1c00a7af80 -:108e48002000a8af2400a9af2800aaaf2c00abaf20 -:108e58003000acaf3400adaf3800aeaf3c00afafc0 -:108e68004000b8af4400b9af4800bfaf124000009f -:108e78004c00a8af104000005000a8af019d1a3c5c -:108e880024895a270000000000680440006005405b -:108e980009f84003000000005000a88f11000001ed -:108ea8004c00a88f130000010400a18f0800a28fb6 -:108eb8000c00a38f1000a48f1400a58f1800a68f94 -:108ec8001c00a78f2000a88f2400a98f2800aa8f34 -:108ed8002c00ab8f3000ac8f3400ad8f3800ae8fd4 -:108ee8003c00af8f4000b88f4400b98f4800bf8f57 -:0c8ef8005800bd27c00000001800004218 +:1035bc00a8ffbd270400a1af0800a2af0c00a3af69 +:1035cc001000a4af1400a5af1800a6af1c00a7af45 +:1035dc002000a8af2400a9af2800aaaf2c00abafe5 +:1035ec003000acaf3400adaf3800aeaf3c00afaf85 +:1035fc004000b8af4400b9af4800bfaf1240000064 +:10360c004c00a8af104000005000a8af009d1a3c21 +:10361c00702e5a270000000000680440006005402e +:10362c0009f84003000000005000a88f11000001b1 +:10363c004c00a88f130000010400a18f0800a28f7a +:10364c000c00a38f1000a48f1400a58f1800a68f58 +:10365c001c00a78f2000a88f2400a98f2800aa8ff8 +:10366c002c00ab8f3000ac8f3400ad8f3800ae8f98 +:10367c003c00af8f4000b88f4400b98f4800bf8f1b +:0c368c005800bd27c000000018000042dc :020000040000fa :020000041d00dd -:108f0400809a45418e418f804545454949498e8f18 -:108f14009092924f994f555559999a9b9c9d9e9f1b -:108f240041494f55a5a5a6a7a8a9aaabacadaeaf1c -:108f3400b0b1b2b3b4b5b6b7b8b9babbbcbdbebfb5 -:108f4400c0c1c2c3c4c5c6c7c8c9cacbcccdcecfa5 -:108f5400d0d1d2d3d4d5d6d7d8d9dadbdcdddedf95 -:108f6400e0e1e2e3e4e5e6e7e8e9eaebecedeeef85 -:108f7400f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff75 -:108f8400222a2b2c3a3b3c3d3e3f5b5d7c7f00001c -:0c8f9400464154004641543332000000b6 +:10369800e8ffbd271400bfaf670e400f0000000011 +:1036a80088bf023c0030438c0003637c0800601430 +:1036b80099aa033c0010042488bf033c083064ac7a +:1036c8000030438c00086330fdff601499aa033c66 +:1036d80081bf023c5566632430f240ac30f243ac03 +:1036e8006655033caa99633430f243ac81bf023c6f +:1036f8000100032418f643ac81bf023c10f6428c4b +:08370800c20d400b000000009f :020000040000fa :020000041d00dd -:108fa000e8ffbd271400bfaf9124400f0000000070 -:108fb00088bf023c0030438c0003637c08006014cf -:108fc00099aa033c0010042488bf033c083064ac19 -:108fd0000030438c00086330fdff601499aa033c05 -:108fe00081bf023c5566632430f240ac30f243aca2 -:108ff0006655033caa99633430f243ac81bf023c0e -:109000000100032418f643ac81bf023c10f6428ce9 -:089010000424400b00000000e5 +:10371000f8ffbd270400beaf21f0a00321188000f0 +:103720002110a0000800c3a30c00c2a30c00c39387 +:1037300080bf023c305a43ac0800c39380bf023cb8 +:10374000205a43ac0000000080bf023c105a428c5b +:1037500001004230fcff40100000000080bf023c2e +:10376000205a428c0800c2a30800c29321e8c0037b +:103770000400be8f0800bd270800e0030000000021 +:10378000f8ffbd270400beaf21f0a00388bf033cb3 +:103790000061628c4429027c006162ac88bf033cfa +:1037a0000061628c8431027c006162ac88bf033ca2 +:1037b0002061628c010004248431827c206162ac2f +:1037c00088bf033c2061628c010004244429827c70 +:1037d000206162ac21e8c0030400be8f0800bd2751 +:0837e0000800e00300000000f6 :020000040000fa :020000041d00dd -:10901800f8ffbd270400beaf21f0a00388bf033cc2 -:109028000061628c4429027c006162ac88bf033c09 -:109038000061628c8431027c006162ac88bf033cb1 -:109048002061628c010004248431827c206162ac3e -:1090580088bf033c2061628c010004244429827c7f -:10906800206162ac21e8c0030400be8f0800bd2760 -:089078000800e0030000000005 +:1037e8000000043ce8ffbd2700008424030080108b +:1037f8001400bfaf09f8800000000000000084300a +:103808000000a530680a400f000000000000023cdc +:1038180000004224030040100000000009f84000a6 +:0c38280000000000f9ff0010000000008c :020000040000fa :020000041d00dd -:109080004c0000a00842000000000000544200a074 -:109090002000000000000000040000a00800000004 -:1090a00000000000000000a001000000010000001e -:1090b000010000000c0000a00c00000000000000f7 -:1090c0000000000022222222222222222222222208 +:103834000000023ce8ffbd270000422406004010bf +:103844001400bfaf0000023c0000422403004010fb +:10385400009d023c3f000070009d023c7c384224e5 +:10386400030040100000000009f8400000000000c0 +:083874001d0e400b00000000d6 :020000040000fa :020000041d00dd -:1090d0000000043ce8ffbd2700008424030080104a -:1090e0001400bfaf09f880000000000000008430c9 -:1090f0000000a5301921400f000000000000023cd4 -:1091000000004224030040100000000009f8400065 -:0c91100000000000f9ff0010000000004b +:10387c0000606041c000000099aa033c81bf023c7b +:10388c005566632430f240ac30f243ac6655033cd1 +:10389c00aa99633430f243ac81bf023c010003248b +:1038ac0018f643ac81bf023c10f6428c210e400b43 +:0438bc000000000008 :020000040000fa :020000041d00dd -:10911c000000023ce8ffbd2700004224060040107e -:10912c001400bfaf0000023c0000422403004010ba -:10913c00019d023c3f000070019d023c6491422461 -:10914c00030040100000000009f84000000000007f -:08915c005724400b0000000045 +:1038c000180000a00840000000000000204000a0f8 +:1038d0002000000000000000404000a00010000098 +:1038e00000000000405000a00004000000000000a4 +:1038f000000000a001000000000000000000000027 :020000040000fa :020000041d00dd -:1091640000606041c000000099aa033c81bf023c3a -:109174005566632430f240ac30f243ac6655033c90 -:10918400aa99633430f243ac81bf023c010003244a -:1091940018f643ac81bf023c10f6428c5b24400bb2 -:0491a40000000000c7 +:103900000000023c00004224050040100000023c80 +:103910000000422403004010009d023c3f00007064 +:10392000009d023c7c384224fdff40100000000056 +:0839300009f84000000000004e :020000040000fa :020000041d00dd -:1091a8000000023c00004224050040100000023c80 -:1091b8000000422403004010019d023c3f00007063 -:1091c800019d023c64914224fdff40100000000014 -:0891d80009f84000000000004e +:103938000100843003008014000000000800e00348 +:0c394800006060410800e0032060604166 :020000040000fa :020000041d00dd -:1091e0000100843003008014000000000800e00348 -:0c91f000006060410800e0032060604166 +:10395400f8ff022400800340241062000200423475 +:083964000800e003008082402e :020000040000fa :020000041d00dd -:1091fc00f8ff022400800340241062000200423475 -:08920c000800e003008082402d +:10396c00f8ff02240080034024106200030042345c +:08397c000800e0030080824016 :020000040000fa :020000041d00dd -:10921400f8ff02240080034024106200030042345b -:089224000800e0030080824015 +:1039840000601a40bfff1b3cffff7b3724d05b0362 +:0839940000609a401800004297 :020000040000fa :020000041d00dd -:10922c0000601a40bfff1b3cffff7b3724d05b0361 -:08923c0000609a401800004296 +:08399c000800e0030060624135 :020000040000fa :020000041d00dd -:089244000800e0030060624134 +:0839a4000800e0030000000030 :020000040000fa :020000041d00dd -:08924c000800e003000000002f -:020000040000fa -:020000041d00dd -:089254000800e0030000000027 +:0839ac000800e0030000000028 :00000001FF diff --git a/Bootloader_PIC32.X/dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.map b/Bootloader_PIC32.X/dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.map index 2df1de7..b98f3ab 100644 --- a/Bootloader_PIC32.X/dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.map +++ b/Bootloader_PIC32.X/dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.map @@ -1,7 +1,7 @@ Archive member included because of file (symbol) c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) - build/ChaletDuino_795/production/Source/BootloaderProtocol.o (SoftReset) + build/ChaletDuino_795/production/Source/main.o (SoftReset) c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) build/ChaletDuino_795/production/Source/main.o (CheKseg0CacheOn) c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) @@ -152,48 +152,41 @@ c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../ Allocating common symbols Common symbol size file -ProtocolState 0x4 build/ChaletDuino_795/production/Source/BootloaderProtocol.o -Checksum 0x1 build/ChaletDuino_795/production/Source/BootloaderProtocol.o -DataBufPtr 0x4 build/ChaletDuino_795/production/Source/BootloaderProtocol.o -RxDataBuffer 0x100 build/ChaletDuino_795/production/Source/BootloaderProtocol.o -CurCmd 0x4 build/ChaletDuino_795/production/Source/BootloaderProtocol.o -RecordDataPtr 0x4 build/ChaletDuino_795/production/Source/BootloaderProtocol.o -DataSize 0x2 build/ChaletDuino_795/production/Source/BootloaderProtocol.o -e_FlashUpdateMode 0x4 build/ChaletDuino_795/production/Source/BootloaderProtocol.o +mBootloaderFlags 0x2 build/ChaletDuino_795/production/Source/BootloaderInterface.o +mSPIFlashHighSpeedBaudrate + 0x1 build/ChaletDuino_795/production/Source/SPI_Flash.o +mIsSPIFlashDetected + 0x4 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o +mSPIFlashBaudrate 0x1 build/ChaletDuino_795/production/Source/SPI_Flash.o mSMState 0x4 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o -RxCounter 0x4 build/ChaletDuino_795/production/Source/BootloaderProtocol.o mPseudoTimer 0x4 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o -e_CommandPending 0x4 build/ChaletDuino_795/production/Source/BootloaderProtocol.o -WordBuf 0x4 build/ChaletDuino_795/production/Source/BootloaderProtocol.o +mFlashSectorBuffer 0x1000 build/ChaletDuino_795/production/Source/SPI_Flash.o astInternalUartData 0x20 build/ChaletDuino_795/production/Source/InternalUart.o -ByteCount 0x4 build/ChaletDuino_795/production/Source/BootloaderProtocol.o -CurrentDataSector 0x4008 build/ChaletDuino_795/production/Source/BootloaderProtocol.o -TxBuffer 0x100 build/ChaletDuino_795/production/Source/BootloaderProtocol.o +CurrentDataSector 0x4008 build/ChaletDuino_795/production/Source/FlashInterface.o Microchip PIC32 Memory-Usage Report kseg0 Program-Memory Usage section address length [bytes] (dec) Description ------- ---------- ------------------------- ----------- -.text 0x9d000000 0x8e28 36392 App's exec code -.text.general_exception 0x9d008e28 0xdc 220 -.rodata 0x9d008f04 0x9c 156 Read-only const -.text.SoftReset 0x9d008fa0 0x78 120 -.text 0x9d009018 0x68 104 App's exec code -.dinit 0x9d009080 0x50 80 -.text.main_entry 0x9d0090d0 0x4c 76 -.text._bootstrap_except 0x9d00911c 0x48 72 -.text 0x9d009164 0x44 68 App's exec code -.vector_default 0x9d0091a8 0x38 56 -.text.INTRestoreInterru 0x9d0091e0 0x1c 28 -.text.CheKseg0CacheOff 0x9d0091fc 0x18 24 -.text.CheKseg0CacheOn 0x9d009214 0x18 24 -.text 0x9d00922c 0x18 24 App's exec code -.text.INTDisableInterru 0x9d009244 0x8 8 -.text._on_reset 0x9d00924c 0x8 8 -.text._on_bootstrap 0x9d009254 0x8 8 - Total kseg0_program_mem used : 0x925c 37468 91.5% of 0xa000 +.text 0x9d000000 0x35bc 13756 App's exec code +.text.general_exception 0x9d0035bc 0xdc 220 +.text.SoftReset 0x9d003698 0x78 120 +.text 0x9d003710 0xd8 216 App's exec code +.text.main_entry 0x9d0037e8 0x4c 76 +.text._bootstrap_except 0x9d003834 0x48 72 +.text 0x9d00387c 0x44 68 App's exec code +.dinit 0x9d0038c0 0x40 64 +.vector_default 0x9d003900 0x38 56 +.text.INTRestoreInterru 0x9d003938 0x1c 28 +.text.CheKseg0CacheOff 0x9d003954 0x18 24 +.text.CheKseg0CacheOn 0x9d00396c 0x18 24 +.text 0x9d003984 0x18 24 App's exec code +.text.INTDisableInterru 0x9d00399c 0x8 8 +.text._on_reset 0x9d0039a4 0x8 8 +.text._on_bootstrap 0x9d0039ac 0x8 8 + Total kseg0_program_mem used : 0x39b4 14772 90.2% of 0x4000 kseg0 Boot-Memory Usage section address length [bytes] (dec) Description @@ -277,27 +270,27 @@ section address length [bytes] (dec) Description .bev_excpt 0xbfc00380 0x10 16 BEV-Exception Total kseg1_boot_mem used : 0x200 512 43.8% of 0x490 -------------------------------------------------------------------------- - Total Program Memory used : 0x966c 38508 79.2% of 0xbe00 + Total Program Memory used : 0x3dc4 15812 65.7% of 0x5e00 -------------------------------------------------------------------------- kseg1 Data-Memory Usage section address length [bytes] (dec) Description ------- ---------- ------------------------- ----------- -.sdata 0xa0000000 0x1 1 Small init data -.sbss 0xa0000004 0x48 72 Small uninit data -.bss 0xa000004c 0x4228 16936 Uninitialized data - Total kseg1_data_mem used : 0x4271 17009 51.9% of 0x8000 +.sbss 0xa0000000 0x16 22 Small uninit data +.bss 0xa0000018 0x5028 20520 Uninitialized data +.bss 0xa0005040 0x400 1024 Uninitialized data + Total kseg1_data_mem used : 0x543e 21566 65.8% of 0x8000 -------------------------------------------------------------------------- - Total Data Memory used : 0x4271 17009 51.9% of 0x8000 + Total Data Memory used : 0x543e 21566 65.8% of 0x8000 -------------------------------------------------------------------------- Dynamic Data-Memory Reservation section address length [bytes] (dec) Description ------- ---------- ------------------------- ----------- -heap 0xa0004278 0 0 Reserved for heap -stack 0xa0004290 0x3d60 15712 Reserved for stack +heap 0xa0005448 0 0 Reserved for heap +stack 0xa0005460 0x2b98 11160 Reserved for stack -------------------------------------------------------------------------- @@ -305,16 +298,16 @@ Discarded input sections .reginfo 0x00000000 0x18 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX795F512H/crt0_mips32r2.o .reginfo 0x00000000 0x18 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\debug-exception-return.o - .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/BootloaderProtocol.o .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/DigitalIO.o .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/FlashInterface.o .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/InternalUart.o .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/main.o - .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/FatFS/ff.o - .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/FatFS/ffsystem.o - .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/FatFS/ffunicode.o - .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o + .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/SPI.o + .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/SPI_Flash.o + .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o + .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/BootloaderInterface.o + .reginfo 0x00000000 0x18 build/ChaletDuino_795/production/Source/crc32.o .reginfo 0x00000000 0x18 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX795F512H\processor.o .reginfo 0x00000000 0x18 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) .reginfo 0x00000000 0x18 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) @@ -397,7 +390,7 @@ Discarded input sections Memory Configuration Name Origin Length Attributes -kseg0_program_mem 0x9d000000 0x0000a000 xr +kseg0_program_mem 0x9d000000 0x00004000 xr kseg0_boot_mem 0x9fc00490 0x00000970 exception_mem 0x9fc01000 0x00001000 kseg1_boot_mem 0xbfc00000 0x00000490 @@ -415,16 +408,16 @@ Linker script and memory map LOAD c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX795F512H/crt0_mips32r2.o LOAD c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\debug-exception-return.o -LOAD build/ChaletDuino_795/production/Source/BootloaderProtocol.o LOAD build/ChaletDuino_795/production/Source/BootloaderStateMachine.o LOAD build/ChaletDuino_795/production/Source/DigitalIO.o LOAD build/ChaletDuino_795/production/Source/FlashInterface.o LOAD build/ChaletDuino_795/production/Source/InternalUart.o LOAD build/ChaletDuino_795/production/Source/main.o -LOAD build/ChaletDuino_795/production/Source/FatFS/ff.o -LOAD build/ChaletDuino_795/production/Source/FatFS/ffsystem.o -LOAD build/ChaletDuino_795/production/Source/FatFS/ffunicode.o -LOAD build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o +LOAD build/ChaletDuino_795/production/Source/SPI.o +LOAD build/ChaletDuino_795/production/Source/SPI_Flash.o +LOAD build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o +LOAD build/ChaletDuino_795/production/Source/BootloaderInterface.o +LOAD build/ChaletDuino_795/production/Source/crc32.o 0x00000001 __MPLAB_BUILD = 0x1 0x00000400 PROVIDE (_min_stack_size, 0x400) 0x00000000 PROVIDE (_min_heap_size, 0x0) @@ -920,58 +913,52 @@ END GROUP *(.got.plt) *(.got) -.sdata 0xa0000000 0x1 +.sdata 0xa0000000 0x0 0xa0000000 _sdata_begin = . *(.sdata .sdata.* .gnu.linkonce.s.*) - .sdata 0xa0000000 0x1 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o - 0xa0000001 _sdata_end = . + 0xa0000000 _sdata_end = . .lit8 *(.lit8) .lit4 *(.lit4) - 0xa0000004 . = ALIGN (0x4) - 0xa0000004 _data_end = . - 0xa0000004 _bss_begin = . + 0xa0000000 . = ALIGN (0x4) + 0xa0000000 _data_end = . + 0xa0000000 _bss_begin = . -.sbss 0xa0000004 0x48 - 0xa0000004 _sbss_begin = . +.sbss 0xa0000000 0x16 + 0xa0000000 _sbss_begin = . *(.dynsbss) *(.sbss .sbss.* .gnu.linkonce.sb.*) - .sbss 0xa0000004 0x8 build/ChaletDuino_795/production/Source/FatFS/ff.o - .sbss 0xa000000c 0xc build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o + .sbss 0xa0000000 0x1 build/ChaletDuino_795/production/Source/crc32.o *(.scommon) - .scommon 0xa0000018 0x2c build/ChaletDuino_795/production/Source/BootloaderProtocol.o - 0xa0000018 ProtocolState - 0xa000001c Checksum - 0xa0000020 DataBufPtr - 0xa0000024 CurCmd - 0xa0000028 RecordDataPtr - 0xa000002c DataSize - 0xa0000030 e_FlashUpdateMode - 0xa0000034 RxCounter - 0xa0000038 e_CommandPending - 0xa000003c WordBuf - 0xa0000040 ByteCount - .scommon 0xa0000044 0x8 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o - 0xa0000044 mSMState - 0xa0000048 mPseudoTimer - 0xa000004c _sbss_end = . + *fill* 0xa0000001 0x3 + .scommon 0xa0000004 0xc build/ChaletDuino_795/production/Source/BootloaderStateMachine.o + 0xa0000004 mIsSPIFlashDetected + 0xa0000008 mSMState + 0xa000000c mPseudoTimer + .scommon 0xa0000010 0x2 build/ChaletDuino_795/production/Source/SPI_Flash.o + 0xa0000010 mSPIFlashHighSpeedBaudrate + 0xa0000011 mSPIFlashBaudrate + *fill* 0xa0000012 0x2 + .scommon 0xa0000014 0x2 build/ChaletDuino_795/production/Source/BootloaderInterface.o + 0xa0000014 mBootloaderFlags + 0xa0000016 _sbss_end = . -.bss 0xa000004c 0x4228 +.bss 0xa0000018 0x5028 *(.dynbss) *(COMMON) - COMMON 0xa000004c 0x4208 build/ChaletDuino_795/production/Source/BootloaderProtocol.o - 0xa000004c RxDataBuffer - 0xa000014c CurrentDataSector - 0xa0004154 TxBuffer - COMMON 0xa0004254 0x20 build/ChaletDuino_795/production/Source/InternalUart.o - 0xa0004254 astInternalUartData - 0xa0004274 . = ALIGN (0x4) - 0xa0004274 . = ALIGN (0x4) - 0xa0004274 _end = . - 0xa0004274 _bss_end = . + COMMON 0xa0000018 0x4008 build/ChaletDuino_795/production/Source/FlashInterface.o + 0xa0000018 CurrentDataSector + COMMON 0xa0004020 0x20 build/ChaletDuino_795/production/Source/InternalUart.o + 0xa0004020 astInternalUartData + COMMON 0xa0004040 0x1000 build/ChaletDuino_795/production/Source/SPI_Flash.o + 0xa0004040 mFlashSectorBuffer + 0xa0005040 . = ALIGN (0x4) + 0xa0005040 . = ALIGN (0x4) + 0xa0005040 _end = . + 0xa0005040 _bss_end = . 0x00008000 _bmxdudba_address = 0x8000 0x00008000 _bmxdupba_address = 0x8000 @@ -1005,17 +992,17 @@ END GROUP .comment 0x00000000 0x78 *(.comment) - .comment 0x00000000 0x3c build/ChaletDuino_795/production/Source/BootloaderProtocol.o + .comment 0x00000000 0x3c build/ChaletDuino_795/production/Source/BootloaderStateMachine.o 0x3d (size before relaxing) - .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/BootloaderStateMachine.o .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/DigitalIO.o .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/FlashInterface.o .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/InternalUart.o .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/main.o - .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/FatFS/ff.o - .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/FatFS/ffsystem.o - .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/FatFS/ffunicode.o - .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o + .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/SPI.o + .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/SPI_Flash.o + .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o + .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/BootloaderInterface.o + .comment 0x00000000 0x3d build/ChaletDuino_795/production/Source/crc32.o .comment 0x0000003c 0x3c c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) 0x3d (size before relaxing) .comment 0x00000000 0x3d c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) @@ -1038,179 +1025,189 @@ END GROUP .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0x208 +.debug_aranges 0x00000000 0x248 *(.debug_aranges) .debug_aranges - 0x00000000 0x20 build/ChaletDuino_795/production/Source/BootloaderProtocol.o + 0x00000000 0x20 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o .debug_aranges - 0x00000020 0x20 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o + 0x00000020 0x20 build/ChaletDuino_795/production/Source/DigitalIO.o .debug_aranges - 0x00000040 0x20 build/ChaletDuino_795/production/Source/DigitalIO.o + 0x00000040 0x20 build/ChaletDuino_795/production/Source/FlashInterface.o .debug_aranges - 0x00000060 0x20 build/ChaletDuino_795/production/Source/FlashInterface.o + 0x00000060 0x20 build/ChaletDuino_795/production/Source/InternalUart.o .debug_aranges - 0x00000080 0x20 build/ChaletDuino_795/production/Source/InternalUart.o + 0x00000080 0x20 build/ChaletDuino_795/production/Source/main.o .debug_aranges - 0x000000a0 0x20 build/ChaletDuino_795/production/Source/main.o + 0x000000a0 0x20 build/ChaletDuino_795/production/Source/SPI.o .debug_aranges - 0x000000c0 0x20 build/ChaletDuino_795/production/Source/FatFS/ff.o + 0x000000c0 0x20 build/ChaletDuino_795/production/Source/SPI_Flash.o .debug_aranges - 0x000000e0 0x20 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o + 0x000000e0 0x20 build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o .debug_aranges - 0x00000100 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) + 0x00000100 0x20 build/ChaletDuino_795/production/Source/BootloaderInterface.o .debug_aranges - 0x00000120 0x28 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) + 0x00000120 0x20 build/ChaletDuino_795/production/Source/crc32.o .debug_aranges - 0x00000148 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) + 0x00000140 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) .debug_aranges - 0x00000168 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) + 0x00000160 0x28 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) .debug_aranges - 0x00000188 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) + 0x00000188 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) .debug_aranges - 0x000001a8 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) + 0x000001a8 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) .debug_aranges - 0x000001c8 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) + 0x000001c8 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) .debug_aranges - 0x000001e8 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) + 0x000001e8 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) + .debug_aranges + 0x00000208 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) + .debug_aranges + 0x00000228 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) .debug_pubnames - 0x00000000 0x60b + 0x00000000 0x677 *(.debug_pubnames) .debug_pubnames - 0x00000000 0x165 build/ChaletDuino_795/production/Source/BootloaderProtocol.o + 0x00000000 0xd6 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o .debug_pubnames - 0x00000165 0x76 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o + 0x000000d6 0x24 build/ChaletDuino_795/production/Source/DigitalIO.o .debug_pubnames - 0x000001db 0x24 build/ChaletDuino_795/production/Source/DigitalIO.o + 0x000000fa 0xaf build/ChaletDuino_795/production/Source/FlashInterface.o .debug_pubnames - 0x000001ff 0x99 build/ChaletDuino_795/production/Source/FlashInterface.o + 0x000001a9 0x98 build/ChaletDuino_795/production/Source/InternalUart.o .debug_pubnames - 0x00000298 0x98 build/ChaletDuino_795/production/Source/InternalUart.o + 0x00000241 0x3a build/ChaletDuino_795/production/Source/main.o .debug_pubnames - 0x00000330 0x3a build/ChaletDuino_795/production/Source/main.o + 0x0000027b 0x25 build/ChaletDuino_795/production/Source/SPI.o .debug_pubnames - 0x0000036a 0xdc build/ChaletDuino_795/production/Source/FatFS/ff.o + 0x000002a0 0x18a build/ChaletDuino_795/production/Source/SPI_Flash.o .debug_pubnames - 0x00000446 0x75 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o + 0x0000042a 0x20 build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o .debug_pubnames - 0x000004bb 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) + 0x0000044a 0xae build/ChaletDuino_795/production/Source/BootloaderInterface.o .debug_pubnames - 0x000004db 0x3b c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) + 0x000004f8 0x2f build/ChaletDuino_795/production/Source/crc32.o .debug_pubnames - 0x00000516 0x2b c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) + 0x00000527 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) .debug_pubnames - 0x00000541 0x2b c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) + 0x00000547 0x3b c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) .debug_pubnames - 0x0000056c 0x33 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) + 0x00000582 0x2b c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) .debug_pubnames - 0x0000059f 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) + 0x000005ad 0x2b c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) .debug_pubnames - 0x000005bf 0x24 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) + 0x000005d8 0x33 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) .debug_pubnames - 0x000005e3 0x28 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) + 0x0000060b 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) + .debug_pubnames + 0x0000062b 0x24 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) + .debug_pubnames + 0x0000064f 0x28 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) -.debug_info 0x00000000 0xde79 +.debug_info 0x00000000 0x103b7 *(.debug_info .gnu.linkonce.wi.*) - .debug_info 0x00000000 0x1a5d build/ChaletDuino_795/production/Source/BootloaderProtocol.o - .debug_info 0x00001a5d 0x1871 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o - .debug_info 0x000032ce 0x13a6 build/ChaletDuino_795/production/Source/DigitalIO.o - .debug_info 0x00004674 0x15d0 build/ChaletDuino_795/production/Source/FlashInterface.o - .debug_info 0x00005c44 0x27a9 build/ChaletDuino_795/production/Source/InternalUart.o - .debug_info 0x000083ed 0x1871 build/ChaletDuino_795/production/Source/main.o - .debug_info 0x00009c5e 0x1d4f build/ChaletDuino_795/production/Source/FatFS/ff.o - .debug_info 0x0000b9ad 0x121 build/ChaletDuino_795/production/Source/FatFS/ffsystem.o - .debug_info 0x0000bace 0x122 build/ChaletDuino_795/production/Source/FatFS/ffunicode.o - .debug_info 0x0000bbf0 0x1c84 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o - .debug_info 0x0000d874 0xae c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) - .debug_info 0x0000d922 0xbb c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) - .debug_info 0x0000d9dd 0xb2 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) - .debug_info 0x0000da8f 0xb2 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) - .debug_info 0x0000db41 0xe2 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) - .debug_info 0x0000dc23 0xbc c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) - .debug_info 0x0000dcdf 0xc4 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) - .debug_info 0x0000dda3 0xd6 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) + .debug_info 0x00000000 0x1936 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o + .debug_info 0x00001936 0x13a5 build/ChaletDuino_795/production/Source/DigitalIO.o + .debug_info 0x00002cdb 0x1667 build/ChaletDuino_795/production/Source/FlashInterface.o + .debug_info 0x00004342 0x27a8 build/ChaletDuino_795/production/Source/InternalUart.o + .debug_info 0x00006aea 0x16f7 build/ChaletDuino_795/production/Source/main.o + .debug_info 0x000081e1 0x1325 build/ChaletDuino_795/production/Source/SPI.o + .debug_info 0x00009506 0x1879 build/ChaletDuino_795/production/Source/SPI_Flash.o + .debug_info 0x0000ad7f 0x37b3 build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o + .debug_info 0x0000e532 0x15a5 build/ChaletDuino_795/production/Source/BootloaderInterface.o + .debug_info 0x0000fad7 0x2db build/ChaletDuino_795/production/Source/crc32.o + .debug_info 0x0000fdb2 0xae c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) + .debug_info 0x0000fe60 0xbb c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) + .debug_info 0x0000ff1b 0xb2 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) + .debug_info 0x0000ffcd 0xb2 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) + .debug_info 0x0001007f 0xe2 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) + .debug_info 0x00010161 0xbc c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) + .debug_info 0x0001021d 0xc4 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) + .debug_info 0x000102e1 0xd6 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) -.debug_abbrev 0x00000000 0x124a +.debug_abbrev 0x00000000 0x150b *(.debug_abbrev) - .debug_abbrev 0x00000000 0x270 build/ChaletDuino_795/production/Source/BootloaderProtocol.o - .debug_abbrev 0x00000270 0x248 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o - .debug_abbrev 0x000004b8 0x17b build/ChaletDuino_795/production/Source/DigitalIO.o - .debug_abbrev 0x00000633 0x1e9 build/ChaletDuino_795/production/Source/FlashInterface.o - .debug_abbrev 0x0000081c 0x1fd build/ChaletDuino_795/production/Source/InternalUart.o - .debug_abbrev 0x00000a19 0x2be build/ChaletDuino_795/production/Source/main.o - .debug_abbrev 0x00000cd7 0x132 build/ChaletDuino_795/production/Source/FatFS/ff.o - .debug_abbrev 0x00000e09 0x1f build/ChaletDuino_795/production/Source/FatFS/ffsystem.o - .debug_abbrev 0x00000e28 0x1f build/ChaletDuino_795/production/Source/FatFS/ffunicode.o - .debug_abbrev 0x00000e47 0x2d4 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o - .debug_abbrev 0x0000111b 0x32 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) - .debug_abbrev 0x0000114d 0x23 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) - .debug_abbrev 0x00001170 0x23 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) - .debug_abbrev 0x00001193 0x23 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) - .debug_abbrev 0x000011b6 0x25 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) - .debug_abbrev 0x000011db 0x25 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) - .debug_abbrev 0x00001200 0x25 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) - .debug_abbrev 0x00001225 0x25 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) + .debug_abbrev 0x00000000 0x2a2 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o + .debug_abbrev 0x000002a2 0x17b build/ChaletDuino_795/production/Source/DigitalIO.o + .debug_abbrev 0x0000041d 0x210 build/ChaletDuino_795/production/Source/FlashInterface.o + .debug_abbrev 0x0000062d 0x1fd build/ChaletDuino_795/production/Source/InternalUart.o + .debug_abbrev 0x0000082a 0x2be build/ChaletDuino_795/production/Source/main.o + .debug_abbrev 0x00000ae8 0x18e build/ChaletDuino_795/production/Source/SPI.o + .debug_abbrev 0x00000c76 0x2b7 build/ChaletDuino_795/production/Source/SPI_Flash.o + .debug_abbrev 0x00000f2d 0x1f2 build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o + .debug_abbrev 0x0000111f 0x223 build/ChaletDuino_795/production/Source/BootloaderInterface.o + .debug_abbrev 0x00001342 0x9a build/ChaletDuino_795/production/Source/crc32.o + .debug_abbrev 0x000013dc 0x32 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) + .debug_abbrev 0x0000140e 0x23 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) + .debug_abbrev 0x00001431 0x23 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) + .debug_abbrev 0x00001454 0x23 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) + .debug_abbrev 0x00001477 0x25 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) + .debug_abbrev 0x0000149c 0x25 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) + .debug_abbrev 0x000014c1 0x25 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) + .debug_abbrev 0x000014e6 0x25 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) -.debug_line 0x00000000 0x1e31 +.debug_line 0x00000000 0x19b8 *(.debug_line) - .debug_line 0x00000000 0x265 build/ChaletDuino_795/production/Source/BootloaderProtocol.o - .debug_line 0x00000265 0x2b4 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o - .debug_line 0x00000519 0x17f build/ChaletDuino_795/production/Source/DigitalIO.o - .debug_line 0x00000698 0x25b build/ChaletDuino_795/production/Source/FlashInterface.o - .debug_line 0x000008f3 0x20d build/ChaletDuino_795/production/Source/InternalUart.o - .debug_line 0x00000b00 0x2af build/ChaletDuino_795/production/Source/main.o - .debug_line 0x00000daf 0x8a0 build/ChaletDuino_795/production/Source/FatFS/ff.o - .debug_line 0x0000164f 0x1d build/ChaletDuino_795/production/Source/FatFS/ffsystem.o - .debug_line 0x0000166c 0x1d build/ChaletDuino_795/production/Source/FatFS/ffunicode.o - .debug_line 0x00001689 0x376 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o - .debug_line 0x000019ff 0xb1 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) - .debug_line 0x00001ab0 0x62 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) - .debug_line 0x00001b12 0x73 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) - .debug_line 0x00001b85 0x73 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) - .debug_line 0x00001bf8 0x97 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) - .debug_line 0x00001c8f 0x84 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) - .debug_line 0x00001d13 0x88 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) - .debug_line 0x00001d9b 0x96 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) + .debug_line 0x00000000 0x325 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o + .debug_line 0x00000325 0x17e build/ChaletDuino_795/production/Source/DigitalIO.o + .debug_line 0x000004a3 0x25a build/ChaletDuino_795/production/Source/FlashInterface.o + .debug_line 0x000006fd 0x20b build/ChaletDuino_795/production/Source/InternalUart.o + .debug_line 0x00000908 0x28f build/ChaletDuino_795/production/Source/main.o + .debug_line 0x00000b97 0x175 build/ChaletDuino_795/production/Source/SPI.o + .debug_line 0x00000d0c 0x2c8 build/ChaletDuino_795/production/Source/SPI_Flash.o + .debug_line 0x00000fd4 0x22d build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o + .debug_line 0x00001201 0x235 build/ChaletDuino_795/production/Source/BootloaderInterface.o + .debug_line 0x00001436 0x150 build/ChaletDuino_795/production/Source/crc32.o + .debug_line 0x00001586 0xb1 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) + .debug_line 0x00001637 0x62 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) + .debug_line 0x00001699 0x73 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) + .debug_line 0x0000170c 0x73 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) + .debug_line 0x0000177f 0x97 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) + .debug_line 0x00001816 0x84 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) + .debug_line 0x0000189a 0x88 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) + .debug_line 0x00001922 0x96 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) -.debug_frame 0x00000000 0xc14 +.debug_frame 0x00000000 0x658 *(.debug_frame) - .debug_frame 0x00000000 0xb8 build/ChaletDuino_795/production/Source/BootloaderProtocol.o - .debug_frame 0x000000b8 0x80 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o - .debug_frame 0x00000138 0x2c build/ChaletDuino_795/production/Source/DigitalIO.o - .debug_frame 0x00000164 0xd4 build/ChaletDuino_795/production/Source/FlashInterface.o - .debug_frame 0x00000238 0x9c build/ChaletDuino_795/production/Source/InternalUart.o - .debug_frame 0x000002d4 0x48 build/ChaletDuino_795/production/Source/main.o - .debug_frame 0x0000031c 0x5ac build/ChaletDuino_795/production/Source/FatFS/ff.o - .debug_frame 0x000008c8 0x22c build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o - .debug_frame 0x00000af4 0x28 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) - .debug_frame 0x00000b1c 0x30 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) - .debug_frame 0x00000b4c 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) - .debug_frame 0x00000b6c 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) - .debug_frame 0x00000b8c 0x28 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) - .debug_frame 0x00000bb4 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) - .debug_frame 0x00000bd4 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) - .debug_frame 0x00000bf4 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) + .debug_frame 0x00000000 0xb8 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o + .debug_frame 0x000000b8 0x2c build/ChaletDuino_795/production/Source/DigitalIO.o + .debug_frame 0x000000e4 0xd4 build/ChaletDuino_795/production/Source/FlashInterface.o + .debug_frame 0x000001b8 0x9c build/ChaletDuino_795/production/Source/InternalUart.o + .debug_frame 0x00000254 0x48 build/ChaletDuino_795/production/Source/main.o + .debug_frame 0x0000029c 0x2c build/ChaletDuino_795/production/Source/SPI.o + .debug_frame 0x000002c8 0x160 build/ChaletDuino_795/production/Source/SPI_Flash.o + .debug_frame 0x00000428 0x2c build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o + .debug_frame 0x00000454 0x80 build/ChaletDuino_795/production/Source/BootloaderInterface.o + .debug_frame 0x000004d4 0x64 build/ChaletDuino_795/production/Source/crc32.o + .debug_frame 0x00000538 0x28 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) + .debug_frame 0x00000560 0x30 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) + .debug_frame 0x00000590 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) + .debug_frame 0x000005b0 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) + .debug_frame 0x000005d0 0x28 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) + .debug_frame 0x000005f8 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) + .debug_frame 0x00000618 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) + .debug_frame 0x00000638 0x20 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) -.debug_str 0x00000000 0xa0c +.debug_str 0x00000000 0xd5c *(.debug_str) - .debug_str 0x00000000 0x1c7 build/ChaletDuino_795/production/Source/BootloaderProtocol.o - .debug_str 0x000001c7 0x164 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o - .debug_str 0x0000032b 0x142 build/ChaletDuino_795/production/Source/DigitalIO.o - .debug_str 0x0000046d 0x156 build/ChaletDuino_795/production/Source/FlashInterface.o - .debug_str 0x000005c3 0x173 build/ChaletDuino_795/production/Source/InternalUart.o - .debug_str 0x00000736 0x15e build/ChaletDuino_795/production/Source/main.o - .debug_str 0x00000894 0xf build/ChaletDuino_795/production/Source/FatFS/ff.o - .debug_str 0x000008a3 0x0 build/ChaletDuino_795/production/Source/FatFS/ffsystem.o - .debug_str 0x000008a3 0x0 build/ChaletDuino_795/production/Source/FatFS/ffunicode.o - .debug_str 0x000008a3 0x169 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o - .debug_str 0x00000a0c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) - .debug_str 0x00000a0c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) - .debug_str 0x00000a0c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) - .debug_str 0x00000a0c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) - .debug_str 0x00000a0c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) - .debug_str 0x00000a0c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) - .debug_str 0x00000a0c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) - .debug_str 0x00000a0c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) + .debug_str 0x00000000 0x181 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o + .debug_str 0x00000181 0x142 build/ChaletDuino_795/production/Source/DigitalIO.o + .debug_str 0x000002c3 0x156 build/ChaletDuino_795/production/Source/FlashInterface.o + .debug_str 0x00000419 0x173 build/ChaletDuino_795/production/Source/InternalUart.o + .debug_str 0x0000058c 0x14d build/ChaletDuino_795/production/Source/main.o + .debug_str 0x000006d9 0x146 build/ChaletDuino_795/production/Source/SPI.o + .debug_str 0x0000081f 0x193 build/ChaletDuino_795/production/Source/SPI_Flash.o + .debug_str 0x000009b2 0x242 build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o + .debug_str 0x00000bf4 0x168 build/ChaletDuino_795/production/Source/BootloaderInterface.o + .debug_str 0x00000d5c 0x0 build/ChaletDuino_795/production/Source/crc32.o + .debug_str 0x00000d5c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) + .debug_str 0x00000d5c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) + .debug_str 0x00000d5c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) + .debug_str 0x00000d5c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) + .debug_str 0x00000d5c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) + .debug_str 0x00000d5c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) + .debug_str 0x00000d5c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) + .debug_str 0x00000d5c 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) .debug_loc *(.debug_loc) @@ -1231,28 +1228,28 @@ END GROUP *(.debug_varnames) .debug_pubtypes - 0x00000000 0x9ec + 0x00000000 0xbea *(.debug_pubtypes) .debug_pubtypes - 0x00000000 0x18d build/ChaletDuino_795/production/Source/BootloaderProtocol.o + 0x00000000 0x184 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o .debug_pubtypes - 0x0000018d 0x1a2 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o + 0x00000184 0x10a build/ChaletDuino_795/production/Source/DigitalIO.o .debug_pubtypes - 0x0000032f 0x10a build/ChaletDuino_795/production/Source/DigitalIO.o + 0x0000028e 0x133 build/ChaletDuino_795/production/Source/FlashInterface.o .debug_pubtypes - 0x00000439 0x120 build/ChaletDuino_795/production/Source/FlashInterface.o + 0x000003c1 0x16c build/ChaletDuino_795/production/Source/InternalUart.o .debug_pubtypes - 0x00000559 0x16c build/ChaletDuino_795/production/Source/InternalUart.o + 0x0000052d 0x10e build/ChaletDuino_795/production/Source/main.o .debug_pubtypes - 0x000006c5 0x133 build/ChaletDuino_795/production/Source/main.o + 0x0000063b 0xfc build/ChaletDuino_795/production/Source/SPI.o .debug_pubtypes - 0x000007f8 0x97 build/ChaletDuino_795/production/Source/FatFS/ff.o + 0x00000737 0xf8 build/ChaletDuino_795/production/Source/SPI_Flash.o .debug_pubtypes - 0x0000088f 0x12 build/ChaletDuino_795/production/Source/FatFS/ffsystem.o + 0x0000082f 0x276 build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o .debug_pubtypes - 0x000008a1 0x12 build/ChaletDuino_795/production/Source/FatFS/ffunicode.o + 0x00000aa5 0x119 build/ChaletDuino_795/production/Source/BootloaderInterface.o .debug_pubtypes - 0x000008b3 0x139 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o + 0x00000bbe 0x2c build/ChaletDuino_795/production/Source/crc32.o .debug_ranges 0x00000000 0x40 *(.debug_ranges) @@ -1265,25 +1262,25 @@ END GROUP 0x00000000 0x10 *(.gnu.attributes) .gnu.attributes - 0x00000000 0x10 build/ChaletDuino_795/production/Source/BootloaderProtocol.o + 0x00000000 0x10 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o .gnu.attributes - 0x00000010 0x10 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o + 0x00000010 0x10 build/ChaletDuino_795/production/Source/DigitalIO.o .gnu.attributes - 0x00000020 0x10 build/ChaletDuino_795/production/Source/DigitalIO.o + 0x00000020 0x10 build/ChaletDuino_795/production/Source/FlashInterface.o .gnu.attributes - 0x00000030 0x10 build/ChaletDuino_795/production/Source/FlashInterface.o + 0x00000030 0x10 build/ChaletDuino_795/production/Source/InternalUart.o .gnu.attributes - 0x00000040 0x10 build/ChaletDuino_795/production/Source/InternalUart.o + 0x00000040 0x10 build/ChaletDuino_795/production/Source/main.o .gnu.attributes - 0x00000050 0x10 build/ChaletDuino_795/production/Source/main.o + 0x00000050 0x10 build/ChaletDuino_795/production/Source/SPI.o .gnu.attributes - 0x00000060 0x10 build/ChaletDuino_795/production/Source/FatFS/ff.o + 0x00000060 0x10 build/ChaletDuino_795/production/Source/SPI_Flash.o .gnu.attributes - 0x00000070 0x10 build/ChaletDuino_795/production/Source/FatFS/ffsystem.o + 0x00000070 0x10 build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o .gnu.attributes - 0x00000080 0x10 build/ChaletDuino_795/production/Source/FatFS/ffunicode.o + 0x00000080 0x10 build/ChaletDuino_795/production/Source/BootloaderInterface.o .gnu.attributes - 0x00000090 0x10 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o + 0x00000090 0x10 build/ChaletDuino_795/production/Source/crc32.o .gnu.attributes 0x000000a0 0x10 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) .gnu.attributes @@ -1319,8 +1316,11 @@ OUTPUT(dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.elf elf32-t LOAD stack LOAD data_init -.stack 0xa0004290 0x400 - .stack 0xa0004290 0x400 stack +.stack 0xa0005460 0x400 + .stack 0xa0005460 0x400 stack + +.bss 0xa0005040 0x400 + .bss 0xa0005040 0x400 build/ChaletDuino_795/production/Source/crc32.o .mdebug.abi32%z1 0x00000000 0x0 @@ -1818,114 +1818,111 @@ LOAD data_init .mdebug.abi32%z163 0x00000000 0x0 - .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o + .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/crc32.o -.bss%z164 0x00000000 0x0 - .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o +.data%z164 0x00000000 0x0 + .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/crc32.o -.data%z165 0x00000000 0x0 - .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o - -.mdebug.abi32%z166 +.mdebug.abi32%z165 0x00000000 0x0 - .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/ffunicode.o + .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/BootloaderInterface.o -.bss%z167 0x00000000 0x0 - .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/ffunicode.o +.bss%z166 0x00000000 0x0 + .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/BootloaderInterface.o -.data%z168 0x00000000 0x0 - .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/ffunicode.o +.data%z167 0x00000000 0x0 + .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/BootloaderInterface.o -.mdebug.abi32%z169 +.mdebug.abi32%z168 0x00000000 0x0 - .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/ffsystem.o + .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o -.bss%z170 0x00000000 0x0 - .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/ffsystem.o +.bss%z169 0x00000000 0x0 + .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o -.data%z171 0x00000000 0x0 - .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/ffsystem.o +.data%z170 0x00000000 0x0 + .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o -.mdebug.abi32%z172 +.mdebug.abi32%z171 0x00000000 0x0 - .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/ff.o + .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/SPI_Flash.o -.bss%z173 0x00000000 0x0 - .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/ff.o +.bss%z172 0x00000000 0x0 + .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/SPI_Flash.o -.data%z174 0x00000000 0x0 - .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/ff.o +.data%z173 0x00000000 0x0 + .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/SPI_Flash.o -.mdebug.abi32%z175 +.mdebug.abi32%z174 + 0x00000000 0x0 + .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/SPI.o + +.bss%z175 0x00000000 0x0 + .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/SPI.o + +.data%z176 0x00000000 0x0 + .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/SPI.o + +.mdebug.abi32%z177 0x00000000 0x0 .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/main.o -.bss%z176 0x00000000 0x0 +.bss%z178 0x00000000 0x0 .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/main.o -.data%z177 0x00000000 0x0 +.data%z179 0x00000000 0x0 .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/main.o -.mdebug.abi32%z178 +.mdebug.abi32%z180 0x00000000 0x0 .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/InternalUart.o -.bss%z179 0x00000000 0x0 +.bss%z181 0x00000000 0x0 .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/InternalUart.o -.data%z180 0x00000000 0x0 +.data%z182 0x00000000 0x0 .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/InternalUart.o -.mdebug.abi32%z181 +.mdebug.abi32%z183 0x00000000 0x0 .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/FlashInterface.o -.bss%z182 0x00000000 0x0 +.bss%z184 0x00000000 0x0 .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/FlashInterface.o -.data%z183 0x00000000 0x0 +.data%z185 0x00000000 0x0 .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/FlashInterface.o -.mdebug.abi32%z184 +.mdebug.abi32%z186 0x00000000 0x0 .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/DigitalIO.o -.bss%z185 0x00000000 0x0 +.bss%z187 0x00000000 0x0 .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/DigitalIO.o -.data%z186 0x00000000 0x0 +.data%z188 0x00000000 0x0 .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/DigitalIO.o -.mdebug.abi32%z187 +.mdebug.abi32%z189 0x00000000 0x0 .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o -.bss%z188 0x00000000 0x0 +.bss%z190 0x00000000 0x0 .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o -.data%z189 0x00000000 0x0 +.data%z191 0x00000000 0x0 .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o -.mdebug.abi32%z190 - 0x00000000 0x0 - .mdebug.abi32 0x00000000 0x0 build/ChaletDuino_795/production/Source/BootloaderProtocol.o - -.bss%z191 0x00000000 0x0 - .bss 0x00000000 0x0 build/ChaletDuino_795/production/Source/BootloaderProtocol.o - -.data%z192 0x00000000 0x0 - .data 0x00000000 0x0 build/ChaletDuino_795/production/Source/BootloaderProtocol.o - -.bss%z193 0x00000000 0x0 +.bss%z192 0x00000000 0x0 .bss 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\debug-exception-return.o -.data%z194 0x00000000 0x0 +.data%z193 0x00000000 0x0 .data 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\debug-exception-return.o -.bss%z195 0x00000000 0x0 +.bss%z194 0x00000000 0x0 .bss 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX795F512H/crt0_mips32r2.o -.data%z196 0x00000000 0x0 +.data%z195 0x00000000 0x0 .data 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX795F512H/crt0_mips32r2.o ._debug_exception @@ -1934,378 +1931,365 @@ LOAD data_init 0xbfc00480 0x2c c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\debug-exception-return.o 0xbfc00480 __DbgExecReturn -.text 0x9d000000 0x8e28 - .text 0x9d000000 0x5bf4 build/ChaletDuino_795/production/Source/FatFS/ff.o - 0x9d003314 f_mount - 0x9d003410 f_open - 0x9d003968 f_read - 0x9d003e44 f_write - 0x9d0043ec f_sync - 0x9d0045d8 f_close - 0x9d004654 f_lseek - 0x9d004b4c f_opendir - 0x9d004cb0 f_closedir - 0x9d004d10 f_readdir - 0x9d004e00 f_stat - 0x9d004ec4 f_getfree - 0x9d005184 f_truncate - 0x9d0053ec f_unlink - 0x9d0055d4 f_mkdir - 0x9d0058c8 f_rename - .text 0x9d005bf4 0x1654 build/ChaletDuino_795/production/Source/FatFS/mmc_drv.o - 0x9d00650c disk_status - 0x9d006554 disk_initialize - 0x9d00686c disk_read - 0x9d0069d8 disk_write - 0x9d006b94 disk_ioctl - 0x9d0071a8 disk_timerproc - .text 0x9d007248 0x6a8 build/ChaletDuino_795/production/Source/BootloaderProtocol.o - 0x9d007248 ProtocolInit - 0x9d007284 ProtocolRxData - 0x9d007604 ProtocolExecCmd - 0x9d0076f0 ProtocolResetSM - 0x9d007740 ProtocolSendCmd - 0x9d007890 ProtocolSendAck - .text 0x9d0078f0 0x5c8 build/ChaletDuino_795/production/Source/FlashInterface.o - 0x9d0078f0 InitFlashInterface - 0x9d007910 FlashUnlock - 0x9d0079c8 FlashProgramWord - 0x9d007a28 FlashProgramRow - 0x9d007a8c FlashProgramData - 0x9d007db4 FlashErase - 0x9d007e68 FlashErasePage - .text 0x9d007eb8 0x5ac build/ChaletDuino_795/production/Source/BootloaderStateMachine.o - 0x9d007eb8 BootloaderSMInit - 0x9d007ee0 BootloaderSM - 0x9d0083fc JumpToApp - 0x9d00843c DownloadFlash - .text 0x9d008464 0x584 build/ChaletDuino_795/production/Source/main.o - 0x9d008464 main - 0x9d008924 _general_exception_handler - .text 0x9d0089e8 0x440 build/ChaletDuino_795/production/Source/InternalUart.o - 0x9d0089e8 InternalUartInit - 0x9d008b30 OpenInternalPort - 0x9d008c78 SendInternalUartData - 0x9d008d7c ReadInternalUart - 0x9d008df0 CloseInternalUart +.text 0x9d000000 0x35bc + .text 0x9d000000 0xddc build/ChaletDuino_795/production/Source/SPI_Flash.o + 0x9d000000 InitSPIFlash + 0x9d000174 SPIFlashCheckAndConfigure + 0x9d0002e8 SPIFlashWriteEnable + 0x9d00034c SPIFlashReadStatusReg + 0x9d0003d0 SPIFlashCheckBusy + 0x9d00042c SPIFlashCheckChipID + 0x9d000528 SPIFlashReadBuffer + 0x9d0006a8 SPIFlashEraseSector + 0x9d0007d0 SPIFlashErase64KSector + 0x9d000924 SPIFlashWriteSectorWorkingBuffer + 0x9d000ae0 SPIFlashWriteByte + 0x9d000c34 SPIFlashWriteBuffer + .text 0x9d000ddc 0x8d4 build/ChaletDuino_795/production/Source/BootloaderStateMachine.o + 0x9d000ddc BootloaderSMInit + 0x9d000e0c BootloaderSM + 0x9d001560 JumpToApp + 0x9d00163c BootloaderSMSetSPIFlashDetected + 0x9d001668 BootloaderSMReadBootloaderFlags + 0x9d001688 DownloadFlash + .text 0x9d0016b0 0x6fc build/ChaletDuino_795/production/Source/ChaletduinoV2Board.o + 0x9d0016b0 InitBoard + .text 0x9d001dac 0x62c build/ChaletDuino_795/production/Source/BootloaderInterface.o + 0x9d001dac BootloaderCheckFlashBootloaderData + 0x9d00220c BoootloaderGetBootloaderFlags + 0x9d002268 BootloaderBytesToInt + 0x9d002320 BootloaderBytesToIntLittleEndian + .text 0x9d0023d8 0x5c8 build/ChaletDuino_795/production/Source/FlashInterface.o + 0x9d0023d8 InitFlashInterface + 0x9d0023f8 FlashUnlock + 0x9d0024b0 FlashProgramWord + 0x9d002510 FlashProgramRow + 0x9d002574 FlashProgramData + 0x9d00289c FlashErase + 0x9d002950 FlashErasePage + .text 0x9d0029a0 0x594 build/ChaletDuino_795/production/Source/main.o + 0x9d0029a0 main + 0x9d002e70 _general_exception_handler + .text 0x9d002f34 0x41c build/ChaletDuino_795/production/Source/InternalUart.o + 0x9d002f34 InternalUartInit + 0x9d00307c OpenInternalPort + 0x9d0031c4 SendInternalUartData + 0x9d0032bc ReadInternalUart + 0x9d003318 CloseInternalUart + .text 0x9d003350 0x26c build/ChaletDuino_795/production/Source/crc32.o + 0x9d003350 crc_32 + 0x9d003448 update_crc_32 .text.general_exception - 0x9d008e28 0xdc + 0x9d0035bc 0xdc .text.general_exception - 0x9d008e28 0xdc c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(general-exception.o) - 0x9d008e28 _general_exception_context - -.rodata 0x9d008f04 0x9c - .rodata 0x9d008f04 0x9c build/ChaletDuino_795/production/Source/FatFS/ff.o + 0x9d0035bc 0xdc c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(general-exception.o) + 0x9d0035bc _general_exception_context .text.SoftReset - 0x9d008fa0 0x78 + 0x9d003698 0x78 .text.SoftReset - 0x9d008fa0 0x78 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) - 0x9d008fa0 SoftReset + 0x9d003698 0x78 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) + 0x9d003698 SoftReset -.text 0x9d009018 0x68 - .text 0x9d009018 0x68 build/ChaletDuino_795/production/Source/DigitalIO.o - 0x9d009018 InitDigitalIO - -.dinit 0x9d009080 0x50 - .dinit 0x9d009080 0x50 data_init +.text 0x9d003710 0xd8 + .text 0x9d003710 0x70 build/ChaletDuino_795/production/Source/SPI.o + 0x9d003710 SPITransaction + .text 0x9d003780 0x68 build/ChaletDuino_795/production/Source/DigitalIO.o + 0x9d003780 InitDigitalIO .text.main_entry - 0x9d0090d0 0x4c + 0x9d0037e8 0x4c .text.main_entry - 0x9d0090d0 0x4c c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX795F512H/crt0_mips32r2.o - 0x9d0090fc __crt0_exit + 0x9d0037e8 0x4c c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX795F512H/crt0_mips32r2.o + 0x9d003814 __crt0_exit .text._bootstrap_exception_handler - 0x9d00911c 0x48 + 0x9d003834 0x48 .text._bootstrap_exception_handler - 0x9d00911c 0x48 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) - 0x9d00911c _bootstrap_exception_handler + 0x9d003834 0x48 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) + 0x9d003834 _bootstrap_exception_handler -.text 0x9d009164 0x44 - .text 0x9d009164 0x44 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\pic32_software_reset.o - 0x9d009164 __pic32_software_reset +.text 0x9d00387c 0x44 + .text 0x9d00387c 0x44 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\pic32_software_reset.o + 0x9d00387c __pic32_software_reset + +.dinit 0x9d0038c0 0x40 + .dinit 0x9d0038c0 0x40 data_init .vector_default - 0x9d0091a8 0x38 + 0x9d003900 0x38 .vector_default - 0x9d0091a8 0x38 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) - 0x9d0091a8 _DefaultInterrupt + 0x9d003900 0x38 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) + 0x9d003900 _DefaultInterrupt .text.INTRestoreInterrupts - 0x9d0091e0 0x1c + 0x9d003938 0x1c .text.INTRestoreInterrupts - 0x9d0091e0 0x1c c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) - 0x9d0091e0 INTRestoreInterrupts + 0x9d003938 0x1c c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) + 0x9d003938 INTRestoreInterrupts .text.CheKseg0CacheOff - 0x9d0091fc 0x18 + 0x9d003954 0x18 .text.CheKseg0CacheOff - 0x9d0091fc 0x18 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) - 0x9d0091fc CheKseg0CacheOff + 0x9d003954 0x18 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) + 0x9d003954 CheKseg0CacheOff .text.CheKseg0CacheOn - 0x9d009214 0x18 + 0x9d00396c 0x18 .text.CheKseg0CacheOn - 0x9d009214 0x18 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) - 0x9d009214 CheKseg0CacheOn + 0x9d00396c 0x18 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) + 0x9d00396c CheKseg0CacheOn -.text 0x9d00922c 0x18 - .text 0x9d00922c 0x18 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-nmi-handler.o) - 0x9d00922c _nmi_handler +.text 0x9d003984 0x18 + .text 0x9d003984 0x18 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-nmi-handler.o) + 0x9d003984 _nmi_handler .text.INTDisableInterrupts - 0x9d009244 0x8 + 0x9d00399c 0x8 .text.INTDisableInterrupts - 0x9d009244 0x8 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) - 0x9d009244 INTDisableInterrupts + 0x9d00399c 0x8 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) + 0x9d00399c INTDisableInterrupts .text._on_reset - 0x9d00924c 0x8 + 0x9d0039a4 0x8 .text._on_reset - 0x9d00924c 0x8 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) - 0x9d00924c _on_reset + 0x9d0039a4 0x8 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) + 0x9d0039a4 _on_reset .text._on_bootstrap - 0x9d009254 0x8 + 0x9d0039ac 0x8 .text._on_bootstrap - 0x9d009254 0x8 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) - 0x9d009254 _on_bootstrap + 0x9d0039ac 0x8 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) + 0x9d0039ac _on_bootstrap -.text%z197 0x00000000 0x0 +.text%z196 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(defaultinterrupt.o) -.text%z198 0x00000000 0x0 +.text%z197 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector63.o) -.text%z199 0x00000000 0x0 +.text%z198 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector62.o) -.text%z200 0x00000000 0x0 +.text%z199 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector61.o) -.text%z201 0x00000000 0x0 +.text%z200 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector60.o) -.text%z202 0x00000000 0x0 +.text%z201 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector59.o) -.text%z203 0x00000000 0x0 +.text%z202 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector58.o) -.text%z204 0x00000000 0x0 +.text%z203 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector57.o) -.text%z205 0x00000000 0x0 +.text%z204 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector56.o) -.text%z206 0x00000000 0x0 +.text%z205 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector55.o) -.text%z207 0x00000000 0x0 +.text%z206 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector54.o) -.text%z208 0x00000000 0x0 +.text%z207 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector53.o) -.text%z209 0x00000000 0x0 +.text%z208 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector52.o) -.text%z210 0x00000000 0x0 +.text%z209 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector51.o) -.text%z211 0x00000000 0x0 +.text%z210 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector50.o) -.text%z212 0x00000000 0x0 +.text%z211 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector49.o) -.text%z213 0x00000000 0x0 +.text%z212 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector48.o) -.text%z214 0x00000000 0x0 +.text%z213 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector47.o) -.text%z215 0x00000000 0x0 +.text%z214 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector46.o) -.text%z216 0x00000000 0x0 +.text%z215 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector45.o) -.text%z217 0x00000000 0x0 +.text%z216 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector44.o) -.text%z218 0x00000000 0x0 +.text%z217 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector43.o) -.text%z219 0x00000000 0x0 +.text%z218 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector42.o) -.text%z220 0x00000000 0x0 +.text%z219 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector41.o) -.text%z221 0x00000000 0x0 +.text%z220 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector40.o) -.text%z222 0x00000000 0x0 +.text%z221 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector39.o) -.text%z223 0x00000000 0x0 +.text%z222 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector38.o) -.text%z224 0x00000000 0x0 +.text%z223 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector37.o) -.text%z225 0x00000000 0x0 +.text%z224 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector36.o) -.text%z226 0x00000000 0x0 +.text%z225 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector35.o) -.text%z227 0x00000000 0x0 +.text%z226 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector34.o) -.text%z228 0x00000000 0x0 +.text%z227 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector33.o) -.text%z229 0x00000000 0x0 +.text%z228 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector32.o) -.text%z230 0x00000000 0x0 +.text%z229 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector31.o) -.text%z231 0x00000000 0x0 +.text%z230 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector30.o) -.text%z232 0x00000000 0x0 +.text%z231 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector29.o) -.text%z233 0x00000000 0x0 +.text%z232 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector28.o) -.text%z234 0x00000000 0x0 +.text%z233 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector27.o) -.text%z235 0x00000000 0x0 +.text%z234 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector26.o) -.text%z236 0x00000000 0x0 +.text%z235 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector25.o) -.text%z237 0x00000000 0x0 +.text%z236 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector24.o) -.text%z238 0x00000000 0x0 +.text%z237 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector23.o) -.text%z239 0x00000000 0x0 +.text%z238 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector22.o) -.text%z240 0x00000000 0x0 +.text%z239 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector21.o) -.text%z241 0x00000000 0x0 +.text%z240 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector20.o) -.text%z242 0x00000000 0x0 +.text%z241 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector19.o) -.text%z243 0x00000000 0x0 +.text%z242 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector18.o) -.text%z244 0x00000000 0x0 +.text%z243 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector17.o) -.text%z245 0x00000000 0x0 +.text%z244 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector16.o) -.text%z246 0x00000000 0x0 +.text%z245 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector15.o) -.text%z247 0x00000000 0x0 +.text%z246 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector14.o) -.text%z248 0x00000000 0x0 +.text%z247 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector13.o) -.text%z249 0x00000000 0x0 +.text%z248 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector12.o) -.text%z250 0x00000000 0x0 +.text%z249 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector11.o) -.text%z251 0x00000000 0x0 +.text%z250 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector10.o) -.text%z252 0x00000000 0x0 +.text%z251 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector9.o) -.text%z253 0x00000000 0x0 +.text%z252 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector8.o) -.text%z254 0x00000000 0x0 +.text%z253 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector7.o) -.text%z255 0x00000000 0x0 +.text%z254 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector6.o) -.text%z256 0x00000000 0x0 +.text%z255 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector5.o) -.text%z257 0x00000000 0x0 +.text%z256 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector4.o) -.text%z258 0x00000000 0x0 +.text%z257 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector3.o) -.text%z259 0x00000000 0x0 +.text%z258 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector2.o) -.text%z260 0x00000000 0x0 +.text%z259 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector1.o) -.text%z261 0x00000000 0x0 +.text%z260 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(vector0.o) -.text%z262 0x00000000 0x0 +.text%z261 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(general-exception.o) -.text%z263 0x00000000 0x0 +.text%z262 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-bootstrap.o) -.text%z264 0x00000000 0x0 +.text%z263 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-on-reset.o) -.text%z265 0x00000000 0x0 +.text%z264 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libpic32.a(default-bootstrap-exception-handler.o) -.text%z266 0x00000000 0x0 +.text%z265 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX795F512H\default_isr_vectors.o -.text%z267 0x00000000 0x0 +.text%z266 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_restore_interrupts_lib.o) -.text%z268 0x00000000 0x0 +.text%z267 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(int_disable_interrupts_lib.o) -.text%z269 0x00000000 0x0 +.text%z268 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(pcache.o) -.text%z270 0x00000000 0x0 +.text%z269 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\libmchp_peripheral_32MX795F512H.a(soft_reset_lib.o) -.text%z271 0x00000000 0x0 +.text%z270 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX795F512H\processor.o -.text%z272 0x00000000 0x0 - .text 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/ffunicode.o - -.text%z273 0x00000000 0x0 - .text 0x00000000 0x0 build/ChaletDuino_795/production/Source/FatFS/ffsystem.o - -.text%z274 0x00000000 0x0 +.text%z271 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib\debug-exception-return.o -.text%z275 0x00000000 0x0 +.text%z272 0x00000000 0x0 .text 0x00000000 0x0 c:/program files/microchip/xc32/v1.33/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/lib/./proc/32MX795F512H/crt0_mips32r2.o diff --git a/Bootloader_PIC32.X/nbproject/Makefile-ChaletDuino_795.mk b/Bootloader_PIC32.X/nbproject/Makefile-ChaletDuino_795.mk index ffd78b3..c3709c5 100644 --- a/Bootloader_PIC32.X/nbproject/Makefile-ChaletDuino_795.mk +++ b/Bootloader_PIC32.X/nbproject/Makefile-ChaletDuino_795.mk @@ -57,17 +57,17 @@ OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE} DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE} # Source Files Quoted if spaced -SOURCEFILES_QUOTED_IF_SPACED=Source/BootloaderProtocol.c Source/BootloaderStateMachine.c Source/DigitalIO.c Source/FlashInterface.c Source/InternalUart.c Source/main.c Source/FatFS/ff.c Source/FatFS/ffsystem.c Source/FatFS/ffunicode.c Source/FatFS/mmc_drv.c +SOURCEFILES_QUOTED_IF_SPACED=Source/BootloaderStateMachine.c Source/DigitalIO.c Source/FlashInterface.c Source/InternalUart.c Source/main.c Source/SPI.c Source/SPI_Flash.c Source/ChaletduinoV2Board.c Source/BootloaderInterface.c Source/crc32.c # Object Files Quoted if spaced -OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/Source/BootloaderProtocol.o ${OBJECTDIR}/Source/BootloaderStateMachine.o ${OBJECTDIR}/Source/DigitalIO.o ${OBJECTDIR}/Source/FlashInterface.o ${OBJECTDIR}/Source/InternalUart.o ${OBJECTDIR}/Source/main.o ${OBJECTDIR}/Source/FatFS/ff.o ${OBJECTDIR}/Source/FatFS/ffsystem.o ${OBJECTDIR}/Source/FatFS/ffunicode.o ${OBJECTDIR}/Source/FatFS/mmc_drv.o -POSSIBLE_DEPFILES=${OBJECTDIR}/Source/BootloaderProtocol.o.d ${OBJECTDIR}/Source/BootloaderStateMachine.o.d ${OBJECTDIR}/Source/DigitalIO.o.d ${OBJECTDIR}/Source/FlashInterface.o.d ${OBJECTDIR}/Source/InternalUart.o.d ${OBJECTDIR}/Source/main.o.d ${OBJECTDIR}/Source/FatFS/ff.o.d ${OBJECTDIR}/Source/FatFS/ffsystem.o.d ${OBJECTDIR}/Source/FatFS/ffunicode.o.d ${OBJECTDIR}/Source/FatFS/mmc_drv.o.d +OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/Source/BootloaderStateMachine.o ${OBJECTDIR}/Source/DigitalIO.o ${OBJECTDIR}/Source/FlashInterface.o ${OBJECTDIR}/Source/InternalUart.o ${OBJECTDIR}/Source/main.o ${OBJECTDIR}/Source/SPI.o ${OBJECTDIR}/Source/SPI_Flash.o ${OBJECTDIR}/Source/ChaletduinoV2Board.o ${OBJECTDIR}/Source/BootloaderInterface.o ${OBJECTDIR}/Source/crc32.o +POSSIBLE_DEPFILES=${OBJECTDIR}/Source/BootloaderStateMachine.o.d ${OBJECTDIR}/Source/DigitalIO.o.d ${OBJECTDIR}/Source/FlashInterface.o.d ${OBJECTDIR}/Source/InternalUart.o.d ${OBJECTDIR}/Source/main.o.d ${OBJECTDIR}/Source/SPI.o.d ${OBJECTDIR}/Source/SPI_Flash.o.d ${OBJECTDIR}/Source/ChaletduinoV2Board.o.d ${OBJECTDIR}/Source/BootloaderInterface.o.d ${OBJECTDIR}/Source/crc32.o.d # Object Files -OBJECTFILES=${OBJECTDIR}/Source/BootloaderProtocol.o ${OBJECTDIR}/Source/BootloaderStateMachine.o ${OBJECTDIR}/Source/DigitalIO.o ${OBJECTDIR}/Source/FlashInterface.o ${OBJECTDIR}/Source/InternalUart.o ${OBJECTDIR}/Source/main.o ${OBJECTDIR}/Source/FatFS/ff.o ${OBJECTDIR}/Source/FatFS/ffsystem.o ${OBJECTDIR}/Source/FatFS/ffunicode.o ${OBJECTDIR}/Source/FatFS/mmc_drv.o +OBJECTFILES=${OBJECTDIR}/Source/BootloaderStateMachine.o ${OBJECTDIR}/Source/DigitalIO.o ${OBJECTDIR}/Source/FlashInterface.o ${OBJECTDIR}/Source/InternalUart.o ${OBJECTDIR}/Source/main.o ${OBJECTDIR}/Source/SPI.o ${OBJECTDIR}/Source/SPI_Flash.o ${OBJECTDIR}/Source/ChaletduinoV2Board.o ${OBJECTDIR}/Source/BootloaderInterface.o ${OBJECTDIR}/Source/crc32.o # Source Files -SOURCEFILES=Source/BootloaderProtocol.c Source/BootloaderStateMachine.c Source/DigitalIO.c Source/FlashInterface.c Source/InternalUart.c Source/main.c Source/FatFS/ff.c Source/FatFS/ffsystem.c Source/FatFS/ffunicode.c Source/FatFS/mmc_drv.c +SOURCEFILES=Source/BootloaderStateMachine.c Source/DigitalIO.c Source/FlashInterface.c Source/InternalUart.c Source/main.c Source/SPI.c Source/SPI_Flash.c Source/ChaletduinoV2Board.c Source/BootloaderInterface.c Source/crc32.c @@ -107,146 +107,146 @@ endif # ------------------------------------------------------------------------------------ # Rules for buildStep: compile ifeq ($(TYPE_IMAGE), DEBUG_RUN) -${OBJECTDIR}/Source/BootloaderProtocol.o: Source/BootloaderProtocol.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/Source" - @${RM} ${OBJECTDIR}/Source/BootloaderProtocol.o.d - @${RM} ${OBJECTDIR}/Source/BootloaderProtocol.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/BootloaderProtocol.o.d" -o ${OBJECTDIR}/Source/BootloaderProtocol.o Source/BootloaderProtocol.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) - @${FIXDEPS} "${OBJECTDIR}/Source/BootloaderProtocol.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ - ${OBJECTDIR}/Source/BootloaderStateMachine.o: Source/BootloaderStateMachine.c nbproject/Makefile-${CND_CONF}.mk @${MKDIR} "${OBJECTDIR}/Source" @${RM} ${OBJECTDIR}/Source/BootloaderStateMachine.o.d @${RM} ${OBJECTDIR}/Source/BootloaderStateMachine.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/BootloaderStateMachine.o.d" -o ${OBJECTDIR}/Source/BootloaderStateMachine.o Source/BootloaderStateMachine.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/BootloaderStateMachine.o.d" -o ${OBJECTDIR}/Source/BootloaderStateMachine.o Source/BootloaderStateMachine.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) @${FIXDEPS} "${OBJECTDIR}/Source/BootloaderStateMachine.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ ${OBJECTDIR}/Source/DigitalIO.o: Source/DigitalIO.c nbproject/Makefile-${CND_CONF}.mk @${MKDIR} "${OBJECTDIR}/Source" @${RM} ${OBJECTDIR}/Source/DigitalIO.o.d @${RM} ${OBJECTDIR}/Source/DigitalIO.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/DigitalIO.o.d" -o ${OBJECTDIR}/Source/DigitalIO.o Source/DigitalIO.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/DigitalIO.o.d" -o ${OBJECTDIR}/Source/DigitalIO.o Source/DigitalIO.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) @${FIXDEPS} "${OBJECTDIR}/Source/DigitalIO.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ ${OBJECTDIR}/Source/FlashInterface.o: Source/FlashInterface.c nbproject/Makefile-${CND_CONF}.mk @${MKDIR} "${OBJECTDIR}/Source" @${RM} ${OBJECTDIR}/Source/FlashInterface.o.d @${RM} ${OBJECTDIR}/Source/FlashInterface.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/FlashInterface.o.d" -o ${OBJECTDIR}/Source/FlashInterface.o Source/FlashInterface.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/FlashInterface.o.d" -o ${OBJECTDIR}/Source/FlashInterface.o Source/FlashInterface.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) @${FIXDEPS} "${OBJECTDIR}/Source/FlashInterface.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ ${OBJECTDIR}/Source/InternalUart.o: Source/InternalUart.c nbproject/Makefile-${CND_CONF}.mk @${MKDIR} "${OBJECTDIR}/Source" @${RM} ${OBJECTDIR}/Source/InternalUart.o.d @${RM} ${OBJECTDIR}/Source/InternalUart.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/InternalUart.o.d" -o ${OBJECTDIR}/Source/InternalUart.o Source/InternalUart.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/InternalUart.o.d" -o ${OBJECTDIR}/Source/InternalUart.o Source/InternalUart.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) @${FIXDEPS} "${OBJECTDIR}/Source/InternalUart.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ ${OBJECTDIR}/Source/main.o: Source/main.c nbproject/Makefile-${CND_CONF}.mk @${MKDIR} "${OBJECTDIR}/Source" @${RM} ${OBJECTDIR}/Source/main.o.d @${RM} ${OBJECTDIR}/Source/main.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/main.o.d" -o ${OBJECTDIR}/Source/main.o Source/main.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/main.o.d" -o ${OBJECTDIR}/Source/main.o Source/main.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) @${FIXDEPS} "${OBJECTDIR}/Source/main.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -${OBJECTDIR}/Source/FatFS/ff.o: Source/FatFS/ff.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/Source/FatFS" - @${RM} ${OBJECTDIR}/Source/FatFS/ff.o.d - @${RM} ${OBJECTDIR}/Source/FatFS/ff.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/FatFS/ff.o.d" -o ${OBJECTDIR}/Source/FatFS/ff.o Source/FatFS/ff.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) - @${FIXDEPS} "${OBJECTDIR}/Source/FatFS/ff.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ +${OBJECTDIR}/Source/SPI.o: Source/SPI.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/Source" + @${RM} ${OBJECTDIR}/Source/SPI.o.d + @${RM} ${OBJECTDIR}/Source/SPI.o + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/SPI.o.d" -o ${OBJECTDIR}/Source/SPI.o Source/SPI.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + @${FIXDEPS} "${OBJECTDIR}/Source/SPI.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -${OBJECTDIR}/Source/FatFS/ffsystem.o: Source/FatFS/ffsystem.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/Source/FatFS" - @${RM} ${OBJECTDIR}/Source/FatFS/ffsystem.o.d - @${RM} ${OBJECTDIR}/Source/FatFS/ffsystem.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/FatFS/ffsystem.o.d" -o ${OBJECTDIR}/Source/FatFS/ffsystem.o Source/FatFS/ffsystem.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) - @${FIXDEPS} "${OBJECTDIR}/Source/FatFS/ffsystem.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ +${OBJECTDIR}/Source/SPI_Flash.o: Source/SPI_Flash.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/Source" + @${RM} ${OBJECTDIR}/Source/SPI_Flash.o.d + @${RM} ${OBJECTDIR}/Source/SPI_Flash.o + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/SPI_Flash.o.d" -o ${OBJECTDIR}/Source/SPI_Flash.o Source/SPI_Flash.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + @${FIXDEPS} "${OBJECTDIR}/Source/SPI_Flash.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -${OBJECTDIR}/Source/FatFS/ffunicode.o: Source/FatFS/ffunicode.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/Source/FatFS" - @${RM} ${OBJECTDIR}/Source/FatFS/ffunicode.o.d - @${RM} ${OBJECTDIR}/Source/FatFS/ffunicode.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/FatFS/ffunicode.o.d" -o ${OBJECTDIR}/Source/FatFS/ffunicode.o Source/FatFS/ffunicode.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) - @${FIXDEPS} "${OBJECTDIR}/Source/FatFS/ffunicode.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ +${OBJECTDIR}/Source/ChaletduinoV2Board.o: Source/ChaletduinoV2Board.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/Source" + @${RM} ${OBJECTDIR}/Source/ChaletduinoV2Board.o.d + @${RM} ${OBJECTDIR}/Source/ChaletduinoV2Board.o + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/ChaletduinoV2Board.o.d" -o ${OBJECTDIR}/Source/ChaletduinoV2Board.o Source/ChaletduinoV2Board.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + @${FIXDEPS} "${OBJECTDIR}/Source/ChaletduinoV2Board.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -${OBJECTDIR}/Source/FatFS/mmc_drv.o: Source/FatFS/mmc_drv.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/Source/FatFS" - @${RM} ${OBJECTDIR}/Source/FatFS/mmc_drv.o.d - @${RM} ${OBJECTDIR}/Source/FatFS/mmc_drv.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/FatFS/mmc_drv.o.d" -o ${OBJECTDIR}/Source/FatFS/mmc_drv.o Source/FatFS/mmc_drv.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) - @${FIXDEPS} "${OBJECTDIR}/Source/FatFS/mmc_drv.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ +${OBJECTDIR}/Source/BootloaderInterface.o: Source/BootloaderInterface.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/Source" + @${RM} ${OBJECTDIR}/Source/BootloaderInterface.o.d + @${RM} ${OBJECTDIR}/Source/BootloaderInterface.o + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/BootloaderInterface.o.d" -o ${OBJECTDIR}/Source/BootloaderInterface.o Source/BootloaderInterface.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + @${FIXDEPS} "${OBJECTDIR}/Source/BootloaderInterface.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ + +${OBJECTDIR}/Source/crc32.o: Source/crc32.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/Source" + @${RM} ${OBJECTDIR}/Source/crc32.o.d + @${RM} ${OBJECTDIR}/Source/crc32.o + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_ICD3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/crc32.o.d" -o ${OBJECTDIR}/Source/crc32.o Source/crc32.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + @${FIXDEPS} "${OBJECTDIR}/Source/crc32.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ else -${OBJECTDIR}/Source/BootloaderProtocol.o: Source/BootloaderProtocol.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/Source" - @${RM} ${OBJECTDIR}/Source/BootloaderProtocol.o.d - @${RM} ${OBJECTDIR}/Source/BootloaderProtocol.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/BootloaderProtocol.o.d" -o ${OBJECTDIR}/Source/BootloaderProtocol.o Source/BootloaderProtocol.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) - @${FIXDEPS} "${OBJECTDIR}/Source/BootloaderProtocol.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ - ${OBJECTDIR}/Source/BootloaderStateMachine.o: Source/BootloaderStateMachine.c nbproject/Makefile-${CND_CONF}.mk @${MKDIR} "${OBJECTDIR}/Source" @${RM} ${OBJECTDIR}/Source/BootloaderStateMachine.o.d @${RM} ${OBJECTDIR}/Source/BootloaderStateMachine.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/BootloaderStateMachine.o.d" -o ${OBJECTDIR}/Source/BootloaderStateMachine.o Source/BootloaderStateMachine.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/BootloaderStateMachine.o.d" -o ${OBJECTDIR}/Source/BootloaderStateMachine.o Source/BootloaderStateMachine.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) @${FIXDEPS} "${OBJECTDIR}/Source/BootloaderStateMachine.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ ${OBJECTDIR}/Source/DigitalIO.o: Source/DigitalIO.c nbproject/Makefile-${CND_CONF}.mk @${MKDIR} "${OBJECTDIR}/Source" @${RM} ${OBJECTDIR}/Source/DigitalIO.o.d @${RM} ${OBJECTDIR}/Source/DigitalIO.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/DigitalIO.o.d" -o ${OBJECTDIR}/Source/DigitalIO.o Source/DigitalIO.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/DigitalIO.o.d" -o ${OBJECTDIR}/Source/DigitalIO.o Source/DigitalIO.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) @${FIXDEPS} "${OBJECTDIR}/Source/DigitalIO.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ ${OBJECTDIR}/Source/FlashInterface.o: Source/FlashInterface.c nbproject/Makefile-${CND_CONF}.mk @${MKDIR} "${OBJECTDIR}/Source" @${RM} ${OBJECTDIR}/Source/FlashInterface.o.d @${RM} ${OBJECTDIR}/Source/FlashInterface.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/FlashInterface.o.d" -o ${OBJECTDIR}/Source/FlashInterface.o Source/FlashInterface.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/FlashInterface.o.d" -o ${OBJECTDIR}/Source/FlashInterface.o Source/FlashInterface.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) @${FIXDEPS} "${OBJECTDIR}/Source/FlashInterface.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ ${OBJECTDIR}/Source/InternalUart.o: Source/InternalUart.c nbproject/Makefile-${CND_CONF}.mk @${MKDIR} "${OBJECTDIR}/Source" @${RM} ${OBJECTDIR}/Source/InternalUart.o.d @${RM} ${OBJECTDIR}/Source/InternalUart.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/InternalUart.o.d" -o ${OBJECTDIR}/Source/InternalUart.o Source/InternalUart.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/InternalUart.o.d" -o ${OBJECTDIR}/Source/InternalUart.o Source/InternalUart.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) @${FIXDEPS} "${OBJECTDIR}/Source/InternalUart.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ ${OBJECTDIR}/Source/main.o: Source/main.c nbproject/Makefile-${CND_CONF}.mk @${MKDIR} "${OBJECTDIR}/Source" @${RM} ${OBJECTDIR}/Source/main.o.d @${RM} ${OBJECTDIR}/Source/main.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/main.o.d" -o ${OBJECTDIR}/Source/main.o Source/main.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/main.o.d" -o ${OBJECTDIR}/Source/main.o Source/main.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) @${FIXDEPS} "${OBJECTDIR}/Source/main.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -${OBJECTDIR}/Source/FatFS/ff.o: Source/FatFS/ff.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/Source/FatFS" - @${RM} ${OBJECTDIR}/Source/FatFS/ff.o.d - @${RM} ${OBJECTDIR}/Source/FatFS/ff.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/FatFS/ff.o.d" -o ${OBJECTDIR}/Source/FatFS/ff.o Source/FatFS/ff.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) - @${FIXDEPS} "${OBJECTDIR}/Source/FatFS/ff.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ +${OBJECTDIR}/Source/SPI.o: Source/SPI.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/Source" + @${RM} ${OBJECTDIR}/Source/SPI.o.d + @${RM} ${OBJECTDIR}/Source/SPI.o + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/SPI.o.d" -o ${OBJECTDIR}/Source/SPI.o Source/SPI.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + @${FIXDEPS} "${OBJECTDIR}/Source/SPI.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -${OBJECTDIR}/Source/FatFS/ffsystem.o: Source/FatFS/ffsystem.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/Source/FatFS" - @${RM} ${OBJECTDIR}/Source/FatFS/ffsystem.o.d - @${RM} ${OBJECTDIR}/Source/FatFS/ffsystem.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/FatFS/ffsystem.o.d" -o ${OBJECTDIR}/Source/FatFS/ffsystem.o Source/FatFS/ffsystem.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) - @${FIXDEPS} "${OBJECTDIR}/Source/FatFS/ffsystem.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ +${OBJECTDIR}/Source/SPI_Flash.o: Source/SPI_Flash.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/Source" + @${RM} ${OBJECTDIR}/Source/SPI_Flash.o.d + @${RM} ${OBJECTDIR}/Source/SPI_Flash.o + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/SPI_Flash.o.d" -o ${OBJECTDIR}/Source/SPI_Flash.o Source/SPI_Flash.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + @${FIXDEPS} "${OBJECTDIR}/Source/SPI_Flash.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -${OBJECTDIR}/Source/FatFS/ffunicode.o: Source/FatFS/ffunicode.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/Source/FatFS" - @${RM} ${OBJECTDIR}/Source/FatFS/ffunicode.o.d - @${RM} ${OBJECTDIR}/Source/FatFS/ffunicode.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/FatFS/ffunicode.o.d" -o ${OBJECTDIR}/Source/FatFS/ffunicode.o Source/FatFS/ffunicode.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) - @${FIXDEPS} "${OBJECTDIR}/Source/FatFS/ffunicode.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ +${OBJECTDIR}/Source/ChaletduinoV2Board.o: Source/ChaletduinoV2Board.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/Source" + @${RM} ${OBJECTDIR}/Source/ChaletduinoV2Board.o.d + @${RM} ${OBJECTDIR}/Source/ChaletduinoV2Board.o + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/ChaletduinoV2Board.o.d" -o ${OBJECTDIR}/Source/ChaletduinoV2Board.o Source/ChaletduinoV2Board.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + @${FIXDEPS} "${OBJECTDIR}/Source/ChaletduinoV2Board.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -${OBJECTDIR}/Source/FatFS/mmc_drv.o: Source/FatFS/mmc_drv.c nbproject/Makefile-${CND_CONF}.mk - @${MKDIR} "${OBJECTDIR}/Source/FatFS" - @${RM} ${OBJECTDIR}/Source/FatFS/mmc_drv.o.d - @${RM} ${OBJECTDIR}/Source/FatFS/mmc_drv.o - ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -D_SUPPRESS_PLIB_WARNING -MMD -MF "${OBJECTDIR}/Source/FatFS/mmc_drv.o.d" -o ${OBJECTDIR}/Source/FatFS/mmc_drv.o Source/FatFS/mmc_drv.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) - @${FIXDEPS} "${OBJECTDIR}/Source/FatFS/mmc_drv.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ +${OBJECTDIR}/Source/BootloaderInterface.o: Source/BootloaderInterface.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/Source" + @${RM} ${OBJECTDIR}/Source/BootloaderInterface.o.d + @${RM} ${OBJECTDIR}/Source/BootloaderInterface.o + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/BootloaderInterface.o.d" -o ${OBJECTDIR}/Source/BootloaderInterface.o Source/BootloaderInterface.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + @${FIXDEPS} "${OBJECTDIR}/Source/BootloaderInterface.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ + +${OBJECTDIR}/Source/crc32.o: Source/crc32.c nbproject/Makefile-${CND_CONF}.mk + @${MKDIR} "${OBJECTDIR}/Source" + @${RM} ${OBJECTDIR}/Source/crc32.o.d + @${RM} ${OBJECTDIR}/Source/crc32.o + ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -I"Source" -I"Source/thinfat32/src/include" -fno-schedule-insns -fno-schedule-insns2 -D_SUPPRESS_PLIB_WARNING -DCHALETDUINO_V2_BRD -MMD -MF "${OBJECTDIR}/Source/crc32.o.d" -o ${OBJECTDIR}/Source/crc32.o Source/crc32.c -DXPRJ_ChaletDuino_795=$(CND_CONF) -legacy-libc $(COMPARISON_BUILD) + @${FIXDEPS} "${OBJECTDIR}/Source/crc32.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ endif diff --git a/Bootloader_PIC32.X/nbproject/Makefile-genesis.properties b/Bootloader_PIC32.X/nbproject/Makefile-genesis.properties index 9c7e475..24c2503 100644 --- a/Bootloader_PIC32.X/nbproject/Makefile-genesis.properties +++ b/Bootloader_PIC32.X/nbproject/Makefile-genesis.properties @@ -1,12 +1,12 @@ # -#Sun Nov 15 16:21:42 EST 2020 +#Mon Sep 20 13:22:54 EDT 2021 default.languagetoolchain.version=2.41 default.Pack.dfplocation=C\:\\Program Files (x86)\\Microchip\\MPLABX\\v5.40\\packs\\Microchip\\PIC32MX_DFP\\1.3.231 ChaletDuino_795.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v1.33\\bin ChaletDuino_795.Pack.dfplocation=C\:\\Users\\JF\\.mchp_packs\\Microchip\\PIC32MX_DFP\\1.2.228 conf.ids=default,ChaletDuino_795 default.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v2.41\\bin -configurations-xml=02fe631ea05cd15722bbc09551659ffd +configurations-xml=1d9163e6fd61a5f0d656b064819618b3 ChaletDuino_795.languagetoolchain.version=1.33 default.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=a5745c99cb5a5032f17cfaf0ff720282 com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=9db8f8a224aa17d0023ea7f468f871dc diff --git a/Bootloader_PIC32.X/nbproject/configurations.xml b/Bootloader_PIC32.X/nbproject/configurations.xml index 973a052..9702a65 100644 --- a/Bootloader_PIC32.X/nbproject/configurations.xml +++ b/Bootloader_PIC32.X/nbproject/configurations.xml @@ -28,6 +28,13 @@ Source/InternalUart.h Source/SDCardMgr.h Source/Uart.h + Source/SPI.h + Source/SPI_Flash.h + Source/BoardCfg.h + Source/BoardCfg_ChaletduinoV2.h + Source/BootloaderInterface.h + Source/FlashMapping.h + Source/checksum.h Source/InternalUart.c Source/main.c Source/SDCardMgr.c + Source/SPI.c + Source/SPI_Flash.c + Source/ChaletduinoV2Board.c + Source/BootloaderInterface.c + Source/crc32.c Makefile + dist/ChaletDuino_795/production/Bootloader_PIC32.X.production.map @@ -304,9 +317,10 @@ - - - + + + @@ -470,7 +484,6 @@ - @@ -502,6 +515,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -535,24 +664,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Bootloader_PIC32.X/nbproject/private/private.xml b/Bootloader_PIC32.X/nbproject/private/private.xml index f672858..c33242a 100644 --- a/Bootloader_PIC32.X/nbproject/private/private.xml +++ b/Bootloader_PIC32.X/nbproject/private/private.xml @@ -3,7 +3,9 @@ - file:/D:/Main/PicDev/Projets/Bootloader_PIC32/Bootloader_PIC32.X/procdefs.ld + file:/D:/Main/PicDev/Projets/BootloaderPIC32/Bootloader_PIC32.X/Source/FlashInterface.c + file:/D:/Main/PicDev/Projets/BootloaderPIC32/Bootloader_PIC32.X/Source/BootloaderInterface.c + file:/D:/Main/PicDev/Projets/BootloaderPIC32/Bootloader_PIC32.X/Source/FlashInterface.h diff --git a/Bootloader_PIC32.X/procdefs.ld b/Bootloader_PIC32.X/procdefs.ld index 499fdca..ed84c00 100644 --- a/Bootloader_PIC32.X/procdefs.ld +++ b/Bootloader_PIC32.X/procdefs.ld @@ -35,7 +35,7 @@ _GEN_EXCPT_ADDR = _ebase_address + 0x180; /* As defined by the MIPS sp *************************************************************************/ MEMORY { - kseg0_program_mem (rx) : ORIGIN = 0x9D000000, LENGTH = 0xA000 /* 10 program Flash pages are reserved for bootloader code */ + kseg0_program_mem (rx) : ORIGIN = 0x9D000000, LENGTH = 0x4000 /* 4 program Flash pages are reserved for bootloader code */ kseg0_boot_mem : ORIGIN = 0x9FC00490, LENGTH = 0x970 /* C Init section goes here : ends at 0x9FC01370 */ /*exception_mem : ORIGIN = 0x9D002000, LENGTH = 0x1000 */ exception_mem : ORIGIN = 0x9FC01000, LENGTH = 0x1000 diff --git a/Memory map.xlsx b/Memory map.xlsx new file mode 100644 index 0000000..4a7fee7 Binary files /dev/null and b/Memory map.xlsx differ