From 5d9d373a959271b498710817d08c2ea8e153aa6e Mon Sep 17 00:00:00 2001 From: Yves Fischer Date: Thu, 13 Oct 2011 20:33:30 +0200 Subject: correct firmware?? --- firmware/93c46.c | 18 +- firmware/93c46.h | 14 + firmware/Makefile | 914 +++++++-------- firmware/adc.c | 152 ++- firmware/adc.h | 17 +- firmware/can.c | 756 ------------ firmware/can.h | 101 -- firmware/common.c | 16 +- firmware/common.h | 25 +- firmware/debug.c | 38 +- firmware/debug.h | 9 +- firmware/eeprom.c | 119 -- firmware/eeprom.h | 11 - firmware/fifo.c | 20 +- firmware/i2c.c | 19 +- firmware/io.c | 402 ++++--- firmware/io.h | 168 ++- firmware/main.c | 344 +++--- firmware/main.hex | 2169 ++++++++++++++--------------------- firmware/octopus_can_stable_1_1.hex | 1133 ------------------ firmware/octopus_relais.hex | 959 ---------------- firmware/octopus_stable_1_1.hex | 971 ---------------- firmware/pin.c | 93 -- firmware/pin.h | 84 -- firmware/protocol.h | 17 +- firmware/pwm.c | 6 +- firmware/spi.c | 190 +-- firmware/spi.h | 23 +- firmware/uart.c | 22 +- firmware/uart_fifo.c | 368 ------ firmware/usbn2mc.c | 2 +- 31 files changed, 2121 insertions(+), 7059 deletions(-) delete mode 100644 firmware/can.c delete mode 100644 firmware/can.h delete mode 100644 firmware/eeprom.c delete mode 100644 firmware/eeprom.h delete mode 100644 firmware/octopus_can_stable_1_1.hex delete mode 100644 firmware/octopus_relais.hex delete mode 100644 firmware/octopus_stable_1_1.hex delete mode 100644 firmware/pin.c delete mode 100644 firmware/pin.h delete mode 100644 firmware/uart_fifo.c (limited to 'firmware') diff --git a/firmware/93c46.c b/firmware/93c46.c index 9ec4e11..4af0f45 100644 --- a/firmware/93c46.c +++ b/firmware/93c46.c @@ -93,10 +93,10 @@ int flash_93c46_init(void) //SETPIN(DIN0) = D4 = low //SETPIN(DIN1) = D4 = low - octopus.ports[16]=PIN_IN; - octopus.ports[17]=PIN_OUT; - octopus.ports[18]=PIN_OUT; octopus.ports[19]=PIN_OUT; + octopus.ports[18]=PIN_OUT; + octopus.ports[17]=PIN_OUT; + octopus.ports[16]=PIN_IN; return RSP_OK; } @@ -111,10 +111,9 @@ void flash_93c46_deinit_usb(void) int flash_93c46_deinit(void) { - octopus.ports[16]=PIN_NONE; - octopus.ports[17]=PIN_NONE; - octopus.ports[18]=PIN_NONE; - octopus.ports[19]=PIN_NONE; + octopus.ports[5]=PIN_OUT; // this is wrong! + octopus.ports[6]=PIN_OUT; // this is wrong! + octopus.ports[7]=PIN_OUT; // this is wrong! return RSP_OK; } @@ -123,8 +122,7 @@ void flash_93c46_read_usb(unsigned char address, unsigned int length, char * buf { answer[0]=CMD_93C46_READ; answer[1]=(unsigned char)flash_93c46_read(address,length,(char*)&answer[2]); - answer[2+length] = 0; - CommandAnswer(3+length); + CommandAnswer(length+2); } int flash_93c46_read(unsigned char address, unsigned int length, char * buf) @@ -144,7 +142,7 @@ void flash_93c46_write_usb(unsigned char address, unsigned int length, char * bu { answer[0]=CMD_93C46_WRITE; answer[1]=(unsigned char)flash_93c46_write(address,length, buf); - answer[2]=0; + answer[2]=0x00; CommandAnswer(3); } diff --git a/firmware/93c46.h b/firmware/93c46.h index d919036..817eade 100644 --- a/firmware/93c46.h +++ b/firmware/93c46.h @@ -47,6 +47,10 @@ #define DO (B, 3) + + + + #define DIN0 (B, 4) #define DIN1 (B, 5) @@ -96,4 +100,14 @@ void erase_write_disable(void); uint8_t flash_93c46_read_word(uint8_t add); uint8_t flash_93c46_write_word(uint8_t add,uint8_t wd); + + + + + + + + + + #endif /* SPI_H */ diff --git a/firmware/Makefile b/firmware/Makefile index c8ae6de..f3553b5 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -1,458 +1,458 @@ -# Hey Emacs, this is a -*- makefile -*- -# -# WinAVR makefile written by Eric B. Weddington, Jörg Wunsch, et al. -# Released to the Public Domain -# Please read the make user manual! -# -# Additional material for this makefile was submitted by: -# Tim Henigan -# Peter Fleury -# Reiner Patommel -# Sander Pool -# Frederik Rouleau -# Markus Pfaff -# -# On command line: -# -# make all = Make software. -# -# make clean = Clean out built project files. -# -# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB). -# -# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio -# 4.07 or greater). -# -# make program = Download the hex file to the device, using avrdude. Please -# customize the avrdude settings below first! -# -# make filename.s = Just compile filename.c into the assembler code only -# -# To rebuild project do "make clean" then "make all". -# - -# mth 2004/09 -# Differences from WinAVR 20040720 sample: -# - DEPFLAGS according to Eric Weddingtion's fix (avrfreaks/gcc-forum) -# - F_OSC Define in CFLAGS and AFLAGS - - -# MCU name -#MCU = atmega128 -MCU = at90can128 - -# Main Oscillator Frequency -# This is only used to define F_OSC in all assembler and c-sources. +# Hey Emacs, this is a -*- makefile -*- +# +# WinAVR makefile written by Eric B. Weddington, Jörg Wunsch, et al. +# Released to the Public Domain +# Please read the make user manual! +# +# Additional material for this makefile was submitted by: +# Tim Henigan +# Peter Fleury +# Reiner Patommel +# Sander Pool +# Frederik Rouleau +# Markus Pfaff +# +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB). +# +# make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio +# 4.07 or greater). +# +# make program = Download the hex file to the device, using avrdude. Please +# customize the avrdude settings below first! +# +# make filename.s = Just compile filename.c into the assembler code only +# +# To rebuild project do "make clean" then "make all". +# + +# mth 2004/09 +# Differences from WinAVR 20040720 sample: +# - DEPFLAGS according to Eric Weddingtion's fix (avrfreaks/gcc-forum) +# - F_OSC Define in CFLAGS and AFLAGS + + +# MCU name +#MCU = atmega128 +MCU = at90can128 + +# Main Oscillator Frequency +# This is only used to define F_OSC in all assembler and c-sources. F_OSC = 16000000 - -# Output format. (can be srec, ihex, binary) -FORMAT = ihex - -# Target file name (without extension). -TARGET = main - - -# List C source files here. (C dependencies are automatically generated.) -#SRC = $(TARGET).c uart.c usbn2mc/main/usbn960x.c usbn2mc.c usbn2mc/main/usbnapi.c - -SRC = $(TARGET).c wait.c uart.c ../usbn2mc/main/usbn960x.c usbn2mc.c ../usbn2mc/main/usbnapi.c common.c fifo.c io.c adc.c i2c.c spi.c 93c46.c pwm.c debug.c can.c eeprom.c pin.c - - -# List Assembler source files here. -# Make them always end in a capital .S. Files ending in a lowercase .s -# will not be considered source files but generated files (assembler -# output from the compiler), and will be deleted upon "make clean"! -# Even though the DOS/Win* filesystem matches both .s and .S the same, -# it will preserve the spelling of the filenames, and gcc itself does -# care about how the name is spelled on its command-line. -ASRC = - - - -# Optimization level, can be [0, 1, 2, 3, s]. -# 0 = turn off optimization. s = optimize for size. -# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) -OPT = s - -# Debugging format. -# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. -# AVR (extended) COFF requires stabs, plus an avr-objcopy run. -DEBUG = stabs -#DEBUG = dwarf-2 - -# List any extra directories to look for include files here. -# Each directory must be seperated by a space. -EXTRAINCDIRS = - - -# Compiler flag to set the C Standard level. -# c89 - "ANSI" C -# gnu89 - c89 plus GCC extensions -# c99 - ISO C99 standard (not yet fully implemented) -# gnu99 - c99 plus GCC extensions -CSTANDARD = -std=gnu99 - -# Place -D or -U options here -CDEFS = - -# Place -I options here -CINCS = - - -# Compiler flags. -# -g*: generate debugging information -# -O*: optimization level -# -f...: tuning, see GCC manual and avr-libc documentation -# -Wall...: warning level -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns...: create assembler listing -CFLAGS = -g$(DEBUG) -CFLAGS += $(CDEFS) $(CINCS) -CFLAGS += -O$(OPT) -CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -CFLAGS += -Wall -Wstrict-prototypes -#CFLAGS += -Wall -CFLAGS += -Wa,-adhlns=$(<:.c=.lst) -CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -CFLAGS += $(CSTANDARD) -CFLAGS += -DF_OSC=$(F_OSC) - - - -# Assembler flags. -# -Wa,...: tell GCC to pass this to the assembler. -# -ahlms: create listing -# -gstabs: have the assembler create line number information; note that -# for use in COFF files, additional information about filenames -# and function names needs to be present in the assembler source -# files -- see avr-libc docs [FIXME: not yet described there] -ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs -ASFLAGS += -DF_OSC=$(F_OSC) - - -#Additional libraries. - -# Minimalistic printf version -PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min - -# Floating point printf version (requires MATH_LIB = -lm below) -PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt - -PRINTF_LIB = - -# Minimalistic scanf version -SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min - -# Floating point + %[ scanf version (requires MATH_LIB = -lm below) -SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt - -SCANF_LIB = - -MATH_LIB = -lm - -# External memory options - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# used for variables (.data/.bss) and heap (malloc()). -#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# only used for heap (malloc()). -#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff - -EXTMEMOPTS = - -# Linker flags. -# -Wl,...: tell GCC to pass this to linker. -# -Map: create map file -# --cref: add cross reference to map file -LDFLAGS = -Wl,-Map=$(TARGET).map,--cref -LDFLAGS += $(EXTMEMOPTS) -LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) - - - - -# Programming support using avrdude. Settings and variables. - -# Programming hardware: alf avr910 avrisp bascom bsd -# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 -# -# Type: avrdude -c ? -# to get a full listing. -# -AVRDUDE_PROGRAMMER = stk500 - -# com1 = serial port. Use lpt1 to connect to parallel port. -AVRDUDE_PORT = com1 # programmer connected to serial device - -AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex -#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep - - -# Uncomment the following if you want avrdude's erase cycle counter. -# Note that this counter needs to be initialized first using -Yn, -# see avrdude manual. -#AVRDUDE_ERASE_COUNTER = -y - -# Uncomment the following if you do /not/ wish a verification to be -# performed after programming the device. -#AVRDUDE_NO_VERIFY = -V - -# Increase verbosity level. Please use this when submitting bug -# reports about avrdude. See -# to submit bug reports. -#AVRDUDE_VERBOSE = -v -v - -AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) -AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) -AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) - - - -# --------------------------------------------------------------------------- - -# Define directories, if needed. -DIRAVR = c:/winavr -DIRAVRBIN = $(DIRAVR)/bin -DIRAVRUTILS = $(DIRAVR)/utils/bin -DIRINC = . -DIRLIB = $(DIRAVR)/avr/lib - - -# Define programs and commands. -SHELL = sh -CC = avr-gcc -OBJCOPY = avr-objcopy -OBJDUMP = avr-objdump -SIZE = avr-size -NM = avr-nm -AVRDUDE = avrdude -REMOVE = rm -f -COPY = cp - - - - -# Define Messages -# English -MSG_ERRORS_NONE = Errors: none -MSG_BEGIN = -------- begin -------- -MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: -MSG_SIZE_AFTER = Size after: -MSG_COFF = Converting to AVR COFF: -MSG_EXTENDED_COFF = Converting to AVR Extended COFF: -MSG_FLASH = Creating load file for Flash: -MSG_EEPROM = Creating load file for EEPROM: -MSG_EXTENDED_LISTING = Creating Extended Listing: -MSG_SYMBOL_TABLE = Creating Symbol Table: -MSG_LINKING = Linking: -MSG_COMPILING = Compiling: -MSG_ASSEMBLING = Assembling: -MSG_CLEANING = Cleaning project: - - - - -# Define all object files. -OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) - -# Define all listing files. -LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) - - -# Compiler flags to generate dependency files. -### GENDEPFLAGS = -Wp,-M,-MP,-MT,$(*F).o,-MF,.dep/$(@F).d -GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d - -# Combine all necessary flags and optional flags. -# Add target processor to flags. -ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) -ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) - - - - - -# Default target. -all: begin gccversion sizebefore build sizeafter finished end - -build: elf hex eep lss sym - -elf: $(TARGET).elf -hex: $(TARGET).hex -eep: $(TARGET).eep -lss: $(TARGET).lss -sym: $(TARGET).sym - - - -# Eye candy. -# AVR Studio 3.x does not check make's exit code but relies on -# the following magic strings to be generated by the compile job. -begin: - @echo - @echo $(MSG_BEGIN) - -finished: - @echo $(MSG_ERRORS_NONE) - -end: - @echo $(MSG_END) - @echo - - -# Display size of file. -HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex -ELFSIZE = $(SIZE) -A $(TARGET).elf -sizebefore: - @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi - -sizeafter: - @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi - - - -# Display compiler version information. -gccversion : - @$(CC) --version - - - -# Program the device. -program: $(TARGET).hex $(TARGET).eep - $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) - - - - -# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. -COFFCONVERT=$(OBJCOPY) --debugging \ ---change-section-address .data-0x800000 \ ---change-section-address .bss-0x800000 \ ---change-section-address .noinit-0x800000 \ ---change-section-address .eeprom-0x810000 - - -coff: $(TARGET).elf - @echo - @echo $(MSG_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-avr $< $(TARGET).cof - - -extcoff: $(TARGET).elf - @echo - @echo $(MSG_EXTENDED_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof - - - -# Create final output files (.hex, .eep) from ELF output file. -%.hex: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ - -%.eep: %.elf - @echo - @echo $(MSG_EEPROM) $@ - -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ - --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ - -# Create extended listing file from ELF output file. -%.lss: %.elf - @echo - @echo $(MSG_EXTENDED_LISTING) $@ - $(OBJDUMP) -h -S $< > $@ - -# Create a symbol table from ELF output file. -%.sym: %.elf - @echo - @echo $(MSG_SYMBOL_TABLE) $@ - $(NM) -n $< > $@ - - - -# Link: create ELF output file from object files. -.SECONDARY : $(TARGET).elf -.PRECIOUS : $(OBJ) -%.elf: $(OBJ) - @echo - @echo $(MSG_LINKING) $@ - $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) - - -# Compile: create object files from C source files. -%.o : %.c - @echo - @echo $(MSG_COMPILING) $< - $(CC) -c $(ALL_CFLAGS) $< -o $@ - - -# Compile: create assembler files from C source files. -%.s : %.c - $(CC) -S $(ALL_CFLAGS) $< -o $@ - - -# Assemble: create object files from assembler source files. -%.o : %.S - @echo - @echo $(MSG_ASSEMBLING) $< - $(CC) -c $(ALL_ASFLAGS) $< -o $@ - - - -# Target: clean project. -clean: begin clean_list finished end - -clean_list : - @echo - @echo $(MSG_CLEANING) - $(REMOVE) $(TARGET).hex - $(REMOVE) $(TARGET).eep - $(REMOVE) $(TARGET).obj - $(REMOVE) $(TARGET).cof - $(REMOVE) $(TARGET).elf - $(REMOVE) $(TARGET).map - $(REMOVE) $(TARGET).obj - $(REMOVE) $(TARGET).a90 - $(REMOVE) $(TARGET).sym - $(REMOVE) $(TARGET).lnk - $(REMOVE) $(TARGET).lss - $(REMOVE) $(OBJ) - $(REMOVE) $(LST) - $(REMOVE) $(SRC:.c=.s) - $(REMOVE) $(SRC:.c=.d) - $(REMOVE) .dep/* - - - -# Include the dependency files. --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - - -# Listing of phony targets. -.PHONY : all begin finish end sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff \ -clean clean_list program - -download_old: - avrdude -p m128 -c avrispv2 -P usb -U flash:w:main.hex - -download: - avrdude -p c128 -c avrispv2 -P usb -U flash:w:main.hex -B 1 - -fuse_old: - avrdude -p m128 -c avrispv2 -P usb -U lfuse:w:0xe0:m - avrdude -p m128 -c avrispv2 -P usb -U efuse:w:0xff:m - avrdude -p m128 -c avrispv2 -P usb -U hfuse:w:0xdd:m - -fuse: - avrdude -p c128 -c avrispv2 -B 10 -P usb -U lfuse:w:0xe0:m - avrdude -p c128 -c avrispv2 -B 10 -P usb -U efuse:w:0xff:m - avrdude -p c128 -c avrispv2 -B 10 -P usb -U hfuse:w:0xdd:m - -usbprog: - avrdude -p c128 -c avrispv2 -P usb -U flash:w:main.hex + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + +# Target file name (without extension). +TARGET = main + + +# List C source files here. (C dependencies are automatically generated.) +#SRC = $(TARGET).c uart.c usbn2mc/main/usbn960x.c usbn2mc.c usbn2mc/main/usbnapi.c + +SRC = $(TARGET).c wait.c uart.c ../usbn2mc/main/usbn960x.c usbn2mc.c ../usbn2mc/main/usbnapi.c common.c fifo.c io.c adc.c i2c.c spi.c 93c46.c pwm.c debug.c + + +# List Assembler source files here. +# Make them always end in a capital .S. Files ending in a lowercase .s +# will not be considered source files but generated files (assembler +# output from the compiler), and will be deleted upon "make clean"! +# Even though the DOS/Win* filesystem matches both .s and .S the same, +# it will preserve the spelling of the filenames, and gcc itself does +# care about how the name is spelled on its command-line. +ASRC = + + + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + +# Debugging format. +# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2. +# AVR (extended) COFF requires stabs, plus an avr-objcopy run. +DEBUG = stabs +#DEBUG = dwarf-2 + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +EXTRAINCDIRS = + + +# Compiler flag to set the C Standard level. +# c89 - "ANSI" C +# gnu89 - c89 plus GCC extensions +# c99 - ISO C99 standard (not yet fully implemented) +# gnu99 - c99 plus GCC extensions +CSTANDARD = -std=gnu99 + +# Place -D or -U options here +CDEFS = + +# Place -I options here +CINCS = + + +# Compiler flags. +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS = -g$(DEBUG) +CFLAGS += $(CDEFS) $(CINCS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +CFLAGS += -Wall -Wstrict-prototypes +#CFLAGS += -Wall +CFLAGS += -Wa,-adhlns=$(<:.c=.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) +CFLAGS += -DF_OSC=$(F_OSC) + + + +# Assembler flags. +# -Wa,...: tell GCC to pass this to the assembler. +# -ahlms: create listing +# -gstabs: have the assembler create line number information; note that +# for use in COFF files, additional information about filenames +# and function names needs to be present in the assembler source +# files -- see avr-libc docs [FIXME: not yet described there] +ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs +ASFLAGS += -DF_OSC=$(F_OSC) + + +#Additional libraries. + +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +PRINTF_LIB = + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +SCANF_LIB = + +MATH_LIB = -lm + +# External memory options + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + +# Linker flags. +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += $(EXTMEMOPTS) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) + + + + +# Programming support using avrdude. Settings and variables. + +# Programming hardware: alf avr910 avrisp bascom bsd +# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 +# +# Type: avrdude -c ? +# to get a full listing. +# +AVRDUDE_PROGRAMMER = stk500 + +# com1 = serial port. Use lpt1 to connect to parallel port. +AVRDUDE_PORT = com1 # programmer connected to serial device + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + + + +# --------------------------------------------------------------------------- + +# Define directories, if needed. +DIRAVR = c:/winavr +DIRAVRBIN = $(DIRAVR)/bin +DIRAVRUTILS = $(DIRAVR)/utils/bin +DIRINC = . +DIRLIB = $(DIRAVR)/avr/lib + + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +COPY = cp + + + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_COFF = Converting to AVR COFF: +MSG_EXTENDED_COFF = Converting to AVR Extended COFF: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: + + + + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) + + +# Compiler flags to generate dependency files. +### GENDEPFLAGS = -Wp,-M,-MP,-MT,$(*F).o,-MF,.dep/$(@F).d +GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + + + + +# Default target. +all: begin gccversion sizebefore build sizeafter finished end + +build: elf hex eep lss sym + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +finished: + @echo $(MSG_ERRORS_NONE) + +end: + @echo $(MSG_END) + @echo + + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) -A $(TARGET).elf +sizebefore: + @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi + +sizeafter: + @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi + + + +# Display compiler version information. +gccversion : + @$(CC) --version + + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + @echo + @echo $(MSG_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(TARGET).cof + + +extcoff: $(TARGET).elf + @echo + @echo $(MSG_EXTENDED_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof + + + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +%.o : %.S + @echo + @echo $(MSG_ASSEMBLING) $< + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + + + +# Target: clean project. +clean: begin clean_list finished end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).obj + $(REMOVE) $(TARGET).cof + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).obj + $(REMOVE) $(TARGET).a90 + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lnk + $(REMOVE) $(TARGET).lss + $(REMOVE) $(OBJ) + $(REMOVE) $(LST) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVE) .dep/* + + + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff \ +clean clean_list program + +download: + avrdude -p m128 -c avrispv2 -P usb -U flash:w:main.hex + +download_can: + avrdude -p c128 -c avrispv2 -P usb -U flash:w:main.hex + +fuse: + avrdude -p m128 -c avrispv2 -P usb -U lfuse:w:0xe0:m + avrdude -p m128 -c avrispv2 -P usb -U efuse:w:0xff:m + avrdude -p m128 -c avrispv2 -P usb -U hfuse:w:0xdd:m + +fuse_can: + avrdude -p c128 -c avrispv2 -B 10 -P usb -U lfuse:w:0xe0:m + avrdude -p c128 -c avrispv2 -B 10 -P usb -U efuse:w:0xff:m + avrdude -p c128 -c avrispv2 -B 10 -P usb -U hfuse:w:0xdd:m + +usbprog: + avrdude -p c128 -c avrispv2 -P usb -U flash:w:main.hex diff --git a/firmware/adc.c b/firmware/adc.c index 915dbce..a9449b7 100644 --- a/firmware/adc.c +++ b/firmware/adc.c @@ -37,27 +37,19 @@ #include "protocol.h" #include "adc.h" -#include -#include "debug.h" - - void adc_parser(char *buf) { - //debugf("adc parser CMD %02x\n",buf[0]); switch(buf[0]) { case CMD_ADC_INIT_PIN: - adc_init_usb(buf[2]); - break; - case CMD_ADC_DEINIT_PIN: - adc_deinit_usb(buf[2]); - break; + adc_init_usb((int)buf[2]); + break; case CMD_ADC_GET: - adc_get_usb(buf[2]); - break; + adc_get_usb((int)buf[2]); + break; case CMD_ADC_REF: - adc_ref_usb(buf[2]); - break; + adc_ref_usb((int)buf[2]); + break; default: answer[0]=buf[0]; @@ -67,49 +59,42 @@ void adc_parser(char *buf) } } -int adc_init(uint8_t pin) +int adc_init(int pin) { - if (pin >= 10 && pin <= 17) - { - octopus.ports[pin] = PIN_AD; - ADMUX |= (1<= 33 && pin <= 40) + { + octopus.ports[pin] = PIN_AD; + + switch(pin) + { + case 40: break; + case 39: break; + case 38: break; + case 37: break; + case 36: break; + case 35: break; + case 34: break; + case 33: break; + default: + return RSP_IMPOSSIBLE_PIN_CONFIG; + } + return RSP_OK; + } + return RSP_UNKOWN_PIN; } -void adc_init_usb(uint8_t pin) +void adc_init_usb(int pin) { answer[0]=CMD_ADC_INIT_PIN; - answer[1]=(unsigned char)adc_init(pin); - answer[2]=0; - - CommandAnswer(3); -} - -int adc_deinit(uint8_t pin) -{ - if (octopus.ports[pin] == PIN_AD) - { - octopus.ports[pin] = PIN_NONE; - return RSP_OK; - } - - return RSP_UNKOWN_PIN; -} - -void adc_deinit_usb(uint8_t pin) -{ - answer[0]=CMD_ADC_DEINIT_PIN; - answer[1]= (unsigned char)adc_deinit(pin); + answer[1]= (unsigned char)adc_init(pin); answer[2]=0; CommandAnswer(3); } -void adc_get_usb(uint8_t pin) +void adc_get_usb(int pin) { + uint16_t result; //uint8_t result[2]; @@ -125,59 +110,64 @@ void adc_get_usb(uint8_t pin) } -int adc_get(uint8_t pin, uint16_t *value) +int adc_get(int pin, uint16_t *value) { - *value = 0; - - if (octopus.ports[pin] == PIN_AD) - { - // 40 => 0 - // 39 => 1 - // 38 => 2 - // pin => 40-pin - *value =_adc_read_channel(17 - pin); - debugf("Wert %i\r\n",*value); - return RSP_OK; - } - else - return RSP_WRONG_PIN_CONFIG; + *value = 0; + + if (octopus.ports[pin] == PIN_AD) + { + switch (pin) + { + case 40: *value =_adc_read_channel(0); break; + case 39: *value =_adc_read_channel(1); break; + case 38: *value =_adc_read_channel(2); break; + case 37: *value =_adc_read_channel(3); break; + case 36: *value =_adc_read_channel(4); break; + case 35: *value =_adc_read_channel(5); break; + case 34: *value =_adc_read_channel(6); break; + case 33: *value =_adc_read_channel(7); break; + default: + return RSP_IMPOSSIBLE_PIN_CONFIG; + } + return RSP_OK; + } + else + { + return RSP_WRONG_PIN_CONFIG; + } } -void adc_ref_usb(uint8_t ref) +void adc_ref_usb(int ref) { answer[0]=CMD_ADC_REF; answer[1]=adc_ref(ref); - answer[2]=0; - CommandAnswer(3); + CommandAnswer(2); } -int adc_ref(uint8_t ref) +int adc_ref(int ref) { - ADMUX = 0x00; - - switch(ref) - { - case PARAM_ADC_AREF: break; - case PARAM_ADC_AVCC: ADMUX |= (1< - * All rights reserved. - * - * Short descripton of file: - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of the FH Augsburg nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES{} LOSS OF USE, - * DATA, OR PROFITS{} OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifdef __AVR_AT90CAN128__ - -#include "common.h" -#include "protocol.h" -#include "can.h" - -#include -#include -#include -#include -#include - -struct { - uint32_t id; - int8_t data[8]; -} message; - -int8_t iemob[15] = { - IEMOB0, IEMOB1, IEMOB2, IEMOB3, IEMOB4, IEMOB5, IEMOB6, IEMOB7, - IEMOB8, IEMOB9, IEMOB10, IEMOB11, IEMOB12, IEMOB13, IEMOB14 }; - -// extended id -int8_t extended_id; - -void can_parser(uint8_t *buf) -{ - switch(buf[0]) - { - case CMD_CAN_INIT: - can_init_usb((uint8_t)buf[2], (uint8_t)buf[3]); - break; - case CMD_CAN_DEINIT: - can_deinit_usb(); - break; - case CMD_CAN_ENABLE_MOB: - asm("nop"); - uint32_t idm = 0; - uint32_t id = 0; - - id = ((uint32_t)buf[4]) + - ((uint32_t)buf[5] << 8) + - ((uint32_t)buf[6] << 16) + - ((uint32_t)buf[7] << 24); - - idm = ((uint32_t)buf[8]) + - ((uint32_t)buf[9] << 8) + - ((uint32_t)buf[10] << 16) + - ((uint32_t)buf[11] << 24); - - // mob, mode, id, idm - can_enable_mob_usb(buf[2], buf[3], id, idm); - break; - case CMD_CAN_DISABLE_MOB: - can_disable_mob_usb((uint8_t)buf[2]); - break; - case CMD_CAN_SEND_DATA: - can_send_data_usb(buf[2], buf[3], &buf[4]); - break; - case CMD_CAN_SEND_REMOTE: - can_send_remote_usb(buf[2]); - break; - case CMD_CAN_RECEIVE_DATA: - can_receive_data_usb(buf[2]); - break; - case CMD_CAN_SET_AUTOREPLY: - can_set_autoreply_usb(buf[2], buf[3], &buf[4]); - break; - default: - answer[0] = buf[0]; - answer[1] = RSP_UNKOWN_CMD; - answer[2] = 0; - CommandAnswer(3); - } -} - -void can_init_usb(uint8_t baudrate, uint8_t eid) -{ - answer[0] = CMD_CAN_INIT; - answer[1] = (uint8_t)can_init(baudrate, CAN_INTERRUPTS_RX, eid); - answer[2] = 0; - - CommandAnswer(3); -} - -// Message Objects zuruecksetzen, CAN-Controller aktivieren -// Parameter: -// uint8_t baud: 0,1,2...5 (fuer 100, 125, 200, 250, 500, 1000) -// uint8_t intmode: Ereignis, bei dem ein Interrupt ausgelöst werden soll -// - NONE - Deaktiviert -// - TX - Daten gesendet -// - RX - Daten empfangen -// - TXRX - Daten gesendet und/oder empfangen -int can_init(uint8_t baudrate, uint8_t intmode, uint8_t eid) -{ - uint8_t i; - - octopus.ports[17] = PIN_CAN; - octopus.ports[18] = PIN_CAN; - - extended_id = eid ? 1 : 0; - - message.id = 0; - for(i = 0; i < 8; i++) - message.data[i] = 0; - - // Status- und Steuerregister aller Message Objects initialisieren - for(i = 0; i < NO_MOBS; i++) - { - can_get_mob(i); - CANSTMOB = 0; - CANCDMOB = 0; - } - - // set baudrate - if(can_set_baudrate(baudrate) == 0) - return RSP_ERROR; - - if(can_set_interrupt(intmode) == 0) - return RSP_ERROR; - - // CAN-Controller in Enabled Mode setzen - setbit(CANGCON, ENASTB); - - // Warten bis der CAN-Controller das Enabled-Bit gesetzt hat und - // einsatzbereit ist - while (!getbit(CANGSTA, ENFG)); - - return RSP_OK; -} - -void can_deinit_usb(void) -{ - answer[0] = CMD_CAN_DEINIT; - answer[1] = (int8_t)can_deinit(); - answer[2] = 0; - - CommandAnswer(3); -} - -int can_deinit(void) -{ - uint8_t i; - - octopus.ports[17] = PIN_NONE; - octopus.ports[18] = PIN_NONE; - - for(i = 0; i < 15; i++) - can_disable_mob(i); - - // CAN-Controller ausschalten - clearbit(CANGCON, ENASTB); - - // warten bis wirklich ausgechaltet - while (getbit(CANGSTA, ENFG)); - - return RSP_OK; -} - -void can_set_autoreply(uint8_t mob, uint8_t length, uint8_t *buf) -{ - can_get_mob(mob); - can_set_mode(CAN_MODE_AUTO_REPLY); - can_set_data(length, buf); -} - -void can_set_autoreply_usb(uint8_t mob, uint8_t length, uint8_t *buf) -{ - can_set_autoreply(mob, length, buf); - - answer[0] = CMD_CAN_SET_AUTOREPLY; - answer[1] = RSP_OK; - answer[2] = 0; - - CommandAnswer(3); -} - -int can_set_baudrate(uint8_t baudrate) -{ - // @16 MHz - switch(baudrate) - { - case CAN_BAUDRATE_100K: - CANBT1 = 0x12; - CANBT2 = 0x0c; - CANBT3 = 0x37; - break; - - case CAN_BAUDRATE_125K: - CANBT1 = 0x0e; - CANBT2 = 0x0c; - CANBT3 = 0x37; - break; - - case CAN_BAUDRATE_200K: - CANBT1 = 0x08; - CANBT2 = 0x0c; - CANBT3 = 0x37; - break; - - case CAN_BAUDRATE_250K: - CANBT1 = 0x06; - CANBT2 = 0x0c; - CANBT3 = 0x37; - break; - - case CAN_BAUDRATE_500K: - CANBT1 = 0x02; - CANBT2 = 0x0c; - CANBT3 = 0x37; - break; - - case CAN_BAUDRATE_1000K: - CANBT1 = 0x00; - CANBT2 = 0x0c; - CANBT3 = 0x37; - break; - - default: - return 0; - } - - return 1; -} - -void can_enable_mob_usb(uint8_t mob, uint8_t mode, uint32_t id, uint32_t idm) -{ - answer[0] = CMD_CAN_ENABLE_MOB; - answer[1] = (int8_t)can_enable_mob(mob, mode, id, idm); - answer[2] = 0; - - CommandAnswer(3); -} - - -// Parameter: -// uint8_t mob: Nummer des zu wählenden Objekts (0-14) -// -// uint8_t mode -// - Betriebsart des Message Objekts: -// - DISABLED Deaktiviert -// - TRANSMIT_DATA Daten senden -// - TRANSMIT_REMOTE Anfrage senden -// - RECEIVE_DATA Empfangsmodus -// - AUTO_REPLY automatischer Antwortmodus -// -// Funktion setzt die Betriebsart des vorher gewählten Objekts -int can_enable_mob(uint8_t mob, uint8_t mode, uint32_t id, uint32_t idm) -{ - // Objekt wählen - can_get_mob(mob); - - // Interrupt für dieses Objekt aktivieren - can_set_mob_interrupt(mob); - - // ID-Maske setzen - can_set_id_mask(idm); - - // ID setzen - can_set_id(id); - - // Betriebsmodus setzen - if(can_set_mode(mode) == 0) - return RSP_ERROR; - - return RSP_OK; -} - - -void can_send_data_usb(uint8_t mob, uint8_t length, uint8_t *data) -{ - answer[0] = CMD_CAN_SEND_DATA; - answer[1] = (int8_t)can_send_data(mob, length, data); - answer[2] = 0; - - CommandAnswer(3); -} - -int can_send_data(uint8_t mob, uint8_t length, uint8_t * data) -{ - uint8_t mode; - - // Objekt wählen - can_get_mob(mob); - - // Aktuelle Betriebsart sichern - mode = can_get_mode(); - - // Nutzdaten in Register schreiben - can_set_data(length, data); - - // Datenübertragung starten - can_set_mode(CAN_MODE_TRANSMIT_DATA); - - // Warten bis die Datenübertragung beendet ist (TXOK-Flag von CAN-Controller - // gesetzt) - while (!getbit(CANSTMOB, TXOK)); - - // TXOK-Flag von Hand löschen - clearbit(CANSTMOB, TXOK); - - // Alte Betriebsart wiederherstellen - can_set_mode(mode); - - return RSP_OK; -} - - -// Parameter: uint8_t mode: Ereignis, bei dem Interrupt ausgelöst werden soll -// - NONE - Deaktiviert -// - TX - Daten gesendet -// - RX - Daten empfangen -// - TXRX - Daten gesendet und/oder empfangen -int can_set_interrupt(uint8_t mode) -{ - switch(mode) - { - case CAN_INTERRUPTS_NONE: - clearbit(CANGIE, ENIT); - clearbit(CANGIE, ENRX); - clearbit(CANGIE, ENTX); - break; - - case CAN_INTERRUPTS_TX: - setbit(CANGIE, ENIT); - clearbit(CANGIE, ENRX); - setbit(CANGIE, ENTX); - break; - - case CAN_INTERRUPTS_RX: - setbit(CANGIE, ENIT); - setbit(CANGIE, ENRX); - clearbit(CANGIE, ENTX); - break; - - case CAN_INTERRUPTS_TXRX: - setbit(CANGIE, ENIT); - setbit(CANGIE, ENRX); - setbit(CANGIE, ENTX); - break; - - default: - return 0; - } - - return 1; -} - - -// Funktion wählt CANPAGE des betreffenden Objekts aus und stellt Zugang zu -// Registern des Objekts her -void can_get_mob(uint8_t mob) -{ - CANPAGE = (mob << 4); -} - - -// Parameter: uint32_t idm: ID-Maske in Dezimalschreibweise -// Funktion setzt ID-Maske eines Objekts auf einen neuen Wert. In CANIDM4 -// bleiben dabei die Werte der unteren 3 Bit (RTRTAG, Reserved und IDEMSK) -// erhalten. -void can_set_id_mask(uint32_t idm) -{ - //Standart identifier (11 bit) - if(!extended_id) - { - CANIDM2 = (uint8_t)(idm << 5); - CANIDM1 = (uint8_t)(idm >> 3); - } - //extended identifier - else - { - idm <<= 3; - idm |= 7; - - CANIDM4 = (int8_t) (idm); - CANIDM3 = (int8_t) (idm>>8); - CANIDM2 = (int8_t) (idm>>16); - CANIDM1 = (int8_t) (idm>>24); - } -} - -// Funktion holt ID der empfangenen Nachricht -uint32_t can_get_id(void) -{ - uint32_t id = 0; - - //Standart identifier (11 bit) - if(!extended_id) - { - id = (uint8_t) CANIDT2 >> 5; - id |= (uint16_t) CANIDT1 << 3; - } - //extended identifier - else - { - id |= ((uint32_t) CANIDT1 << 24); - id |= ((uint32_t) CANIDT2 << 16); - id |= ((uint32_t) CANIDT3 << 8); - id |= (CANIDT4&0xF8); - id >>= 3; - } - - return id; -} - -// Funktion setzt ID eines Objekts auf einen neuen Wert. In CANIDM4 bleiben -// dabei die Werte der unteren 3 Bit (RTRTAG, RB1TAG und RB0TAG) erhalten. -void can_set_id(uint32_t id) -{ - //Standart identifier (11 bit) - if(!extended_id) - { - CANIDT2 = (uint8_t)(id << 5); - CANIDT1 = (uint8_t)(id >> 3); - } - //extended identifier - else - { - id <<= 3; - id &= 0xfffffff8; - id |= (CANIDT4 & 0x07); - - CANIDT4 = (int8_t) (id); - CANIDT3 = (int8_t) (id>>8); - CANIDT2 = (int8_t) (id>>16); - CANIDT1 = (int8_t) (id>>24); - } -} - - -// Funktion setzt die Betriebsart des vorher gewählten Objekts. -// Parameter: uint8_t mode: -// - Betriebsart des Message Objekts: -// - DISABLED - Deaktiviert -// - TRANSMIT_DATA - Daten senden -// - TRANSMIT_REMOTE - Anfrage senden -// - RECEIVE_DATA - Empfangsmodus -// - AUTO_REPLY - automatischer Antwortmodus -int can_set_mode(uint8_t mode) -{ - if(extended_id) - setbit(CANCDMOB, IDE); - else - clearbit(CANCDMOB, IDE); - - switch(mode) - { - case CAN_MODE_DISABLED: - clearbit(CANCDMOB, CONMOB0); - clearbit(CANCDMOB, CONMOB1); - clearbit(CANCDMOB, RPLV); - clearbit(CANIDT4, RTRTAG); - clearbit(CANIDM4, RTRMSK); - break; - - case CAN_MODE_TRANSMIT_DATA: - CANCDMOB &= ~(1 << CONMOB1 || 1 << CONMOB0 || 1 << RPLV); - CANCDMOB |= (1 << CONMOB0 || 0 << CONMOB1); - clearbit(CANIDT4, RTRTAG); - break; - - case CAN_MODE_TRANSMIT_REMOTE: - clearbit(CANCDMOB, CONMOB1); - setbit(CANCDMOB, CONMOB0); - clearbit(CANCDMOB, RPLV); - setbit(CANIDT4, RTRTAG); - break; - - case CAN_MODE_RECEIVE_DATA: - clearbit(CANCDMOB, CONMOB0); - setbit(CANCDMOB, CONMOB1); - clearbit(CANCDMOB, RPLV); - clearbit(CANIDT4, RTRTAG); - break; - - case CAN_MODE_AUTO_REPLY: - clearbit(CANCDMOB, CONMOB0); - setbit(CANCDMOB, CONMOB1); - setbit(CANCDMOB, RPLV); - setbit(CANIDT4, RTRTAG); - break; - - default: - return 0; - } - - return 1; -} - - -// Funktion holt die Betriebsart des vorher gewaehlten Objekts -uint8_t can_get_mode(void) -{ - uint8_t mode = 0; - - if(!getbit(CANCDMOB, CONMOB1) && !getbit(CANCDMOB, CONMOB0)) - { - mode = CAN_MODE_DISABLED; - } - else if(!getbit(CANCDMOB, CONMOB1) && getbit(CANCDMOB, CONMOB0) && - !getbit(CANIDT4, RTRTAG)) - { - mode = CAN_MODE_TRANSMIT_DATA; - } - else if(!getbit(CANCDMOB, CONMOB1) && getbit(CANCDMOB, CONMOB0) && - getbit(CANIDT4, RTRTAG)) - { - mode = CAN_MODE_TRANSMIT_REMOTE; - } - else if(getbit(CANCDMOB, CONMOB1) && !getbit(CANCDMOB, CONMOB0) && - !getbit(CANIDT4, RTRTAG)) - { - mode = CAN_MODE_RECEIVE_DATA; - } - else if(getbit(CANCDMOB, CONMOB1) && !getbit(CANCDMOB, CONMOB0) && - getbit(CANCDMOB,RPLV) && getbit(CANIDT4, RTRTAG)) - { - mode = CAN_MODE_AUTO_REPLY; - } - - return mode; -} - - -// Funktion schreibt in das Objekt die zu uebermittelnden Daten -void can_set_data(uint8_t length, uint8_t * data) -{ - uint8_t i; - uint8_t cancdmob; - - if(length > 8) - length = 8; - - // Anzahl der Datenbytes in der Nachricht - // scheinbar darf man das CANCDMOB register nicht beliebig oft - // schreiben/lesen, daher speichern wir den wert dazwischen, loeschen die - // entsprechenden bits fuer die laenge und schreiben dann unsere laenge rein - // wie dem auch sei: so funktionierts zumindest, also vorsicht beim aufraeumen ;-) - cancdmob = CANCDMOB; - clearbit(cancdmob, DLC0); - clearbit(cancdmob, DLC1); - clearbit(cancdmob, DLC2); - clearbit(cancdmob, DLC3); - CANCDMOB = (cancdmob | (length << DLC0)); - for(i = 0; i < length; i++) - CANMSG = data[i]; -} - -void can_get_data(int8_t *msg) -{ - uint8_t i; - - for(i = 0; i < 8; i++) - msg[i] = CANMSG; -} - -// Parameter: uint8_t mob: Nummer des Objekts (0-14) -// Funktion setzt den Interrupt für das jeweilige Objekt -void can_set_mob_interrupt(uint8_t mob) -{ - // bugfix von C.H. - // http://www.mikrocontroller.net/topic/98697#1232848 - if (mob < 8) { setbit(CANIE2, iemob[mob]); } - else { setbit(CANIE1, iemob[mob]); } -} - -// Parameter: uint8_t mob: Nummer des Objekts (0-14) -// Funktion löscht den Interrupt für das jeweilige Objekt -void can_clear_mob_interrupt(uint8_t mob) -{ - clearbit(CANIE2, iemob[mob]); -} - -// Rückgabe: uint8_t mob: Nummer des Objekts -// Funktion ermittelt, welches Objekt Interrupt ausgeloest hat -uint8_t can_get_mob_interrupt(void) -{ - uint8_t mob; - uint16_t maske; - maske = CANSIT2 | (CANSIT1 << 8); - - // Wenn alle 32 Bit der Bitmaske 0 sind dann ist ein Fehler aufgetreten - if(maske == 0) - return NOMOB; - - // Die Bitmaske wird so lange nach rechts geschoben, bis Bit0 eine 1 hat. - // Die Anzahl der Schiebeoperatoren gibt somit die Nummer des MOBs zurück - for(mob=0; (maske & 0x01)==0; maske >>= 1, ++mob); - - // Kontrolle: Wenn mob größer als die Anzahl der verfügbaren - // Message Objects ist das Ergebnis falsch - if(mob > 14) - return NOMOB; - - return mob; -} - -void can_disable_mob_usb(uint8_t mob) -{ - answer[0] = CMD_CAN_DISABLE_MOB; - answer[1] = (int8_t)can_disable_mob(mob); - answer[2] = 0; - - CommandAnswer(3); -} - -// Funktion deaktiviert das gewählte Objekt -int can_disable_mob(uint8_t mob) -{ - // Objekt wählen - can_get_mob(mob); - - // Interrupt für dieses Objekt aktivieren - can_clear_mob_interrupt(mob); - - // Betriebsmodus setzen - can_set_mode(CAN_MODE_DISABLED); - - return RSP_OK; -} - - -void can_send_remote_usb(uint8_t mob) -{ - answer[0] = CMD_CAN_SEND_REMOTE; - answer[1] = (int8_t)can_send_remote(mob); - answer[2] = 0; - - CommandAnswer(3); -} - -// Funktion sendet eine Anfrage (Remote Frame) -int can_send_remote(uint8_t mob) -{ - uint8_t mode; - - // Objekt wählen - can_get_mob(mob); - - // Aktuelle Betriebsart sichern - mode = can_get_mode(); - - // Datenübertragung starten - can_set_mode(CAN_MODE_TRANSMIT_REMOTE); - - // Warten bis die Datenübertragung beendet ist (TXOK-Flag von CAN-Controller - // gesetzt) - while (!getbit(CANSTMOB, TXOK)); - - // TXOK-Flag von Hand löschen - clearbit(CANSTMOB, TXOK); - - // Alte Betriebsart wiederherstellen - can_set_mode(mode); - - return RSP_OK; -} - -void can_receive_data_usb(int mob) -{ - uint8_t i; - answer[0] = CMD_CAN_RECEIVE_DATA; - answer[1] = RSP_OK; - - // id - answer[2] = (int8_t) (message.id); - answer[3] = (int8_t) (message.id >> 8); - answer[4] = (int8_t) (message.id >> 16); - answer[5] = (int8_t) (message.id >> 24); - - message.id = 0; - for(i = 0; i < 8; i++) - { - answer[6+i] = message.data[i]; - message.data[i] = 0; - } - answer[14] = 0; - - CommandAnswer(15); -} - -// Interrupt fuer Empfang einer Nachricht -SIGNAL(SIG_CAN_INTERRUPT1) -{ - uint8_t save_canpage; - uint8_t mob; - - // Aktuelle CANPAGE sichern - save_canpage = CANPAGE; - - // Index des MOB ermitteln, der den Interrupt ausgelöst hat - mob = can_get_mob_interrupt(); - - // Falls es kein gültiges MOB war abbrechen - if(mob == NOMOB) - return; - - // Objekt das den Interrupt ausgelöst hat holen - can_get_mob(mob); - - // Id der Nachricht holen - message.id = can_get_id(); - - // Daten des MOBs aus CANMSG auslesen - can_get_data(message.data); - - // Id der Nachricht holen - message.id = can_get_id(); - - // RXOK-Flag löschen - clearbit(CANSTMOB, RXOK); - - // MOB auf Empfang setzen - can_set_mode(CAN_MODE_RECEIVE_DATA); - - // CANPAGE wiederherstellen - CANPAGE = save_canpage; -} - -#endif diff --git a/firmware/can.h b/firmware/can.h deleted file mode 100644 index 1bab0ba..0000000 --- a/firmware/can.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (c) 2007 Marco Glietsch (http://www.mikrocontroller.net/topic/98697) - * Original author: Marco Glietsch - * Modified for octopus by Michael Hartmann - * All rights reserved. - * - * Short descripton of file: - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of the FH Augsburg nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES{} LOSS OF USE, - * DATA, OR PROFITS{} OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef CAN_H -#define CAN_H - -#include - -#define setbit(ADR,BIT) (ADR |= (1< -#include enum signals {PIN_NONE,PIN_IN,PIN_OUT,PIN_TRI, PIN_AD,PIN_RX,PIN_TX, PIN_SS,PIN_SCK,PIN_MISO,PIN_MOSI, PIN_SCL,PIN_SDA,PIN_PWM, - PIN_UART,PIN_CAN}; + PIN_UART}; -#ifdef __AVR_AT90CAN128__ - #define OCTOPUS_CAN -#endif -//#define OCTOPUS_RELAIS +#define OCTOPUS_CAN -#define DEBUG 1 +//#define DEBUG #define F_CPU 16000000UL #define STATUS_LED_PIN PB7 #define STATUS_LED_PORT PORTB /* red status led */ -#ifndef OCTOPUS_RELAIS #define STATUS_LED_on (STATUS_LED_PORT |= (1 << STATUS_LED_PIN)) #define STATUS_LED_off (STATUS_LED_PORT &= ~(1 << STATUS_LED_PIN)) -#else -#define STATUS_LED_on (1); -#define STATUS_LED_off (1); -#endif volatile struct octopus_t { volatile unsigned char latency_timer; - volatile unsigned char status_led; - uint8_t ports[43]; + int ports[45]; volatile char * msg[20]; volatile int datatogl; volatile unsigned int long_rx_cmd; @@ -85,7 +71,7 @@ volatile struct octopus_t void CommandAnswer(unsigned int length); -void CommandAnswerRest (void); +void CommandAnswerRest(void); void USBCommandRX(char *buf); void USBMessageIn(char *buf); @@ -105,4 +91,3 @@ void common_init(void); void common_hwdesc(void); -#endif //COMMON_H diff --git a/firmware/debug.c b/firmware/debug.c index 5e7a950..539a3e2 100644 --- a/firmware/debug.c +++ b/firmware/debug.c @@ -1,7 +1,4 @@ #include -#include -#include -#include #include #include "uart.h" @@ -11,39 +8,21 @@ #define UART_PORT 0 -void debug_dummy(char *fmt, ...) {} - -void debug_init() -{ -#ifdef DEBUG -#warning Compiling with debug-support! +void debug_init(void) { uart_init(UART_PORT); uart_baudrate(UART_PORT, 25, 0, 0, 0); uart_stopbits(UART_PORT, 1); uart_databits(UART_PORT, 8); uart_parity(UART_PORT, 'N'); - - static FILE mystdout = FDEV_SETUP_STREAM(debug_putchar, NULL, - _FDEV_SETUP_WRITE); - stdout = &mystdout; -#endif } -int debug_putchar(char c, FILE *stream) -{ -#ifdef DEBUG - if (c == '\n') - uart_putchar(UART_PORT, '\r'); - uart_putchar(UART_PORT, c); -#endif - return 1; +void debug_deinit(void) { + uart_deinit(UART_PORT); } -void debug_deinit(void) -{ -#ifdef DEBUG - uart_deinit(UART_PORT); -#endif +void debug_write(char *buf) { + while(*buf) + uart_putchar(UART_PORT, *buf++); } unsigned char debug_AsciiToHex(unsigned char high, unsigned char low) @@ -73,7 +52,6 @@ unsigned char debug_AsciiToHex(unsigned char high, unsigned char low) void debug_SendHex(unsigned char hex) { -#ifdef DEBUG unsigned char high,low; // get highnibble high = hex & 0xF0; @@ -91,8 +69,4 @@ void debug_SendHex(unsigned char hex) uart_putchar(UART_PORT, low+48); else uart_putchar(UART_PORT, low+87); - - //_debug_write("\r\n"); -#endif } - diff --git a/firmware/debug.h b/firmware/debug.h index 202ef22..8aa15d9 100644 --- a/firmware/debug.h +++ b/firmware/debug.h @@ -1,12 +1,5 @@ -#ifdef DEBUG -#define debugf printf("%s,%d: ", __FILE__, __LINE__); printf -#else -#define debugf debug_dummy -#endif - -void debug_dummy(char *fmt, ...); void debug_init(void); -int debug_putchar(char c, FILE *stream); void debug_deinit(void); +void debug_write(char *buf); unsigned char debug_AsciiToHex(unsigned char high, unsigned char low); void debug_SendHex(unsigned char hex); diff --git a/firmware/eeprom.c b/firmware/eeprom.c deleted file mode 100644 index 3f0c1a1..0000000 --- a/firmware/eeprom.c +++ /dev/null @@ -1,119 +0,0 @@ -#include "common.h" -#include "protocol.h" - -#include -#include -#include -#include -#include - -#include "eeprom.h" -#include "debug.h" - -#define EEPROM_READY() while(EECR & (1 << EEWE)); - -void eeprom_parser(char *buf) -{ - uint16_t addr; - uint16_t length; - - addr = ((uint16_t)buf[2]) + - ((uint16_t)buf[3] << 8); - - length = ((uint16_t)buf[4]) + - ((uint16_t)buf[5] << 8); - - debugf("eeprom_parser: length: %u, addr: %u\n", length, addr); - - switch(buf[0]) - { - case CMD_EEPROM_READ_BYTES: - eeprom_read_bytes_usb(addr, length); - break; - - case CMD_EEPROM_WRITE_BYTES: - eeprom_write_bytes_usb(addr, &buf[6], length); - break; - - default: - answer[0] = buf[0]; - answer[1] = RSP_UNKOWN_CMD; - answer[2] = 0; - CommandAnswer(3); - } -} - - -void eeprom_read_bytes_usb(uint16_t addr, uint16_t length) -{ - answer[0] = CMD_EEPROM_READ_BYTES; - answer[1] = eeprom_read_bytes(addr, (char *)&answer[2], length); - answer[2+length] = 0; - - debugf("read: %s\n", &answer[2]); - - CommandAnswer(3+length); -} - -uint8_t eeprom_read_bytes(uint16_t addr, char * buf, uint16_t length) -{ - uint8_t i; - - if(addr > MAX_ADDR) - return RSP_ERROR; - - // wait for eeprom - EEPROM_READY(); - - for(i = 0; i < length; i++) - { - - buf[i] = eeprom_read_byte((uint8_t*) addr++); - // set addr - //EEAR = addr++; - - //EECR |= (1 << EERE); - - //buf[i] = EEDR; - //debug_SendHex(buf[i]); - } - - return RSP_OK; -} - -void eeprom_write_bytes_usb(uint16_t addr, char * buf, uint16_t length) -{ - answer[0] = CMD_EEPROM_WRITE_BYTES; - answer[1] = eeprom_write_bytes(addr, buf, length); - answer[2] = 0; - - debugf("written: %s\n", buf); - - CommandAnswer(3); -} - -uint8_t eeprom_write_bytes(uint16_t addr, char * buf, uint16_t length) -{ - uint8_t i; - - if(addr > MAX_ADDR) - return RSP_ERROR; - - // wait for eeprom - EEPROM_READY(); - - for(i = 0; i < length; i++) - { - eeprom_write_byte ((uint8_t*) addr++, buf[i]); - - //EEAR = addr++; - //EEDR = buf[i]; - - //EECR |= (1 << EEMWE); - //EECR |= (1 << EEWE); - } - - eeprom_read_bytes(addr, buf, length); - - return RSP_OK; -} diff --git a/firmware/eeprom.h b/firmware/eeprom.h deleted file mode 100644 index 2ac7d4a..0000000 --- a/firmware/eeprom.h +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include - -#define MAX_ADDR 4095 - -void eeprom_parser(char *buf); - -void eeprom_read_bytes_usb(uint16_t addr, uint16_t length); -uint8_t eeprom_read_bytes(uint16_t addr, char * buf, uint16_t length); -void eeprom_write_bytes_usb(uint16_t addr, char * buf, uint16_t length); -uint8_t eeprom_write_bytes(uint16_t addr, char * buf, uint16_t length); diff --git a/firmware/fifo.c b/firmware/fifo.c index 17551d7..a1e0f87 100644 --- a/firmware/fifo.c +++ b/firmware/fifo.c @@ -2,26 +2,26 @@ void fifo_init (fifo_t *f, uint8_t *buffer, const uint8_t size) { - f->count = 0; - f->pread = f->pwrite = buffer; - f->read2end = f->write2end = f->size = size; + f->count = 0; + f->pread = f->pwrite = buffer; + f->read2end = f->write2end = f->size = size; } uint8_t fifo_put (fifo_t *f, const uint8_t data) { - return _inline_fifo_put (f, data); + return _inline_fifo_put (f, data); } uint8_t fifo_get_wait (fifo_t *f) { - while (!f->count); - - return _inline_fifo_get (f); + while (!f->count); + + return _inline_fifo_get (f); } int fifo_get_nowait (fifo_t *f) { - if (!f->count) return -1; - - return (int) _inline_fifo_get (f); + if (!f->count) return -1; + + return (int) _inline_fifo_get (f); } diff --git a/firmware/i2c.c b/firmware/i2c.c index 4baa7bb..fca24ac 100644 --- a/firmware/i2c.c +++ b/firmware/i2c.c @@ -36,6 +36,7 @@ #include "common.h" #include "protocol.h" #include "i2c.h" +#include "debug.h" #define I2C_WAIT_FOR_COMPLETE() while (!(TWCR & (1< + * Author: Benedikt Sauter = 1 && pin <= 19) || (pin >= 26 && pin <= 44)) + { + io_set_pin_direction_out(pin); + return RSP_OK; + } + return RSP_UNKOWN_PIN; } void io_init_usb(uint8_t pin) @@ -120,16 +120,16 @@ void io_init_port_usb(uint8_t port) uint8_t io_set_port_direction_out(uint8_t port,uint8_t mask) { /* TODO - switch (port) - { - case 1: DDRB = mask; break; + switch (port) + { + case 1: DDRB = mask; break; case 2: DDRC = mask; break; // PC7 = /CS (output) - do we need to mask this ? - case 3: DDRD = mask; break; + case 3: DDRD = mask; break; case 4: DDRE = mask; break; // PE4 = INT4 (input) - do we need to mask this ? - case 5: DDRF = mask; break; - default: return RSP_UNKOWN_PIN; + case 5: DDRF = mask; break; + default: return RSP_UNKOWN_PIN; } - */ + */ return RSP_OK; } @@ -160,7 +160,6 @@ void io_set_port_direction_in_usb(uint8_t port, uint8_t mask) answer[2] = 0; CommandAnswer(3); } - void io_set_port_direction_tri_usb(uint8_t port, uint8_t mask) { answer[0] = CMD_IO_PORT_DIRECTION_TRI; @@ -172,41 +171,131 @@ void io_set_port_direction_tri_usb(uint8_t port, uint8_t mask) uint8_t io_set_pin_direction_out(uint8_t pin) { - pin_conf p; - - if(!pin_get_conf(pin, &p)) - return RSP_UNKOWN_PIN; - - octopus.ports[pin] = PIN_OUT; - *(p.ox_ddr) |= (1 << p.ox_p); - - return RSP_OK; + if((pin >= 1 && pin <= 19) || (pin >=26 && pin <=44) ) + { + octopus.ports[pin] = PIN_OUT; + + switch(pin) + { + case 1: OX_DDR1 |=(1<= 1 && pin <= 19) || (pin >=26 && pin <=44) ) + { + octopus.ports[pin] = PIN_IN; + switch (pin) + { + case 1: OX_DDR1 &=~(1<= 1 && pin <= 19) || (pin >=26 && pin <=44) ) { - octopus.ports[pin] = PIN_TRI; - return RSP_OK; - } + octopus.ports[pin] = PIN_TRI; + io_set_pin_direction_out(pin); + io_set_pin(pin,1); + return RSP_OK; + } else - return RSP_UNKOWN_PIN; + { + return RSP_UNKOWN_PIN; + } } @@ -235,58 +324,55 @@ void io_set_pin_direction_tri_usb(uint8_t pin) } -//XXX + uint8_t io_get_port (uint8_t port, uint8_t *pvalue) { - uint8_t value; - - *pvalue = 0; - switch (port) - { - case 1: value = PINB; break; - case 2: value = PINC; break; /* PC7 = /CS */ - case 3: value = PIND; break; - case 4: value = PINE; break; /* PE4 = INTR */ - case 5: value = PINF; break; - default: return RSP_UNKOWN_PORT; - } - - *pvalue = value; - return RSP_OK; + uint8_t value; + + *pvalue = 0; + switch (port) + { + case 1: value = PINB; break; + case 2: value = PINC; break; /* PC7 = /CS */ + case 3: value = PIND; break; + case 4: value = PINE; break; /* PE4 = INTR */ + case 5: value = PINF; break; + default: return RSP_UNKOWN_PORT; + } + *pvalue = value; + return RSP_OK; } -void io_get_port_usb (uint8_t port) -{ - uint8_t value; +void io_get_port_usb (uint8_t port) +{ + uint8_t value; - answer[0] = CMD_IO_PORT_GET; - answer[1] = (unsigned char)io_get_port (port, &value); - answer[2] = (unsigned char)value; - answer[3] = 0; - CommandAnswer(4); + answer[0] = CMD_IO_PORT_GET; + answer[1] = (unsigned char)io_get_port (port, &value); + answer[2] = (unsigned char)value; + CommandAnswer(3); } -// XXX uint8_t io_set_port(uint8_t port, uint8_t value) { - switch (port) - { - case 1: PORTB = value; break; - case 2: PORTC = value; break; // PC7 = /CS - case 3: PORTD = value; break; - case 4: PORTE = value; break; // PE4 = INTR - case 5: PORTF = value; break; - default: return RSP_UNKOWN_PIN; - } + switch (port) + { + case 1: PORTB = value; break; + case 2: PORTC = value; break; // PC7 = /CS + case 3: PORTD = value; break; + case 4: PORTE = value; break; // PE4 = INTR + case 5: PORTF = value; break; + default: return RSP_UNKOWN_PIN; + } return RSP_OK; } -void io_set_port_usb (uint8_t port, uint8_t value) -{ - answer[0] = CMD_IO_PORT_SET; - answer[1] = (unsigned char)io_set_port (port, value); - answer[2] = 0; - CommandAnswer(3); +void io_set_port_usb (uint8_t port, uint8_t value) +{ + answer[0] = CMD_IO_PORT_SET; + answer[1] = (unsigned char)io_set_port (port, value); + answer[2] = 0; + CommandAnswer(3); } @@ -301,20 +387,59 @@ void io_set_pin_usb(uint8_t pin, uint8_t value) uint8_t io_set_pin(uint8_t pin, uint8_t value) { - pin_conf p; - - if(!pin_get_conf(pin, &p)) - return RSP_UNKOWN_PIN; - - if(octopus.ports[pin] != PIN_OUT) - return RSP_WRONG_PIN_CONFIG; - - if(value) - *(p.ox_port) |= (1 << p.ox_p); - else - *(p.ox_port) &= ~(1 << p.ox_p); - - return RSP_OK; + if(octopus.ports[pin] == PIN_OUT) + { + switch(pin) + { + case 1: if(value) OX_PORT1 |=(1< #include -#ifdef __AVR_AT90CAN128__ - #define OCTOPUS_CAN -#endif + +#define OX_PIN1 PINE +#define OX_PIN2 PINE +#define OX_PIN3 PINE +#define OX_PIN4 PINB +#define OX_PIN5 PINB +#define OX_PIN6 PINB +#define OX_PIN7 PINB +#define OX_PIN8 PINB +#define OX_PIN9 PINB +#define OX_PIN10 PINB +#define OX_PIN11 PINB +#define OX_PIN12 PIND +#define OX_PIN13 PIND +#define OX_PIN14 PIND +#define OX_PIN15 PIND +#define OX_PIN16 PIND +#define OX_PIN17 PIND +#define OX_PIN18 PIND +#define OX_PIN19 PIND + +#define OX_PIN26 PINC +#define OX_PIN27 PINC +#define OX_PIN28 PINC +#define OX_PIN29 PINC +#define OX_PIN30 PINC +#define OX_PIN31 PINC +#define OX_PIN32 PINC +#define OX_PIN33 PINF +#define OX_PIN34 PINF +#define OX_PIN35 PINF +#define OX_PIN36 PINF +#define OX_PIN37 PINF +#define OX_PIN38 PINF +#define OX_PIN39 PINF +#define OX_PIN40 PINF +#define OX_PIN41 PINE +#define OX_PIN42 PINE +#define OX_PIN43 PINE +#define OX_PIN44 PINE + +#define OX_PORT1 PORTE +#define OX_PORT2 PORTE +#define OX_PORT3 PORTE +#define OX_PORT4 PORTB +#define OX_PORT5 PORTB +#define OX_PORT6 PORTB +#define OX_PORT7 PORTB +#define OX_PORT8 PORTB +#define OX_PORT9 PORTB +#define OX_PORT10 PORTB +#define OX_PORT11 PORTB +#define OX_PORT12 PORTD +#define OX_PORT13 PORTD +#define OX_PORT14 PORTD +#define OX_PORT15 PORTD +#define OX_PORT16 PORTD +#define OX_PORT17 PORTD +#define OX_PORT18 PORTD +#define OX_PORT19 PORTD + +#define OX_PORT26 PORTC +#define OX_PORT27 PORTC +#define OX_PORT28 PORTC +#define OX_PORT29 PORTC +#define OX_PORT30 PORTC +#define OX_PORT31 PORTC +#define OX_PORT32 PORTC +#define OX_PORT33 PORTF +#define OX_PORT34 PORTF +#define OX_PORT35 PORTF +#define OX_PORT36 PORTF +#define OX_PORT37 PORTF +#define OX_PORT38 PORTF +#define OX_PORT39 PORTF +#define OX_PORT40 PORTF +#define OX_PORT41 PORTE +#define OX_PORT42 PORTE +#define OX_PORT43 PORTE +#define OX_PORT44 PORTE + +#define OX_DDR1 DDRE +#define OX_DDR2 DDRE +#define OX_DDR3 DDRE +#define OX_DDR4 DDRB +#define OX_DDR5 DDRB +#define OX_DDR6 DDRB +#define OX_DDR7 DDRB +#define OX_DDR8 DDRB +#define OX_DDR9 DDRB +#define OX_DDR10 DDRB +#define OX_DDR11 DDRB +#define OX_DDR12 DDRD +#define OX_DDR13 DDRD +#define OX_DDR14 DDRD +#define OX_DDR15 DDRD +#define OX_DDR16 DDRD +#define OX_DDR17 DDRD +#define OX_DDR18 DDRD +#define OX_DDR19 DDRD + +#define OX_DDR26 DDRC +#define OX_DDR27 DDRC +#define OX_DDR28 DDRC +#define OX_DDR29 DDRC +#define OX_DDR30 DDRC +#define OX_DDR31 DDRC +#define OX_DDR32 DDRC +#define OX_DDR33 DDRF +#define OX_DDR34 DDRF +#define OX_DDR35 DDRF +#define OX_DDR36 DDRF +#define OX_DDR37 DDRF +#define OX_DDR38 DDRF +#define OX_DDR39 DDRF +#define OX_DDR40 DDRF +#define OX_DDR41 DDRE +#define OX_DDR42 DDRE +#define OX_DDR43 DDRE +#define OX_DDR44 DDRE + + +#define OX_P1 PE5 +#define OX_P2 PE6 +#define OX_P3 PE7 +#define OX_P4 PB0 +#define OX_P5 PB1 +#define OX_P6 PB2 +#define OX_P7 PB3 +#define OX_P8 PB4 +#define OX_P9 PB5 +#define OX_P10 PB6 +#define OX_P11 PB7 +#define OX_P12 PD0 +#define OX_P13 PD1 +#define OX_P14 PD2 +#define OX_P15 PD3 +#define OX_P16 PD4 +#define OX_P17 PD5 +#define OX_P18 PD6 +#define OX_P19 PD7 + +#define OX_P26 PC0 +#define OX_P27 PC1 +#define OX_P28 PC2 +#define OX_P29 PC3 +#define OX_P30 PC4 +#define OX_P31 PC5 +#define OX_P32 PC6 +#define OX_P33 PF7 +#define OX_P34 PF6 +#define OX_P35 PF5 +#define OX_P36 PF4 +#define OX_P37 PF3 +#define OX_P38 PF2 +#define OX_P39 PF1 +#define OX_P40 PF0 +#define OX_P41 PE0 +#define OX_P42 PE1 +#define OX_P43 PE2 +#define OX_P44 PE3 + + void io_parser(char *buf); @@ -80,8 +240,6 @@ void io_set_pin_usb(uint8_t pin, uint8_t value); uint8_t io_get_pin(uint8_t pin, uint8_t *value); void io_get_pin_usb(uint8_t pin); -void io_set_status_led(uint8_t on); -void io_set_status_led_usb(uint8_t on); #define PORT(port,pin) (PORT##port) #define DDR(port,pin) (DDR##port) diff --git a/firmware/main.c b/firmware/main.c index 6bd7c32..ef802a2 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -16,19 +16,19 @@ #include "protocol.h" #include "wait.h" -#include "93c46.h" +#include "io.h" #include "adc.h" -#include "can.h" -#include "eeprom.h" #include "i2c.h" -#include "io.h" -#include "pwm.h" #include "spi.h" +#include "pwm.h" #include "uart.h" -#include +#include "93c46.h" #include "debug.h" +//#define DEBUG 1 + + SIGNAL (SIG_INTERRUPT4) { @@ -48,218 +48,185 @@ SIGNAL (SIG_OVERFLOW0) } -void USBCommandRX (char *buf) +void +USBCommandRX (char *buf) { int i; - debugf("receiving command: %X (length: %u)\n", buf[1]); +#ifdef DEBUG + debug_write("get \0"); + debug_SendHex(buf[1]); + debug_write("\r\n"); +#endif /* a paket can be max 255 bytes */ if (octopus.long_rx_cmd == 1) - { - debugf("get next\n"); - - for (i = 0; i < 64; i++) - request[octopus.long_rx_index + i] = buf[i]; + { +#ifdef DEBUG + debug_write("get next\r\n"); +#endif + for (i = 0; i < 64; i++) + request[octopus.long_rx_index + i] = buf[i]; - octopus.long_rx_index = octopus.long_rx_index + i; + octopus.long_rx_index = octopus.long_rx_index + i; - if (octopus.long_rx_index >= octopus.long_rx_bytes) - { - octopus.long_rx_cmd = 0; - USBMessageIn (request); - } - } + if (octopus.long_rx_index >= octopus.long_rx_bytes) + { + octopus.long_rx_cmd = 0; + USBMessageIn (request); + } + } else - { - debugf("get and execute\n"); - - octopus.long_rx_index = 0; - for (i = 0; i < 64; i++) - request[octopus.long_rx_index + i] = buf[i]; - - octopus.long_rx_index = i; - - if ((unsigned int) buf[1] < 64) - { - octopus.long_rx_cmd = 0; - USBMessageIn (request); - } - else - { - octopus.long_rx_cmd = 1; - octopus.long_rx_bytes = (unsigned int) buf[1]; - } - } + { +#ifdef DEBUG + debug_write("get and execute\r\n\0"); +#endif + octopus.long_rx_index = 0; + for (i = 0; i < 64; i++) + request[octopus.long_rx_index + i] = buf[i]; + + octopus.long_rx_index = i; + + if ((unsigned int) buf[1] < 64) + { + octopus.long_rx_cmd = 0; + USBMessageIn (request); + } + else + { + octopus.long_rx_cmd = 1; + octopus.long_rx_bytes = (unsigned int) buf[1]; + } + } } /* is called when received data from pc */ -void USBMessageIn (char *buf) +void +USBMessageIn (char *buf) { octopus.long_index = 0; octopus.long_running = 0; - if(octopus.status_led) - STATUS_LED_on; - + STATUS_LED_on; +#ifdef DEBUG + debug_write("parser\r\n\0"); +#endif int check = ((int) buf[0] >> 4) & 0x0F; - debugf("parser, check: %X, command: %X\n", check, buf[0]); - switch (check) - { - case 0: - if (buf[0] == CMD_EXTERNAL_DEVICE) - { - switch (buf[2]) - { - case CMD_EXTERNAL_93C46: - flash_93c46_parser(buf); - break; - } - } - else - common_parser(buf); - - break; - - case 1: - debugf("calling io_parser\n"); - io_parser (buf); - break; - case 2: - debugf("calling adc_parser\n"); - adc_parser (buf); - break; - case 3: - debugf("calling i2c_parser\n"); - i2c_parser (buf); - break; - case 4: - debugf("calling spi_parser\n"); - spi_parser (buf); - break; - case 5: - debugf("calling pwm_parser\n"); - pwm_parser (buf); - break; - case 6: - debugf("calling adc_parser\n"); - uart_parser (buf); - break; - case 7: -#ifdef OCTOPUS_CAN - debugf("calling can_parser\n"); - can_parser ((uint8_t *)buf); -#else - debugf("can't call can_parser - no CAN-support\n"); -#endif - break; - case 8: - debugf("calling eeprom_parser\n"); - eeprom_parser(buf); - break; - default: - debugf("unknown cmd\n"); - answer[0] = buf[0]; - answer[1] = RSP_UNKOWN_CMD; - answer[2] = 0; - CommandAnswer(3); - } - - if(octopus.status_led) - STATUS_LED_off; -} - + { + case 0: + if (buf[0] == CMD_EXTERNAL_DEVICE) + { + switch (buf[2]) + { + case CMD_EXTERNAL_93C46: + flash_93c46_parser (buf); + break; + default: + ; + } + } + else + common_parser (buf); + break; + case 1: + io_parser (buf); + break; + case 2: + adc_parser (buf); + break; + case 3: + i2c_parser (buf); + break; + case 4: + spi_parser (buf); + break; + case 5: + pwm_parser (buf); + break; + case 6: + uart_parser (buf); + break; + default: + answer[0] = buf[0]; + answer[1] = RSP_UNKOWN_CMD; + answer[2] = 0; + CommandAnswer (3); + } -unsigned int strlen(volatile unsigned char *str) -{ - unsigned int len = 0; - - while (*str++) - len++; - - return len; + STATUS_LED_off; } -void CommandAnswer(unsigned int length) +void +CommandAnswer (unsigned int length) { int i; - // if first packet of a long message + // if first packet of a lang message if (length > 64 && octopus.long_running == 0) - { - debugf("first packet of a long message (length: %d)\n", length); - octopus.long_index = 0; - octopus.long_bytes = length; - octopus.long_running = 1; - length = 64; - } + { + octopus.long_index = 0; + octopus.long_bytes = length; + octopus.long_running = 1; + length = 64; + } USBNWrite (FIFOTXC1, FLUSH); for (i = 0; i < length; i++) - USBNWrite (TXD1, answer[octopus.long_index + i]); + USBNWrite (TXD1, answer[octopus.long_index + i]); /* control togl bit */ if (octopus.datatogl == 1) - { - USBNWrite (FIFOTXC1, TX_LAST + TX_EN + TX_TOGL); - octopus.datatogl = 0; - } + { + USBNWrite (FIFOTXC1, TX_LAST + TX_EN + TX_TOGL); + octopus.datatogl = 0; + } else - { - USBNWrite (FIFOTXC1, TX_LAST + TX_EN); - octopus.datatogl = 1; - } + { + USBNWrite (FIFOTXC1, TX_LAST + TX_EN); + octopus.datatogl = 1; + } } -void CommandAnswerRest (void) +void +CommandAnswerRest (void) { if (octopus.long_running == 1) - { - debugf("octopus long running message\n"); - if (octopus.long_index < octopus.long_bytes) - { - debugf("octopus.long_index < octopus.long_bytes\n"); - int diff = octopus.long_bytes - octopus.long_index; - octopus.long_index = octopus.long_index + 64; - - if (diff > 64) - { - debugf("not last packet: diff > 64\n"); - CommandAnswer (64); - } - else - { - debugf("last packet\n"); - /* last packet */ - CommandAnswer (diff); - octopus.long_running = 0; - } - } - } + { + if (octopus.long_index < octopus.long_bytes) + { + int dif = octopus.long_bytes - octopus.long_index; + octopus.long_index = octopus.long_index + 64; + + if (dif > 64) + CommandAnswer (64); + + else + { + /* last packet */ + CommandAnswer (dif); + octopus.long_running = 0; + } + } + } } -int main(void) +int +main (void) { - cli(); + DDRB = 0xFF; + PORTB = 0xFF; - USBNInitMC (); - USBNStartClock(); - - DDRB = 0xFF; - PORTB = 0x00; - - /* use status led */ - octopus.status_led = 1; int interf; int conf; + STATUS_LED_off; USBNInit (); @@ -270,19 +237,17 @@ int main(void) USBNDeviceBCDDevice (0x0001); // you can use it as version e.g. version 1.02 char lang[] = { 0x09, 0x04, 0x00 }; - _USBNAddStringDescriptor (lang); // language descriptor + _USBNAddStringDescriptor (lang); // language descriptor /* Attention!!! Descriptors must be a factor of 8 (error in the stack) */ USBNDeviceManufacture ("EmbeddedProjects"); USBNDeviceProduct ("OctopusUSB Interface Converter and I/O Extension"); - //USBNDeviceProduct ("Octopus USB v3.3"); - USBNDeviceSerialNumber ("20090718"); + USBNDeviceSerialNumber ("20081108"); conf = USBNAddConfiguration (); - // we reserve 500mA, because users could drive LEDs and need more power - USBNConfigurationPower (conf, 200); + USBNConfigurationPower (conf, 100); interf = USBNAddInterface (conf, 0); USBNAlternateSetting (conf, interf, 0); @@ -290,32 +255,33 @@ int main(void) /* communication */ USBNAddInEndpoint (conf, interf, 1, 0x01, BULK, 64, 0, &CommandAnswerRest); USBNAddOutEndpoint (conf, interf, 1, 0x01, BULK, 64, 0, &USBCommandRX); - //USBNAddOutEndpoint (conf, interf, 1, 0x02, BULK, 64, 0, NULL); + + USBNInitMC (); octopus.datatogl = 0; octopus.long_rx_cmd = 0; + /* start usb chip */ + USBNStart (); + /* UARTInit2(38400,8,'N',1); */ - debug_init(); + #ifdef DEBUG + debug_init(); + #endif /* hello world led pattern */ - DDRC = 0x7F; - PORTC = 0x2A; + DDRC = 0xFF; + PORTC = 0xAA; delay_250ms (); - PORTC = 0x55; + PORTC = 0xD5; delay_250ms (); - PORTC = 0x00; - - common_init(); + PORTC = 0x80; - - /* init connection between avr and usbn9604 */ - USBNInitMC (); - /* start usb chip */ - USBNStart (); - sei(); + // testpin + //PORTB = 0xFF; + //PORTB = 0x00; while (1); + return 0; } - diff --git a/firmware/main.hex b/firmware/main.hex index d7795f1..3d38158 100644 --- a/firmware/main.hex +++ b/firmware/main.hex @@ -1,1327 +1,844 @@ -:100000000C9470000C948F000C948F000C948F0053 -:100010000C948F000C9463050C948F000C948F004B -:100020000C948F000C948F000C948F000C948F0014 -:100030000C94DD190C948F000C948F000C948F009D -:100040000C948F000C9438050C94431F0C948F0073 -:100050000C948F000C9491000C948F000C948F00E2 -:100060000C948F000C948F000C948F000C948F00D4 -:100070000C948F000C948F000C948F000C948F00C4 -:100080000C948F000C948F000C948F000C948F00B4 -:100090000C948F004C22572262226D2278228322F8 -:1000A0008E229922A422AF22BD22CB22D922E7227E -:1000B000F222FD220B23162321232C233723422354 -:1000C0004D23582363236E23792384238F239A237C -:1000D000A523B023BF23CA23D523E023EB23F92391 -:1000E00011241FBECFEFD0E1DEBFCDBF13E0A0E0F3 -:1000F000B1E0E8E6F0E500E00BBF02C007900D922A -:10010000AE36B107D9F716E0AEE6B3E001C01D92F6 -:10011000A83BB107E1F70E94A9000C9432280C9487 -:1001200000001F920F920FB60F9211240F900FBE76 -:100130000F901F901895AC0120E030E002C02F5FB7 -:100140003F4FFA01E20FF31F80818823C1F7C901F5 -:1001500008956F927F928F929F92AF92BF92CF92AB -:10016000DF92EF92FF920F93DF93CF9300D00F9225 -:10017000CDB7DEB7F8940E94B30A0E942B108FEF20 -:1001800084B915B881E0809378032F980E94240BDE -:1001900081E897E10E946F0B85E69CE00E94740B5A -:1001A00081E090E00E94790BDE011196E3EEF2E02F -:1001B00083E001900D928150E1F7CE0101960E94FB -:1001C000620F80E091E00E94001081E191E00E94C6 -:1001D000F80F82E491E00E94F00F0E94380F4C016A -:1001E00068EC70E00E94870BC40160E070E00E9440 -:1001F000AE0E3C01C401B30140E050E00E94AD0BE3 -:10020000C401B30141E050E021E030E002E0A0E4AD -:10021000EA2EF12CCC24DD24F6EBAF2EF1E0BF2E3C -:100220000E94430EC401B30141E050E021E030E000 -:10023000E4E5AE2EE4E0BE2E0E947B0E1092CD03CC -:100240001092CC031092CF031092CE030E94741B25 -:100250008FE787B98AE288B90E948B0585E588B95E -:100260000E948B0518B80E94B1100E94B30A0E9428 -:1002700030107894FFCF0F931F93CF93DF938C01AF -:1002800081349105F0F18091D8039091D903892BA5 -:10029000C1F500D000D000D0EDB7FEB731968BE4A9 -:1002A00091E0ADB7BEB712969C938E93119783E5FC -:1002B00091E09383828381EC90E0958384830E9414 -:1002C0000D250F900F908AE591E0EDB7FEB7928370 -:1002D0008183148303830E940D251092D50310920D -:1002E000D4031093D7030093D60381E090E090935A -:1002F000D9038093D80300E410E00F900F900F9083 -:100300000F908BE268E00E94F50AC0E0D0E00DC0DB -:10031000E091D403F091D503EC0FFD1FE25EFA4F9C -:10032000608189E20E94F50A2196C017D10780F307 -:100330008091CC039091CD03019749F48BE267E063 -:100340000E94F50A1092CD031092CC030AC08BE2F2 -:1003500063E00E94F50A81E090E09093CD038093E2 -:10036000CC03DF91CF911F910F910895EF92FF92EF -:100370000F931F93CF93DF938091D8039091D9036C -:10038000019709F0B5C000D000D000D0EDB7FEB79E -:1003900031960BE411E0ADB7BEB712961C930E93E5 -:1003A0001197B3E5EB2EB1E0FB2EF382E2828FEDE5 -:1003B00090E0958384830E940D258DB79EB70696A5 -:1003C0000FB6F8949EBF0FBE8DBF87E891E00E94E4 -:1003D00022252091D4033091D5038091D6039091AA -:1003E000D7032817390708F083C000D000D000D009 -:1003F000EDB7FEB73196ADB7BEB712961C930E930C -:100400001197F382E28282EE90E0958384830E94CA -:100410000D258DB79EB706960FB6F8949EBF0FBEFA -:100420008DBF84EA91E00E942225C091D603D0912D -:10043000D7038091D4039091D503C81BD90B809129 -:10044000D4039091D503805C9F4F9093D503809304 -:10045000D403C134D1052CF100D000D000D0EDB7C9 -:10046000FEB73196ADB7BEB712961C930E93119797 -:10047000F382E28288EE90E0958384830E940D25CA -:100480008DB79EB706960FB6F8949EBF0FBE8DBF70 -:100490008CEC91E00E94222580E490E00E943B01D8 -:1004A00027C000D000D000D0EDB7FEB73196ADB771 -:1004B000BEB712961C930E931197F382E2828DEED3 -:1004C00090E0958384830E940D258DB79EB7069694 -:1004D0000FB6F8949EBF0FBE8DBF87EE91E00E94CD -:1004E0002225CE010E943B011092D9031092D8031D -:1004F000DF91CF911F910F91FF90EF900895CF92D0 -:10050000DF92EF92FF921F93CF93DF93EC01109253 -:10051000D5031092D4031092D9031092D80380917E -:10052000780381112F9A188112951F7000D000D086 -:1005300000D0EDB7FEB731969BE4E92E91E0F92E9D -:10054000ADB7BEB71296FC92EE92119783E5C82E16 -:1005500081E0D82ED382C2828BE690E0958384839B -:100560000E940D25EDB7FEB7319683EF91E0ADB750 -:10057000BEB712969C938E93119712831382888133 -:10058000848315820E940D258DB79EB706960FB6FF -:10059000F8949EBF0FBE8DBF143009F495C015307E -:1005A00058F4113029F11130A0F0123009F444C090 -:1005B000133009F03DC164C0163009F4CDC01630C7 -:1005C00008F4A6C0173009F4EBC0183009F030C1A8 -:1005D0000BC18881863041F48A81813009F058C18D -:1005E000CE010E94AC1954C1CE010E94AA1050C184 -:1005F00000D000D000D0EDB7FEB73196ADB7BEB792 -:100600001296FC92EE921197D382C2828FE790E00D -:10061000958384830E940D258DB79EB706960FB6ED -:10062000F8949EBF0FBE8DBF83E192E00E94222509 -:10063000CE010E9455132CC100D000D000D0EDB7E0 -:10064000FEB73196ADB7BEB71296FC92EE921197F7 -:10065000D382C28283E890E0958384830E940D2533 -:100660008DB79EB706960FB6F8949EBF0FBE8DBF8E -:1006700085E292E00E942225CE010E94F51408C175 -:1006800000D000D000D0EDB7FEB73196ADB7BEB701 -:100690001296FC92EE921197D382C28287E890E084 -:1006A000958384830E940D258DB79EB706960FB65D -:1006B000F8949EBF0FBE8DBF88E392E00E94222572 -:1006C000CE010E942316E4C000D000D000D0EDB7C8 -:1006D000FEB73196ADB7BEB71296FC92EE92119767 -:1006E000D382C2828BE890E0958384830E940D259B -:1006F0008DB79EB706960FB6F8949EBF0FBE8DBFFE -:100700008BE492E00E942225CE010E94CE17C0C049 -:1007100000D000D000D0EDB7FEB73196ADB7BEB770 -:100720001296FC92EE921197D382C2828FE890E0EB -:10073000958384830E940D258DB79EB706960FB6CC -:10074000F8949EBF0FBE8DBF8EE592E00E942225D9 -:10075000CE010E94FF1A9CC000D000D000D0EDB79F -:10076000FEB73196ADB7BEB71296FC92EE921197D6 -:10077000D382C28283E990E0958384830E940D2511 -:100780008DB79EB706960FB6F8949EBF0FBE8DBF6D -:1007900085E292E00E942225CE010E94740778C073 -:1007A00000D000D000D0EDB7FEB73196ADB7BEB7E0 -:1007B0001296FC92EE921197D382C28288E990E061 -:1007C000958384830E940D258DB79EB706960FB63C -:1007D000F8949EBF0FBE8DBF81E792E00E94222554 -:1007E000CE010E945C2054C000D000D000D0EDB7F4 -:1007F000FEB73196ADB7BEB71296FC92EE92119746 -:10080000D382C2828FE990E0958384830E940D2574 -:100810008DB79EB706960FB6F8949EBF0FBE8DBFDC -:1008200084E892E00E942225CE010E94D02130C0AF -:1008300000D000D000D0EDB7FEB731968BE491E048 -:10084000ADB7BEB712969C938E93119783E591E056 -:100850009383828383EA90E0958384830E940D25AD -:100860008DB79EB706960FB6F8949EBF0FBE8DBF8C -:100870008AE992E00E942225888180931E0583E008 -:1008800080931F051092200583E090E00E943B01B9 -:100890008091780381112F98DF91CF911F91FF9064 -:1008A000EF90DF90CF900895EF92FF920F931F93F8 -:1008B000CF93DF93EC0100D000D000D0EDB7FEB7AE -:1008C00031960BE411E0ADB7BEB712961C930E93B0 -:1008D000119723E5E22E21E0F22EF382E28287E3F4 -:1008E00090E0958384830E940D250F900F90EDB7C3 -:1008F000FEB7319686EA92E0ADB7BEB712969C93EA -:100900008E9311978981828313820E940D25809195 -:10091000CE039091CF030F900F900F900F900197FF -:1009200009F04BC000D000D000D0EDB7FEB7319633 -:10093000ADB7BEB712961C930E931197F382E28265 -:100940008CE390E0958384830E940D258DB79EB73C -:1009500006960FB6F8949EBF0FBE8DBF8AEC92E04C -:100960000E94222520E030E0E091D003F091D103F5 -:10097000E20FF31FDE01A20FB31F8C91E252FC4F76 -:1009800080832F5F3F4F2034310571F78091D00372 -:100990009091D103805C9F4F9093D1038093D003BB -:1009A0002091D0033091D1038091D2039091D30351 -:1009B0002817390708F455C03FC000D000D000D038 -:1009C000EDB7FEB73196ADB7BEB712961C930E9336 -:1009D0001197F382E2828BE490E0958384830E94F6 -:1009E0000D258DB79EB706960FB6F8949EBF0FBE25 -:1009F0008DBF83ED92E00E9422251092D1031092C8 -:100A0000D00320E030E0E091D003F091D103E20F79 -:100A1000F31FDE01A20FB31F8C91E252FC4F8083C3 -:100A20002F5F3F4F2034310571F73093D10320936E -:100A3000D0038981803448F41092CF031092CE0302 -:100A40008EED93E00E947F020CC081E090E09093D5 -:100A5000CF038093CE03898190E09093D30380935A -:100A6000D203DF91CF911F910F91FF90EF900895E6 -:100A70001F920F920FB60F920BB60F9211242F9365 -:100A80003F934F935F936F937F938F939F93AF9316 -:100A9000BF93EF93FF930E947C108091770386BDF4 -:100AA000FF91EF91BF91AF919F918F917F916F9146 -:100AB0005F914F913F912F910F900BBE0F900FBE02 -:100AC0000F901F9018951F920F920FB60F920BB6B2 -:100AD0000F9211242F933F934F935F936F937F93C4 -:100AE0008F939F93AF93BF93EF93FF930E94081050 -:100AF000FF91EF91BF91AF919F918F917F916F91F6 -:100B00005F914F913F912F910F900BBE0F900FBEB1 -:100B10000F901F90189520E040E45CE9CA0101970E -:100B2000F1F72F5F2931D1F70895882321F0813023 -:100B300061F084E008958EE08093A2038093A30384 -:100B400088E18093C10081E008958EE0809387035F -:100B50008093880388E18093C90081E00895882309 -:100B600021F0813081F084E008951092A203109268 -:100B7000A3031092C5001092C4001092C1001092FD -:100B8000C20081E0089510928703109288031092AA -:100B9000CD001092CC001092C9001092CA0081E0E2 -:100BA0000895882321F0813041F084E00895209356 -:100BB000C5006093C40081E008952093CD00609348 -:100BC000CC0081E00895623011F492E001C090E021 -:100BD000882321F0813061F084E008958091C20083 -:100BE000990F990F990F982B9093C20081E0089567 -:100BF0008091CA00990F990F990F982B9093CA0072 -:100C000081E00895663029F0673039F0653041F4AD -:100C100002C020E006C020E001C021E090E002C058 -:100C200021E091E0882321F0813069F084E008958B -:100C30008091C200220F220F990F922B982B909334 -:100C4000C20081E008958091CA00220F220F990FFF -:100C5000922B982B9093CA0081E00895653419F087 -:100C60006F3419F405C021E001C020E090E002C01B -:100C700021E091E0882321F0813079F084E008952B -:100C80008091C2002295220F207E9295907F922B18 -:100C9000982B9093C20081E008958091CA0022951C -:100CA000220F207E9295907F922B982B9093CA00D2 -:100CB00081E00895982FFA018230B8F084E0089519 -:100CC0002191992319F0913071F407C08091C000EF -:100CD00085FFFCCF2093C60006C08091C80085FF29 -:100CE000FCCF2093CE00615070406115710541F733 -:100CF00081E00895882321F0813051F084E0089547 -:100D00008091C00085FFFCCF6093C60081E008950C -:100D10008091C80085FFFCCF6093CE0081E00895EC -:100D2000E82FDB01823010F084E008959A0116C0AC -:100D3000EE2321F0E13049F084E00DC08091C00045 -:100D400087FFFCCF8091C60006C08091C80087FF56 -:100D5000FCCF8091CE008D932150304012161306A7 -:100D60003CF381E00895882321F0813049F084E04C -:100D700008958091C00087FFFCCF8091C600089540 -:100D80008091C80087FFFCCF8091CE00089570E06D -:100D90000E945A0680931F051092200583E090E080 -:100DA0000E943B0108950E94020680931F05109245 -:100DB000200583E090E00E943B0108950E94020616 -:100DC00080931F051092200583E090E00E943B0174 -:100DD00008950E94E30580931F051092200583E08B -:100DE00090E00E943B0108950F930E94D1058093EB -:100DF0001F051092200583E090E00E943B010F91B7 -:100E000008950E94AF0580931F051092200583E08E -:100E100090E00E943B010895882321F0813059F031 -:100E200084E012C08EE08093A2038093A30388E144 -:100E30008093C10008C08EE080938703809388036D -:100E400088E18093C90081E080931F0510922005FE -:100E500083E090E00E943B010895CF92DF92EF92F1 -:100E6000FF920F931F93DF93CF93CDB7DEB78B0124 -:100E7000CDB6DEB62DB73EB7261B370B0FB6F894AE -:100E80003EBF0FBE2DBFEDB6FEB60894E11CF11CAF -:100E9000B701A8010E94900680931F0520E030E072 -:100EA0000AC0F701E20FF31F8081F901E05EFA4FFB -:100EB00080832F5F3F4F201731079CF3F801E05EDE -:100EC000FA4F1082C80103960E943B010FB6F894B6 -:100ED000DEBE0FBECDBECF91DF911F910F91FF906F -:100EE000EF90DF90CF9008950F93FC018081809365 -:100EF0001E058081843611F1853648F48236B1F0C2 -:100F00008336E0F4803651F0813679F50BC08736B0 -:100F100031F18836E9F0853641F515C082810E94AD -:100F20000C072CC082810E94010728C08281638146 -:100F30004481258106810E94F40620C0828163815C -:100F40000E94E9061BC0828163810E94D30616C0FD -:100F5000828163813496AF010E94C7060FC063810E -:100F6000828170E00E942D0709C083E080931F05F5 -:100F70001092200583E090E00E943B010F910895BC -:100F800087E28093860685E28093850690E29093BF -:100F900087061092880628E030E030938A06209376 -:100FA000890683E28093920681E280939106909372 -:100FB0009306109294063093960620939506089512 -:100FC0000895089581E260919E060E94F50A0895B1 -:100FD0008BE268E00E94F50A88E261E10E94F50A6E -:100FE0008FE268E00E94F50A8CE261E10E94F50A56 -:100FF0008FE261E00E94F50A83E265E00E94F50A53 -:1010000008950F931F938C0180E260E40E94F50A1B -:10101000F8016281605884E00E94F50AF80182813B -:1010200080939D061F910F9108950F931F93CF9367 -:10103000DF93EC0128853985121613060CF03FC0AA -:101040008E819F81821793073CF583E268E00E94BE -:10105000F50A00E010E012C0EA85FB85E20FF31FFD -:1010600081E260810E94F50A8E819F8101969F83B3 -:101070008E830F5F1F4F0830110539F02E813F819D -:1010800088859985281739073CF3288539858E810D -:101090009F818217930724F087E261E00E94F50A9E -:1010A0008B81813031F4898165E00E94F50A1B82D1 -:1010B00006C0898161E00E94F50A81E08B83DF919F -:1010C000CF911F910F910895DF93CF9300D000D05F -:1010D000CDB7DEB7FC0132812381109298061092C1 -:1010E000970681E080939406223031F12330B9F1E4 -:1010F000213009F05FC080917106809399061092AB -:101100009A0681E796E090939C0680939B068681E1 -:101110009781089721F480E490E097838683868105 -:1011200097818034910509F045C088E090E0909364 -:101130009A06809399063EC08681978190939A067D -:1011400080939906832F90E0880F991FE091830682 -:10115000F0918406E80FF91F8081918127C0332325 -:10116000B9F0832F90E0880F991FE091DC03F09194 -:10117000DD03E80FF91F0190F081E02DF0939C064C -:10118000E0939B0680818093990610929A0612C084 -:1011900094E099832A8389E08B839C8384E090E0A8 -:1011A00090939A0680939906CE01019690939C069F -:1011B00080939B0681E996E00E9415080F900F909E -:1011C0000F900F90CF91DF910895CF93DF9382E23C -:1011D0000E94C10AC82F85FF1AC083E268E00E94FE -:1011E000F50AC6FF10C020919706309198068091AD -:1011F000990690919A06281739072CF481E996E010 -:101200000E94150804C087E261E00E94F50ADF91A0 -:10121000CF9108950F931F9388E00E94C10A082F71 -:10122000182F86FF18C085E060E00E94F50A84E070 -:1012300060E80E94F50A80E260E00E94F50A83E21D -:1012400068E00E94F50A87E261E00E94F50A85E005 -:1012500062E00E94F50A14FF04C089E060EC0E947D -:10126000F50A07FF04C089E060ED0E94F50A1F91AE -:101270000F9108958AE00E94C10A80FF03C00E9476 -:10128000E508089581FF0DC08AE20E94C10A80919D -:101290005E06813061F4E0916106F0916206099585 -:1012A000089582E30E94C10A8AE30E94C10A089558 -:1012B0008EE00E94C10A0895EF92FF920F931F9350 -:1012C000DF93CF93CDB7DEB728970FB6F894DEBF84 -:1012D0000FBECDBF86E20E94C10A86FF7FC08E018D -:1012E0000F5F1F4F49E0E42EF12CEC0EFD1E8091A4 -:1012F00085060E94C10AF80181938F01EE15FF0552 -:10130000B1F78E010F5F1F4F87E268E00E94F50A78 -:1013100083E268E00E94F50A80E20E94C10A682F19 -:101320006F7780E20E94F50A898190E08076907064 -:101330008032910509F440C080349105D1F1892BA8 -:10134000F1F5F80181818630D9F0873048F4813099 -:10135000F1F18130C8F0833079F1853081F521C019 -:10136000893019F18A3018F4883049F505C08A307F -:1013700071F18B3021F520C081E260919E0625C07D -:10138000C8010E94640823C083E268E00E94F50A55 -:1013900081E261E00E94F50A81E260E00E94F50AC4 -:1013A0000BC0C8010E94010812C0C8010E94E807D2 -:1013B0000EC0C8010E94B10A83E265E006C080E267 -:1013C0000E94C10A682F605880E20E94F50AF80165 -:1013D00080818823D1F483E265E015C020919906CD -:1013E00030919A0680919506909196068217930700 -:1013F00064F410929A061092990683E268E00E94C3 -:10140000F50A87E261E00E94F50A28960FB6F89483 -:10141000DEBF0FBECDBFCF91DF911F910F91FF9027 -:10142000EF900895EF92FF920F931F93DF93CF9366 -:10143000CDB7DEB7C054D0400FB6F894DEBF0FBEB4 -:10144000CDBF8CE00E94C10A80FF03C00E945C09EE -:101450007AC081FF29C08EE20E94C10A8DE20E94FB -:10146000C10A89838E010F5F1F4F70E4E72EF12CB4 -:10147000EC0EFD1E0F5F1F4F0E94E40AF8018083EF -:101480000E151F05B9F780916E03813039F4E09194 -:101490007103F0917203CE01019609958FE268E025 -:1014A0000E94F50A8FE22AC082FF2CC086E30E94C8 -:1014B000C10A85E30E94C10A89838E010F5F1F4F15 -:1014C00060E4E62EF12CEC0EFD1E0F5F1F4F0E9414 -:1014D000E40AF80180830E151F05B9F780916F03A8 -:1014E000813039F4E0917303F0917403CE010196D9 -:1014F000099587E368E00E94F50A87E361E00E94AE -:10150000F50A21C083FF1FC08EE30E94C10A8E012D -:101510000F5F1F4F51E4E52EF12CEC0EFD1E8DE305 -:101520000E94C10AF80181938F01EE15FF05B9F7FA -:1015300080917003813039F4E0917103F09172036E -:10154000CE0101960995C05CDF4F0FB6F894DEBF5F -:101550000FBECDBFCF91DF911F910F91FF90EF9004 -:1015600008950895089581E080936A0080E18DBB1D -:1015700083B3876083BB84B3836084BB3F9A479AFD -:1015800008959FEF91B982B988B1805888B984B322 -:1015900095E0892784BB88B1805888B984B38927AE -:1015A00084BB000011B888B1805888B984B322E0A8 -:1015B000822784BB0000000080B198B1905898B990 -:1015C00094B3922794BB089588B1805888B984B3A6 -:1015D00022E0822784BB0000000080B198B19058BF -:1015E00098B994B3922794BB089582B98FEF81B9CB -:1015F00088B1805888B984B395E0892784BB88B1C5 -:10160000805888B984B3892784BB62B988B180586F -:1016100088B984B391E0892784BB88B1805888B9A0 -:1016200084B3892784BB089582B988B1805888B96A -:1016300084B391E0892784BB88B1805888B984B38A -:10164000892784BB0895089582E18093710681E023 -:101650008093720680E191E0909374068093730604 -:1016600010927506109276061092770688E08093A5 -:10167000780610927A061092790610927C061092E3 -:101680007B0610927E0610927D0610927F061092C5 -:101690008006109281061092820610926E031092BC -:1016A0006F031092700310925E0610925F06109204 -:1016B000600610926806109267061092DB03109283 -:1016C000DA03089590937A068093790670937C06E6 -:1016D00060937B0650937E0640937D060895909319 -:1016E0007A0680937906089590937C0680937B0612 -:1016F000089590937E0680937D06089580937506E5 -:1017000008958093760608958093770608950F9341 -:101710001F93CF93DF938C01CB01C0916706D091CB -:10172000680662E070E00E94D42710C09881298189 -:101730008A81823041F4E92FF22F858190E0801771 -:10174000910709F460870F80D885C02D209771F725 -:10175000DF91CF911F910F9108959C01E091670651 -:10176000F091680614C0A081B1818281843061F457 -:10177000848190E08217930739F4868190E0861780 -:10178000970711F413964C930780F085E02D30975E -:1017900051F708950895BF92CF92DF92EF92FF9292 -:1017A0000F931F93CF93DF93EC01F62ED42EC22E0E -:1017B000B02EE0916706F0916806309799F489E0C1 -:1017C00090E00E940B24FC019093680680936706CA -:1017D000D183C083F38210861782D282C4820583AC -:1017E000E6821AC0CF010780F085E02D3097D1F74F -:1017F0008C0189E090E00E940B24FC01D80118962E -:101800009C938E931797D183C083F382D282C48234 -:10181000B582E68210861782DF91CF911F910F91DA -:10182000FF90EF90DF90CF90BF900895EF92FF92DE -:101830001F93CF93DF937C01C091DA03D091DB0338 -:10184000209711F011E012C085E090E00E940B2477 -:10185000FC019093DB038093DA03F182E082128231 -:101860001482138210E012C01F5FEC018B819C81F7 -:101870000097D1F785E090E00E940B24FC019C8347 -:101880008B83F182E082128314821382812FDF9195 -:10189000CF911F91FF90EF900895EF92FF920F93D9 -:1018A0001F93CF93DF93E091DA03F091DB0380E0A5 -:1018B00090E00380F481E02D01963097D1F7880FF6 -:1018C000991F0E940B248093DC039093DD03C09149 -:1018D000DA03D091DB0301C0EC01E880F9808A8152 -:1018E00090E0880F991F0091DC031091DD03080F31 -:1018F000191FF701808190E00E940B24F80180837A -:10190000918320E030E016C08A8190E0880F991F13 -:10191000E091DC03F091DD03E80FF91F0190F08105 -:10192000E02DE20FF31FD701A20FB31F8C9180832C -:101930002F5F3F4FF701808190E02817390724F38C -:101940008B819C81009741F6DF91CF911F910F9180 -:10195000FF90EF9008956F927F928F929F92AF9237 -:10196000BF92CF92DF92EF92FF920F931F93CF938C -:10197000DF93E0916706F0916806CC24DD2409C06E -:101980008281823019F40894C11CD11C0780F08533 -:10199000E02D3097A9F7C601880F991F0E940B24EC -:1019A00080938306909384060894C108D108560159 -:1019B000AA0CBB1C0894C11CD11CC1E0D0E0882437 -:1019C00099244FC0E0916706F0916806A9E0EA2EDD -:1019D000F12C16C0A081B181848190E08C179D0705 -:1019E00019F48381E80EF11C15968C9115978C17CC -:1019F00021F48281823009F44D010780F085E02DC9 -:101A0000309741F700918306109184060A0D1B1D43 -:101A1000C7010E940B24D8018C9311969C9320E05F -:101A200030E0E0918306F0918406EA0DFB1D019001 -:101A3000F081E02DE20FF31FD401A20FB31F8C91B0 -:101A400080832F5F3F4F2930310559F7E09183069E -:101A5000F0918406EA0DFB1D0190F081E02DE282F9 -:101A60002196CC16DD060CF0ADCFE1E0EE2EF12C88 -:101A700079E0A72EB12C6624772488249924A5C068 -:101A8000A0916706B091680613C0ED91FC91119783 -:101A90008181823049F4858190E08E159F0521F483 -:101AA0008481682E772406C017960D90BC91A02DD6 -:101AB000109759F701E010E07DC040916706509102 -:101AC000680672C0DA01ED91FC9111978181843032 -:101AD00009F065C016968C91169790E080179107D3 -:101AE00009F05DC014968C9190E08E159F0509F069 -:101AF00056C0DF019501BF01675F7F4FE09183060C -:101B0000F0918406E80DF91D0190F081E02DE20FBF -:101B1000F31F8D9180832F5F3F4FA617B70771F793 -:101B2000E9E0F0E0AE0EBF1EA0916706B091680636 -:101B300034C012968C911297853059F514968C9179 -:101B4000149790E08E159F0521F515968C911597A9 -:101B500090E080179107E9F4CD91DC911197950100 -:101B6000BE01695F7F4FE0918306F0918406E80D26 -:101B7000F91D0190F081E02DE20FF31F8991808320 -:101B80002F5F3F4FC617D70771F787E090E0A80E89 -:101B9000B91E17960D90BC91A02D109751F6DA0141 -:101BA00017964D915C9118974115510509F08ACF10 -:101BB0000F5F1F4F601671060CF07FCF0894E11C79 -:101BC000F11CE2E0F0E08E0E9F1ECE14DF040CF05C -:101BD00057CFDF91CF911F910F91FF90EF90DF9042 -:101BE000CF90BF90AF909F908F907F906F9008950F -:101BF000AF92BF92CF92EF92FF920F931F93CF932A -:101C0000DF93EC015B01122FE0916706F09168060B -:101C100018C0A081B181848190E0C817D90771F400 -:101C2000868190E08A159B0549F48281843031F4E5 -:101C300014968C9114978F5F14968C930780F0857F -:101C4000E02D309731F787E090E00E940B24FC01F3 -:101C500087E0808385E0818312830383F582E482B9 -:101C6000C682CF0167E045E02C2F0A2DEE240E94AA -:101C7000CB0BDF91CF911F910F91FF90EF90CF9001 -:101C8000BF90AF900895AF92BF92CF92DF92EF9244 -:101C9000FF920F93FC01A114B10401F142305105F0 -:101CA00071F04330510599F041305105B9F481E0AC -:101CB00080935E06B0926206A09261060FC081E03A -:101CC00080935F06B0926406A092630607C081E02D -:101CD00080936006B0926606A092650620583F4F3A -:101CE000CF010E94F80D0F91FF90EF90DF90CF9001 -:101CF000BF90AF900895AF92BF92CF92DF92EF92D4 -:101D0000FF920F93FC014230510571F043305105B1 -:101D100099F041305105B9F481E080936E03B0929F -:101D20007203A09271030FC081E080936F03B092A1 -:101D30007403A092730307C081E080937003B09294 -:101D40007603A0927503CF010E94F80D0F91FF90CA -:101D5000EF90DF90CF90BF90AF900895EF920F93E8 -:101D6000CF93DF93082FE62EA0916706B091680607 -:101D7000C0E0D0E014C0ED91FC91119785818017EF -:101D800051F412968C911297823029F484818F5FDE -:101D90008483C82FD0E017960D90BC91A02D10978A -:101DA00051F789E090E00E940B24FC0189E08083D8 -:101DB00084E08183E2821382148215821682178264 -:101DC0001086CF0169E044E0202F00E0EC2E0E9455 -:101DD000CB0BCE01DF91CF910F91EF900895DF9261 -:101DE000EF92FF920F931F93CF93DF93E82E162F5E -:101DF000F42ED22EA0916706B0916806C0E0D0E024 -:101E000014C0ED91FC91119785818E1551F41296B5 -:101E10008C911297823029F484818F5F8483C82F3C -:101E2000D0E017960D90BC91A02D109751F789E046 -:101E300090E00E940B24FC0189E0808384E0818390 -:101E4000128313821482F582D68207831086CF0113 -:101E500069E044E02E2D00E0EC2E0E94CB0BCE0179 -:101E6000DF91CF911F910F91FF90EF90DF90089538 -:101E7000EF920F931F93109182061F5F10938206BB -:101E800089E090E00E940B24FC0189E0808389E0D6 -:101E900090E09383828382E081831482158316828B -:101EA00080E887838AE18087CF0169E042E020E013 -:101EB00000E0EE240E94CB0B812F90E01F910F9148 -:101EC000EF9008950F931F93CF93DF938C01FC0144 -:101ED00001900020E9F7E81BF90BCF01880F991F4B -:101EE0000E940B24EC01F80101900020E9F7E01BAF -:101EF000F10BEE0FFF1FE88323E02983AC0120E004 -:101F000030E009C0F801E20FF31F8081FA018083FD -:101F100011822F5F3F4FF80101900020E9F73197C0 -:101F2000E01BF10B4E5F5F4F2E173F0758F3CE01BA -:101F30000E94160C90E0DF91CF911F910F910895B0 -:101F40000F931F93CF93DF938C01EB01CA010E9483 -:101F5000620F282FE0916706F091680614C0A081F7 -:101F6000B1818281843061F4848190E0801791078F -:101F700039F4868190E08C179D0711F418962C9304 -:101F80000780F085E02D309751F7DF91CF911F91B9 -:101F90000F910895CF93DF93EC01CB010E94620F64 -:101FA000382FA0916706B091680615C09C911196D4 -:101FB0002C91119712968C911297823041F4E92F4F -:101FC000F22F858190E08C179D0709F436831796D0 -:101FD0000D90BC91A02D109749F7DF91CF910895F6 -:101FE0000E94620F1816190614F480938106089552 -:101FF0000E94620F1816190614F480938006089543 -:102000000E94620F1816190614F480937F06089533 -:102010001F93CF93DF9386E00E94C10AC82F86FFEB -:1020200002C00E94120AC2FF02C00E943A09C1FF08 -:1020300002C00E940A0987E00E94C10A182F87E0A7 -:1020400060E00E94F50A87E0612F0E94F50ADF91A7 -:10205000CF911F91089581E062E00E94F50A0895F2 -:102060000E94AB0C0E944D0C0E94C00780E061E012 -:102070000E94F50A80E00E94C10A80FDFBCF81E04A -:1020800062E00E94F50A84E060E80E94F50A80E2BE -:1020900060E40E94F50A83E268E00E94F50A87E2A4 -:1020A00069E00E94F50A8DE06FE00E94F50A8BE07E -:1020B0006FE00E94F50A89E068ED0E94F50A8FE062 -:1020C00063E30E94F50A87E066ED0E94F50A85E069 -:1020D00062E00E94F50A80E06CEC0E94F50A089527 -:1020E0008EEC8093770381E080936E00809177037C -:1020F00086BD83E084BD08950895089583E08093AC -:102100001E0581E080931F058BE0809320052FE65C -:102110002093210593E69093220584E7809323057D -:10212000209324059093250581E6809326058EE66D -:10213000809327058FE58093280580E38093290508 -:1021400081E380932A0510922B058EE090E00E9497 -:102150003B010895FC018081833011F40E947E10C0 -:1021600008951F9311E0812F0E944413812F60E096 -:102170000E9447121F5F1431B1F718E1812F0E94AE -:102180004413812F60E00E9447121F5F1B32B1F79A -:102190001F910895FC0110827583648373836283A9 -:1021A0004183478346830895FC019081818198177C -:1021B00010F080E00895A481B5816D9387818150EE -:1021C00019F48181A81BB1098783B583A4839FB7C4 -:1021D000F89480818F5F80839FBF81E00895FC0128 -:1021E00080818823E9F3A281B3812D91868181507A -:1021F00019F48181A81BB109B383A28386839FB799 -:10220000F8948081815080839FBF822F0895FC01C4 -:102210008081882319F42FEF3FEF13C0A281B3818F -:102220002D918681815019F48181A81BB109B38356 -:10223000A28386839FB7F8948081815080839FBF5B -:1022400030E0C901089581E0089581E0089581E0BA -:10225000089581E00895FB011082833089F0843075 -:1022600028F4813049F0823029F408C0843051F0DC -:10227000853051F085E0089583B107C086B105C06F -:1022800089B103C08CB101C08FB1808381E0089512 -:10229000833089F0843028F4813049F0823029F489 -:1022A00008C0843051F0853059F084E0089565B954 -:1022B00005C068B903C06BB901C06EB981E008956B -:1022C00061BB81E00895882321F081E08093780349 -:1022D0000895109278030895982F882321F081E0C3 -:1022E0008093780302C0109278038BE180931E05DF -:1022F00090931F051092200583E090E00E943B011F -:10230000089598E190931E050E94481180931F053F -:102310001092200583E090E00E943B010895982FE1 -:1023200089E180931E05933091F0943028F4913028 -:1023300051F0923029F409C0943059F0953059F099 -:1023400085E090E00AC093B107C096B105C099B18D -:1023500003C09CB101C09FB181E080931F059093A1 -:1023600020051092210584E090E00E943B01089531 -:1023700084E180931E0581E080931F051092200563 -:1023800083E090E00E943B01089582E180931E0566 -:1023900081E080931F051092200583E090E00E9469 -:1023A0003B01089583E180931E0581E080931F0522 -:1023B0001092200583E090E00E943B01089580E1A7 -:1023C00080931E0581E080931F051092200583E015 -:1023D00090E00E943B010895EF92FF921F93DF93DC -:1023E000CF93CDB7DEB727970FB6F894DEBF0FBEF9 -:1023F000CDBF182F7B01BE016F5F7F4F0E94392236 -:10240000882311F484E01BC0E12FF0E0E958FC4F71 -:102410003281313011F086E012C0EB81FC81808185 -:102420002F8190E002C0959587952A95E2F780FF6D -:1024300003C0F701308302C0F701108281E02796C4 -:102440000FB6F894DEBF0FBECDBFCF91DF911F91C5 -:10245000FF90EF900895DF93CF930F92CDB7DEB743 -:102460009BE190931E05BE016F5F7F4F0E94EC11B0 -:1024700080931F058981809320051092210584E0B7 -:1024800090E00E943B010F90CF91DF9108950F9350 -:102490001F93DF93CF93CDB7DEB727970FB6F8948E -:1024A000DEBF0FBECDBF182F062FBE016F5F7F4F5F -:1024B0000E943922882311F484E025C0E12FF0E046 -:1024C000E958FC4F8281823011F086E01CC0E9811E -:1024D000FA81002359F080819F8121E030E002C021 -:1024E000220F331F9A95E2F7822B0BC030812F8188 -:1024F00081E090E002C0880F991F2A95E2F780954D -:102500008323808381E027960FB6F894DEBF0FBE49 -:10251000CDBFCF91DF911F910F9108959AE19093D4 -:102520001E050E94471280931F051092200583E02C -:1025300090E00E943B0108951F93DF93CF93CDB7A6 -:10254000DEB727970FB6F894DEBF0FBECDBF182FAA -:10255000BE016F5F7F4F0E943922882311F484E00F -:1025600015C0E12FF0E0E958FC4F81E08283ED8156 -:10257000FE8130812F8181E090E002C0880F991F99 -:102580002A95E2F780958323808381E027960FB612 -:10259000F894DEBF0FBECDBFCF91DF911F9108959C -:1025A00095E190931E050E949C1280931F05109246 -:1025B000200583E090E00E943B0108951F93DF9384 -:1025C000CF93CDB7DEB727970FB6F894DEBF0FBE17 -:1025D000CDBF182FBE016F5F7F4F0E943922882325 -:1025E00011F484E014C0E12FF0E0E958FC4F82E0E0 -:1025F0008283ED81FE8120813F8181E090E002C0F5 -:10260000880F991F3A95E2F7282B208381E02796BF -:102610000FB6F894DEBF0FBECDBFCF91DF911F91F3 -:10262000089596E190931E050E94DE1280931F0587 -:102630001092200583E090E00E943B0108951F93D3 -:10264000182F0E94DE12813071F4812F61E00E9408 -:102650004712813041F4E12FF0E0E958FC4F83E06C -:10266000828381E001C084E01F91089597E19093F7 -:102670001E050E941F1380931F051092200583E002 -:1026800090E00E943B0108950E94DE12089591E1BE -:1026900090931E050E94DE1280931F051092200564 -:1026A00083E090E00E943B010895FC018081863127 -:1026B000E9F1873178F4823131F1833130F48031BE -:1026C000D1F0813109F050C01AC0843131F1853127 -:1026D00048F51EC08931B9F18A3130F4873151F1A2 -:1026E000883109F041C02AC08B31B1F18B3178F1CA -:1026F0008C31D1F535C082810E94DF11089582812D -:102700000E9447130895828163810E94C511089534 -:10271000828163810E94D2110895828163810E9427 -:10272000B811089582810E94D012089582810E947A -:102730001113089582810E94361308958281638166 -:102740000E948111089582810E948F1108958281D3 -:1027500063810E948E12089582810E942B12089537 -:1027600082810E946C11089580931E0583E08093FE -:102770001F051092200583E090E00E943B01089520 -:10278000E82F8A50883018F024E030E00CC0F0E0E8 -:10279000E958FC4F84E0828380917C00806C8093B8 -:1027A0007C0021E030E0C9010895E82FF0E0E9580D -:1027B000FC4F8281843019F024E030E003C01282A3 -:1027C00021E030E0C901089510927C00823039F098 -:1027D000833049F0813061F022E030E00BC080911D -:1027E0007C00806403C080917C00806C80937C00BE -:1027F00021E030E0C901089593E890937A00909128 -:102800007C00907F982B90937C0080917A0080646C -:1028100080937A0080917A0086FDFCCF80917800C9 -:102820009091790040E050E020E030E080917A0023 -:10283000806480937A0080917A0086FDFCCF80913D -:10284000780090917900280F391F4F5F5F4F443017 -:10285000510561F780917A008F7780937A003695E1 -:10286000279536952795C9010895982F83E280937F -:102870001E0510927C00923039F0933049F091306F -:1028800061F082E090E00BC080917C00806403C026 -:1028900080917C00806C80937C0081E090E080934C -:1028A0001F051092200583E090E00E943B010895EF -:1028B00091E290931E05E82FF0E0E958FC4F8281E9 -:1028C000843019F084E090E003C0128281E090E04F -:1028D00080931F051092200583E090E00E943B0149 -:1028E0000895E82F80E280931E058E2F8A5088304D -:1028F00018F084E090E00CC0F0E0E958FC4F84E070 -:10290000828380917C00806C80937C0081E090E0E9 -:1029100080931F051092200583E090E00E943B0108 -:102920000895CF93DF93982FEB0119821882E82F37 -:10293000F0E0E958FC4F8281843019F026E030E065 -:1029400032C081E1891B0E94FC139983888300D0E7 -:1029500000D000D0EDB7FEB7319686EE92E0ADB76D -:10296000BEB712969C938E9311978EEE92E093834E -:1029700082838BE890E0958384830E940D250F90DD -:102980000F9084EF92E0EDB7FEB792838183888148 -:102990009981948383830E940D2521E030E00F907C -:1029A0000F900F900F90C901DF91CF910895DF93A1 -:1029B000CF9300D0CDB7DEB792E290931E05BE0153 -:1029C0006F5F7F4F0E94911480931F0599818A81C8 -:1029D000809320059093210584E090E00E943B01C4 -:1029E0000F900F90CF91DF910895FC01808181328B -:1029F00071F0823218F48032B1F405C0823259F09D -:102A0000833289F40CC082810E94711408958281FE -:102A10000E945814089582810E94D71408958281DB -:102A20000E943514089580931E0583E080931F054E -:102A30001092200583E090E00E943B010895ECEBAA -:102A4000F0E08081846080838BE0809385038CE05C -:102A50008093860381E090E00895ECEBF0E08081C4 -:102A60008B7F8083109285031092860381E090E033 -:102A700008958093B800E9EBF0E080818C7F80833B -:102A80008081808381E090E008958091B900887F03 -:102A900008958091B90084EA8093BC008091BC00C5 -:102AA00087FFFCCF81E090E0089584E98093BC002B -:102AB0008091BC0084FDFCCF81E090E00895AC01E2 -:102AC00020E030E094E80EC0FA01E20FF31F8081AD -:102AD0008093BB009093BC008091BC0087FFFCCF2B -:102AE0002F5F3F4F261737077CF3089584E88093C4 -:102AF000BC008091BC0087FFFCCF8091BB00089593 -:102B000085E380931E0581E080931F0520E030E07F -:102B100094E80EC09093BC008091BC0087FFFCCF6E -:102B20008091BB00F901E05EFA4F80832F5F3F4F39 -:102B3000261737077CF3FB01E05EFA4F1082CB01CA -:102B400003960E943B010895AC0120E030E094E838 -:102B50000EC0FB01E20FF31F80818093BB009093B6 -:102B6000BC008091BC0087FFFCCF2F5F3F4F241734 -:102B700035077CF381E080931F051092200583E0E8 -:102B800090E00E943B01089584E98093BC0080910D -:102B9000BC0084FDFCCF81E080931F0510922005CE -:102BA00083E090E00E943B0108958091B90084EA9F -:102BB0008093BC008091BC0087FFFCCF81E08093B4 -:102BC0001F051092200583E090E00E943B010895CC -:102BD0008093B800E9EBF0E080818C7F8083808176 -:102BE000808381E080931F051092200583E090E0B0 -:102BF0000E943B010895ECEBF0E080818B7F8083A5 -:102C0000109285031092860381E080931F05109235 -:102C1000200583E090E00E943B010895ECEBF0E09A -:102C20008081846080838BE0809385038CE0809337 -:102C3000860381E080931F051092200583E090E0D9 -:102C40000E943B010895FC01808180931E058081D4 -:102C50008433D1F0853338F4813379F0823381F0D5 -:102C6000803331F507C08633E9F08633A0F087332F -:102C7000F9F41BC00E940E1608950E94FB150895DA -:102C800082810E94E8150895828190E03396BF0109 -:102C90000E94A41508956381828190E070E00E94F3 -:102CA000801508950E94D51508950E94C4150895B1 -:102CB00083E080931F051092200583E090E00E943E -:102CC0003B010895782F613041F0613040F062306F -:102CD00041F0633009F059C007C060E006C060E011 -:102CE00001C061E050E002C061E051E04330B9F062 -:102CF000443028F4413059F0423078F40AC045306D -:102D000099F0453070F0463009F03FC010C021E026 -:102D10000CC021E041E030E00DC021E009C020E01E -:102D2000F9CF20E041E005C020E040E0F4CF20E012 -:102D300040E031E0239884B1866084B985B1817F19 -:102D400085B980E090E0772311F081E090E075E0B4 -:102D5000880F991F7A95E1F78065660F660F660FF9 -:102D6000682B550F550F562B542B220F252B2CBD9E -:102D70003DBD88E080937E038AE080937F0389E0F5 -:102D80008093800321E030E002C022E030E0C901FE -:102D900008951CBC1DBC10927E0310927F031092FC -:102DA000800381E090E00895AC0120E008C0E60FC8 -:102DB000F71F80818EBD0DB407FEFDCF2F5FE22F80 -:102DC000F0E0E417F5079CF381E090E00895DC0162 -:102DD00020E030E040E050E014C01EBC08C083E0BA -:102DE000493E580714F088E008954F5F5F4F0DB4D7 -:102DF00007FEF5CF8EB5FB01E20FF31F80832F5F37 -:102E00003F4F2A173B074CF381E00895CF93DF93A0 -:102E1000EC0120E030E0A0E0B0E018C0FE01E20FDD -:102E2000F31F80818EBD08C0119683E0A93EB807CC -:102E30001CF028E030E00FC00DB407FEF5CF8EB5D2 -:102E4000FB01E20FF31F80832F5F3F4F24173507ED -:102E50002CF321E030E0C901DF91CF910895DC012E -:102E600083E480931E0540E050E020E030E019C08C -:102E7000FD01E20FF31F80818EBD09C04F5F5F4FE0 -:102E800083E0493E58071CF028E030E00FC00DB445 -:102E900007FEF4CF8EB5F901E25EFA4F82832F5F11 -:102EA0003F4F2617370724F321E030E020931F051A -:102EB000FB01E05EFA4F1082CB0103960E943B01BA -:102EC0000895BC0184E480931E0540E050E020E0BA -:102ED00030E014C01EBC08C083E0493E580714F01F -:102EE00088E010C04F5F5F4F0DB407FEF5CF8EB581 -:102EF000F901E25EFA4F82832F5F3F4F26173707B3 -:102F00004CF381E080931F05FB01E05EFA4F1082D5 -:102F1000CB0103960E943B01089593E490931E0514 -:102F2000282F30E090E008C0E60FF71F80818EBDAB -:102F30000DB407FEFDCF9F5FE92FF0E0E217F30726 -:102F40009CF381E080931F051092200583E090E0C0 -:102F50000E943B01089581E480931E051CBC1DBCAA -:102F600010927E0310927F031092800381E0809381 -:102F70001F051092200583E090E00E943B01089518 -:102F800090E490931E050E94621680931F05109294 -:102F9000200583E090E00E943B010895CF93DF93EA -:102FA000EC0188818334A9F0843428F4803441F022 -:102FB000813401F50BC0843491F08534D9F413C009 -:102FC0008A816B814C810E94C0171FC00E94AB1781 -:102FD0001CC08A812396BE010E948D1716C08A816B -:102FE00090E00E9461176A81CE01039670E00E9412 -:102FF0002F170BC080931E0583E080931F0510924E -:10300000200583E090E00E943B01DF91CF9108957D -:10301000209A219A229A2398249A259A2C982D98BE -:1030200081E08093890382E080938A0380938B03FD -:1030300080938C0381E090E00895109289031092B0 -:103040008A0310928B0310928C0381E090E0089524 -:10305000289829982A9880E29EE40197F1F7289A07 -:103060008AE0982F9A95F1F72A9A299A8A95F1F78A -:103070000895282F299887FD02C02A9801C02A9A0E -:103080008AE0982F9A95F1F7299A8A95F1F729986D -:1030900026FF02C02A9A01C02A988AE0982F9A95A2 -:1030A000F1F7299A8A95F1F70895880F20E03AE020 -:1030B000299887FF02C02A9A01C02A98932F9A95CF -:1030C000F1F7299A932F9A95F1F72F5F273011F096 -:1030D000880FEECF089520E03AE0299887FF02C0DC -:1030E0002A9A01C02A98932F9A95F1F7299A932F3B -:1030F0009A95F1F72F5F283011F0880FEECF0895E1 -:1031000029982A988AE0982F9A95F1F7299A982F6A -:103110009A95F1F729982898982F9A95F1F7299A76 -:10312000982F9A95F1F729988A95F1F7289A80E0D7 -:103130000895299828982A982B9A08950E9428186B -:1031400080E30E94391880E60E94551808950E9475 -:10315000281880E00E94391880E00E9455182998AC -:1031600028982A982B9A08950F931F93182F062FAB -:103170000E94281880E40E943918812F0E94551857 -:10318000802F0E946B1881E01F910F9108951F936B -:10319000182F0E94281880EC0E943918812F0E9455 -:1031A00055180E9480181F91089529988AE08A95E1 -:1031B000F1F72A9820E080E04AE0880F299A942FBE -:1031C0009A95F1F729981B998F5F3AE0942F9A9579 -:1031D000F1F72F5F283089F72898299A932F9A952D -:1031E000F1F7289A2998932F9A95F1F708951F934C -:1031F000182F0E94281880E80E943918812F0E94F9 -:1032000055180E94D5181F910895DF92EF92FF92F2 -:103210000F931F93CF93DF93D82E7B018A01C0E0D9 -:10322000D0E009C08D2D8C0F0E94F718F801EC0F2B -:10323000FD1F80832196CE15DF05A0F381E090E08D -:10324000DF91CF911F910F91FF90EF90DF90089544 -:103250000F931F93182F062F0E949E18812F602F07 -:103260000E94B41881E01F910F910895DF92EF92B0 -:10327000FF920F931F93CF93DF93D82E7B018A0188 -:10328000C0E0D0E009C0F801EC0FFD1F8D2D8C0FC0 -:1032900060810E9428192196CE15DF05A0F381E0F8 -:1032A00090E0DF91CF911F910F91FF90EF90DF9011 -:1032B000089594E090931E050E94361980931F058F -:1032C0001092200583E090E00E943B010895EF9268 -:1032D000FF920F931F938B019EE1E92E95E0F92E4B -:1032E00093E090931E05A7014E5F5F4F0E94051962 -:1032F00080931F050E5F1F4FE00EF11EF701108235 -:10330000C80101960E943B011F910F91FF90EF9021 -:10331000089582E080931E051092890310928A031B -:1033200010928B0310928C0381E080931F05109202 -:10333000200583E090E00E943B01089581E08093A6 -:103340001E050E94081880931F051092200583E037 -:1033500090E00E943B010895FC018381823069F076 -:10336000833018F48130E1F405C0833049F08430B3 -:10337000B9F40EC00E949E1908950E9489190895FB -:103380006581848170E03696AF010E9467190895C7 -:103390006581848170E03696AF010E9459190895C5 -:1033A000808180931E0583E080931F051092200585 -:1033B00083E090E00E943B0108951F920F920FB6A8 -:1033C0000F9211240F900FBE0F901F9018959C0123 -:1033D0000897029718F024E030E025C0F901E95879 -:1033E000FC4F8DE0828328303105A1F02930310572 -:1033F00019F027E030E017C0259A81E090E0909323 -:1034000089008093880081E88093800089E0809320 -:10341000810007C0249A81E08093B30089E68093FD -:10342000B00021E030E0C90108959C01FC01E95899 -:10343000FC4F82818D3019F026E030E054C02830F6 -:10344000310531F12930310519F027E030E04BC06A -:1034500063307105A9F0643071053CF46130710589 -:1034600059F062307105E9F509C06430710551F019 -:1034700065307105B1F508C081E007C082E005C084 -:1034800083E003C084E001C085E08093810029C00F -:1034900064307105E9F06530710554F462307105EE -:1034A00099F06330710594F461307105D1F40AC06C -:1034B0006630710589F06630710564F0673071051A -:1034C00081F40CC089E60BC08AE609C08BE607C010 -:1034D0008CE605C08DE603C08EE601C08FE68093C2 -:1034E000B00021E030E0C90108959C01FC01E958D9 -:1034F000FC4F82818D3019F026E030E012C0283078 -:10350000310559F02930310519F027E030E009C0C4 -:10351000709389006093880002C06093B30021E03B -:1035200030E0C90108959C0183E580931E05F901EF -:10353000E958FC4F82818D3019F086E090E012C08E -:103540002830310559F02930310519F087E090E035 -:1035500009C0709389006093880002C06093B30033 -:1035600081E090E080931F051092200583E090E0B9 -:103570000E943B01089522E520931E050E94151A22 -:1035800080931F051092200583E090E00E943B018C -:10359000089520E520931E050E94E71980931F05DA -:1035A0001092200583E090E00E943B010895FC0109 -:1035B000E958FC4F12828830910531F0893091052D -:1035C00031F026E030E00BC01092B00004C0109241 -:1035D0008100109280000E94DE1221E030E0C901DB -:1035E000089521E520931E050E94D71A80931F0598 -:1035F0001092200583E090E00E943B010895FC01B9 -:103600008081813579F0823518F48035F1F405C078 -:10361000823569F08335C9F411C0828190E00E943F -:10362000C91A0895828190E00E94F11A0895638179 -:10363000828190E070E00E94BB1A089563818281CC -:1036400090E070E00E94931A089580931E0583E035 -:1036500080931F051092200583E090E00E943B01BB -:103660000895DF93CF93CDB7DEB7CF91DF91089563 -:103670008A3310F4805301C087556A3310F46053C5 -:1036800001C067556F708295807F862B08951F93C8 -:10369000682F62956F70182F1F706A3010F4605D8C -:1036A00001C0695A80E00E947A061A3010F4105D59 -:1036B00001C0195A80E0612F0E947A061F91089577 -:1036C0001F93182F8A3021F480E06DE00E947A0663 -:1036D00080E0612F0E947A0681E090E01F910895BA -:1036E00080E00E94AF0508950F9380E00E94950549 -:1036F00080E069E140E020E000E00E94D10580E048 -:1037000061E00E94E30580E068E00E94020680E03C -:103710006EE40E942E068EEF92E09093B5068093A1 -:10372000B4060F9108958230A1F0833028F48823E5 -:1037300061F0813039F40BC0843079F0843058F076 -:10374000853079F020E030E016C082E107C08EE0DD -:1037500005C088E003C086E001C082E08093E200FB -:1037600002C01092E2008CE08093E30087E3809334 -:10377000E40021E030E0C9010895813091F081300A -:1037800038F08230B9F0833019F120E030E031C0F8 -:103790008091DB008F778093DB008091DB008F7D51 -:1037A00011C08091DB0080688093DB008091DB009A -:1037B0008F7D16C08091DB0080688093DB00809154 -:1037C000DB0080628093DB008091DB008F7E0DC088 -:1037D0008091DB0080688093DB008091DB00806259 -:1037E0008093DB008091DB0080618093DB0021E02F -:1037F00030E0C90108951F93282F162F8FE0809382 -:103800008A0380938B031092AD06442319F081E064 -:103810008093AD061092A1061092A2061092A30604 -:103820001092A406E5EAF6E0119286E0ED3AF80778 -:10383000D9F790E0892F8295807F8093ED001092D8 -:10384000EE001092EF009F5F9F30A1F7822F0E9441 -:10385000931B892B89F0812F0E94BD1B892B61F05E -:103860008091D80082608093D8008091D90082FF37 -:10387000FCCF21E030E002C022E030E0C9011F911E -:1038800008958295807F8093ED0008959B01AC019F -:103890008091AD06882381F4822F8295880F807EE7 -:1038A0008093F60063E056954795379527956A957E -:1038B000D1F72093F7000895DA01C90153E0880F8A -:1038C000991FAA1FBB1F5A95D1F787608093F400F8 -:1038D000292F3A2F4B2F55272093F5009D01442780 -:1038E00055272093F6008B2F9927AA27BB27809373 -:1038F000F7000895EF92FF920F931F938091AD060A -:103900008823C1F42091F20022952695277030E09B -:1039100040E050E08091F30090E003E0880F991FB1 -:103920000A95E1F77C0100E010E0E22AF32A042B7B -:10393000152B33C02091F3008091F200E090F1004C -:103940006091F00090E0A0E0B0E0DC0199278827CA -:1039500030E040E050E0522F442733272227822BCB -:10396000932BA42BB52BFF2400E010E0102F0F2D7C -:10397000FE2CEE248E299F29A02BB12BE62EFF24AE -:1039800000E010E0E82AF92A0A2B1B2B73E01695B9 -:103990000795F794E7947A95D1F7B701C8011F917D -:1039A0000F91FF90EF9008959B01AC018091AD06BF -:1039B000882371F4822F8295880F807E8093F20095 -:1039C000E3E05695479537952795EA95D1F725C0B9 -:1039D00073E0220F331F441F551F7A95D1F7809152 -:1039E000F00090E0A0E0B0E087709070A070B07040 -:1039F000282B392B4A2B5B2B2093F000BB27A52FBC -:103A0000942F832F8093F100CA01AA27BB278093AC -:103A1000F200252F3327442755272093F3000895DC -:103A2000982F8091AD06882321F08091EF0080616E -:103A300003C08091EF008F7E8093EF00923091F170 -:103A4000933028F4992359F0913031F422C0933007 -:103A5000B9F1943009F447C020E030E05AC08091B9 -:103A6000EF008F7B8093EF008091EF008F77809342 -:103A7000EF008091EF008F7D8093EF008091F00048 -:103A80008B7F8093F0008091F4008B7F8093F40013 -:103A90003EC08091EF008E7F8093EF008091EF0019 -:103AA00081601BC08091EF008F778093EF00809141 -:103AB000EF0080648093EF008091EF008F7D20C045 -:103AC0008091EF008F7B8093EF008091EF00806802 -:103AD0008093EF008091EF008F7D8093EF008091C5 -:103AE000F0008B7F12C08091EF008F7B8093EF00FE -:103AF0008091EF0080688093EF008091EF008062FA -:103B00008093EF008091F00084608093F00021E0CA -:103B100030E0C9010895FF920F931F93162F042FD1 -:103B2000F52E8295807F8093ED0084E00E94101D29 -:103B3000193008F018E08091EF00807F812B80938E -:103B4000EF00202F3F2DC901FC0190E004C08191BE -:103B50008093FA009F5F9117D0F31F910F91FF9010 -:103B600008959F92AF92BF92CF92DF92EF92FF9211 -:103B70000F931F93962E59016A01982F9295907F6B -:103B80009093ED00E82FF0E0883080F42091DE0083 -:103B9000E45FFC4F81E090E0008002C0880F991F35 -:103BA0000A94E2F7282B2093DE000FC02091DF005B -:103BB000E45FFC4F81E090E0008002C0880F991F15 -:103BC0000A94E2F7282B2093DF00C801B7010E9476 -:103BD000461CC601B5010E94D41C892D0E94101DEF -:103BE000892B19F021E030E002C022E030E0C90169 -:103BF0001F910F91FF90EF90DF90CF90BF90AF900B -:103C00009F9008958091EF0087FD04C08091EF00A0 -:103C100086FF3CC08091EF0087FD0AC08091EF00D5 -:103C200086FF06C08091F00082FD02C081E0089509 -:103C30008091EF0087FD0AC08091EF0086FF06C0EB -:103C40008091F00082FF02C082E008958091EF0031 -:103C500087FF0AC08091EF0086FD06C08091F000CA -:103C600082FD02C083E008958091EF0087FF0EC0BF -:103C70008091EF0086FD0AC08091EF0085FF06C0AD -:103C80008091F00082FF02C084E0089580E00895F2 -:103C9000EF92FF920F931F93162F042FF52E82950C -:103CA000807F8093ED000E94021EE82E193008F0FC -:103CB00018E08091EF00807F812B8093EF00202F10 -:103CC0003F2DC901FC0190E004C081918093FA006E -:103CD0009F5F9117D0F381E00E94101D8091EE004C -:103CE00086FFFCCF8091EE008F7B8093EE008E2DBF -:103CF0000E94101D81E090E01F910F91FF90EF90C6 -:103D00000895482F893008F048E08091EF00807FC7 -:103D1000842B8093EF00FB0190E004C0819180939D -:103D2000FA009F5F9417D0F30895AC0120E030E0D3 -:103D30008091FA00FA01E20FF31F80832F5F3F4F5B -:103D400028303105A9F70895E82FF0E0883080F495 -:103D50002091DE00E45FFC4F81E090E0008002C033 -:103D6000880F991F0A94E2F7282B2093DE0008950C -:103D70002091DF00E45FFC4F81E090E0008002C012 -:103D8000880F991F0A94E2F7282B2093DF000895EB -:103D9000AEEDB0E02C91ECE0F3E0E80FF11D81E036 -:103DA00090E0008002C0880F991F0A94E2F7809586 -:103DB00082238C9308953091E0002091E100922FAE -:103DC00080E0232F30E0282B392B2115310521F4F9 -:103DD00007C0369527958F5F20FFFBCF8F3008F007 -:103DE0008FEF0895982F9295907F9093ED00AEED10 -:103DF000B0E02C91ECE0F3E0E80FF11D81E090E001 -:103E0000008002C0880F991F0A94E2F780958223F0 -:103E10008C9380E00E94101D81E090E008951F9334 -:103E200010928A0310928B0310E0812F0E94F21EE1 -:103E30001F5F1F30D1F78091D8008D7F8093D8000D -:103E40008091D90082FDFCCF81E090E01F91089520 -:103E50001F938295807F8093ED000E94021E182F91 -:103E600082E00E94101D8091EE0086FFFCCF8091C1 -:103E7000EE008F7B8093EE00812F0E94101D81E069 -:103E800090E01F9108951F920F920FB60F920BB6FC -:103E90000F9211241F932F933F934F935F936F9330 -:103EA0007F938F939F93AF93BF93EF93FF93109163 -:103EB000ED003091E0002091E100922F80E0232F6F -:103EC00030E0282B392B21153105A9F103C0369597 -:103ED00027958F5F20FFFBCF8F3068F58F3F59F11B -:103EE0008295807F8093ED000E947A1C6093A106EA -:103EF0007093A2068093A3069093A406E5EAF6E0E9 -:103F00008091FA00819386E0ED3AF807C9F70E94A4 -:103F10007A1C6093A1067093A2068093A3069093E7 -:103F2000A4068091EE008F7D8093EE0083E00E94D6 -:103F3000101D1093ED00FF91EF91BF91AF919F91F4 -:103F40008F917F916F915F914F913F912F911F9131 -:103F50000F900BBE0F900FBE0F901F90189586E725 -:103F600080931E0581E080931F058091A1069091AA -:103F7000A206A091A306B091A40680932005292F44 -:103F80003A2F4B2F5527209321059D014427552774 -:103F9000209322058B2F9927AA27BB2780932305DF -:103FA0001092A1061092A2061092A3061092A406E7 -:103FB000A5EAB6E026E030E08C91F901E25EFA4F26 -:103FC00080831D922F5F3F4F86E0AD3AB807A1F77F -:103FD00010922C058FE090E00E943B01089595E738 -:103FE00090931E050E94281F80931F0510922005A4 -:103FF00083E090E00E943B01089594E790931E05B2 -:104000000E94F21E80931F051092200583E090E02D -:104010000E943B01089592E790931E050E94481E5E -:1040200080931F051092200583E090E00E943B01E1 -:104030000895EF92FF920F931F9393E790931E05BD -:104040000E94B11D80931F051092200583E090E02F -:104050000E943B011F910F91FF90EF9008950E94E5 -:104060008B1D87E780931E0581E080931F051092CA -:10407000200583E090E00E943B01089581E7809352 -:104080001E050E940F1F80931F051092200583E0DC -:1040900090E00E943B010895462F90E790931E0503 -:1040A00062E00E94FB1B80931F051092200583E0B5 -:1040B00090E00E943B010895EF92FF920F931F93AF -:1040C000FC018081833701F1843748F48137C9F0DE -:1040D000823708F06BC0803709F07FC00DC085378C -:1040E00009F46BC0853708F45DC0863709F469C0F0 -:1040F000873709F072C06AC0828163810E944C20B8 -:1041000077C00E943E2074C00000258130E040E06E -:1041100050E0542F432F322F2227868190E0A0E0D9 -:10412000B0E0DC0199278827280F391F4A1F5B1F41 -:104130008481280F311D411D511D878190E0A0E031 -:10414000B0E0B82FAA2799278827280F391F4A1FC0 -:104150005B1FE184FF2400E010E0102F0F2DFE2CE8 -:10416000EE24828590E0A0E0B0E0DC01992788276A -:10417000E80EF91E0A1F1B1F8085E80EF11C011DA9 -:10418000111D838590E0A0E0B0E0B82FAA27992701 -:104190008827E80EF91E0A1F1B1F828163810E9477 -:1041A000192026C082810E94FD1F22C08281638166 -:1041B0003496AF010E940B201BC082810E94EF1F2A -:1041C00017C0828190E00E94AF1F12C0828163817C -:1041D0003496AF010E942F200BC080931E0583E010 -:1041E00080931F051092200583E090E00E943B0120 -:1041F0001F910F91FF90EF900895DC0180E1A030B6 -:10420000B80710F082E00895F999FECF9D010BC028 -:10421000F999FECF32BD21BDF89A80B5E60FF71FA0 -:1042200080832F5F3F4F822F8A1BE82FF0E0E41737 -:10423000F50770F381E00895DC0180E1A030B80754 -:1042400010F082E00895F999FECF9D0110C0E60FAD -:10425000F71FE081F999FECFC901019632BD21BD5A -:10426000E0BD0FB6F894FA9AF99A0FBE9C01822F1E -:104270008A1BE82FF0E0E417F50748F3C9010E9414 -:10428000FD2081E008950F931F938B0121E8209377 -:104290001E050E941C2180931F051092200500D04E -:1042A00000D000D0EDB7FEB731968BE193E0ADB70B -:1042B000BEB712969C938E93119783E293E09383FB -:1042C00082838AE590E0958384830E940D250F9078 -:1042D0000F908CE293E0EDB7FEB792838183148355 -:1042E00003830E940D250F900F900F900F9083E095 -:1042F00090E00E943B011F910F910895CF92DF92B1 -:10430000EF92FF920F931F937B010EE115E020E8DF -:1043100020931E0522E0C22ED12CC00ED11EB60164 -:10432000A7010E94FD2080931F0582E090E0E80E27 -:10433000F91E0E0D1F1DD8011C9200D000D000D018 -:10434000EDB7FEB731968BE193E0ADB7BEB71296ED -:104350009C938E93119783E293E09383828385E30A -:1043600090E0958384830E940D250F900F9089E340 -:1043700093E0EDB7FEB792838183D482C3820E941B -:104380000D250F900F900F900F90C70101960E947E -:104390003B011F910F91FF90EF90DF90CF90089518 -:1043A000EF92FF920F931F93CF93DF93EC019B81CA -:1043B00080E02A817C01E20EF11C9D8180E02C814D -:1043C0008C01020F111D00D000D000D0EDB7FEB758 -:1043D00031968BE193E0ADB7BEB712969C938E9366 -:1043E000119783E293E0938382838AE190E095833F -:1043F00084830E940D25EDB7FEB7319683E493E0E8 -:10440000ADB7BEB712969C938E9311971383028318 -:10441000F582E4820E940D2588812DB73EB72A5F80 -:104420003F4F0FB6F8943EBF0FBE2DBF803819F036 -:10443000813869F405C0C701B8010E947E2112C00D -:104440002696C701BE01A8010E9443210BC080939C -:104450001E0583E080931F051092200583E090E005 -:104460000E943B01DF91CF911F910F91FF90EF9040 -:104470000895CF93DF93EB0190E003978632910587 -:1044800048F4865B9F4FFC01EE0FFF1F0590F491EF -:10449000E02D099480E0BCC188E290E09983888394 -:1044A00086E290E09B838A8387E290E0B0C088E256 -:1044B00090E09983888386E290E09B838A8387E2F9 -:1044C00090E058C188E290E09983888386E290E08A -:1044D0009B838A8387E290E076C088E290E09983AC -:1044E000888386E290E09B838A8387E290E05DC0C8 -:1044F00088E290E09983888386E290E09B838A83B8 -:1045000087E290E044C088E290E09983888386E265 -:1045100090E09B838A8387E290E02BC088E290E062 -:104520009983888386E290E09B838A8387E290E088 -:104530005CC181E390E0998388838FE290E09B8364 -:104540008A8380E390E05FC181E390E09983888370 -:104550008FE290E09B838A8380E390E046C181E311 -:1045600090E0998388838FE290E09B838A8380E345 -:1045700090E09D838C8385E049C181E390E099833D -:1045800088838FE290E09B838A8380E390E09D8321 -:104590008C8384E03BC181E390E0998388838FE240 -:1045A00090E09B838A8380E390E09D838C8383E00B -:1045B0002DC181E390E0998388838FE290E09B8313 -:1045C0008A8380E390E09D838C8382E01FC181E336 -:1045D00090E0998388838FE290E09B838A8380E3D5 -:1045E00090E0C8C081E390E0998388838FE290E0F7 -:1045F0009B838A8380E390E00AC08EE290E09983F7 -:1046000088838CE290E09B838A838DE290E09D8397 -:104610008C831E82FCC08EE290E0998388838CE2BA -:1046200090E09B838A838DE290E0A4C08EE290E0CC -:10463000998388838CE290E09B838A838DE290E06B -:10464000C2CF8EE290E0998388838CE290E09B83D6 -:104650008A838DE290E0A9CF8EE290E099838883EF -:104660008CE290E09B838A838DE290E082CF8EE2A1 -:1046700090E0998388838CE290E09B838A838DE22B -:1046800090E0B3C08EE290E0998388838CE290E062 -:104690009B838A838DE290E0B6C085E290E09983A7 -:1046A000888383E290E09B838A8384E290E0AFCFAB -:1046B00085E290E09983888383E290E09B838A83FC -:1046C00084E290E057C085E290E09983888383E29A -:1046D00090E09B838A8384E290E075CF85E290E04E -:1046E0009983888383E290E09B838A8384E290E0CD -:1046F0005CCF85E290E09983888383E290E09B839E -:104700008A8384E290E043CF85E290E099838883B6 -:1047100083E290E09B838A8384E290E02ACF85E263 -:1047200090E09983888383E290E09B838A8384E28C -:1047300090E05BC085E290E09983888383E290E01B -:104740009B838A8384E290E05EC08BE290E0998351 -:10475000888389E290E09B838A838AE290E057CF46 -:104760008BE290E09983888389E290E09B838A833F -:104770008AE290E09D838C8381E08E8349C08BE246 -:1047800090E09983888389E290E09B838A838AE220 -:1047900090E019CF8BE290E09983888389E290E0E2 -:1047A0009B838A838AE290E000CF8BE290E099833A -:1047B000888389E290E09B838A838AE290E0E7CE57 -:1047C0008BE290E09983888389E290E09B838A83DF -:1047D0008AE290E0CECE8BE290E09983888389E2F2 -:1047E00090E09B838A838AE290E09D838C8386E0BD -:1047F0000DC08BE290E09983888389E290E09B83EF -:104800008A838AE290E09D838C8387E08E8381E0B7 -:10481000DF91CF910895CF93DF93BC018230910552 -:1048200010F462E070E0A091B006B091B106ED0125 -:10483000E0E0F0E040E050E021C0888199818617F7 -:10484000970769F48A819B81309719F0938382835B -:1048500004C09093B1068093B006FE0134C068177F -:10486000790738F44115510519F08417950708F4B4 -:10487000AC01FE018A819B819C01E9012097E9F648 -:1048800041155105A9F1CA01861B970B049708F43D -:10489000BA01E0E0F0E02AC08D919C911197841755 -:1048A0009507F9F46417750781F412968D919C9120 -:1048B0001397309719F09383828304C09093B106C5 -:1048C0008093B006FD0132964CC0CA01861B970B3F -:1048D000FD01E80FF91F6193719302978D939C93EB -:1048E00040C0FD01828193819C01D9011097A1F6FE -:1048F0008091AE069091AF06892B41F480916A03B6 -:1049000090916B039093AF068093AE0640916C0339 -:1049100050916D034115510541F44DB75EB780913B -:10492000680390916903481B590B2091AE063091A2 -:10493000AF06CA01821B930B8617970780F0AB0165 -:104940004E5F5F4F8417950750F0420F531F5093EF -:10495000AF064093AE06F9016193719302C0E0E0A7 -:10496000F0E0CF01DF91CF910895CF93DF930097CF -:1049700009F450C0EC0122971B821A82A091B00664 -:10498000B091B106109709F140E050E0AC17BD07B7 -:1049900008F1BB83AA83FE0121913191E20FF31F3D -:1049A000AE17BF0779F48D919C911197280F391F8D -:1049B0002E5F3F4F3983288312968D919C911397D8 -:1049C0009B838A834115510571F4D093B106C0933E -:1049D000B00620C012968D919C911397AD0100975F -:1049E00011F0DC01D3CFFA01D383C283219131913D -:1049F000E20FF31FCE17DF0769F488819981280F32 -:104A0000391F2E5F3F4FFA01318320838A819B81BA -:104A100093838283DF91CF910895A0E0B0E0E3E13A -:104A2000F5E20C940B28FE0135966191719180910D -:104A3000B4069091B506AF010E9457252096E2E09A -:104A40000C9427280F931F93CF93DF938C01E09151 -:104A5000B406F091B506838181FF21C0C0E0D0E0AB -:104A60000DC0E091B406F091B50620853185BF01F7 -:104A7000F9010995892B11F0CFEFDFEFF801819152 -:104A80008F01882371F7E091B406F091B506208577 -:104A900031858AE0BF01F9010995892B11F0CFEF2B -:104AA000DFEFCE01DF91CF911F910F910895ABE021 -:104AB000B0E0EDE5F5E20C94FB273C012B015A0137 -:104AC000FC0117821682838181FD03C06FEF7FEFA7 -:104AD000C6C19AE0892E1E010894211C311CF301E5 -:104AE0002381F20123FD859123FF81912F018823EA -:104AF00009F4B2C1853239F423FD859123FF8191F8 -:104B00002F01853229F490E0B3010E944A27E7CFB4 -:104B1000982FFF24EE249924FFE1FF15D0F09B325B -:104B200069F09C3228F4903259F0933291F40EC01F -:104B30009D3249F0903369F441E024C052E0F52AF7 -:104B400084E0F82A28C098E0F92A25C0E0E1FE2A8E -:104B500022C0F7FC29C0892F80538A3070F4F6FEFA -:104B600005C0989C902C1124980E15C0E89CE02C50 -:104B70001124E80EF0E2FF2A0EC09E3229F4F6FC62 -:104B80006BC140E4F42A07C09C3619F450E8F52ABA -:104B900002C0983649F4F20123FD959123FF9191CB -:104BA0002F01992309F0B8CF892F8554833018F04D -:104BB0008052833038F444E050E0A40EB51E5FE329 -:104BC00059830FC0933631F0933779F0933509F05C -:104BD00056C020C0F5018081898342E050E0A40ED8 -:104BE000B51E610101E010E012C0F501C080D18066 -:104BF000F6FC03C06FEF7FEF02C0692D70E042E06A -:104C000050E0A40EB51EC6010E943F278C015FE74D -:104C1000F52214C0F501C080D180F6FC03C06FEF0F -:104C20007FEF02C0692D70E042E050E0A40EB51E97 -:104C3000C6010E9434278C0150E8F52AF3FE07C014 -:104C40001AC080E290E0B3010E944A27EA948E2DB8 -:104C500090E008171907A8F30EC0F601F7FC85913C -:104C6000F7FE81916F0190E0B3010E944A27E110A5 -:104C7000EA94015010400115110579F7EAC0943605 -:104C800011F0993669F5F7FE08C0F50120813181F0 -:104C90004281538184E090E00AC0F50180819181D6 -:104CA0009C01442737FD4095542F82E090E0A80EE8 -:104CB000B91E9FE6F92257FF09C0509540953095DF -:104CC00021953F4F4F4F5F4FE0E8FE2ACA01B901DF -:104CD000A1012AE030E00E947627D82ED21840C0E9 -:104CE000953729F41F2D1F7E2AE030E01DC01F2DAF -:104CF000197F9F3661F0903720F4983509F0ACC0E9 -:104D00000FC0903739F0983709F0A6C004C028E0EA -:104D100030E00AC0106114FD146020E130E004C0EE -:104D200014FD166020E132E017FF08C0F501608134 -:104D300071818281938144E050E008C0F501808157 -:104D40009181BC0180E090E042E050E0A40EB51EED -:104D5000A1010E947627D82ED2188FE7F82EF122D3 -:104D6000F6FE0BC05EEFF522D91438F4F4FE07C04E -:104D7000F2FC05C08FEEF82202C01D2D01C0192DD6 -:104D8000F4FE0DC0FE01ED0DF11D8081803319F49C -:104D900099EEF92208C01F5FF2FE05C003C08F2DF7 -:104DA000867809F01F5F0F2DF3FC14C0F0FE0FC0D2 -:104DB0001E1510F09D2C0BC09D2C9E0C911A1E2DC3 -:104DC00006C080E290E0B3010E944A271F5F1E15D3 -:104DD000C0F304C01E1510F4E11A01C0EE2404FF54 -:104DE0000FC080E390E0B3010E944A2702FF1DC07C -:104DF00001FD03C088E790E00EC088E590E00BC09D -:104E0000802F867891F001FF02C08BE201C080E222 -:104E1000F7FC8DE290E0B3010E944A2706C080E3D0 -:104E200090E0B3010E944A279A94D914C0F3DA940F -:104E3000F101ED0DF11D808190E0B3010E944A2740 -:104E4000DD20A9F706C080E290E0B3010E944A2766 -:104E5000EA94EE20C1F743CEF30166817781CB015E -:104E60002B96E2E10C941728FC01059061507040EC -:104E70000110D8F7809590958E0F9F1F0895FC0123 -:104E80006150704001900110D8F7809590958E0F79 -:104E90009F1F08950F931F93CF93DF938C01EB0116 -:104EA0008B8181FF1BC082FF0DC02E813F818C81D1 -:104EB0009D812817390764F4E881F9810193F9830A -:104EC000E88306C0E885F985802F0995892B31F4A0 -:104ED0008E819F8101969F838E8302C00FEF1FEF0B -:104EE000C801DF91CF911F910F910895FA01AA2770 -:104EF000283051F1203181F1E8946F936E7F6E5F1D -:104F00007F4F8F4F9F4FAF4FB1E03ED0B4E03CD0CA -:104F1000670F781F891F9A1FA11D680F791F8A1FAD -:104F2000911DA11D6A0F711D811D911DA11D20D014 -:104F300009F468943F912AE0269F11243019305DCE -:104F40003193DEF6CF010895462F4770405D4193BF -:104F5000B3E00FD0C9F7F6CF462F4F70405D4A330C -:104F600018F0495D31FD4052419302D0A9F7EACFD4 -:104F7000B4E0A6959795879577956795BA95C9F703 -:104F800000976105710508959B01AC010A2E0694F6 -:104F90005795479537952795BA95C9F7620F731FAF -:104FA000841F951FA01D089597FB092E07260AD080 -:104FB00077FD04D00CD006D000201AF470956195CE -:104FC0007F4F0895F6F7909581959F4F0895AA1BFE -:104FD000BB1B51E107C0AA1FBB1FA617B70710F0E4 -:104FE000A61BB70B881F991F5A95A9F78095909516 -:104FF000BC01CD0108952F923F924F925F926F9224 -:105000007F928F929F92AF92BF92CF92DF92EF9258 -:10501000FF920F931F93CF93DF93CDB7DEB7CA1BD9 -:10502000DB0B0FB6F894DEBF0FBECDBF09942A8804 -:10503000398848885F846E847D848C849B84AA84AC -:10504000B984C884DF80EE80FD800C811B81AA8139 -:10505000B981CE0FD11D0FB6F894DEBF0FBECDBF04 -:08506000ED010895F894FFCF63 -:10506800456D62656464656450726F6A65637473E4 -:10507800004F63746F70757355534220496E7465A1 -:10508800726661636520436F6E766572746572201F -:10509800616E6420492F4F20457874656E73696F7F -:1050A8006E0032303039303731380025732C2564A2 -:1050B8003A20006D61696E2E630066697273742010 -:1050C8007061636B6574206F662061206C6F6E671A -:1050D800206D65737361676520286C656E677468F9 -:1050E8003A202564290A006F63746F707573206C09 -:1050F8006F6E672072756E6E696E67206D6573736B -:10510800616765006F63746F7075732E6C6F6E677F -:105118005F696E646578203C206F63746F70757387 -:105128002E6C6F6E675F6279746573006E6F7420A2 -:105138006C617374207061636B65743A206469668E -:1051480066203E203634006C617374207061636B96 -:105158006574007061727365722C20636865636B97 -:105168003A2025582C20636F6D6D616E643A2025B6 -:10517800580A0063616C6C696E6720696F5F7061C3 -:10518800727365720063616C6C696E672061646339 -:105198005F7061727365720063616C6C696E672021 -:1051A8006932635F7061727365720063616C6C6908 -:1051B8006E67207370695F706172736572006361F6 -:1051C8006C6C696E672070776D5F70617273657261 -:1051D8000063616C6C696E672063616E5F706172F9 -:1051E8007365720063616C6C696E672065657072C7 -:1051F8006F6D5F70617273657200756E6B6E6F773D -:105208006E20636D6400726563656976696E6720F8 -:10521800636F6D6D616E643A20255820286C656E49 -:105228006774683A202575290A00676574206E65D9 -:1052380078740067657420616E64206578656375AD -:1052480074650009040025732C25643A2000616404 -:10525800632E6300576572742025690D0A000000EB -:10526800000200000000601B0000000000010203B3 -:10527800040506070001020304050625732C2564AE -:105288003A2000656570726F6D2E630077726974DD -:1052980074656E3A2025730A00726561643A2025A8 -:1052A800730A00656570726F6D5F70617273657205 -:1052B8003A206C656E6774683A2025752C20616405 -:0E52C80064723A2025750A002000B806000026 +:100000000C94FA000C9417010C9417010C9417012E +:100010000C9417010C9408030C9417010C9417010D +:100020000C9417010C9417010C9417010C941701F0 +:100030000C9475170C9417010C9417010C9417016C +:100040000C9417010C94E1020C9417010C94170105 +:100050000C9417010C9419010C9417010C941701BE +:100060000C9417010C9417010C9417010C941701B0 +:100070000C9417010C9417010C9417010C941701A0 +:100080000C9417010C9417010C9417010C94170190 +:100090000C941701AA0DAC0DAE0DB00DB20DB40D40 +:1000A000B60DB80DBA0DBC0DBE0DC00DC20DC40D00 +:1000B000C60DC80DCA0DCC0DCE0DFC0DFC0DFC0DF2 +:1000C000FC0DFC0DFC0DD00DD20DD40DD60DD80DB0 +:1000D000DA0DDC0DDE0DE00DE20DE40DE60DE80DB0 +:1000E000EA0DEC0DEE0DF00DF20DF60D490E4B0E76 +:1000F0004D0E4F0E510E530E550E570E590E5B0EF0 +:100100005D0E5F0E610E630E650E670E690E6B0E5F +:100110006D0E9B0E9B0E9B0E9B0E9B0E9B0E6F0EF1 +:10012000710E730E750E770E790E7B0E7D0E7F0E9F +:10013000810E830E850E870E890E8B0E8D0E8F0E0F +:10014000910E950E090F0F0F150F1B0F210F270F83 +:100150002D0F330F390F3F0F450F4B0F510F570F17 +:100160005D0F630F690F6F0F750F060F060F060FF8 +:10017000060F060F060F7B0F810F870F8D0F930F52 +:10018000990F9F0FA50FAB0FB10FB70FBD0FC30F87 +:10019000C90FCF0FD50FDB0FE10FE70F37103A1064 +:1001A0003D1040104310461049104C104F10521093 +:1001B000551058105B105E106110641067106A10C3 +:1001C0006D1034103410341034103410341070109A +:1001D0007310761079107C107F10821085108810B3 +:1001E0008B108E109110941097109A109D10A010E3 +:1001F000A310A61011241FBECFEFD0E1DEBFCDBFEC +:1002000011E0A0E0B1E0E2E4F4E300E00BBF02C0E3 +:1002100007900D92A435B107D9F714E0A4E5B1E039 +:1002200001C01D92A93BB107E1F70C9423010C9486 +:1002300000001F920F920FB60F9211240F900FBE65 +:100240000F901F901895CCEFD0E1DEBFCDBF8FEFA0 +:1002500084B985B92F980E94650781E897E10E94CB +:10026000B00785E69CE00E94B50781E090E00E941F +:10027000BA07DE011196EBE4F1E083E001900D9204 +:100280008150E1F7CE0101960E94AF0B80E091E032 +:100290000E944B0C81E191E00E94430C82E491E0CA +:1002A0000E943B0C0E94850B4C0164E670E00E94AA +:1002B000C80760E070E0C4010E94F10A3C0140E020 +:1002C00050E0BC01C4010E94E90720EFA22E21E00A +:1002D000B22ECC24DD2490E4E92EF12C02E021E0C2 +:1002E00030E041E050E0B301C4010E94860A87E794 +:1002F000A82E82E0B82E21E030E041E050E0B301CA +:10030000C4010E94BE0A0E940A071092E1011092E5 +:10031000E0011092E3011092E2010E94790C8FEF4C +:1003200087B98AEA88B90E942C0385ED88B90E94B2 +:100330002C0380E888B9FFCF0F931F93CF93DF93EF +:10034000EC0181349105B0F08091EC019091ED01C8 +:10035000892B81F41092E9011092E801D093EB010E +:10036000C093EA0181E090E09093ED018093EC016D +:10037000C0E4D0E068E08BE20E94500700E010E0AB +:100380000EC0E091E801F091E901E00FF11FEE5C91 +:10039000FC4F608189E20E9450070F5F1F4F0C17CE +:1003A0001D0779F78091E0019091E101019749F4EF +:1003B00067E08BE20E9450071092E1011092E00189 +:1003C0000AC063E08BE20E94500781E090E09093C6 +:1003D000E1018093E001DF91CF911F910F9108958A +:1003E0008091EC019091ED01019771F52091E80168 +:1003F0003091E9018091EA019091EB0128173907CA +:1004000018F52091EA013091EB018091E80190917B +:10041000E901281B390B8091E8019091E901805C8A +:100420009F4F9093E9018093E801213431052CF02E +:1004300080E490E00E949C010895C9010E949C0103 +:100440001092ED011092EC010895FC011092E90167 +:100450001092E8011092ED011092EC0100002F9A29 +:100460002081822F82958F7099278230910511F11A +:10047000833091052CF4009761F0019759F516C06F +:1004800084309105F9F084309105C4F0059711F599 +:100490001DC0263039F48281813039F5CF010E94A8 +:1004A000421723C0CF010E94F30C1FC0CF010E944E +:1004B00084111BC0CF010E94E71217C0CF010E9418 +:1004C0002A1413C0CF010E945C150FC0CF010E94F7 +:1004D00092180BC02093320383E080933303109271 +:1004E000340383E090E00E949C012F980895CF93FD +:1004F000DF93EC018091E2019091E301019751F5C6 +:1005000020E030E0E091E401F091E501E20FF31F1B +:10051000DE01A20FB31F8C91EE50FE4F80832F5F40 +:100520003F4F2034310571F78091E4019091E5014E +:10053000805C9F4F9093E5018093E4012091E4015A +:100540003091E5018091E6019091E7012817390784 +:10055000A8F11FC01092E5011092E40120E030E004 +:10056000E091E401F091E501E20FF31FDE01A20F3B +:10057000B31F8C91EE50FE4F80832F5F3F4F20348E +:10058000310571F73093E5012093E401A981A0348E +:1005900048F41092E3011092E20182EF91E00E9490 +:1005A00025020CC081E090E09093E3018093E2018A +:1005B0008A2F99279093E7018093E601DF91CF91ED +:1005C00008951F920F920FB60F9211242F933F930D +:1005D0004F935F936F937F938F939F93AF93BF934B +:1005E000EF93FF930E94C50C80915D0186BDFF9142 +:1005F000EF91BF91AF919F918F917F916F915F919B +:100600004F913F912F910F900FBE0F901F90189513 +:100610001F920F920FB60F9211242F933F934F9377 +:100620005F936F937F938F939F93AF93BF93EF935A +:10063000FF930E94530CFF91EF91BF91AF919F9157 +:100640008F917F916F915F914F913F912F910F907B +:100650000FBE0F901F90189520E080E49CE9019751 +:10066000F1F72F5F2931C9F70895FF920F931F9378 +:10067000162F042FF22E9C01442737FD4095542F4E +:1006800060E472E48FE090E00E94D0192150304085 +:10069000163061F0173019F0153019F404C0E1E09C +:1006A00003C0E1E004C0E0E070E002C0E0E071E01F +:1006B000053439F00F3419F451E041E004C050E042 +:1006C00001C051E040E082E0F81611F462E001C0A0 +:1006D00060E0832F992787FD9A958093C50020932A +:1006E000C40088E18093C100770FEE0FEE0FE72B77 +:1006F0005295550F507E5E2B4295407F452B660FDD +:10070000660F660F642B6093C2001F910F91FF90DC +:1007100008951092C50089E18093C40088E1809318 +:10072000C10086E08093C20008950895982F8091BB +:10073000C00085FFFCCF9093C60008958091C00053 +:1007400087FFFCCF8091C600992708958A3310F463 +:10075000805301C087556A3310F4605301C0675558 +:100760006F708295807F682B862F99270895FC01F2 +:1007700007C08091C00085FFFCCF31969093C600E2 +:1007800090819923B1F70895982F92959F70282F03 +:100790002F709A3030F48091C00085FFFCCF905DBF +:1007A00005C08091C00085FFFCCF995A9093C60088 +:1007B0002A3030F48091C00085FFFCCF205D05C059 +:1007C0008091C00085FFFCCF295A2093C600089570 +:1007D00087E280939A0485E28093990490E2909353 +:1007E0009B0410929C0428E030E030939E042093F8 +:1007F0009D0483E28093A60481E28093A5049093F4 +:10080000A7041092A8043093AA042093A904089581 +:1008100008956091B20481E20E945007089568E053 +:100820008BE20E94500761E188E20E94500768E075 +:100830008FE20E94500761E18CE20E94500761E064 +:100840008FE20E9450071092E1011092E00165E0F2 +:1008500083E20E94500708950F931F938C0160E478 +:1008600080E20E945007F8016281605884E00E9493 +:100870005007F80182818093B1041F910F91089570 +:100880000F931F93CF93DF93EC01288539851216C0 +:100890001306DCF58E819F81821793071CF568E0B3 +:1008A00083E20E94500700E010E00FC08A859B851C +:1008B000E80FF91F608181E20E9450078E819F81BD +:1008C00001969F838E830F5F1F4FEE81FF81888586 +:1008D0009985083011051CF4E817F9073CF3E8176F +:1008E000F90724F061E087E20E9450078B81813094 +:1008F00031F465E089810E9450071B8206C061E0E7 +:1009000089810E94500781E08B83DF91CF911F91F5 +:100910000F910895CF93DF93CDB7DEB724970FB62D +:10092000F894DEBF0FBECDBFDC01FC012281338114 +:100930001092AC041092AB0481E08093A804832F42 +:1009400099278230D9F0833069F1813009F057C09E +:100950008091850499279093AE048093AD0485E837 +:1009600094E09093B0048093AF04868197818034A3 +:10097000910509F044C088E090E029C0FD0186811E +:1009800097819093AE048093AD04E22FFF27EE0F82 +:10099000FF1F8091970490919804E80FF91F8081C0 +:1009A000918129C02223C1F0E22FFF27EE0FFF1F04 +:1009B0008091F0019091F101E80FF91F0190F08111 +:1009C000E02DF093B004E093AF04808199279093D9 +:1009D000AE048093AD0413C094E0998383E08A83CE +:1009E00089E08B839C8384E090E09093AE048093B5 +:1009F000AD04CE0101969093B0048093AF0485EAD4 +:100A000094E00E94400424960FB6F894DEBF0FBE17 +:100A1000CDBFDF91CF910895CF93DF9382E20E9403 +:100A20002B07C82FDD27C5FF1AC068E083E20E94AC +:100A30005007C6FF10C02091AB043091AC048091E8 +:100A4000AD049091AE04281739072CF485EA94E0A0 +:100A50000E94400404C061E087E20E945007DF91D9 +:100A6000CF9108951F93CF93DF9388E00E942B07C7 +:100A7000182FC82FDD27C6FF18C060E085E00E9450 +:100A8000500760E884E00E94500760E080E20E9426 +:100A9000500768E083E20E94500761E087E20E940D +:100AA000500762E085E00E945007C4FF04C060EC7C +:100AB00089E00E94500717FF04C060ED89E00E94A2 +:100AC0005007DF91CF911F9108958AE00E942B0774 +:100AD000992780FF03C00E940C05089581FF0DC077 +:100AE0008AE20E942B0780917204813061F4E091C8 +:100AF0007504F09176040995089582E30E942B070E +:100B00008AE30E942B0708958EE00E942B0768E07D +:100B10008FE20E94500761E08FE20E94500720910F +:100B2000AD043091AE048091A9049091AA0482177B +:100B300093075CF468E083E20E94500761E087E27B +:100B40000E94500781E08093A8040895AF92BF925D +:100B5000CF92DF92EF92FF920F931F93CF93DF9389 +:100B6000CDB7DEB728970FB6F894DEBF0FBECDBF66 +:100B700086E20E942B0786FF7EC08E010F5F1F4F0B +:100B8000580169E0C62ED12CCC0EDD1E809199044F +:100B90000E942B07F80181938F017501EC15FD056B +:100BA000A9F768E087E20E94500768E083E20E94AC +:100BB000500780E20E942B078F77682F80E20E9407 +:100BC000500789819927807690708032910509F4C9 +:100BD00040C080349105D1F1892BF1F5F501818177 +:100BE0008630D9F0873048F48130F1F18130C8F097 +:100BF0008330D1F1853081F521C0893019F18A30F7 +:100C000018F4883049F505C08A3071F18B3021F530 +:100C100020C0C5010E94090427C0C5010E948A04A2 +:100C200023C068E083E20E94500761E081E20E94F5 +:100C3000500760E081E20E9450070BC0C5010E948E +:100C40002C0412C0C5010E940F040EC0C5010E94F1 +:100C5000080765E083E206C080E20E942B07805807 +:100C6000682F80E20E945007F70180818823D1F429 +:100C700065E083E215C02091AD043091AE0480910F +:100C8000A9049091AA048217930764F41092AE0409 +:100C90001092AD0468E083E20E94500761E087E2B1 +:100CA0000E94500728960FB6F894DEBF0FBECDBF46 +:100CB000DF91CF911F910F91FF90EF90DF90CF9038 +:100CC000BF90AF900895CF92DF92EF92FF920F9373 +:100CD0001F93CF93DF93CDB7DEB7C054D0400FB68C +:100CE000F894DEBF0FBECDBF8CE00E942B07992782 +:100CF00080FF03C00E94A6057BC081FF2AC08EE250 +:100D00000E942B078DE20E942B0789838E010F5FC3 +:100D10001F4F6801FFE3EF2EF12CE00EF11E0F5F75 +:100D20001F4F0E941907F80180830E151F05B9F7A0 +:100D300080915401813031F4E0915701F0915801D4 +:100D4000C601099568E08FE20E94500761E08FE2DA +:100D50002BC082FF2CC086E30E942B0785E30E94F4 +:100D60002B0789838E010F5F1F4F6801EFE3EE2E83 +:100D7000F12CE00EF11E0F5F1F4F0E941907F801C2 +:100D800080830E151F05B9F780915501813031F42C +:100D9000E0915901F0915A01C601099568E087E395 +:100DA0000E94500761E087E30E94500721C083FF43 +:100DB0001FC08EE30E942B078E010F5F1F4F68013B +:100DC00071E4E72EF12CEC0EFD1E8DE30E942B0743 +:100DD000F80181938F01EE15FF05B9F78091560157 +:100DE000813031F4E0915701F0915801C601099525 +:100DF000C05CDF4F0FB6F894DEBF0FBECDBFDF91F2 +:100E0000CF911F910F91FF90EF90DF90CF900895B9 +:100E10000895089581E080936A0080E18DBB83B3DB +:100E2000876083BB84B3836084BB3F9A479A78947E +:100E3000089588B1805888B984B322E0822784BBA2 +:100E40000000000080B198B1905898B994B39227EF +:100E500094BB992708959FEF91B982B988B18058C2 +:100E600088B984B395E0892784BB88B1805888B954 +:100E700084B3892784BB000011B80E941907992701 +:100E8000089582B988B1805888B984B391E08927E0 +:100E900084BB88B1805888B984B3892784BB0895FE +:100EA00082B98FEF81B988B1805888B984B395E051 +:100EB000892784BB88B1805888B984B3892784BBCB +:100EC000862F0E9441070895089582E1809385044A +:100ED00081E08093860480E191E090938804809380 +:100EE00087041092890410928A0410928B0488E07F +:100EF00080938C0410928E0410928D0410929004B2 +:100F000010928F0410929204109291041092930404 +:100F10001092940410929504109296041092540129 +:100F2000109255011092560110927204109273049F +:100F30001092740410927C0410927B041092EF01C2 +:100F40001092EE01089590938E0480938D04709317 +:100F5000900460938F0450939204409391040895F9 +:100F600090938E0480938D040895909390048093C1 +:100F70008F04089590939204809391040895809330 +:100F80008904089580938A04089580938B040895BA +:100F9000CF93DF939C01CB01E0917B04F0917C0423 +:100FA00062E070E00E94BD190FC0A081B181828112 +:100FB000823039F4ED018D8199278217930709F466 +:100FC00068870780F085E02D309779F7DF91CF9122 +:100FD0000895CF93DF939C01E0917B04F0917C0412 +:100FE00014C0A081B1818281843061F48481992709 +:100FF0008217930739F4868199278617970711F48A +:10100000ED014B830780F085E02D309751F7DF919C +:10101000CF910895BF92CF92DF92EF92FF920F93FC +:101020001F93CF93DF936C01162FF42EB22EC09135 +:101030007B04D0917C042097A1F489E090E00E9489 +:10104000C418FC0190937C0480937B04D182C082FD +:10105000138310861782F282B4820583E68215C05C +:10106000EC018F8198850097D9F789E090E00E9484 +:10107000C418FC0198878F83D182C0821383F282C7 +:10108000B4820583E68210861782DF91CF911F918B +:101090000F91FF90EF90DF90CF90BF900895EF9267 +:1010A000FF921F93CF93DF937C01C091EE01D0910B +:1010B000EF01209711F011E012C085E090E00E944E +:1010C000C418FC019093EF018093EE01F182E0825D +:1010D00012821482138210E012C01F5FEC018B8118 +:1010E0009C810097D1F785E090E00E94C418FC0134 +:1010F0009C838B83F182E082128314821382812F7E +:101100009927DF91CF911F91FF90EF900895EF9273 +:10111000FF920F931F93CF93DF93E091EE01F09135 +:10112000EF0180E090E00380F481E02D019630979C +:10113000D1F7880F991F0E94C4189093F1018093F2 +:10114000F0010091EE011091EF01E801E880F980D3 +:101150008A81C82FDD27CC0FDD1F8091F00190918F +:10116000F101C80FD91FF701808199270E94C41887 +:101170009983888320E030E017C0E801EA81FF27E7 +:10118000EE0FFF1F8091F0019091F101E80FF91F20 +:101190000190F081E02DE20FF31FD701A20FB31FE2 +:1011A0008C9180832F5F3F4FF7018081992728170B +:1011B00039071CF3E8018B819C81009711F08C01A9 +:1011C000C4CFDF91CF911F910F91FF90EF900895C1 +:1011D0004F925F926F927F928F929F92AF92BF9247 +:1011E000CF92DF92EF92FF920F931F93CF93DF93F3 +:1011F000E0917B04F0917C046624772409C082810D +:10120000823019F40894611C711C0780F085E02D70 +:101210003097A9F74301880C991CC4010E94C41897 +:101220009093980480939704E1E0EE2EF12CAA2489 +:10123000BB2455C0E0917B04F0917C0479E0C72E7B +:10124000D12C15C0A081B181848199278E159F056D +:1012500019F48381C80ED11CED018D818E1521F406 +:101260008281823009F45D010780F085E02D30979E +:1012700049F7009197041091980402501040080D0E +:10128000191DC6010E94C418F8019183808320E0D3 +:1012900030E0E0919704F0919804E80DF91D329741 +:1012A0000190F081E02DE20FF31FD501A20FB31FD3 +:1012B0008C9180832F5F3F4F2930310551F7E091AA +:1012C0009704F0919804E80DF91D32970190F08190 +:1012D000E02D8C2D875F82830894E11CF11C6E1435 +:1012E0007F040CF0A7CF61E0C62ED12C59E0A52ECB +:1012F000B12C4424552442E0842E912CA1C0A0910D +:101300007B04B0917C0412C0ED91FC911197818116 +:10131000823049F4858199278C159D0521F48481BB +:10132000482E552405C0ED01AF81B885109761F7AF +:1013300031E0E32EF12C79C060917B0470917C0444 +:101340006DC0FB01C081D1818981843009F063C007 +:10135000868199278E159F0509F05DC084819927A4 +:101360008C159D0509F057C0950140E050E0E091D3 +:101370009704F0919804E80DF91D32970190F081DF +:10138000E02DE20FF31FDE01A40FB51F8C918083C7 +:101390002F5F3F4F4F5F5F4F4930510541F789E065 +:1013A00090E0A80EB91EC0917B04D0917C0431C09E +:1013B0008A81853059F58C8199278C159D0531F5E9 +:1013C0008D8199278E159F0509F508811981950151 +:1013D00040E050E0E0919704F0919804E80DF91D89 +:1013E00032970190F081E02DE20FF31FD801A40F96 +:1013F000B51F8C9180832F5F3F4F4F5F5F4F47300A +:10140000510541F7E7E0F0E0AE0EBF1E0F80D88532 +:10141000C02D209769F6EB016F8178856115710504 +:1014200009F08FCF0894E11CF11C4E145F040CF0FE +:1014300083CF0894C11CD11CE2E0F0E08E0E9F1E09 +:101440006C147D040CF05BCFDF91CF911F910F9155 +:10145000FF90EF90DF90CF90BF90AF909F908F90D4 +:101460007F906F905F904F9008956F927F928F92D0 +:101470009F92AF92BF92CF92DF92EF92FF920F9323 +:10148000CF93DF935C013B014901E0917B04F09134 +:101490007C0416C0A081B18184819927A816B90661 +:1014A00061F4868199278615970539F48281843005 +:1014B00021F4ED018C818F5F8C830780F085E02D16 +:1014C000309741F787E090E00E94C418FC0187E064 +:1014D000808385E0818382820383F582E482C682F1 +:1014E000EE24062D2A2D45E067E0CF010E940A0870 +:1014F000DF91CF910F91FF90EF90DF90CF90BF9051 +:10150000AF909F908F907F906F900895AF92BF9211 +:10151000CF92DF92EF92FF920F93FC01A114B104DE +:1015200001F14230510571F04330510599F04130DD +:101530005105B9F481E080937204B0927604A092D0 +:1015400075040FC081E080937304B0927804A09278 +:10155000770407C081E080937404B0927A04A0926B +:10156000790420583F4FCF010E94350A0F91FF9018 +:10157000EF90DF90CF90BF90AF900895AF92BF9261 +:10158000CF92DF92EF92FF920F93FC014230510510 +:1015900071F04330510599F041305105B9F481E0C3 +:1015A00080935401B0925801A09257010FC081E07E +:1015B00080935501B0925A01A092590107C081E071 +:1015C00080935601B0925C01A0925B01CF010E9412 +:1015D000350A0F91FF90EF90DF90CF90BF90AF90C2 +:1015E0000895CF92DF92EF920F931F93CF93DF93E3 +:1015F0006C018B01A0917B04B0917C04C0E0D0E031 +:1016000014C02D913C911197F90185818C1551F4ED +:10161000FD018281823031F4F90184818F5F8483FE +:10162000C82FDD27FD01A781B085109751F789E00C +:1016300090E00E94C418FC0189E0808384E08183EB +:101640000283138214821582168217821086EC2E72 +:1016500000E02C2D44E069E0CF010E940A08CE0191 +:10166000DF91CF911F910F91EF90DF90CF90089570 +:10167000BF92CF92DF92EF92FF920F931F93CF937F +:10168000DF936C017B01142FB22EA0917B04B091EB +:101690007C04C0E0D0E014C02D913C911197F90179 +:1016A00085818C1551F4FD018281823031F4F9017C +:1016B00084818F5F8483C82FDD27FD01A781B085DA +:1016C000109751F789E090E00E94C418FC0189E06E +:1016D000808384E08183E282138214821583B68240 +:1016E00007831086EC2E00E02C2D44E069E0CF014A +:1016F0000E940A08CE01DF91CF911F910F91FF90B8 +:10170000EF90DF90CF90BF900895EF920F931F93CB +:10171000109196041F5F1093960489E090E00E9458 +:10172000C418FC0189E0808389E090E09383828380 +:1017300082E0818314821583168280EA87838AE19E +:101740008087EE2400E020E042E069E0CF010E94C3 +:101750000A08812F99271F910F91EF900895CF9339 +:10176000DF93EC01FC0101900020E9F7E81BF90B85 +:10177000CF01880F991F0E94C4189C01FE0101909F +:101780000020E9F7EC1BFD0BEE0FFF1FDC01EC93D3 +:1017900083E0F901818340E050E009C0FE01E40FDD +:1017A000F51F80818C93FD0111824F5F5F4F129670 +:1017B000FE0101900020E9F73197EC1BFD0B4E175D +:1017C0005F0760F3C9010E944F089927DF91CF910D +:1017D0000895EF92FF920F931F93CF93DF938C01A5 +:1017E0007B01CA010E94AF0B9C01E0917B04F09148 +:1017F0007C0414C0A081B1818281843061F4848131 +:1018000099278017910739F4868199278E159F05AE +:1018100011F4ED0128870780F085E02D309751F70E +:10182000DF91CF911F910F91FF90EF9008950F934B +:101830001F93CF93DF938C01CB010E94AF0B9C01D0 +:10184000E0917B04F0917C040FC0A081B181828182 +:10185000823039F4ED018D8199278017910709F4C1 +:101860002E830780F085E02D309779F7DF91CF91B7 +:101870001F910F9108950E94AF0B1816190614F4CA +:101880008093950408950E94AF0B1816190614F45E +:101890008093940408950E94AF0B1816190614F44F +:1018A0008093930408951F9386E00E942B07992745 +:1018B00086FF03C00E9463060EC082FF03C00E9421 +:1018C000650509C081FF03C00E94320504C084FF82 +:1018D00002C00E94840587E00E942B07182F60E059 +:1018E00087E00E945007612F87E00E9450071F91F8 +:1018F00008950E94E8080E9487080E94E80361E0BA +:1019000080E00E94500780E00E942B0780FDFBCF03 +:1019100062E081E00E94500760E884E00E94500786 +:1019200060E480E20E94500768E083E20E94500772 +:1019300069E087E20E9450076FE08DE00E94500747 +:101940006FE08BE00E94500768ED89E00E9450072D +:1019500063E38FE00E94500766ED87E00E94500726 +:1019600062E085E00E9450076CEC80E00E94500726 +:1019700008958EEC80935D0181E080936E008091EC +:101980005D0186BD83E084BD08950895089583E0D8 +:101990008093320381E0809333038BE080933403A0 +:1019A0002FE62093350393E69093360384E78093E4 +:1019B0003703209338039093390381E680933A03E9 +:1019C0008EE680933B038FE580933C0380E3809316 +:1019D0003D0381E380933E0310923F038EE090E04D +:1019E0000E949C010895FC018081833011F40E94C3 +:1019F000C70C0895CF93DF93C1E0D0E08C2F0E94F5 +:101A00000B0E2196C431D105C9F7CAE1D0E08C2F65 +:101A10000E940B0E2196CD32D105C9F7DF91CF91EF +:101A20000895CF93DF93DC01EC01EA81FB812191E2 +:101A30008E81815019F48981E81BF109ED01FB8346 +:101A4000EA838E839FB7F8948C9181508C939FBFCB +:101A5000822F9927DF91CF910895FC011082758321 +:101A60006483738362834183478346830895CF935E +:101A7000DF93DC019C91ED018981981718F080E0DB +:101A800090E016C0ED01EC81FD8161938F81815062 +:101A900019F48981E81BF109ED018F83FD83EC8343 +:101AA0009FB7F8948C918F5F8C939FBF81E090E0FB +:101AB000DF91CF910895FC0180818823E9F3CF0164 +:101AC0000E94110D99270895FC018081882319F443 +:101AD0008FEF9FEF0895CF010E94110D9927089570 +:101AE00081E090E0089581E090E0089581E090E049 +:101AF000089581E090E00895CF93DF93CDB7DEB7EE +:101B000022970FB6F894DEBF0FBECDBF282F8150AD +:101B1000833120F08951833108F06EC0E22FFF2716 +:101B2000EE0FFF1FE35AFE4F82E090E09283818325 +:101B3000822F9927AA27BB27FC013197EC32F105A8 +:101B400008F05AC0E65BFF4FEE0FFF1F0590F491BF +:101B5000E02D09946D9A47C06E9A49C06F9A43C0B0 +:101B6000209A45C0219A3FC0229A41C0239A3BC087 +:101B7000249A3DC0259A37C0269A39C0279A33C087 +:101B8000509A35C0519A2FC0529A31C0539A2BC0E7 +:101B9000549A2DC0559A27C0569A29C0579A23C0E7 +:101BA000389A25C0399A1FC03A9A21C03B9A1BC067 +:101BB0003C9A1DC03D9A17C03E9A19C0879A13C01F +:101BC000869A15C0859A0FC0849A11C0839A0BC05B +:101BD000829A0DC0819A07C0809A09C0689A03C092 +:101BE000699A05C06A9A81E090E008C06B9AE1E0CA +:101BF000F0E0FA83E98304C084E090E09A8389836B +:101C000089819A8122960FB6F894DEBF0FBECDBFB0 +:101C1000DF91CF910895982F8150833130F0895111 +:101C2000833118F084E090E00895892F0E947C0DA4 +:101C300081E090E00895CF93DF93CDB7DEB7229790 +:101C40000FB6F894DEBF0FBECDBF282F8150833171 +:101C500020F08951833108F06EC0E22FFF27EE0F8C +:101C6000FF1FE35AFE4F81E090E092838183822F31 +:101C70009927AA27BB27FC013197EC32F10508F020 +:101C80005AC0EA58FF4FEE0FFF1F0590F491E02D68 +:101C900009946D9847C06E9849C06F9843C02098CA +:101CA00045C021983FC0229841C023983BC024984A +:101CB0003DC0259837C0269839C0279833C0509822 +:101CC00035C051982FC0529831C053982BC05498AA +:101CD0002DC0559827C0569829C0579823C03898CA +:101CE00025C039981FC03A9821C03B981BC03C982A +:101CF0001DC03D9817C03E9819C0879813C086989C +:101D000015C085980FC0849811C083980BC0829825 +:101D10000DC0819807C0809809C0689803C0699871 +:101D200005C06A9881E090E008C06B98E1E0F0E0BF +:101D3000FA83E98304C084E090E09A8389838981EF +:101D40009A8122960FB6F894DEBF0FBECDBFDF9109 +:101D5000CF910895FB011082833091F0843028F4F4 +:101D6000813051F0823029F409C0843059F0853037 +:101D700059F085E090E0089583B107C086B105C0B1 +:101D800089B103C08CB101C08FB1808381E090E044 +:101D90000895833091F0843028F4813051F08230FE +:101DA00029F409C0843059F0853069F084E090E06E +:101DB000089565B905C068B903C06BB901C06EB9B3 +:101DC00081E090E0089561BB81E090E00895282FC4 +:101DD000E82FFF27EE0FFF1FE35AFE4F818192810C +:101DE000029719F086E090E00895822F9927AA279C +:101DF000BB27FC013197EC32F10540F4EE55FF4F63 +:101E0000EE0FFF1F0590F491E02D099484E090E01F +:101E10000895662311F0759ADDC07598DBC06623BE +:101E200011F0769AD7C07698D5C0662311F0779ACC +:101E3000D1C07798CFC0662311F0289ACBC02898DC +:101E4000C9C0662311F0299AC5C02998C3C066236A +:101E500011F02A9ABFC02A98BDC0662311F02B9AB0 +:101E6000B9C02B98B7C0662311F02C9AB3C02C9838 +:101E7000B1C0662311F02D9AADC02D98ABC066237A +:101E800011F02E9AA7C02E98A5C0662311F02F9AA4 +:101E9000A1C02F989FC0662311F0589A9BC05898F4 +:101EA00099C0662311F0599A95C0599893C066233A +:101EB00011F05A9A8FC05A988DC0662311F05B9A20 +:101EC00089C05B9887C0662311F05C9A83C05C98D8 +:101ED00081C0662311F05D9A7DC05D987BC066234A +:101EE00011F05E9A77C05E9875C0662311F05F9A14 +:101EF00071C05F986FC0662311F0409A6BC0409824 +:101F000069C0662311F0419A65C0419863C0662399 +:101F100011F0429A5FC042985DC0662311F0439A67 +:101F200059C0439857C0662311F0449A53C044984F +:101F300051C0662311F0459A4DC045984BC06623A9 +:101F400011F0469A47C0469845C0662311F08F9A13 +:101F500041C08F983FC0662311F08E9A3BC08E9887 +:101F600039C0662311F08D9A35C08D9833C0662331 +:101F700011F08C9A2FC08C982DC0662311F08B9A8B +:101F800029C08B9827C0662311F08A9A23C08A98AB +:101F900021C0662311F0899A1DC089981BC0662351 +:101FA00011F0889A17C0889815C0662311F0709AAE +:101FB00011C070980FC0662311F0719A0BC0719810 +:101FC00009C0662311F0729A05C0729803C0662397 +:101FD00021F0739A81E090E00895739881E090E099 +:101FE00008951F93182F8150833130F08951833128 +:101FF00018F084E090E013C0E12FFF27EE0FFF1FE1 +:10200000E35AFE4F83E090E092838183812F0E9408 +:102010007C0D61E0812F0E94E70E81E090E01F912E +:102020000895CF93DF93282FEB011882E82FFF2725 +:10203000EE0FFF1FE35AFE4F81819281019719F045 +:1020400086E090E089C0822F9927AA27BB27FC0150 +:102050003197EC32F10540F4E253FF4FEE0FFF1FD2 +:102060000590F491E02D099484E090E075C0659BA3 +:1020700071C06EC0669B6EC06BC0679B6BC068C052 +:10208000189B68C065C0199B65C062C01A9B62C07E +:102090005FC01B9B5FC05CC01C9B5CC059C01D9B8C +:1020A00059C056C01E9B56C053C01F9B53C050C042 +:1020B000489B50C04DC0499B4DC04AC04A9B4AC036 +:1020C00047C04B9B47C044C04C9B44C041C04D9B44 +:1020D00041C03EC04E9B3EC03BC04F9B3BC038C042 +:1020E000309B38C035C0319B35C032C0329B32C0C6 +:1020F0002FC0339B2FC02CC0349B2CC029C0359BD4 +:1021000029C026C0369B26C023C07F9B23C020C089 +:102110007E9B20C01DC07D9B1DC01AC07C9B1AC029 +:1021200017C07B9B17C014C07A9B14C011C0799B49 +:1021300011C00EC0789B0EC00BC0609B0BC008C0C6 +:10214000619B08C005C0629B05C002C0639B02C0C2 +:1021500081E0888381E090E0DF91CF910895CF9373 +:10216000DF93CDB7DEB721970FB6F894DEBF0FBE71 +:10217000CDBF9BE190933203BE016F5F7F4F0E9402 +:1021800011108093330389818093340383E090E0BE +:102190000E949C0121960FB6F894DEBF0FBECDBF02 +:1021A000DF91CF9108959AE1909332030E94E70E58 +:1021B000809333031092340383E090E00E949C01EB +:1021C000089598E1909332030E94C90E80933303DF +:1021D0001092340383E090E00E949C010895982FB0 +:1021E00089E180933203933099F0943028F4913050 +:1021F00059F0923029F40AC0943061F0953061F0C2 +:1022000085E090E020E00BC023B107C026B105C0F7 +:1022100029B103C02CB101C02FB181E090E08093BF +:1022200033032093340383E090E00E949C010895DF +:1022300097E1909332030E94F10F80933303109241 +:10224000340383E090E00E949C01089595E190930F +:1022500032030E941B0E809333031092340383E0F9 +:1022600090E00E949C01089596E1909332030E94B1 +:102270007C0D809333031092340383E090E00E943E +:102280009C01089584E18093320381E080933303BD +:102290001092340383E090E00E949C01089582E153 +:1022A0008093320381E0809333031092340383E000 +:1022B00090E00E949C01089583E18093320381E0C5 +:1022C000809333031092340383E090E00E949C01DA +:1022D000089580E18093320381E08093330310926C +:1022E000340383E090E00E949C01089591E1909373 +:1022F00032030E940B0E809333031092340383E069 +:1023000090E00E949C010895FC0180818531C9F113 +:10231000863180F4823131F1833130F48031D1F073 +:10232000813109F04CC01AC0833109F1843109F0C0 +:1023300046C022C0883189F1893128F4863129F1DB +:102340008731E9F526C08A3189F18A3158F18B311C +:10235000B1F531C082810E946911089582810E9485 +:1023600076110895638182810E944F1108956381DF +:1023700082810E945C110895638182810E944211D2 +:10238000089582810E942611089582810E9434114D +:10239000089582810E9418110895638182810E94AC +:1023A000E110089582810E94EF1008956381828177 +:1023B0000E94D310089582810E94AF1008958093E7 +:1023C000320383E0809333031092340383E090E080 +:1023D0000E949C010895FC018197089718F084E001 +:1023E00090E00895EE0FFF1FE35AFE4F84E090E067 +:1023F0009283818381E090E0089510927C00823086 +:10240000910541F08330910569F0019741F082E038 +:1024100090E0089580917C00806480937C0081E04E +:1024200090E0089580917C00806C80937C0081E036 +:1024300090E0089593E890937A0090917C00907FCB +:10244000982B90937C0080917A00806480937A002E +:1024500080917A0086FDFCCF809178009091790080 +:1024600020E030E040E050E080917A00806480938A +:102470007A0080917A0086FDFCCF8091780090915F +:102480007900480F591F2F5F3F4F2430310561F706 +:1024900080917A008F7780937A00CA01969587950C +:1024A000969587950895CF93DF939C01EB01198250 +:1024B0001882FC01EE0FFF1FE35AFE4F81819281CB +:1024C000049719F086E090E03CC02432310541F1D8 +:1024D0002532310554F42232310541F123323105E0 +:1024E00014F52132310569F424C02632310591F00A +:1024F0002632310594F02732310549F02832310572 +:1025000019F087E090E01DC080E090E014C081E009 +:1025100090E011C082E090E00EC083E090E00BC03C +:1025200084E090E008C085E090E005C086E090E09F +:1025300002C087E090E00E941A129983888381E0AC +:1025400090E0DF91CF91089522E2209332030E9420 +:10255000FD118093330382E090E00E949C01089576 +:10256000CF93DF93CDB7DEB722970FB6F894DEBFD7 +:102570000FBECDBF21E220933203BE016F5F7F4FBC +:102580000E9453128093330329813A81832F992724 +:10259000809334032093350384E090E00E949C01F3 +:1025A00022960FB6F894DEBF0FBECDBFDF91CF915C +:1025B000089520E2209332030E94EB1180933303AD +:1025C0001092340383E090E00E949C010895FC0186 +:1025D0008081813249F0823261F0803279F48281E7 +:1025E00099270E94D9120895828199270E94B012DA +:1025F0000895828199270E94A4120895809332033E +:1026000083E0809333031092340383E090E00E94D0 +:102610009C0108958091B9009927887F9070089552 +:102620008091BC0087FFFCCF0895ECEBF0E0808147 +:10263000846080838BE090E09093770180937601B3 +:102640008CE090E0909379018093780181E090E0B4 +:102650000895ECEBF0E080818B7F808382E090E056 +:10266000909377018093760190937901809378011C +:1026700081E090E008958130910511F48CE00BC069 +:102680008230910511F488E106C0039719F082E0C9 +:1026900090E0089588E48093B8008091B9008C7F21 +:1026A0008093B9008091B9008093B90081E090E0F7 +:1026B00008958091B90084EA8093BC008091BC00A9 +:1026C00087FFFCCF81E090E0089584E98093BC000F +:1026D00081E090E008958093BB0084E88093BC0083 +:1026E0008091BC0087FFFCCF80E090E0089584E8F3 +:1026F0008093BC008091BC0087FFFCCF8091BB0021 +:102700009927089585E38093320381E08093330312 +:102710008093340384E88093BC008091BC0087FFE1 +:10272000FCCF8091BB008093350385E090E00E9450 +:102730009C01089540E050E00FC0F901E40FF51F3F +:1027400080818093BB0084E88093BC008091BC00B2 +:1027500087FFFCCF4F5F5F4F4617570774F384E343 +:102760008093320381E0809333031092340383E03B +:1027700090E00E949C01089587E38093320384E9EE +:102780008093BC0081E0809333031092340383E094 +:1027900090E00E949C01089586E38093320380912B +:1027A000B90084EA8093BC008091BC0087FFFCCF15 +:1027B00081E0809333031092340383E090E00E9421 +:1027C0009C01089522E3209332030E943B138093DF +:1027D00033031092340383E090E00E949C0108953B +:1027E00081E380933203ECEBF0E080818B7F808388 +:1027F00082E090E090937701809376019093790145 +:102800008093780181E0809333031092340383E056 +:1028100090E00E949C01089580E380933203ECEBEA +:10282000F0E08081846080838BE090E0909377017A +:10283000809376018CE090E0909379018093780109 +:1028400081E0809333031092340383E090E00E9490 +:102850009C010895FC0180818433D9F0853338F4DC +:10286000813379F0823381F0803389F507C0863374 +:1028700041F18633D8F0873351F526C00E940C14FD +:1028800008950E94F0130895828199270E94E2130F +:102890000895428155276181772764507040838174 +:1028A00034969F0199270E949A13089542815527D3 +:1028B0006181772764507040838199270E94821339 +:1028C00008950E94CC1308950E94BC13089580932C +:1028D000320383E0809333031092340383E090E06B +:1028E0000E949C01089585B1817F85B9239886E077 +:1028F00084B91CBC1DBC83E58CBD88E090E090933E +:102900006901809368018AE090E090936B01809365 +:102910006A0189E090E090936D0180936C0181E001 +:1029200090E008951CBC1DBC82E090E0909369018A +:102930008093680190936B0180936A0190936D017D +:1029400080936C0181E090E00895089581E090E02B +:102950000895AC0120E030E00AC0FA01E20FF31F55 +:1029600080818EBD0DB407FEFDCF2F5F3F4F261730 +:1029700037079CF381E090E00895DC0120E030E02F +:1029800040E050E015C01EBC09C04F5F5F4F83E0C0 +:10299000493E58071CF088E090E008950DB407FE0A +:1029A000F4CFFD01E20FF31F8EB580832F5F3F4F01 +:1029B0002617370744F381E090E00895CF93DF9323 +:1029C000EC0120E030E0A0E0B0E018C0FE01E20F32 +:1029D000F31F80818EBD08C0119683E0A93EB80721 +:1029E0001CF088E090E00FC00DB407FEF5CFFB01AE +:1029F000E20FF31F8EB580832F5F3F4F24173507FB +:102A00002CF381E090E0DF91CF9108950F931F9315 +:102A10008B0123E420933203AB0164E373E00E9453 +:102A2000DE148093330310923403C80102960E948F +:102A30009C011F910F9108950F931F938C0184E4C3 +:102A400080933203B80184E393E00E94BD14809325 +:102A5000330310923403C80102960E949C011F9117 +:102A60000F91089523E4209332030E94A9148093C8 +:102A700033031092340383E090E00E949C01089598 +:102A800081E4809332030E94921480933303109266 +:102A9000340383E090E00E949C01089580E48093D9 +:102AA00032030E947314809333031092350383E042 +:102AB00090E00E949C010895CF93DF93EC01888100 +:102AC0008334A1F0843438F4813469F0823458F5C9 +:102AD0008034F1F405C0843481F08534C9F411C028 +:102AE0000E944E1520C00E9440151DC069817727A5 +:102AF000CE0102960E94321516C0898199270E9444 +:102B00001C1569817727CE0102960E9406150BC01D +:102B10008093320383E0809333031092340383E085 +:102B200090E00E949C01DF91CF910895209A219A14 +:102B3000229A2398249A259A2C982D9882E090E046 +:102B40009093850180938401909383018093820107 +:102B5000909381018093800181E090E090937F01C8 +:102B600080937E01089582E090E0909369018093C4 +:102B7000680190936B0180936A0190936D0180933B +:102B80006C0181E090E00895289829982A9880E2C5 +:102B90009EE40197F1F7289A8AE0982F9A95F1F729 +:102BA0002A9A299A8A95F1F70895282F299887FD5E +:102BB00002C02A9801C02A9A8AE0982F9A95F1F7C4 +:102BC000299A8A95F1F7299826FF02C02A9A01C00E +:102BD0002A988AE0982F9A95F1F7299A8A95F1F721 +:102BE0000895282F220F30E0299827FF02C02A9A43 +:102BF00001C02A988AE0982F9A95F1F7299A8A9528 +:102C0000F1F73F5F373011F0220FEECF0895282FF4 +:102C100030E0299827FF02C02A9A01C02A988AE04A +:102C2000982F9A95F1F7299A8A95F1F73F5F3830F6 +:102C300011F0220FEECF089529982A988AE0982F54 +:102C40009A95F1F7299A982F9A95F1F7299828984B +:102C5000982F9A95F1F7299A982F9A95F1F7299834 +:102C60008A95F1F7289A80E090E0089529982898AD +:102C70002A982B9A08950E94C41580E30E94D515C6 +:102C800080E60E94F11508950E94C41580E00E941C +:102C9000D51580E00E94F1150E94361608950F9315 +:102CA0001F93182F062F0E94C41580E40E94D5158B +:102CB000812F0E94F115802F0E94071681E090E07D +:102CC0001F910F9108951F93182F0E94C41580EC37 +:102CD0000E94D515812F0E94F1150E941C1699277C +:102CE0001F91089529988AE08A95F1F72A9830E093 +:102CF00090E0990F299A2AE0822F8A95F1F7299876 +:102D00001B999F5F822F8A95F1F73F5F383089F7D3 +:102D10002898299A822F8A95F1F7289A29982A9536 +:102D2000F1F7892F992708951F93182F0E94C41532 +:102D300080E80E94D515812F0E94F1150E9472161D +:102D400099271F910895DF92EF92FF920F931F939F +:102D5000CF93DF93D82E7B018A01C0E0D0E009C079 +:102D60008D2D8C0F0E949416F801EC0FFD1F8083AF +:102D70002196CE15DF05A1F781E090E0DF91CF919C +:102D80001F910F91FF90EF90DF9008950F931F9385 +:102D9000082F162F0E943B16612F802F0E944F167E +:102DA00081E090E01F910F910895DF92EF92FF92E2 +:102DB0000F931F93CF93DF93D82E7B018A01C0E03E +:102DC000D0E009C0F801EC0FFD1F60818D2D8C0F44 +:102DD0000E94C6162196CE15DF05A1F781E090E08E +:102DE000DF91CF911F910F91FF90EF90DF900895A9 +:102DF00094E0909332030E94D5168093330310928F +:102E0000340383E090E00E949C0108950F931F9388 +:102E10008B0193E09093320344E353E00E94A316A6 +:102E200080933303C80102960E949C011F910F9169 +:102E3000089582E08093320382E090E090936901EC +:102E40008093680190936B0180936A0190936D0168 +:102E500080936C0181E0809333031092340383E00C +:102E600090E00E949C01089581E0809332030E94CB +:102E70009615809333031092340383E090E00E9410 +:102E80009C010895FC018381823069F0833018F43D +:102E90008130F1F405C0833049F08430C9F40FC0AB +:102EA0000E94341708950E9419170895AF014A5FD0 +:102EB0005F4F6581772784810E9406170895AF01CF +:102EC0004A5F5F4F6581772784810E94F8160895D5 +:102ED00080818093320383E0809333031092340324 +:102EE00083E090E00E949C0108951F920F920FB61C +:102EF0000F9211240F900FBE0F901F9018959C01F8 +:102F00000897029718F084E090E00895F901EE0F19 +:102F1000FF1FE35AFE4F8DE090E0928381832830BB +:102F20003105B1F02930310519F087E090E00895BE +:102F3000259A81E090E0909389008093880081E851 +:102F40008093800089E08093810081E090E0089583 +:102F5000249A81E08093B30089E68093B00081E0F9 +:102F600090E008959C01FC01EE0FFF1FE35AFE4F15 +:102F7000818192810D9719F086E090E008952830C4 +:102F8000310539F12930310519F087E090E00895D5 +:102F900063307105B1F06430710544F4613071053E +:102FA00061F06230710509F040C009C064307105FC +:102FB00051F065307105C9F508C081E007C082E0B5 +:102FC00005C083E003C084E001C085E080938100F8 +:102FD00029C064307105E9F06530710554F4623040 +:102FE000710599F06330710594F461307105E9F46D +:102FF0000AC06630710589F06630710564F067308B +:10300000710599F40CC089E60BC08AE609C08BE60D +:1030100007C08CE605C08DE603C08EE601C08FE6D2 +:103020008093B00081E090E0089581E090E0089501 +:103030009C01FC01EE0FFF1FE35AFE4F818192813C +:103040000D9719F086E090E008952830310569F079 +:103050002930310519F087E090E0089570938900D8 +:103060006093880081E090E008956093B30081E070 +:1030700090E0089523E5209332030E94181880936E +:1030800033031092340383E090E00E949C01089582 +:1030900022E5209332030E94B217809333031092EB +:1030A000340383E090E00E949C01089520E5209382 +:1030B00032030E947F17809333031092340383E01E +:1030C00090E00E949C0108959C01FC01EE0FFF1FFF +:1030D000E35AFE4F82E090E09283818328303105ED +:1030E00031F02930310531F086E090E008951092FA +:1030F000B00004C01092810010928000822F0E94C4 +:103100007C0D81E090E0089521E5209332030E9438 +:103110006418809333031092340383E090E00E949C +:103120009C010895FC018081813579F0823518F485 +:103130008035F1F405C0823569F08335C9F411C0DA +:10314000828199270E9456180895828199270E94AA +:103150008418089563817727828199270E944818EF +:10316000089563817727828199270E943A180895EC +:103170008093320383E0809333031092340383E01F +:1031800090E00E949C010895CF93DF93AC010297D9 +:1031900010F442E050E0A091B704B091B804FD01F2 +:1031A000C0E0D0E020E030E020C080819181841731 +:1031B000950769F482819381209719F09B838A8314 +:1031C00004C09093B8048093B704CF0132C048176D +:1031D000590738F42115310519F08217930708F4BF +:1031E0009C01EF010280F381E02D3097F1F621156B +:1031F000310589F1C901841B950B049708F4A901D5 +:10320000E0E0F0E026C08D919C9111978217930722 +:10321000E9F44817590779F4ED018A819B813097C9 +:1032200019F09383828304C09093B8048093B70409 +:10323000CD01029649C0841B950BFD01E80FF91FD3 +:103240004193519302978D939C933AC0FD01A281C3 +:10325000B3811097C1F68091B5049091B604892B83 +:1032600041F480915001909151019093B604809364 +:10327000B50420915201309153012115310541F4DB +:103280002DB73EB780914E0190914F01281B390B0D +:10329000E091B504F091B6042E1B3F0B24173507BF +:1032A00088F0CA0102962817390760F0CF01840F11 +:1032B000951F02969093B6048093B5044193519361 +:1032C000CF0102C080E090E0DF91CF910895CF93CD +:1032D000DF93009709F44EC0EC0122971B821A82FB +:1032E000A091B704B091B804109711F140E050E0FC +:1032F00001C0DC01AC17BD0700F1BB83AA83FE014E +:1033000021913191E20FF31FEA17FB0771F42E5F51 +:103310003F4F8D919C911197820F931F99838883C2 +:10332000FD01828193819B838A834115510559F464 +:10333000D093B804C093B7041DC0FD01828193816E +:10334000AD010097B1F6FA01D383C2832191319187 +:10335000E20FF31FEC17FD0769F42E5F3F4F8881E2 +:103360009981820F931FFA01918380838A819B81C7 +:1033700093838283DF91CF91089597FB092E0726CF +:103380000AD077FD04D027D006D000201AF470951B +:1033900061957F4F0895F6F7909581959F4F089519 +:1033A00097FB092E05260ED057FD04D028D00AD051 +:1033B000001C38F450954095309521953F4F4F4F64 +:1033C0005F4F0895F6F790958095709561957F4FC2 +:1033D0008F4F9F4F0895AA1BBB1B51E107C0AA1F27 +:1033E000BB1FA617B70710F0A61BB70B881F991FA6 +:1033F0005A95A9F780959095BC01CD010895A1E259 +:103400001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F5E +:10341000FF1FA217B307E407F50720F0A21BB30BA9 +:10342000E40BF50B661F771F881F991F1A9469F725 +:1034300060957095809590959B01AC01BD01CF0181 +:023440000895ED +:10344200456D62656464656450726F6A6563747326 +:10345200004F63746F70757355534220496E7465E3 +:10346200726661636520436F6E7665727465722061 +:10347200616E6420492F4F20457874656E73696FC1 +:103482006E0032303038313130380009040020000B +:04349200B904000079 :00000001FF diff --git a/firmware/octopus_can_stable_1_1.hex b/firmware/octopus_can_stable_1_1.hex deleted file mode 100644 index cf06536..0000000 --- a/firmware/octopus_can_stable_1_1.hex +++ /dev/null @@ -1,1133 +0,0 @@ -:100000000C94FA000C9419010C9419010C94190128 -:100010000C9419010C94EB030C9419010C94190124 -:100020000C9419010C9419010C9419010C941901E8 -:100030000C94BF190C9419010C9419010C9419011A -:100040000C9419010C94C4030C94E61F0C94190130 -:100050000C9419010C941B010C9419010C941901B6 -:100060000C9419010C9419010C9419010C941901A8 -:100070000C9419010C9419010C9419010C94190198 -:100080000C9419010C9419010C9419010C94190188 -:100090000C941901061008100A100C100E10101004 -:1000A00012101410161018101A101C101E10201008 -:1000B00022102410261028102A1054105410541006 -:1000C0005410541054102C102E10301032103410C4 -:1000D0003A103810361038103A103C103E104010CC -:1000E00042104410461048104A104E109D109F10A8 -:1000F000A110A310A510A710A910AB10AD10AF1040 -:10010000B110B310B510B710B910BB10BD10BF10AF -:10011000C110EB10EB10EB10EB10EB10EB10C31059 -:10012000C510C710C910CB10D110CF10CD10CF10F3 -:10013000D110D310D510D710D910DB10DD10DF107F -:10014000E110E51056115C11621168116E11741105 -:100150007A11801186118C11921198119E11A4119F -:10016000AA11B011B611BC11C21153115311531180 -:10017000531153115311C811CE11D411DA11E011DA -:10018000F211EC11E611EC11F211F811FE1104124A -:1001900010120A120A12101216121C12651268129C -:1001A0006B126E127112741277127A127D12801213 -:1001B0008312861289128C128F1292129512981243 -:1001C0009B126212621262126212621262129E121A -:1001D000A112A412A712AA12B312B012AD12B01239 -:1001E000B312B612B912BC12C212BF12BF12C2129F -:1001F000C512C81211241FBECFEFD0E1DEBFCDBFA4 -:1002000013E0A0E0B1E0E8E7F4E400E00BBF02C0D7 -:1002100007900D92A633B107D9F716E0A6E3B3E035 -:1002200001C01D92A937B107E1F70E9430010C947B -:100230003B220C9400001F920F920FB60F921124D4 -:100240000F900FBE0F901F901895FC0120E030E03A -:1002500002C02F5F3F4F81918823D9F7C9010895CC -:10026000CCEFD0E1DEBFCDBFF8940E9464090E94BC -:10027000D20E8FEF84B985B92F980E94BE0981E80C -:1002800097E10E94090A85E69CE00E940E0A81E03F -:1002900090E00E94130ADE011196E2EEF2E083E0A4 -:1002A00001900D928150E1F7CE0101960E94080E57 -:1002B00080E091E00E94A40E81E191E00E949C0EFA -:1002C00082E491E00E94940E0E94DE0D4C0164E6EF -:1002D00070E00E94210A60E070E0C4010E944A0DB3 -:1002E0003C0140E050E0BC01C4010E94420A22E10E -:1002F000A22E22E0B22ECC24DD2490E4E92EF12CB3 -:1003000002E021E030E041E050E0B301C4010E948E -:10031000DF0C84E3A82E83E0B82E21E030E041E03A -:1003200050E0B301C4010E94170D10929403109283 -:10033000930310929603109295030E94041B8FE77B -:1003400087B98AE288B90E940F0485E588B90E94BE -:100350000F0418B80E94580F0E9464090E94D70E1B -:100360007894FFCF0F931F93CF93DF93EC018134E9 -:10037000910510F180919F039091A003892BE1F4E6 -:10038000DF93CF938BE491E09F938F930E94FD1AAC -:1003900010929C0310929B03D0939E03C0939D03E5 -:1003A00081E090E09093A00380939F03C0E4D0E0AD -:1003B0000F900F900F900F9068E08BE20E94A909B8 -:1003C00000E010E00EC0E0919B03F0919C03E00F71 -:1003D000F11FEB51FB4F608189E20E94A9090F5F79 -:1003E0001F4F0C171D0779F7809193039091940389 -:1003F000019749F467E08BE20E94A90910929403E7 -:10040000109293030AC063E08BE20E94A90981E085 -:1004100090E09093940380939303DF91CF911F9189 -:100420000F910895CF93DF9380919F039091A00344 -:10043000019709F04CC088E791E09F938F930E9449 -:10044000FD1A20919B0330919C0380919D03909114 -:100450009E030F900F9028173907C8F586E991E0A1 -:100460009F938F930E94FD1AC0919D03D0919E038C -:1004700080919B0390919C03C81BD90B80919B0397 -:1004800090919C03805C9F4F90939C0380939B036F -:100490000F900F90C134D1055CF08FEB91E09F93EA -:1004A0008F930E94FD1A80E490E00E94B2010DC07B -:1004B0008BED91E09F938F930E94FD1ACE010E94D5 -:1004C000B2011092A00310929F030F900F90DF9142 -:1004D000CF9108950F931F93CF93DF938C011092C8 -:1004E0009C0310929B031092A00310929F032F9ADB -:1004F000FC018081282F22952F70C22FDD2799279C -:100500009F938F93DF93CF9388EE91E09F938F9388 -:100510000E94FD1A8DB79EB706960FB6F8949EBF3F -:100520000FBE8DBFC430D10509F451C0C530D1050F -:1005300084F4C130D10569F1C230D1051CF4CD2B52 -:10054000C1F077C0C230D10571F1239709F071C0B5 -:1005500034C0C630D10509F44EC0C630D1050CF404 -:1005600040C0C730D10509F450C0289709F061C0D8 -:1005700056C0F8018081863041F48281813009F0D3 -:100580006DC0C8010E948C1969C0C8010E94510F3A -:1005900065C088E092E09F938F930E94FD1AC80186 -:1005A0000E94AA1359C08BE192E09F938F930E94FF -:1005B000FD1AC8010E940C154FC08FE292E09F9374 -:1005C0008F930E94FD1AC8010E942C1645C083E437 -:1005D00092E09F938F930E94FD1AC8010E94AA1770 -:1005E0003BC087E592E09F938F930E94FD1AC8015C -:1005F0000E94CB1A31C08BE192E09F938F930E94AF -:10060000FD1AC8010E94F60527C08BE692E09F9371 -:100610008F930E94FD1AC8010E94431F1DC08FE7DF -:1006200092E09F938F930E94FD1AC8010E94CA20F6 -:1006300013C086E992E09F938F930E94FD1AF80100 -:1006400080818093E50483E08093E6041092E704C0 -:1006500083E090E00E94B2010F900F902F98DF91FD -:10066000CF911F910F9108950F931F93CF93DF9315 -:10067000EC018C010F5F1F4F898199279F938F9306 -:1006800083EA92E09F938F930E94FD1A80919503D5 -:10069000909196030F900F900F900F90019791F506 -:1006A00087EC92E09F938F930E94FD1A20E030E048 -:1006B0000F900F90E0919703F0919803E20FF31FD2 -:1006C000DE01A20FB31F8C91EB55FC4F80832F5F8F -:1006D0003F4F2034310571F7809197039091980333 -:1006E000805C9F4F9093980380939703209197038A -:1006F000309198038091990390919A0328173907B4 -:10070000F0F128C081ED92E09F938F930E94FD1A33 -:10071000109298031092970320E030E00F900F9012 -:10072000E0919703F0919803E20FF31FDE01A20F0F -:10073000B31F8C91EB55FC4F80832F5F3F4F2034CC -:10074000310571F73093980320939703F8012081C6 -:10075000203448F4109296031092950385EA93E0B2 -:100760000E946A020CC081E090E09093960380930F -:100770009503822F992790939A0380939903DF9191 -:10078000CF911F910F9108951F920F920FB60F9264 -:1007900011242F933F934F935F936F937F938F9386 -:1007A0009F93AF93BF93EF93FF930E94230F80918A -:1007B0003F0386BDFF91EF91BF91AF919F918F91C4 -:1007C0007F916F915F914F913F912F910F900FBE4D -:1007D0000F901F9018951F920F920FB60F92112431 -:1007E0002F933F934F935F936F937F938F939F9339 -:1007F000AF93BF93EF93FF930E94AC0EFF91EF91E5 -:10080000BF91AF919F918F917F916F915F914F9128 -:100810003F912F910F900FBE0F901F90189520E0E1 -:1008200080E49CE90197F1F72F5F2931C9F708951A -:10083000882329F0813071F084E090E008958EE003 -:100840008093690380936A0388E18093C10081E00B -:1008500090E008958EE080934E0380934F0388E1EB -:100860008093C90081E090E00895882329F08130C9 -:1008700091F084E090E008951092690310926A0369 -:100880001092C5001092C4001092C1001092C200D4 -:1008900081E090E0089510924E0310924F03109261 -:1008A000CD001092CC001092C9001092CA0081E0D5 -:1008B00090E008950F93882329F0813041F084E07F -:1008C00090E00BC02093C5006093C40004C0209347 -:1008D000CD006093CC0081E090E00F9108956230EC -:1008E00011F492E001C090E0882329F0813071F08A -:1008F00084E090E008958091C200990F990F990FBC -:10090000982B9093C20081E090E008958091CA00F6 -:10091000990F990F990F982B9093CA0081E090E05E -:100920000895663061F0673019F0653019F404C03D -:1009300021E003C021E004C020E090E002C020E0FC -:1009400091E0882329F0813079F084E090E00895E7 -:100950008091C200220F220F990F922B982B909317 -:10096000C20081E090E008958091CA00220F220F1A -:10097000990F922B982B9093CA0081E090E00895F4 -:10098000653439F06F3419F421E091E004C020E0BF -:1009900001C021E090E0882329F0813089F084E0D3 -:1009A00090E008958091C2002295220F207E9295BA -:1009B000907F922B982B9093C20081E090E0089555 -:1009C0008091CA002295220F207E9295907F922BD3 -:1009D000982B9093CA0081E090E00895882329F035 -:1009E000813061F084E090E008958091C00085FF3F -:1009F000FCCF6093C60081E090E008958091C8002C -:100A000085FFFCCF6093CE0081E090E00895FF92D7 -:100A10000F931F93CF93DF93F82EEB018A0181E0B0 -:100A20008F1548F484E090E00DC0F80161918F01CA -:100A30008F2D0E94EE042197FFEFCF3FDF07A9F72C -:100A400081E090E0DF91CF911F910F91FF90089589 -:100A5000882329F0813051F084E090E0089580915E -:100A6000C00087FFFCCF8091C60006C08091C800FF -:100A700087FFFCCF8091CE0099270895FF920F93B6 -:100A80001F93CF93DF93F82E8B0181E08F1518F41D -:100A900084E090E00EC0EA0107C08F2D0E94280577 -:100AA000F80181938F0121971C161D06B4F381E094 -:100AB00090E0DF91CF911F910F91FF9008957727DC -:100AC0000E9407058093E6041092E70483E090E01B -:100AD0000E94B20108950E9491048093E60410924E -:100AE000E70483E090E00E94B20108950E9491041F -:100AF0008093E6041092E70483E090E00E94B20144 -:100B000008950E946F048093E6041092E70483E046 -:100B100090E00E94B20108950F930E945A048093BE -:100B2000E6041092E70483E090E00E94B2010F9186 -:100B300008950E9435048093E6041092E70483E050 -:100B400090E00E94B20108950E9418048093E60488 -:100B50001092E70483E090E00E94B2010895CF92E2 -:100B6000DF92EF92FF920F931F93CF93DF93CDB756 -:100B7000DEB78B01CDB6DEB62DB73EB7261B370BE1 -:100B80000FB6F8943EBF0FBE2DBFEDB6FEB608946B -:100B9000E11CF11CAB01B7010E943E058093E60405 -:100BA00020E030E00AC0F701E20FF31F8081F90175 -:100BB000E951FB4F80832F5F3F4F201731079CF394 -:100BC000F801E951FB4F1082C80103960E94B2015F -:100BD0000FB6F894DEBE0FBECDBEDF91CF911F9150 -:100BE0000F91FF90EF90DF90CF9008950F93FC014D -:100BF00080818093E504843611F1853648F482368D -:100C0000B1F08336E0F4803651F0813681F50BC0C7 -:100C1000873639F18836E9F0853649F515C0828185 -:100C20000E94A4052DC082810E94990529C00681D9 -:100C300025814481638182810E948C0521C063816A -:100C400082810E9481051CC0638182810E946B05A4 -:100C500017C0AF014C5F5F4F638182810E945F05C7 -:100C60000FC06381772782810E94AF0509C083E0AE -:100C70008093E6041092E70483E090E00E94B201C2 -:100C80000F91089587E280934D0685E280934C068C -:100C900090E290934E0610924F0628E030E0309399 -:100CA00051062093500683E28093590681E2809397 -:100CB000580690935A0610925B0630935D06209377 -:100CC0005C06089508956091650681E20E94A90975 -:100CD000089568E08BE20E94A90961E188E20E9420 -:100CE000A90968E08FE20E94A90961E18CE20E94F3 -:100CF000A90961E08FE20E94A90910929403109261 -:100D0000930365E083E20E94A90908950F931F935E -:100D10008C0160E480E20E94A909F80162816058B8 -:100D200084E00E94A909F8018281809364061F91E2 -:100D30000F9108950F931F93CF93DF93EC012885B4 -:100D4000398512161306DCF58E819F818217930771 -:100D50001CF568E083E20E94A90900E010E00FC0E2 -:100D60008A859B85E80FF91F608181E20E94A909AD -:100D70008E819F8101969F838E830F5F1F4FEE812F -:100D8000FF8188859985083011051CF4E817F9075B -:100D90003CF3E817F90724F061E087E20E94A90913 -:100DA0008B81813031F465E089810E94A9091B8221 -:100DB00006C061E089810E94A90981E08B83DF91EF -:100DC000CF911F910F910895CF93DF93CDB7DEB7E9 -:100DD00024970FB6F894DEBF0FBECDBFDC01FC0137 -:100DE0002281338110925F0610925E0681E080932B -:100DF0005B06832F99278230D9F0833069F18130E7 -:100E000009F057C080913806992790936106809326 -:100E1000600688E396E0909363068093620686817D -:100E200097818034910509F044C088E090E029C0A2 -:100E3000FD01868197819093610680936006E22F81 -:100E4000FF27EE0FFF1F80914A0690914B06E80F97 -:100E5000F91F8081918129C02223C1F0E22FFF2751 -:100E6000EE0FFF1F8091A3039091A403E80FF91FD9 -:100E70000190F081E02DF0936306E093620680819B -:100E80009927909361068093600613C094E099833C -:100E900083E08A8389E08B839C8384E090E0909355 -:100EA000610680936006CE0101969093630680935D -:100EB000620688E596E00E949A0624960FB6F8949A -:100EC000DEBF0FBECDBFDF91CF910895CF93DF93EB -:100ED00082E20E948409C82FDD27C5FF1AC068E09E -:100EE00083E20E94A909C6FF10C020915E063091DE -:100EF0005F068091600690916106281739072CF4EF -:100F000088E596E00E949A0604C061E087E20E94AC -:100F1000A909DF91CF9108951F93CF93DF9388E0C4 -:100F20000E948409182FC82FDD27C6FF18C060E073 -:100F300085E00E94A90960E884E00E94A90960E0B8 -:100F400080E20E94A90968E083E20E94A90961E0A9 -:100F500087E20E94A90962E085E00E94A909C4FF16 -:100F600004C060EC89E00E94A90917FF04C060ED8D -:100F700089E00E94A909DF91CF911F9108958AE02D -:100F80000E948409992780FF03C00E946607089584 -:100F900081FF0DC08AE20E9484098091250681307C -:100FA00061F4E0912806F09129060995089582E3FD -:100FB0000E9484098AE30E94840908958EE00E94B9 -:100FC000840968E08FE20E94A90961E08FE20E9433 -:100FD000A909209160063091610680915C0690918C -:100FE0005D06821793075CF468E083E20E94A9091A -:100FF00061E087E20E94A90981E080935B06089581 -:10100000AF92BF92CF92DF92EF92FF920F931F9316 -:10101000CF93DF93CDB7DEB728970FB6F894DEBF36 -:101020000FBECDBF86E20E94840986FF7EC08E017E -:101030000F5F1F4F580169E0C62ED12CCC0EDD1E6C -:1010400080914C060E948409F80181938F017501FB -:10105000EC15FD05A9F768E087E20E94A90968E0A0 -:1010600083E20E94A90980E20E9484098F77682F99 -:1010700080E20E94A9098981992780769070803248 -:10108000910509F440C080349105D1F1892BF1F527 -:10109000F50181818630D9F0873048F48130F1F153 -:1010A0008130C8F08330D1F1853081F521C089309D -:1010B00019F18A3018F4883049F505C08A3071F189 -:1010C0008B3021F520C0C5010E94630627C0C501F1 -:1010D0000E94E40623C068E083E20E94A90961E05F -:1010E00081E20E94A90960E081E20E94A9090BC087 -:1010F000C5010E94860612C0C5010E9469060EC085 -:10110000C5010E94620965E083E206C080E20E9498 -:1011100084098058682F80E20E94A909F701808124 -:101120008823D1F465E083E215C0209160063091F8 -:10113000610680915C0690915D068217930764F4C6 -:10114000109261061092600668E083E20E94A9098D -:1011500061E087E20E94A90928960FB6F894DEBFE5 -:101160000FBECDBFDF91CF911F910F91FF90EF90F8 -:10117000DF90CF90BF90AF900895CF92DF92EF9223 -:10118000FF920F931F93CF93DF93CDB7DEB7C05479 -:10119000D0400FB6F894DEBF0FBECDBF8CE00E94EA -:1011A0008409992780FF03C00E9400087BC081FF4B -:1011B0002AC08EE20E9484098DE20E9484098983FC -:1011C0008E010F5F1F4F6801FFE3EF2EF12CE00E41 -:1011D000F11E0F5F1F4F0E947209F80180830E15E8 -:1011E0001F05B9F780913603813031F4E09139035E -:1011F000F0913A03C601099568E08FE20E94A909BF -:1012000061E08FE22BC082FF2CC086E30E9484093C -:1012100085E30E94840989838E010F5F1F4F680157 -:10122000EFE3EE2EF12CE00EF11E0F5F1F4F0E9438 -:101230007209F80180830E151F05B9F780913703F5 -:10124000813031F4E0913B03F0913C03C6010995F4 -:1012500068E087E30E94A90961E087E30E94A90989 -:1012600021C083FF1FC08EE30E9484098E010F5F9F -:101270001F4F680171E4E72EF12CEC0EFD1E8DE38B -:101280000E948409F80181938F01EE15FF05B9F7DB -:1012900080913803813031F4E0913903F0913A03C1 -:1012A000C6010995C05CDF4F0FB6F894DEBF0FBED4 -:1012B000CDBFDF91CF911F910F91FF90EF90DF9005 -:1012C000CF9008950895089581E080936A0080E1A9 -:1012D0008DBB83B3876083BB84B3836084BB3F9A39 -:1012E000479A089588B1805888B984B322E082274C -:1012F00084BB0000000080B198B1905898B994B3B5 -:10130000922794BB992708959FEF91B982B988B12C -:10131000805888B984B395E0892784BB88B1805808 -:1013200088B984B3892784BB000011B80E94720970 -:101330009927089582B988B1805888B984B391E01B -:10134000892784BB88B1805888B984B3892784BB36 -:10135000089582B98FEF81B988B1805888B984B374 -:1013600095E0892784BB88B1805888B984B38927E0 -:1013700084BB862F0E949A090895089582E1809384 -:10138000380681E08093390680E191E090933B0636 -:1013900080933A0610923C0610923D0610923E064B -:1013A00088E080933F06109241061092400610920A -:1013B000430610924206109245061092440610927F -:1013C000460610924706109248061092490610925F -:1013D00036031092370310923803109225061092AC -:1013E00026061092270610922F0610922E061092B3 -:1013F000A2031092A10308959093410680934006A2 -:10140000709343066093420650934506409344060A -:101410000895909341068093400608959093430663 -:10142000809342060895909345068093440608955C -:1014300080933C06089580933D06089580933E0670 -:101440000895CF93DF939C01CB01E0912E06F0919C -:101450002F0662E070E00E9414220FC0A081B181CB -:101460008281823039F4ED018D81992782179307AB -:1014700009F468870780F085E02D309779F7DF91D0 -:10148000CF910895CF93DF939C01E0912E06F091C8 -:101490002F0614C0A081B1818281843061F48481DF -:1014A00099278217930739F486819927861797071A -:1014B00011F4ED014B830780F085E02D309751F753 -:1014C000DF91CF910895BF92CF92DF92EF92FF927A -:1014D0000F931F93CF93DF936C01162FF42EB22E30 -:1014E000C0912E06D0912F062097A1F489E090E0BC -:1014F0000E941621FC0190932F0680932E06D18224 -:10150000C082138310861782F282B4820583E6823A -:1015100015C0EC018F8198850097D9F789E090E09C -:101520000E941621FC0198878F83D182C082138389 -:10153000F282B4820583E68210861782DF91CF9112 -:101540001F910F91FF90EF90DF90CF90BF90089583 -:10155000EF92FF921F93CF93DF937C01C091A10381 -:10156000D091A203209711F011E012C085E090E025 -:101570000E941621FC019093A2038093A103F182A3 -:10158000E08212821482138210E012C01F5FEC010D -:101590008B819C810097D1F785E090E00E94162115 -:1015A000FC019C838B83F182E0821283148213827C -:1015B000812F9927DF91CF911F91FF90EF90089590 -:1015C000EF92FF920F931F93CF93DF93E091A103CC -:1015D000F091A20380E090E00380F481E02D019679 -:1015E0003097D1F7880F991F0E9416219093A4037A -:1015F0008093A3030091A1031091A203E801E88066 -:10160000F9808A81C82FDD27CC0FDD1F8091A303CD -:101610009091A403C80FD91FF701808199270E94D8 -:1016200016219983888320E030E017C0E801EA8121 -:10163000FF27EE0FFF1F8091A3039091A403E80FF3 -:10164000F91F0190F081E02DE20FF31FD701A20FE7 -:10165000B31F8C9180832F5F3F4FF70180819927C3 -:10166000281739071CF3E8018B819C81009711F042 -:101670008C01C4CFDF91CF911F910F91FF90EF901C -:1016800008954F925F926F927F928F929F92AF9246 -:10169000BF92CF92DF92EF92FF920F931F93CF935F -:1016A000DF93E0912E06F0912F066624772409C07F -:1016B0008281823019F40894611C711C0780F085C6 -:1016C000E02D3097A9F74301880C991CC4010E94B2 -:1016D000162190934B0680934A06E1E0EE2EF12C02 -:1016E000AA24BB2455C0E0912E06F0912F0679E084 -:1016F000C72ED12C15C0A081B181848199278E1568 -:101700009F0519F48381C80ED11CED018D818E15C2 -:1017100021F48281823009F45D010780F085E02D9B -:10172000309749F700914A0610914B06025010403D -:10173000080D191DC6010E941621F80191838083AE -:1017400020E030E0E0914A06F0914B06E80DF91DEB -:1017500032970190F081E02DE20FF31FD501A20F27 -:10176000B31F8C9180832F5F3F4F2930310551F794 -:10177000E0914A06F0914B06E80DF91D3297019071 -:10178000F081E02D8C2D875F82830894E11CF11C91 -:101790006E147F040CF0A7CF61E0C62ED12C59E067 -:1017A000A52EB12C4424552442E0842E912CA1C0B6 -:1017B000A0912E06B0912F0612C0ED91FC911197C9 -:1017C0008181823049F4858199278C159D0521F40A -:1017D0008481482E552405C0ED01AF81B88510974E -:1017E00061F731E0E32EF12C79C060912E06709103 -:1017F0002F066DC0FB01C081D1818981843009F041 -:1018000063C0868199278E159F0509F05DC084818C -:1018100099278C159D0509F057C0950140E050E0CF -:10182000E0914A06F0914B06E80DF91D32970190C0 -:10183000F081E02DE20FF31FDE01A40FB51F8C91A4 -:1018400080832F5F3F4F4F5F5F4F4930510541F716 -:1018500089E090E0A80EB91EC0912E06D0912F0607 -:1018600031C08A81853059F58C8199278C159D0569 -:1018700031F58D8199278E159F0509F5088119810C -:10188000950140E050E0E0914A06F0914B06E80DEA -:10189000F91D32970190F081E02DE20FF31FD8017E -:1018A000A40FB51F8C9180832F5F3F4F4F5F5F4F19 -:1018B0004730510541F7E7E0F0E0AE0EBF1E0F8064 -:1018C000D885C02D209769F6EB016F817885611569 -:1018D000710509F08FCF0894E11CF11C4E145F04D0 -:1018E0000CF083CF0894C11CD11CE2E0F0E08E0E16 -:1018F0009F1E6C147D040CF05BCFDF91CF911F9184 -:101900000F91FF90EF90DF90CF90BF90AF909F909E -:101910008F907F906F905F904F9008956F927F921D -:101920008F929F92AF92BF92CF92DF92EF92FF92EF -:101930000F93CF93DF935C013B014901E0912E06A9 -:10194000F0912F0616C0A081B18184819927A81635 -:10195000B90661F4868199278615970539F4828145 -:10196000843021F4ED018C818F5F8C830780F085BA -:10197000E02D309741F787E090E00E941621FC01AE -:1019800087E0808385E0818382820383F582E4821D -:10199000C682EE24062D2A2D45E067E0CF010E9485 -:1019A000630ADF91CF910F91FF90EF90DF90CF907E -:1019B000BF90AF909F908F907F906F900895AF925F -:1019C000BF92CF92DF92EF92FF920F93FC01A1148E -:1019D000B10401F14230510571F04330510599F0E5 -:1019E00041305105B9F481E080932506B092290673 -:1019F000A09228060FC081E080932606B0922B06A5 -:101A0000A0922A0607C081E080932706B0922D0697 -:101A1000A0922C0620583F4FCF010E948E0C0F91B0 -:101A2000FF90EF90DF90CF90BF90AF900895AF926E -:101A3000BF92CF92DF92EF92FF920F93FC01423060 -:101A4000510571F04330510599F041305105B9F419 -:101A500081E080933603B0923A03A09239030FC01D -:101A600081E080933703B0923C03A0923B0307C010 -:101A700081E080933803B0923E03A0923D03CF01F2 -:101A80000E948E0C0F91FF90EF90DF90CF90BF904F -:101A9000AF900895CF92DF92EF920F931F93CF9361 -:101AA000DF936C018B01A0912E06B0912F06C0E050 -:101AB000D0E014C02D913C911197F90185818C15CE -:101AC00051F4FD018281823031F4F90184818F5F0C -:101AD0008483C82FDD27FD01A781B085109751F7BA -:101AE00089E090E00E941621FC0189E0808384E077 -:101AF00081830283138214821582168217821086D4 -:101B0000EC2E00E02C2D44E069E0CF010E94630A36 -:101B1000CE01DF91CF911F910F91EF90DF90CF9089 -:101B20000895BF92CF92DF92EF92FF920F931F938F -:101B3000CF93DF936C017B01142FB22EA0912E0660 -:101B4000B0912F06C0E0D0E014C02D913C911197C8 -:101B5000F90185818C1551F4FD018281823031F4C7 -:101B6000F90184818F5F8483C82FDD27FD01A78160 -:101B7000B085109751F789E090E00E941621FC0192 -:101B800089E0808384E08183E2821382148215835A -:101B9000B68207831086EC2E00E02C2D44E069E02D -:101BA000CF010E94630ACE01DF91CF911F910F9167 -:101BB000FF90EF90DF90CF90BF900895EF920F933A -:101BC0001F93109149061F5F1093490689E090E02A -:101BD0000E941621FC0189E0808389E090E09383D4 -:101BE000828382E0818314821583168280EA878350 -:101BF0008AE18087EE2400E020E042E069E0CF0146 -:101C00000E94630A812F99271F910F91EF900895E9 -:101C1000CF93DF93EC01FC0101900020E9F7E81B72 -:101C2000F90BCF01880F991F0E9416219C01FE011C -:101C300001900020E9F7EC1BFD0BEE0FFF1FDC010C -:101C4000EC9383E0F901818340E050E009C0FE019C -:101C5000E40FF51F80818C93FD0111824F5F5F4F70 -:101C60001296FE0101900020E9F73197EC1BFD0B65 -:101C70004E175F0760F3C9010E94A80A9927DF91F8 -:101C8000CF910895EF92FF920F931F93CF93DF931D -:101C90008C017B01CA010E94080E9C01E0912E0676 -:101CA000F0912F0614C0A081B1818281843061F44B -:101CB000848199278017910739F4868199278E1599 -:101CC0009F0511F4ED0128870780F085E02D3097FE -:101CD00051F7DF91CF911F910F91FF90EF900895F1 -:101CE0000F931F93CF93DF938C01CB010E94080EBB -:101CF0009C01E0912E06F0912F060FC0A081B181CA -:101D00008281823039F4ED018D8199278017910706 -:101D100009F42E830780F085E02D309779F7DF9165 -:101D2000CF911F910F9108950E94080E1816190661 -:101D300014F48093480608950E94080E1816190698 -:101D400014F48093470608950E94080E1816190689 -:101D500014F48093460608951F9386E00E94840938 -:101D6000992786FF03C00E94BD080EC082FF03C0F2 -:101D70000E94BF0709C081FF03C00E948C0704C0F6 -:101D800084FF02C00E94DE0787E00E948409182FAA -:101D900060E087E00E94A909612F87E00E94A909FD -:101DA0001F91089562E081E00E94A90908950E94B0 -:101DB000410B0E94E00A0E94420661E080E00E941E -:101DC000A90980E00E94840980FDFBCF62E081E0E8 -:101DD0000E94A90960E884E00E94A90960E480E209 -:101DE0000E94A90968E083E20E94A90969E087E2EC -:101DF0000E94A9096FE08DE00E94A9096FE08BE0C5 -:101E00000E94A90968ED89E00E94A90963E38FE0B7 -:101E10000E94A90966ED87E00E94A90962E085E0B9 -:101E20000E94A9096CEC80E00E94A90908958EEC3B -:101E300080933F0381E080936E0080913F0386BDD5 -:101E400083E084BD08950895089583E08093E504B8 -:101E500081E08093E6048BE08093E7042FE62093F3 -:101E6000E80493E69093E90484E78093EA042093DE -:101E7000EB049093EC0481E68093ED048EE680936E -:101E8000EE048FE58093EF0480E38093F00481E318 -:101E90008093F1041092F2048EE090E00E94B2016F -:101EA0000895FC018081833011F40E94250F08956C -:101EB0001F9311E0812F0E94631060E0812F0E9428 -:101EC00037111F5F1431B1F718E1812F0E946310A1 -:101ED00060E0812F0E9437111F5F1B32B1F71F9105 -:101EE0000895CF93DF93DC01EC01EA81FB8121911E -:101EF0008E81815019F48981E81BF109ED01FB8382 -:101F0000EA838E839FB7F8948C9181508C939FBF06 -:101F1000822F9927DF91CF910895FC01108275835C -:101F20006483738362834183478346830895CF9399 -:101F3000DF93DC019C91ED018981981718F080E016 -:101F400090E016C0ED01EC81FD8161938F8181509D -:101F500019F48981E81BF109ED018F83FD83EC837E -:101F60009FB7F8948C918F5F8C939FBF81E090E036 -:101F7000DF91CF910895FC0180818823E9F3CF019F -:101F80000E94710F99270895FC018081882319F41C -:101F90008FEF9FEF0895CF010E94710F9927089549 -:101FA00081E090E0089581E090E0089581E090E084 -:101FB000089581E090E00895CF93DF93CDB7DEB729 -:101FC00022970FB6F894DEBF0FBECDBF982F815079 -:101FD000833120F08751833108F066C0E92FFF2755 -:101FE000E15CFC4F82E08183892F9927AA27BB27D8 -:101FF000FC013197EC32F10508F056C0E65BFF4F6B -:10200000EE0FFF1F0590F491E02D09946D9A43C0E7 -:102010006E9A45C06F9A3FC0209A41C0219A3BC03A -:10202000229A3DC0239A37C0249A39C0259A33C0DA -:10203000269A35C0279A2FC0509A31C0519A2BC08A -:10204000529A2DC0539A27C0549A29C0559A23C03A -:10205000569A25C0579A1FC0389A21C0399A1BC07A -:102060003A9A1DC03B9A17C03C9A19C0879A13C070 -:10207000869A15C0859A0FC0849A11C0839A0BC0A6 -:10208000829A0DC0699A07C0689A09C0689A03C00D -:10209000699A05C06A9A81E090E008C06B9AE1E015 -:1020A000F0E0FA83E98304C084E090E09A838983B6 -:1020B00089819A8122960FB6F894DEBF0FBECDBFFC -:1020C000DF91CF910895982F8150833130F087515F -:1020D000833118F084E090E00895892F0E94DC0F8E -:1020E00081E090E00895CF93DF93CDB7DEB72297DC -:1020F0000FB6F894DEBF0FBECDBF982F815083314D -:1021000020F08751833108F066C0E92FFF27E15C9A -:10211000FC4F81E08183892F9927AA27BB27FC01E7 -:102120003197EC32F10508F056C0EA58FF4FEE0F38 -:10213000FF1F0590F491E02D09946D9843C06E98AF -:1021400045C06F983FC0209841C021983BC022985D -:102150003DC0239837C0249839C0259833C02698AD -:1021600035C027982FC0509831C051982BC0529835 -:102170002DC0539827C0549829C0559823C056980D -:1021800025C057981FC0389821C039981BC03A986D -:102190001DC03B9817C03C9819C0879813C08698FB -:1021A00015C085980FC0849811C083980BC0829881 -:1021B0000DC0699807C0689809C0689803C06998FD -:1021C00005C06A9881E090E008C06B98E1E0F0E01B -:1021D000FA83E98304C084E090E09A83898389814B -:1021E0009A8122960FB6F894DEBF0FBECDBFDF9165 -:1021F000CF910895FB011082833091F0843028F450 -:10220000813051F0823029F409C0843059F0853092 -:1022100059F085E090E0089583B107C086B105C00C -:1022200089B103C08CB101C08FB1808381E090E09F -:102230000895833091F0843028F4813051F0823059 -:1022400029F409C0843059F0853069F084E090E0C9 -:10225000089565B905C068B903C06BB901C06EB90E -:1022600081E090E0089561BB81E090E00895982FAF -:10227000E82FFF27E15CFC4F8181823019F086E076 -:1022800090E00895892F9927AA27BB27FC01319751 -:10229000EC32F10540F4EE55FF4FEE0FFF1F0590B5 -:1022A000F491E02D099484E090E00895662311F004 -:1022B000759AC5C07598C3C0662311F0769ABFC0E1 -:1022C0007698BDC0662311F0779AB9C07798B7C0E9 -:1022D000662311F0289AB3C02898B1C0662311F084 -:1022E000299AADC02998ABC0662311F02A9AA7C0DD -:1022F0002A98A5C0662311F02B9AA1C02B989FC0E5 -:10230000662311F02C9A9BC02C9899C0662311F07B -:102310002D9A95C02D9893C0662311F02E9A8FC0E8 -:102320002E988DC0662311F02F9A89C02F9887C0F0 -:10233000662311F0589A83C0589881C0662311F023 -:10234000599A7DC059987BC0662311F05A9A77C07C -:102350005A9875C0662311F05B9A71C05B986FC084 -:10236000662311F05C9A6BC05C9869C0662311F01B -:102370005D9A65C05D9863C0662311F05E9A5FC088 -:102380005E985DC0662311F05F9A59C05F9857C090 -:10239000662311F0409A53C0409851C0662311F053 -:1023A000419A4DC041984BC0662311F0429A47C0F4 -:1023B000429845C0662311F0439A41C043983FC0FC -:1023C000662311F0449A3BC0449839C0662311F04B -:1023D0008F9A35C08F9833C0662311F08E9A2FC024 -:1023E0008E982DC0662311F08D9A29C08D9827C034 -:1023F000662311F08C9A23C08C9821C0662311F0BB -:102400008B9A1DC08B981BC0662311F08A9A17C047 -:102410008A9815C0662311F0709A11C070980FC089 -:10242000662311F0719A0BC0719809C0662311F0F0 -:10243000729A05C0729803C0662321F0739A81E0F6 -:1024400090E00895739881E090E008951F93182F0D -:102450008150833130F08751833118F084E090E06F -:102460000FC0E12FFF27E15CFC4F83E08183812FC8 -:102470000E94DC0F61E0812F0E94371181E090E023 -:102480001F910895CF93DF93982FEB011882E82FC7 -:10249000FF27E15CFC4F8181813019F086E090E0FC -:1024A0007DC0892F9927AA27BB27FC013197EC32E1 -:1024B000F10540F4E253FF4FEE0FFF1F0590F4913A -:1024C000E02D099484E090E069C0659B65C062C01E -:1024D000669B62C05FC0679B5FC05CC0189B5CC0AE -:1024E00059C0199B59C056C01A9B56C053C01B9B5C -:1024F00053C050C01C9B50C04DC01D9B4DC04AC016 -:102500001E9B4AC047C01F9B47C044C0489B44C055 -:1025100041C0499B41C03EC04A9B3EC03BC04B9B13 -:102520003BC038C04C9B38C035C04D9B35C032C015 -:102530004E9B32C02FC04F9B2FC02CC0309B2CC055 -:1025400029C0319B29C026C0329B26C023C0339BA3 -:1025500023C020C0349B20C01DC07F9B1DC01AC05B -:102560007E9B1AC017C07D9B17C014C07C9B14C0F3 -:1025700011C07B9B11C00EC07A9B0EC00BC0609B2C -:102580000BC008C0619B08C005C0629B05C002C0AB -:10259000639B02C081E0888381E090E0DF91CF916E -:1025A0000895CF93DF93CDB7DEB721970FB6F89498 -:1025B000DEBF0FBECDBF9BE19093E504BE016F5F10 -:1025C0007F4F0E9442128093E60489818093E70442 -:1025D0001092E80484E090E00E94B20121960FB6C8 -:1025E000F894DEBF0FBECDBFDF91CF9108959AE181 -:1025F0009093E5040E9437118093E6041092E7045B -:1026000083E090E00E94B201089598E19093E50480 -:102610000E9419118093E6041092E70483E090E091 -:102620000E94B2010895982F89E18093E5049330C8 -:1026300099F0943028F4913059F0923029F40AC07E -:10264000943061F0953061F085E090E020E00BC0BF -:1026500023B107C026B105C029B103C02CB101C008 -:102660002FB181E090E08093E6042093E70410927C -:10267000E80484E090E00E94B201089597E190930D -:10268000E5040E9426128093E6041092E70483E09A -:1026900090E00E94B201089595E19093E5040E94B4 -:1026A00073108093E6041092E70483E090E00E94A8 -:1026B000B201089596E19093E5040E94DC0F8093A7 -:1026C000E6041092E70483E090E00E94B2010895CE -:1026D00084E18093E50481E08093E6041092E704AE -:1026E00083E090E00E94B201089582E18093E504C6 -:1026F00081E08093E6041092E70483E090E00E947A -:10270000B201089583E18093E50481E08093E604BB -:102710001092E70483E090E00E94B201089580E106 -:102720008093E50481E08093E6041092E70483E05F -:1027300090E00E94B201089591E19093E5040E9417 -:1027400063108093E6041092E70483E090E00E9417 -:10275000B2010895FC0180818531C9F1863180F490 -:10276000823131F1833130F48031D1F0813109F09F -:102770004CC01AC0833109F1843109F046C022C02F -:10278000883189F1893128F4863129F18731E9F5D9 -:1027900026C08A3189F18A3158F18B31B1F531C0C7 -:1027A00082810E948F13089582810E949C13089554 -:1027B000638182810E9475130895638182810E94E2 -:1027C00082130895638182810E9468130895828133 -:1027D0000E944C13089582810E945A1308958281A9 -:1027E0000E943E130895638182810E94051308951B -:1027F00082810E9413130895638182810E94F712DF -:10280000089582810E94D11208958093E50483E0A7 -:102810008093E6041092E70483E090E00E94B20106 -:102820000895E82F8152883018F084E090E00895F0 -:10283000FF27E15CFC4F84E0818381E090E0089514 -:10284000E82FFF27E15CFC4F8181843019F084E0A0 -:1028500090E00895118281E090E0089510927C004C -:10286000823039F0833069F0813041F082E090E0CD -:10287000089580917C00806480937C0081E090E0EA -:10288000089580917C00806C80937C0081E090E0D2 -:10289000089593E890937A0090917C00907F982B14 -:1028A00090937C0080917A00806480937A0080917C -:1028B0007A0086FDFCCF809178009091790020E02D -:1028C00030E040E050E080917A00806480937A00AC -:1028D00080917A0086FDFCCF8091780090917900FC -:1028E000480F591F2F5F3F4F2430310561F780910A -:1028F0007A008F7780937A00CA019695879596958E -:1029000087950895CF93DF93EB0119821882282FC2 -:102910003327F901E15CFC4F8181843019F086E0B6 -:1029200090E00AC088E290E0821B930B0E94491459 -:102930009983888381E090E0DF91CF91089593E2BD -:102940009093E5040E942E148093E6041092E7040D -:1029500083E090E00E94B2010895CF93DF93CDB75A -:10296000DEB722970FB6F894DEBF0FBECDBF92E25E -:102970009093E504BE016F5F7F4F0E9482148093A5 -:10298000E60429813A81832F99278093E7042093D5 -:10299000E8041092E90485E090E00E94B2012296DA -:1029A0000FB6F894DEBF0FBECDBFDF91CF91089573 -:1029B00091E29093E504E82FFF27E15CFC4F8181D1 -:1029C000843019F084E090E003C0118281E090E04F -:1029D0008093E6041092E70483E090E00E94B20145 -:1029E0000895E82F80E28093E5048E2F815288308D -:1029F00018F084E090E007C0FF27E15CFC4F84E022 -:102A0000818381E090E08093E6041092E70483E004 -:102A100090E00E94B2010895FC018081813271F042 -:102A2000823218F48032B1F405C0823259F0833218 -:102A300089F40CC082810E94F114089582810E9461 -:102A4000D814089582810E94AD14089582810E9455 -:102A50009F1408958093E50483E08093E604109228 -:102A6000E70483E090E00E94B2010895ECEBF0E00F -:102A70008081846080838BE080934C038CE0809322 -:102A80004D0381E090E00895ECEBF0E080818B7FD6 -:102A9000808310924C0310924D0381E090E00895E2 -:102AA0008093B800E9EBF0E080818C7F80838081A7 -:102AB000808381E090E008958091B9009927887F14 -:102AC000907008958091B90084EA8093BC00809151 -:102AD000BC0087FFFCCF81E090E0089584E98093FB -:102AE000BC008091BC0084FDFCCF81E090E00895A3 -:102AF000AC0120E030E00FC0FA01E20FF31F80814B -:102B00008093BB0084E88093BC008091BC0087FF69 -:102B1000FCCF2F5F3F4F2617370774F3089584E8E3 -:102B20008093BC008091BC0087FFFCCF8091BB00EC -:102B30009927089585E38093E50481E08093E60476 -:102B400020E030E00FC084E88093BC008091BC009E -:102B500087FFFCCF8091BB00F901E951FB4F8083D7 -:102B60002F5F3F4F2617370774F3FB01E951FB4FE7 -:102B70001082CB0103960E94B20108959B01BC0113 -:102B8000C9010E94781581E08093E6041092E70461 -:102B900083E090E00E94B201089584E98093BC0034 -:102BA0008091BC0084FDFCCF81E08093E60410920C -:102BB000E70483E090E00E94B20108958091B9009B -:102BC00084EA8093BC008091BC0087FFFCCF81E049 -:102BD0008093E6041092E70483E090E00E94B20143 -:102BE00008958093B800E9EBF0E080818C7F8083CA -:102BF0008081808381E08093E6041092E70483E083 -:102C000090E00E94B2010895ECEBF0E080818B7FB0 -:102C1000808310924C0310924D0381E08093E60470 -:102C20001092E70483E090E00E94B2010895ECEB7B -:102C3000F0E08081846080838BE080934C038CE0A3 -:102C400080934D0381E08093E6041092E70483E0D3 -:102C500090E00E94B2010895FC0180818093E50418 -:102C60008433D1F0853338F4813379F0823381F0C5 -:102C7000803331F507C08633E9F08633A0F087331F -:102C8000F9F41BC00E94171608950E9404160895B7 -:102C900082810E94F115089582813396BF019927A0 -:102CA0000E94BE15089563817727828199270E942B -:102CB0009A1508950E94DE1508950E94CD15089575 -:102CC00083E08093E6041092E70483E090E00E94A2 -:102CD000B2010895782F613079F0613050F06230A0 -:102CE00021F0633009F059C002C061E003C061E027 -:102CF00004C060E030E002C060E031E04330D9F071 -:102D0000443028F4413089F0423090F40CC0453012 -:102D100031F04530A0F0463009F03FC002C040E03D -:102D200005C040E006C041E007C041E050E005C0FA -:102D300041E050E006C040E051E020E003C040E048 -:102D400051E021E0239884B1866084B985B1817F08 -:102D500085B980E090E0772311F081E090E075E0A4 -:102D6000880F991F7A95E1F78065660F660F660FE9 -:102D7000682B330F330F362B352B440F432B4CBDB1 -:102D80002DBD88E0809345038AE08093460389E067 -:102D90008093470381E090E0089582E090E00895F9 -:102DA0001CBC1DBC109245031092460310924703B1 -:102DB00081E090E00895AC0120E030E009C0E60F2A -:102DC000F71F80818EBD0DB407FEFDCF2F5F3F4FF3 -:102DD000E22FFF27E417F50794F381E090E00895D0 -:102DE000DC0120E030E040E050E015C01EBC09C02E -:102DF00083E0493E58071CF088E090E008954F5F5B -:102E00005F4F0DB407FEF4CFFB01E20FF31F8EB549 -:102E100080832F5F3F4F2A173B0744F381E090E008 -:102E20000895CF93DF93EC01A0E0B0E020E030E024 -:102E300018C0FE01E20FF31F80818EBD08C01196FD -:102E400083E0A93EB8071CF088E090E00FC00DB405 -:102E500007FEF5CFFB01E20FF31F8EB580832F5FD6 -:102E60003F4F241735072CF381E090E0DF91CF919D -:102E70000895EF92FF920F931F938B01E5EEEE2ED4 -:102E8000E4E0FE2E23E42093E504B7016E5F7F4F5C -:102E9000A8010E9411178093E6040E5F1F4FE00EF9 -:102EA000F11EF7011082C80101960E94B2011F9124 -:102EB0000F91FF90EF900895EF92FF920F931F9361 -:102EC0008C01F5EEEF2EF4E0FF2E84E48093E50410 -:102ED000B7016E5F7F4FC8010E94F0168093E60431 -:102EE0000E5F1F4FE00EF11EF7011082C801019620 -:102EF0000E94B2011F910F91FF90EF90089593E40B -:102F00009093E50499270E94DB168093E6041092C3 -:102F1000E70483E090E00E94B201089581E4809389 -:102F2000E5040E94D0168093E6041092E70483E043 -:102F300090E00E94B201089590E49093E5040E940D -:102F40006A168093E6041092E70483E090E00E9402 -:102F5000B2010895CF93DF93EC0188818334A9F007 -:102F6000843428F4803441F0813409F50BC0843472 -:102F700099F08534E1F414C04C816B818A810E9400 -:102F80009C1720C00E948E171DC0BE016D5F7F4F31 -:102F90008A810E947F1716C08A8199270E945C1738 -:102FA0006A817727CE0103960E9439170BC0809360 -:102FB000E50483E08093E6041092E70483E090E068 -:102FC0000E94B201DF91CF910895209A219A229A0E -:102FD0002398249A259A2C982D9881E08093500369 -:102FE00082E080935103809352038093530381E0E6 -:102FF00090E00895109250031092510310925203E2 -:103000001092530381E090E00895289829982A9817 -:1030100080E29EE40197F1F7289A8AE0982F9A952A -:10302000F1F72A9A299A8A95F1F70895282F299875 -:1030300087FD02C02A9801C02A9A8AE0982F9A95A3 -:10304000F1F7299A8A95F1F7299826FF02C02A9A62 -:1030500001C02A988AE0982F9A95F1F7299A8A95C3 -:10306000F1F70895282F220F30E0299827FF02C09A -:103070002A9A01C02A988AE0982F9A95F1F7299AFE -:103080008A95F1F73F5F373011F0220FEECF0895A8 -:10309000282F30E0299827FF02C02A9A01C02A98D9 -:1030A0008AE0982F9A95F1F7299A8A95F1F73F5F70 -:1030B000383011F0220FEECF089529982A988AE02F -:1030C000982F9A95F1F7299A982F9A95F1F72998C0 -:1030D0002898982F9A95F1F7299A982F9A95F1F7B1 -:1030E00029988A95F1F7289A80E090E00895299828 -:1030F00028982A982B9A08950E94051880E30E9428 -:10310000161880E60E94321808950E94051880E083 -:103110000E94161880E00E9432180E9477180895C5 -:103120000F931F93182F062F0E94051880E40E940A -:103130001618812F0E943218802F0E94481881E0B3 -:1031400090E01F910F9108951F93182F0E9405186A -:1031500080EC0E941618812F0E9432180E945D1880 -:1031600099271F91089529988AE08A95F1F72A985E -:1031700090E030E0990F299A2AE0822F8A95F1F7A2 -:1031800029981B999F5F822F8A95F1F73F5F38300E -:1031900089F72898299A822F8A95F1F7289A2998F1 -:1031A0002A95F1F7892F992708951F93182F0E94C8 -:1031B000051880E80E941618812F0E9432180E947C -:1031C000B31899271F910895DF92EF92FF920F9302 -:1031D0001F93CF93DF93D82E7B018A01C0E0D0E00C -:1031E00009C08D2D8C0F0E94D518F801EC0FFD1F22 -:1031F00080832196CE15DF05A1F781E090E0DF9175 -:10320000CF911F910F91FF90EF90DF9008950F9352 -:103210001F93082F162F0E947C18612F802F0E9469 -:10322000901881E090E01F910F910895DF92EF9246 -:10323000FF920F931F93CF93DF93D82E7B018A01C8 -:10324000C0E0D0E009C0F801EC0FFD1F60818D2DBA -:103250008C0F0E9407192196CE15DF05A1F781E09A -:1032600090E0DF91CF911F910F91FF90EF90DF9051 -:10327000089594E09093E5040E9416198093E60463 -:103280001092E70483E090E00E94B2010895EF926B -:10329000FF920F931F938B0195EEE92E94E0F92E88 -:1032A00093E09093E504A7014E5F5F4F0E94E418FE -:1032B0008093E6040E5F1F4FE00EF11EF7011082AF -:1032C000C80101960E94B2011F910F91FF90EF90EB -:1032D000089582E08093E504109250031092510308 -:1032E000109252031092530381E08093E6041092EF -:1032F000E70483E090E00E94B201089581E08093AA -:10330000E5040E94E5178093E6041092E70483E049 -:1033100090E00E94B2010895FC018381823069F03F -:10332000833018F48130F1F405C0833049F08430E3 -:10333000C9F40FC00E947E1908950E94691908956A -:10334000AF014A5F5F4F6581772784810E944719EB -:103350000895AF014A5F5F4F6581772784810E949E -:103360003919089580818093E50483E08093E60411 -:103370001092E70483E090E00E94B20108951F924A -:103380000F920FB60F9211240F900FBE0F901F9047 -:1033900018959C010897029718F084E090E0089532 -:1033A000F901E15CFC4F8DE0818328303105B1F0FB -:1033B0002930310519F087E090E00895259A81E0E1 -:1033C00090E0909389008093880081E8809380004A -:1033D00089E08093810081E090E00895249A81E063 -:1033E0008093B30089E68093B00081E090E0089577 -:1033F0009C01FC01E15CFC4F81818D3019F086E07D -:1034000090E008952830310539F12930310519F05F -:1034100087E090E0089563307105B1F06430710584 -:1034200044F46130710561F06230710509F040C00B -:1034300009C06430710551F065307105C9F508C0E7 -:1034400081E007C082E005C083E003C084E001C0E2 -:1034500085E08093810029C064307105E9F0653012 -:10346000710554F46230710599F06330710594F47C -:1034700061307105E9F40AC06630710589F0663083 -:10348000710564F06730710599F40CC089E60BC0D2 -:103490008AE609C08BE607C08CE605C08DE603C04E -:1034A0008EE601C08FE68093B00081E090E0089541 -:1034B00081E090E008959C01FC01E15CFC4F81817A -:1034C0008D3019F086E090E008952830310569F0DC -:1034D0002930310519F087E090E008957093890054 -:1034E0006093880081E090E008956093B30081E0EC -:1034F00090E0089523E52093E5040E945B1A8093F1 -:10350000E6041092E70483E090E00E94B20108957F -:1035100022E52093E5040E94F8198093E6041092B6 -:10352000E70483E090E00E94B201089520E5209333 -:10353000E5040E94C9198093E6041092E70483E031 -:1035400090E00E94B2010895FC01E15CFC4F118201 -:103550008830910531F08930910531F086E090E0B6 -:1035600008951092B00004C0109281001092800063 -:103570000E94DC0F81E090E0089521E52093E504AE -:103580000E94A41A8093E6041092E70483E090E07E -:103590000E94B2010895FC018081813579F0823565 -:1035A00018F48035F1F405C0823569F08335C9F42B -:1035B00011C0828199270E94961A089582819927C5 -:1035C0000E94BD1A089563817727828199270E94FE -:1035D000881A089563817727828199270E947A1A31 -:1035E00008958093E50483E08093E6041092E70455 -:1035F00083E090E00E94B2010895CF93DF93CDB7AE -:10360000DEB7DF91CF910895089581E090E00895AD -:1036100008958A3310F4805301C087556A3310F43B -:10362000605301C067556F708295807F682B862F2D -:103630009927089508958230A1F0833028F48823D3 -:1036400061F0813039F40BC0843079F0843058F067 -:103650008530B9F080E090E0089582E107C08EE007 -:1036600005C088E003C086E001C082E08093E200EC -:103670008CE08093E30087E38093E40081E090E0B6 -:1036800008951092E2008CE08093E30087E380933A -:10369000E40081E090E00895813091F0813038F0CD -:1036A0008230E1F0833061F180E090E00895809114 -:1036B000DB008F778093DB008091DB008F7D16C06D -:1036C0008091DB0080688093DB008091DB008F7D40 -:1036D0008093DB008091DB0080610DC08091DB0076 -:1036E00080688093DB008091DB0080628093DB0048 -:1036F0008091DB008F7E8093DB0081E090E0089575 -:103700008091DB0080688093DB008091DB00806229 -:103710008093DB008091DB0080618093DB0081E09F -:1037200090E008951F93982F162F8FE080935103F8 -:103730008093520310927406442319F081E0809321 -:103740007406109268061092690610926A0610922A -:103750006B06ECE6F6E0119286E0E437F807D9F75D -:1037600020E030E0822F8295807F8093ED001092E0 -:10377000EE001092EF002F5F3F4F2F30310591F791 -:10378000892F0E941B1B892B89F0812F0E944C1BC3 -:10379000892B61F08091D80082608093D80080915D -:1037A000D90082FFFCCF81E090E002C082E090E08F -:1037B0001F9108958295807F8093ED0008959B016D -:1037C000AC0180917406882381F4822F8295880F42 -:1037D000807E8093F60063E0569547953795279550 -:1037E0006A95D1F72093F7000895DA01C90153E0F3 -:1037F000880F991FAA1FBB1F5A95D1F78760809326 -:10380000F400292F3A2F4B2F55272093F5009D01C7 -:10381000442755272093F6008B2F9927AA27BB27EB -:103820008093F7000895EF92FF920F931F9380917A -:1038300074068823C1F42091F20022952695277002 -:103840003327442755278091F300992703E0880FF9 -:10385000991F0A95E1F77C0100271127E22AF32A34 -:10386000042B152B33C02091F3008091F200E090DF -:10387000F1006091F0009927AA27BB27DC01992766 -:103880008827332744275527522F442733272227B9 -:10389000822B932BA42BB52BFF2400271127102F4D -:1038A0000F2DFE2CEE248E299F29A02BB12BE62E66 -:1038B000FF2400271127E82AF92A0A2B1B2B73E083 -:1038C00016950795F794E7947A95D1F7C801B70153 -:1038D0001F910F91FF90EF9008959B01AC01809193 -:1038E0007406882371F4822F8295880F807E8093DE -:1038F000F200E3E05695479537952795EA95D1F77D -:1039000025C073E0220F331F441F551F7A95D1F74E -:103910008091F0009927AA27BB2787709070A0702C -:10392000B070282B392B4A2B5B2B2093F000BB2740 -:10393000A52F942F832F8093F100CA01AA27BB27BC -:103940008093F200252F3327442755272093F30037 -:103950000895982F80917406882321F08091EF00BC -:10396000806103C08091EF008F7E8093EF009230E2 -:1039700091F1933028F4992359F0913031F422C019 -:103980009330E1F1943009F450C080E090E0089564 -:103990008091EF008F7B8093EF008091EF008F7715 -:1039A0008093EF008091EF008F7D8093EF008091F6 -:1039B000F0008B7F8093F0008091F4008B7F8093E8 -:1039C000F40030C08091EF0080648093EF0080911C -:1039D000EF008F771BC08091EF008F778093EF000F -:1039E0008091EF0080648093EF008091EF008F7DE5 -:1039F0008093EF008091F000846012C08091EF000E -:103A00008F7B8093EF008091EF0080688093EF00C0 -:103A10008091EF008F7D8093EF008091F0008B7F8D -:103A20008093F00081E090E008958091EF008F7B1B -:103A30008093EF008091EF0080688093EF00809189 -:103A4000EF0080628093EF008091F00084608093AB -:103A5000F00081E090E008959F92AF92BF92CF92E4 -:103A6000DF92EF92FF920F931F93E82F962E59014A -:103A70006A01C801B7012E2F2295207F2093ED0007 -:103A80004091DE00FF27EB51FD4F21E030E0008048 -:103A900002C0220F331F0A94E2F7422B4093DE004C -:103AA0000E94DF1BC601B5010E946D1C892D0E947A -:103AB000A91C892B19F482E090E002C081E090E01B -:103AC0001F910F91FF90EF90DF90CF90BF90AF903C -:103AD0009F9008958091EF0087FD04C08091EF00D2 -:103AE00086FF3CC08091EF0087FD0AC08091EF0007 -:103AF00086FF06C08091F00082FD02C081E02FC0E9 -:103B00008091EF0087FD0AC08091EF0086FF06C01C -:103B10008091F00082FF02C082E021C08091EF001E -:103B200087FF0AC08091EF0086FD06C08091F000FB -:103B300082FD02C083E013C08091EF0087FF0EC0BA -:103B40008091EF0086FD0AC08091EF0085FF06C0DE -:103B50008091F00082FF02C084E001C080E09927DC -:103B60000895982F893008F098E08091EF00807FC9 -:103B7000892B8093EF00FB0120E004C081918093AA -:103B8000FA002F5F2917D1F70895EF92FF920F9354 -:103B90001F93F62E8A018295807F8093ED000E940C -:103BA0006A1DE82EB8018F2D0E94B11D81E00E9490 -:103BB000A91C8091EE0086FFFCCF8091EE008F7BE8 -:103BC0008093EE008E2D0E94A91C81E090E01F9151 -:103BD0000F91FF90EF900895FF920F931F93F62E91 -:103BE0008A018295807F8093ED0084E00E94A91C69 -:103BF000B8018F2D0E94B11D1F910F91FF90089564 -:103C0000AC0120E030E0FA01E20FF31F8091FA00EE -:103C100080832F5F3F4F28303105A9F70895AEED1F -:103C2000B0E02C91E5EEF2E0E80FF11D81E090E0CC -:103C3000008002C0880F991F0A94E2F7282B2C936A -:103C40000895AEEDB0E02C91E5EEF2E0E80FF11D45 -:103C500081E090E0008002C0880F991F0A94E2F78B -:103C6000809582238C9308952091E0008091E1005B -:103C70009927982F88273327822B932B009779F049 -:103C800020E030E002C096958795422F2F5F3F4F8E -:103C900080FFF9CF4F3018F4842F992708958FEFC4 -:103CA00090E00895982F9295907F9093ED000E9458 -:103CB000211E80E00E94A91C81E090E00895CF932E -:103CC000DF931092510310925203C0E0D0E08C2F8A -:103CD0000E94521E2196CF30D105C9F78091D8009D -:103CE0008D7F8093D8008091D90082FDFCCF81E048 -:103CF00090E0DF91CF9108951F938295807F80930C -:103D0000ED000E946A1D182F82E00E94A91C80917C -:103D1000EE0086FFFCCF8091EE008F7B8093EE005B -:103D2000812F0E94A91C81E090E01F91089586E7F1 -:103D30008093E50481E08093E60480916806909189 -:103D40006906A0916A06B0916B068093E704292F5B -:103D50003A2F4B2F55272093E8049D0144275527E0 -:103D60002093E9048B2F9927AA27BB278093EA0485 -:103D7000109268061092690610926A0610926B06FD -:103D8000ACE6B6E026E030E08C91F901EB51FB4F58 -:103D900080831D922F5F3F4F2E303105A9F710927F -:103DA000F3048FE090E00E94B201089595E79093AC -:103DB000E5040E947C1E8093E6041092E70483E0F1 -:103DC00090E00E94B201089594E79093E5040E9468 -:103DD000521E8093E6041092E70483E090E00E9474 -:103DE000B201089592E79093E5040E94C51D809367 -:103DF000E6041092E70483E090E00E94B201089587 -:103E0000EF92FF920F931F9393E79093E5040E9424 -:103E10002C1D8093E6041092E70483E090E00E945A -:103E2000B2011F910F91FF90EF9008950E94EC1D39 -:103E300087E78093E50481E08093E6041092E7042D -:103E400083E090E00E94B201089581E78093E50449 -:103E50000E945F1E8093E6041092E70483E090E0E6 -:103E60000E94B2010895462F90E79093E50462E026 -:103E70000E94921B8093E6041092E70483E090E096 -:103E80000E94B2010895EF92FF920F931F93FC01DD -:103E90008081833701F1843748F48137C9F0823754 -:103EA00008F06BC0803709F081C00DC0853709F478 -:103EB0006CC0853708F45DC0863709F46AC087375F -:103EC00009F074C06BC0638182810E94331F79C086 -:103ED0000E94251F76C000002581332744275527DF -:103EE000542F432F322F222786819927AA27BB27B9 -:103EF000DC0199278827280F391F4A1F5B1F8481FF -:103F0000280F311D411D511D87819927AA27BB27E5 -:103F1000B82FAA2799278827280F391F4A1F5B1F08 -:103F2000E184FF2400271127102F0F2DFE2CEE24F3 -:103F300082859927AA27BB27DC0199278827E80EC5 -:103F4000F91E0A1F1B1F8085E80EF11C011D111DA3 -:103F500083859927AA27BB27B82FAA2799278827BF -:103F6000E80EF91E0A1F1B1F638182810E94001F39 -:103F700028C082810E94E41E24C0AF014C5F5F4FC5 -:103F8000638182810E94F21E1CC082810E94D61E23 -:103F900018C0828199270E94971E13C0AF014C5F01 -:103FA0005F4F638182810E94161F0BC08093E504DE -:103FB00083E08093E6041092E70483E090E00E949F -:103FC000B2011F910F91FF90EF9008951F920F92F1 -:103FD0000FB60F9211241F932F933F934F935F932C -:103FE0006F937F938F939F93AF93BF93EF93FF93C1 -:103FF0001091ED000E94341E8F3F31F18295807F39 -:104000008093ED000E94131C60936806709369060C -:1040100080936A0690936B068CE696E00E94001EE1 -:104020000E94131C609368067093690680936A0669 -:1040300090936B068091EE008F7D8093EE0083E07D -:104040000E94A91C1093ED00FF91EF91BF91AF91D9 -:104050009F918F917F916F915F914F913F912F91A0 -:104060001F910F900FBE0F901F901895DC0180E1FB -:10407000A030B80718F082E090E00895F999FECFDB -:104080009D0109C032BD21BD2F5F3F4FF89AE60F59 -:10409000F71F80B58083822F8A1BE82FFF27E41744 -:1040A000F50780F381E090E00895DC0180E1A03025 -:1040B000B80718F082E090E00895F999FECF9D01CD -:1040C0000AC032BD21BD2F5F3F4FE60FF71F808131 -:1040D00080BDFA9AF99A822F8A1BE82FFF27E417EE -:1040E000F50778F381E090E008950F931F938B011B -:1040F00021E82093E5040E9455208093E604109265 -:10410000E7041F930F9384EF92E09F938F930E9495 -:10411000FD1A83E090E00E94B2010F900F900F9083 -:104120000F901F910F910895CF92DF92EF92FF921F -:104130000F931F937B0105EE14E020E82093E50424 -:1041400022E0C22ED12CC00ED11EAB01B6010E94BE -:1041500036208093E60482E090E0E80EF91E0E0D12 -:104160001F1DF8011082DF92CF9281E093E09F93B0 -:104170008F930E94FD1AC70101960E94B2010F9011 -:104180000F900F900F901F910F91FF90EF90DF9085 -:10419000CF900895EF92FF920F931F93CF93DF93E9 -:1041A000EC018B819927F82EEE248A81E80EF11C10 -:1041B0008D819927182F00278C81080F111DFF92E0 -:1041C000EF921F930F938BE093E09F938F930E9446 -:1041D000FD1A88812DB73EB72A5F3F4F0FB6F8947E -:1041E0003EBF0FBE2DBF803819F0813869F405C07D -:1041F000B801C7010E94942012C02696A801BE01F2 -:10420000C7010E9475200BC08093E50483E0809372 -:10421000E6041092E70483E090E00E94B201DF918F -:10422000CF911F910F91FF90EF900895CF93DF935F -:10423000AC01029710F442E050E0A0917706B091F3 -:104240007806FD01C0E0D0E020E030E020C08081B1 -:1042500091818417950769F482819381209719F0E1 -:104260009B838A8304C090937806809377069F018E -:1042700032C04817590738F42115310519F0821753 -:10428000930708F49C01EF010280F381E02D309741 -:10429000F1F62115310599F1C901841B950B04979D -:1042A00008F4A901E0E0F0E028C08D919C911197FD -:1042B00082179307F9F44817590781F4ED018A81B1 -:1042C0009B81309719F09383828304C09093780682 -:1042D000809377069D012E5F3F4F4CC0841B950B4A -:1042E000FD01E80FF91F4193519302978D939C9321 -:1042F0009F0140C0FD01A281B3811097B1F680916A -:10430000750690917606892B41F480913203909145 -:104310003303909376068093750620913403309191 -:1043200035032115310549F48DB7282F33278091A6 -:10433000300390913103281B390BA0917506B09181 -:1043400076062A1B3B0B2417350790F0CA0102960C -:104350002817390768F09D012E5F3F4FC901840F70 -:10436000951F90937606809375064D935C9302C0DB -:1043700020E030E0C901DF91CF910895CF93DF9322 -:10438000009709F44EC0EC0122971B821A82A0917B -:104390007706B0917806109711F140E050E001C027 -:1043A000DC01AC17BD0700F1BB83AA83FE0121919C -:1043B0003191E20FF31FEA17FB0771F48D919C9185 -:1043C0001197280F391F2E5F3F4F39832883FD0136 -:1043D000828193819B838A834115510559F4D0933F -:1043E0007806C09377061DC0FD0182819381AD01DF -:1043F0000097B1F6FA01D383C28321913191E20F84 -:10440000F31FEC17FD0769F488819981280F391F84 -:104410002E5F3F4FFA01318320838A819B819383F2 -:104420008283DF91CF91089597FB092E07260AD04A -:1044300077FD04D00CD006D000201AF47095619559 -:104440007F4F0895F6F7909581959F4F0895AA1B89 -:10445000BB1B51E107C0AA1FBB1FA617B70710F06F -:10446000A61BB70B881F991F5A95A9F780959095A1 -:08447000BC01CD010895FFCF4E -:10447800456D62656464656450726F6A65637473E0 -:10448800004F63746F70757355534220496E74659D -:10449800726661636520436F6E766572746572201B -:1044A800616E6420492F4F20457874656E73696F7B -:1044B8006E003230303831313038006669727374CA -:1044C800207061636B6574206F662061206C6F6E6D -:1044D80067206D65737361676520286C656E677406 -:1044E800683A202564290A006F63746F7075732019 -:1044F8006C6F6E672072756E6E696E67206D65737E -:10450800736167650A006F63746F7075732E6C6FE3 -:104518006E675F696E646578203C206F63746F70A6 -:1045280075732E6C6F6E675F62797465730A006EBF -:104538006F74206C617374207061636B65743A20CA -:1045480064696666203E2036340A006C6173742004 -:104558007061636B65740A007061727365722C20F8 -:10456800636865636B3A2025582C20636F6D6D6115 -:104578006E643A2025580A0063616C6C696E672086 -:10458800696F5F7061727365720A0063616C6C6950 -:104598006E67206164635F7061727365720A00639D -:1045A800616C6C696E67206932635F7061727365F4 -:1045B800720A0063616C6C696E67207370695F7062 -:1045C80061727365720A0063616C6C696E67207052 -:1045D800776D5F7061727365720A0063616C6C69F4 -:1045E8006E672063616E5F7061727365720A006343 -:1045F800616C6C696E6720656570726F6D5F706164 -:10460800727365720A00756E6B6E6F776E20636DDC -:10461800640A00726563656976696E6720636F6D09 -:104628006D616E643A20255820286C656E67746841 -:104638003A202575290A00676574206E6578740A22 -:104648000067657420616E642065786563757465BC -:104658000A0009040000010203040506070001021C -:10466800030405067772697474656E3A2025730A27 -:1046780000726561643A2025730A00656570726F7F -:104688006D5F7061727365723A206C656E677468ED -:104698003A2025752C20616464723A2025750A0039 -:0646A8002000790600006D -:00000001FF diff --git a/firmware/octopus_relais.hex b/firmware/octopus_relais.hex deleted file mode 100644 index 68d0cd1..0000000 --- a/firmware/octopus_relais.hex +++ /dev/null @@ -1,959 +0,0 @@ -:100000000C94F6000C9415010C9415010C94150138 -:100010000C9415010C94C1030C9415010C9415015A -:100020000C9415010C9415010C9415010C941501F8 -:100030000C94A5190C9415010C9415010C94150140 -:100040000C94B0030C9415010C9417010C94150139 -:100050000C9415010C9415010C9415010C941501C8 -:100060000C9415010C9415010C9415010C941501B8 -:100070000C9415010C9415010C9415010C941501A8 -:100080000C9415010C9415010C9415019D0F9F0FF4 -:10009000A10FA30FA50FA70FA90FAB0FAD0FAF0FA8 -:1000A000B10FB30FB50FB70FB90FBB0FBD0FBF0F18 -:1000B000C10FFC0FFC0FFC0FFC0FFC0FFC0FC30F5C -:1000C000C50FC70FC90FCB0FCD0FCF0FD10FD50F56 -:1000D000DB0FDF0FE30FE70FEB0FEF0FF30FF50F62 -:1000E000F70FF90F2A102C102E1030103210341088 -:1000F000361038103A103C103E1040104210441098 -:10010000461048104A104C104E1089108910891062 -:100110008910891089105010521054105610581020 -:100120005A105C105E10621068106C107010741021 -:1001300078107C108010821084108610DF10E5107B -:10014000EB10F110F710FD10031109110F1115112B -:100150001B11211127112D11331139113F11451197 -:100160004B11DD10DD10DD10DD10DD10DD10511143 -:1001700057115D11631169116F1175117B11851193 -:100180008F119911A311AD11B711C111CD11D31157 -:10019000D911DF1120122312261229122C122F122C -:1001A0003212351238123B123E12411244124712DB -:1001B0004A124D125012531256121E121E121E12C5 -:1001C0001E121E121E1259125C125F12621265126A -:1001D0006E126B1268126B126E1271127412771219 -:1001E0007D127A127A127D128012831211241FBEA0 -:1001F000CFEFD0E1DEBFCDBF13E0A0E0B1E0E6E994 -:10020000F9E300E00BBF02C007900D92AC33B107D9 -:10021000D9F716E0ACE3B3E001C01D92A237B107F5 -:10022000E1F70E942F010C94C91C0C9400001F924E -:100230000F920FB60F9211240F900FBE0F901F90C8 -:100240001895AC0120E030E002C02F5F3F4FFA016B -:10025000E20FF31F80818823C1F7C90108956F92CF -:100260007F928F929F92AF92BF92CF92DF92EF9246 -:10027000FF920F93DF93CF9300D00F92CDB7DEB7ED -:10028000F8940E94FA080E947F0E8FEF87BB18BA7D -:100290000E94760981E897E10E94C10985E69CE009 -:1002A0000E94C60981E090E00E94CB09DE01119610 -:1002B000E6EFF2E083E001900D928150E1F7CE018C -:1002C00001960E94B40D80E091E00E94520E81E1FF -:1002D00091E00E944A0E82E491E00E94420E0E9448 -:1002E0008A0D4C0164EF71E00E94D90960E070E072 -:1002F000C4010E94FE0C3C0140E050E0BC01C4017E -:100300000E94FF092CE1A22E22E0B22ECC24DD2493 -:1003100090E4E92EF12C02E021E030E041E050E0F1 -:10032000B301C4010E94930C88E2A82E83E0B82E8A -:1003300021E030E041E050E0B301C4010E94CB0C69 -:1003400010929A031092990310929C0310929B03AF -:100350000E94AD1A8FE784BB8AE285BB0E94CD0361 -:1003600085E585BB0E94CD0315BA0E94050F0E944A -:10037000FA080E94840E7894FFCF0F931F93CF93B7 -:10038000DF938C018134910510F18091A503909148 -:10039000A603892BE1F41F930F938BE491E09F93C5 -:1003A0008F930E94A61A1092A2031092A103109399 -:1003B000A4030093A30381E090E09093A6038093AD -:1003C000A50300E410E00F900F900F900F9068E0ED -:1003D0008BE20E944309C0E0D0E00DC0E091A10390 -:1003E000F091A203EC0FFD1FE551FB4F608189E204 -:1003F0000E9443092196C017D10780F38091990389 -:1004000090919A03019749F467E08BE20E944309B7 -:1004100010929A03109299030AC063E08BE20E9443 -:10042000430981E090E090939A0380939903DF91D0 -:10043000CF911F910F910895CF93DF938091A503E2 -:100440009091A603019709F04CC088E791E09F9333 -:100450008F930E94A61A2091A1033091A20380914C -:10046000A3039091A4030F900F9028173907C8F5A4 -:1004700086E991E09F938F930E94A61AC091A303EF -:10048000D091A4038091A1039091A203C81BD90B22 -:100490008091A1039091A203805C9F4F9093A2034F -:1004A0008093A1030F900F90C134D1055CF08FEBC6 -:1004B00091E09F938F930E94A61A80E490E00E949F -:1004C000BD010DC08BED91E09F938F930E94A61A02 -:1004D000CE010E94BD011092A6031092A5030F90B9 -:1004E0000F90DF91CF9108951F93CF93DF93EC018D -:1004F0001092A2031092A1031092A6031092A503DA -:100500008881182F12951F7090E09F938F93812FF1 -:1005100090E09F938F9388EE91E09F938F930E943A -:10052000A61A8DB79EB706960FB6F8949EBF0FBE5B -:100530008DBF143009F445C0153050F4113019F155 -:10054000113090F0123049F1133009F069C02FC01A -:10055000163009F44AC01630F0F1173009F44FC0D4 -:10056000183009F05DC052C08881863041F48A811C -:10057000813009F069C0CE010E94721965C0CE01B8 -:100580000E94FE0E61C088E092E09F938F930E94CC -:10059000A61ACE010E94591355C08BE192E09F9399 -:1005A0008F930E94A61ACE010E94A4144BC08FE222 -:1005B00092E09F938F930E94A61ACE010E94EC15A1 -:1005C00041C083E492E09F938F930E94A61ACE01CC -:1005D0000E94931737C087E592E09F938F930E9404 -:1005E000A61ACE010E94741A2DC08BE192E09F934F -:1005F0008F930E94A61ACE010E94A50523C08BE608 -:1006000092E09F938F930E94A61A1CC083E992E008 -:100610009F938F930E94A61ACE010E94591B12C06D -:100620008AEA92E09F938F930E94A61A8881809312 -:10063000EB0483E08093EC041092ED0483E090E0FF -:100640000E94BD010F900F90DF91CF911F910895EF -:10065000CF93DF93EC01898190E09F938F9387EB99 -:1006600092E09F938F930E94A61A80919B03909192 -:100670009C030F900F900F900F90019791F58BEDC9 -:1006800092E09F938F930E94A61A20E030E00F9093 -:100690000F90E0919D03F0919E03E20FF31FDE01A6 -:1006A000A20FB31F8C91E555FC4F80832F5F3F4F06 -:1006B0002034310571F780919D0390919E03805CF9 -:1006C0009F4F90939E0380939D0320919D033091B3 -:1006D0009E0380919F039091A00328173907E8F1AA -:1006E00027C085EE92E09F938F930E94A61A1092E6 -:1006F0009E0310929D0320E030E00F900F90E09158 -:100700009D03F0919E03E20FF31FDE01A20FB31FC2 -:100710008C91E555FC4F80832F5F3F4F203431058E -:1007200071F730939E0320939D038981803448F4B0 -:1007300010929C0310929B038BEA93E00E94740238 -:100740000CC081E090E090939C0380939B0389818F -:1007500090E09093A00380939F03DF91CF91089541 -:100760001F920F920FB60F9211248F930E94CF0EFB -:100770008091450382BF8F910F900FBE0F901F9005 -:1007800018951F920F920FB60F9211240E945A0EC5 -:100790000F900FBE0F901F90189520E040E45CE989 -:1007A000CA010197F1F72F5F2931D1F70895882306 -:1007B00021F0813059F084E008958EE080936F033A -:1007C0008093700388E18AB981E008958EE0809378 -:1007D00054038093550388E180939A0081E0089543 -:1007E000882321F0813071F084E0089510926F0326 -:1007F000109270031092900019B81AB810929500D8 -:1008000081E00895109254031092550310929800BD -:100810001092990010929A0010929D0081E0089524 -:10082000882321F0813039F084E0089520939000EE -:1008300069B981E00895209398006093990081E060 -:100840000895623011F492E001C090E0882321F015 -:10085000813061F084E0089580919500990F990F9F -:10086000990F982B9093950081E0089580919D00B9 -:10087000990F990F990F982B90939D0081E00895FF -:10088000663029F0673039F0653041F402C020E06D -:1008900006C020E001C021E090E002C021E091E02C -:1008A000882321F0813069F084E0089580919500DB -:1008B000220F220F990F922B982B9093950081E095 -:1008C000089580919D00220F220F990F922B982B53 -:1008D00090939D0081E00895653419F06F3419F408 -:1008E00005C021E001C020E090E002C021E091E0DD -:1008F000882321F0813079F084E00895809195007B -:100900002295220F207E9295907F922B982B909388 -:10091000950081E0089580919D002295220F207E10 -:100920009295907F922B982B90939D0081E0089553 -:10093000982FFA018230A0F084E008952191992344 -:1009400019F0913059F404C05D9BFECF2CB906C05C -:1009500080919B0085FFFCCF20939C0061507040EC -:100960006115710559F781E00895882321F08130E0 -:1009700039F084E008955D9BFECF6CB981E0089565 -:1009800080919B0085FFFCCF60939C0081E00895DF -:10099000E82FDB01823010F084E008959A0113C043 -:1009A000EE2321F0E13031F084E00AC05F9BFECFFE -:1009B0008CB106C080919B0087FFFCCF80919C008A -:1009C0008D93215030401216130654F381E00895A0 -:1009D000882321F0813031F084E008955F9BFECFC1 -:1009E0008CB1089580919B0087FFFCCF80919C0083 -:1009F000089570E00E9498048093EC041092ED0436 -:100A000083E090E00E94BD0108950E94400480931D -:100A1000EC041092ED0483E090E00E94BD01089583 -:100A20000E9440048093EC041092ED0483E090E077 -:100A30000E94BD0108950E9421048093EC0410924D -:100A4000ED0483E090E00E94BD0108950F930E94A1 -:100A500010048093EC041092ED0483E090E00E9477 -:100A6000BD010F9108950E94F0038093EC04109251 -:100A7000ED0483E090E00E94BD010895882321F0F9 -:100A8000813051F084E011C08EE080936F03809339 -:100A9000700388E18AB908C08EE080935403809384 -:100AA000550388E180939A0081E08093EC041092D2 -:100AB000ED0483E090E00E94BD010895CF92DF92A3 -:100AC000EF92FF920F931F93DF93CF93CDB7DEB7D3 -:100AD0008B01CDB6DEB62DB73EB7261B370B0FB652 -:100AE000F8943EBF0FBE2DBFEDB6FEB60894E11CD4 -:100AF000F11CAB01B7010E94C8048093EC0420E014 -:100B000030E00AC0F701E20FF31F8081F901E351E1 -:100B1000FB4F80832F5F3F4F201731079CF3F80175 -:100B2000E351FB4F1082C80103960E94BD010FB62E -:100B3000F894DEBE0FBECDBECF91DF911F910F9115 -:100B4000FF90EF90DF90CF9008950F93FC0180818C -:100B50008093EB048081843611F1853648F4823627 -:100B6000B1F08336E0F4803651F0813681F50BC068 -:100B7000873639F18836E9F0853649F515C0828126 -:100B80000E943E052DC082810E94330529C0068146 -:100B900025814481638182810E94260521C0638171 -:100BA00082810E941B051CC0638182810E94050511 -:100BB00017C0AF014C5F5F4F638182810E94F904CF -:100BC0000FC0638170E082810E945E0509C083E0EE -:100BD0008093EC041092ED0483E090E00E94BD014C -:100BE0000F91089587E28093530685E28093520621 -:100BF00090E2909354061092550628E030E030932E -:100C000057062093560683E280935F0681E2809325 -:100C10005E069093600610926106309363062093FF -:100C200062060895089560916B0681E20E9443096F -:100C3000089568E08BE20E94430961E188E20E9426 -:100C4000430968E08FE20E94430961E18CE20E945F -:100C5000430961E08FE20E94430910929A031092C7 -:100C6000990365E083E20E94430908950F931F935F -:100C70008C0160E480E20E944309F80162816058BF -:100C800084E00E944309F801828180936A061F91E3 -:100C90000F9108950F931F93CF93DF93EC01288555 -:100CA000398512161306DCF58E819F818217930712 -:100CB0001CF568E083E20E94430900E010E00FC0E9 -:100CC000EA85FB85E80FF91F608181E20E944309F4 -:100CD0008E819F8101969F838E830F5F1F4F8E8130 -:100CE0009F8128853985083011051CF482179307E8 -:100CF0003CF38217930724F061E087E20E944309E6 -:100D00008B81813031F465E089810E9443091B8227 -:100D100006C061E089810E94430981E08B83DF91F5 -:100D2000CF911F910F910895DF93CF9300D000D002 -:100D3000CDB7DEB7FC013281238110926506109297 -:100D4000640681E0809361062230F1F0233079F16E -:100D5000213009F057C080913E06809366061092BC -:100D600067068EE396E09093690680936806868115 -:100D700097818034910509F045C088E090E0909318 -:100D80006706809366063EC08681978190936706CA -:100D900080936606832F90E0880F991FE09150069C -:100DA000F0915106E80FF91F8081918127C033230C -:100DB000B9F0832F90E0880F991FE091A903F0917B -:100DC000AA03E80FF91F0190F081E02DF093690666 -:100DD000E09368068081809366061092670612C0D1 -:100DE00094E099832A8389E08B839C8384E090E05C -:100DF0009093670680936606CE01019690936906EC -:100E0000809368068EE596E00E944A060F900F9048 -:100E10000F900F90CF91DF910895CF93DF9382E2EF -:100E20000E940B09C82F85FF1AC068E083E20E9468 -:100E30004309C6FF10C02091640630916506809179 -:100E4000660690916706281739072CF48EE596E020 -:100E50000E944A0604C061E087E20E944309DF91D4 -:100E6000CF9108950F931F9388E00E940B09082FDC -:100E7000182F86FF18C060E085E00E94430960E8F3 -:100E800084E00E94430960E080E20E94430968E038 -:100E900083E20E94430961E087E20E94430962E025 -:100EA00085E00E94430914FF04C060EC89E00E94C1 -:100EB000430907FF04C060ED89E00E9443091F91C8 -:100EC0000F9108958AE00E940B0980FF03C00E94E1 -:100ED0000D07089581FF0DC08AE20E940B098091E1 -:100EE0002B06813061F4E0912E06F0912F060995D2 -:100EF000089582E30E940B098AE30E940B0908957A -:100F00008EE00E940B0968E08FE20E94430961E0D5 -:100F10008FE20E9443092091660630916706809116 -:100F2000620690916306821793075CF468E083E29F -:100F30000E94430961E087E20E94430981E08093B7 -:100F400061060895EF92FF920F931F93DF93CF9363 -:100F5000CDB7DEB728970FB6F894DEBF0FBECDBF72 -:100F600086E20E940B0986FF7FC08E010F5F1F4F34 -:100F700049E0E42EF12CEC0EFD1E809152060E94F9 -:100F80000B09F80181938F01EE15FF05B1F78E0172 -:100F90000F5F1F4F68E087E20E94430968E083E229 -:100FA0000E94430980E20E940B098F77682F80E23C -:100FB0000E944309898190E080769070803291058B -:100FC00009F440C080349105D1F1892BF1F5F80185 -:100FD00081818630D9F0873048F48130F1F1813059 -:100FE000C8F08330D1F1853081F521C0893019F105 -:100FF0008A3018F4883049F505C08A3071F18B3099 -:1010000021F520C060916B0681E225C0C8010E94D5 -:10101000940623C068E083E20E94430961E081E214 -:101020000E94430960E081E20E9443090BC0C801AD -:101030000E94360612C0C8010E9419060EC0C801DF -:101040000E94F80865E083E206C080E20E940B0976 -:101050008058682F80E20E944309F801808188232C -:10106000D1F465E083E215C02091660630916706F1 -:1010700080916206909163068217930764F4109240 -:1010800067061092660668E083E20E94430961E009 -:1010900087E20E94430928960FB6F894DEBF0FBE80 -:1010A000CDBFCF91DF911F910F91FF90EF900895E9 -:1010B000EF92FF920F931F93DF93CF93CDB7DEB7DD -:1010C000C054D0400FB6F894DEBF0FBECDBF8CE049 -:1010D0000E940B0980FF03C00E94A2077BC081FF12 -:1010E0002AC08EE20E940B098DE20E940B098983BF -:1010F0008E010F5F1F4F70E4E72EF12CEC0EFD1EEA -:101100000F5F1F4F0E943009F80180830E151F05E5 -:10111000B9F780913C03813039F4E0913F03F091BD -:101120004003CE010196099568E08FE20E944309D1 -:1011300061E08FE22BC082FF2CC086E30E940B0986 -:1011400085E30E940B0989838E010F5F1F4F60E4C6 -:10115000E62EF12CEC0EFD1E0F5F1F4F0E94300992 -:10116000F80180830E151F05B9F780913D0381308A -:1011700039F4E0914103F0914203CE0101960995C3 -:1011800068E087E30E94430961E087E30E94430926 -:1011900021C083FF1FC08EE30E940B098E010F5FE9 -:1011A0001F4F51E4E52EF12CEC0EFD1E8DE30E9445 -:1011B0000B09F80181938F01EE15FF05B9F78091B6 -:1011C0003E03813039F4E0913F03F0914003CE01BA -:1011D00001960995C05CDF4F0FB6F894DEBF0FBED5 -:1011E000CDBFCF91DF911F910F91FF90EF900895A8 -:1011F0000895089581E08ABF80E189BFE4E6F0E0C8 -:10120000808187608083E5E6F0E080818360808371 -:10121000A79AAF9A08959FEF9ABB8BBB85B380586E -:1012200085BBE5E6F0E0808195E08927808385B382 -:10123000805885BB80818927808300001ABA85B3D6 -:10124000805885BB808122E08227808300000000D7 -:1012500089B395B3905895BB908192279083089558 -:1012600085B3805885BBE5E6F0E0808122E08227E7 -:1012700080830000000089B395B3905895BB90819E -:101280009227908308958BBB8FEF8ABB85B38058DC -:1012900085BBE5E6F0E0808195E08927808385B312 -:1012A000805885BB8081892780836BBB85B380583C -:1012B00085BB808191E08927808385B3805885BB79 -:1012C00080818927808308958BBB85B3805885BB37 -:1012D000E5E6F0E0808191E08927808385B380583E -:1012E00085BB8081892780830895089582E180935A -:1012F0003E0681E080933F0680E191E090934106B5 -:1013000080934006109242061092430610924406C3 -:1013100088E0809345061092470610924606109288 -:1013200049061092480610924B0610924A061092F7 -:101330004C0610924D0610924E0610924F061092D7 -:101340003C0310923D0310923E0310922B06109224 -:101350002C0610922D06109235061092340610922B -:10136000A8031092A703089590934706809346061A -:10137000709349066093480650934B0640934A0683 -:1013800008959093470680934606089590934906E2 -:1013900080934806089590934B0680934A060895DB -:1013A00080934206089580934306089580934406EF -:1013B00008950F931F93CF93DF938C01CB01C091BE -:1013C0003406D091350662E070E00E94A21C10C085 -:1013D000988129818A81823041F4E92FF22F858119 -:1013E00090E08017910709F460870F80D885C02DA1 -:1013F000209771F7DF91CF911F910F910895CF93AF -:10140000DF939C01E0913406F091350614C0A08171 -:10141000B1818281843061F4848190E082179307E6 -:1014200039F4868190E08617970711F4ED014B831C -:101430000780F085E02D309751F7DF91CF91089527 -:101440008F929F92BF92CF92DF92EF92FF920F9373 -:101450001F93CF93DF934C01F62ED42EC22EB02EC5 -:10146000E0913406F0913506309799F489E090E0E8 -:101470000E94A31BFC019093350680933406918251 -:101480008082F38210861782D282C4820583E6822C -:1014900018C0CF010780F085E02D3097D1F78C017F -:1014A00089E090E00E94A31BFC01E80198878F83EC -:1014B00091828082F382D282C482B582E6821086D3 -:1014C0001782DF91CF911F910F91FF90EF90DF90E6 -:1014D000CF90BF909F908F900895EF92FF921F93AF -:1014E000CF93DF937C01C091A703D091A8032097ED -:1014F00011F011E012C085E090E00E94A31BFC01F6 -:101500009093A8038093A703F182E0821282148251 -:10151000138210E012C01F5FEC018B819C81009749 -:10152000D1F785E090E00E94A31BFC019C838B8394 -:10153000F182E082128314821382812FDF91CF9196 -:101540001F91FF90EF900895EF92FF920F931F93DA -:10155000CF93DF93E091A703F091A80380E090E0A0 -:101560000380F481E02D01963097D1F7880F991F01 -:101570000E94A31B8093A9039093AA03C091A70381 -:10158000D091A80301C0EC01E880F9808A8190E045 -:10159000880F991F0091A9031091AA03080F191F22 -:1015A000F701808190E00E94A31BF8018083918362 -:1015B00020E030E016C08A8190E0880F991FE0910A -:1015C000A903F091AA03E80FF91F0190F081E02D23 -:1015D000E20FF31FD701A20FB31F8C9180832F5FFF -:1015E0003F4FF701808190E02817390724F38B8162 -:1015F0009C81009741F6DF91CF911F910F91FF9051 -:10160000EF9008956F927F928F929F92AF92BF92C8 -:10161000CF92DF92EF92FF920F931F93CF93DF93BE -:10162000E0913406F0913506CC24DD2409C0828196 -:10163000823019F40894C11CD11C0780F085E02D7C -:101640003097A9F7C601880F991F0E94A31B8093AA -:101650005006909351060894C108D1085601AA0C6F -:10166000BB1C0894C11CD11CB1E06B2E712C8824CA -:10167000992451C0E0913406F0913506A9E0EA2E94 -:10168000F12C15C0A081B181848190E08615970569 -:1016900019F48381E80EF11CED018D81861521F48A -:1016A0008281823009F44D010780F085E02D30976A -:1016B00049F700915006109151060A0D1B1DC701F4 -:1016C0000E94A31BF8018083918320E030E0E09129 -:1016D0005006F0915106EA0DFB1D0190F081E02DBE -:1016E000E20FF31FD401A20FB31F8C9180832F5FF1 -:1016F0003F4F2930310559F7E0915006F0915106DE -:10170000EA0DFB1D0190F081E02D8E2D875F828315 -:101710000894611C711CC614D7040CF0ABCFE1E037 -:10172000EE2EF12C79E0A72EB12C662477248824A4 -:10173000992499C0A0913406B091350612C0ED915C -:10174000FC9111978181823049F4858190E08E155A -:101750009F0521F48481682E772405C0ED01AF81B7 -:10176000B885109761F701E010E072C0409134062F -:101770005091350667C0DA01ED91FC91818184308A -:1017800009F05DC0EA018E8190E08017910709F0B1 -:1017900056C08C8190E08E159F0509F050C0DF0186 -:1017A0009501BF01675F7F4FE0915006F0915106B0 -:1017B000E80DF91D0190F081E02DE20FF31F8D91EE -:1017C00080832F5F3F4FA617B70771F7E9E0F0E07E -:1017D000AE0EBF1EA0913406B09135062EC0ED01AD -:1017E0008A81853039F58C8190E08E159F0511F541 -:1017F0008D8190E080179107E9F4CD91DC911197EC -:101800009501BE01695F7F4FE0915006F09151064E -:10181000E80DF91D0190F081E02DE20FF31F899191 -:1018200080832F5F3F4FC617D70771F7E7E0F0E0DF -:10183000AE0EBF1EED01AF81B885109781F6FA019B -:10184000478150854115510509F095CF0F5F1F4F16 -:10185000601671060CF08ACF0894E11CF11C82E03E -:1018600090E0880E991ECE14DF040CF063CFDF9158 -:10187000CF911F910F91FF90EF90DF90CF90BF908D -:10188000AF909F908F907F906F9008958F929F92CE -:10189000AF92BF92CF92EF92FF920F931F93CF938D -:1018A000DF935C014B01122FE0913406F091350675 -:1018B00016C0A081B181848190E0A816B90661F4B8 -:1018C000868190E08815990539F48281843021F46D -:1018D000ED018C818F5F8C830780F085E02D309740 -:1018E00041F787E090E00E94A31BFC0187E0808322 -:1018F00085E0818312830383F582E482C682EE242D -:10190000082D2A2D45E067E0CF010E94200ADF91D3 -:10191000CF911F910F91FF90EF90CF90BF90AF901C -:101920009F908F900895AF92BF92CF92DF92EF92E7 -:10193000FF920F93FC01A114B10401F14230510553 -:1019400071F04330510599F041305105B9F481E00F -:1019500080932B06B0922F06A0922E060FC081E036 -:1019600080932C06B0923106A092300607C081E029 -:1019700080932D06B0923306A092320620583F4F36 -:10198000CF010E94460C0F91FF90EF90DF90CF9017 -:10199000BF90AF900895AF92BF92CF92DF92EF9237 -:1019A000FF920F93FC014230510571F04330510515 -:1019B00099F041305105B9F481E080933C03B09235 -:1019C0004003A0923F030FC081E080933D03B0929B -:1019D0004203A092410307C081E080933E03B0928E -:1019E0004403A0924303CF010E94460C0F91FF9045 -:1019F000EF90DF90CF90BF90AF900895EF920F934C -:101A00001F93CF93DF93182F062FA0913406B09128 -:101A10003506C0E0D0E014C02D913C911197F9013A -:101A20008581811751F4FD018281823031F4F90101 -:101A300084818F5F8483C82FD0E0FD01A781B085AA -:101A4000109751F789E090E00E94A31BFC0189E008 -:101A5000808384E08183028313821482158216823C -:101A600017821086EC2E00E0212F44E069E0CF01C0 -:101A70000E94200ACE01DF91CF911F910F91EF902C -:101A80000895DF92EF92FF920F931F93CF93DF930E -:101A9000182FE62EF42ED22EA0913406B0913506E2 -:101AA000C0E0D0E014C02D913C911197F9018581DF -:101AB000811751F4FD018281823031F4F901848172 -:101AC0008F5F8483C82FD0E0FD01A781B085109778 -:101AD00051F789E090E00E94A31BFC0189E080831C -:101AE00084E08183E28213821482F582D6820783A6 -:101AF0001086EC2E00E0212F44E069E0CF010E9427 -:101B0000200ACE01DF91CF911F910F91FF90EF90AE -:101B1000DF900895EF920F931F9310914F061F5F70 -:101B200010934F0689E090E00E94A31BFC0189E01E -:101B3000808389E090E09383828382E081831482B2 -:101B40001583168280EA87838AE18087EE2400E08D -:101B500020E042E069E0CF010E94200A812F90E05E -:101B60001F910F91EF9008950F931F93CF93DF93E1 -:101B70008C01FC0101900020E9F7E81BF90BCF0173 -:101B8000880F991F0E94A31BEC01F801019000200F -:101B9000E9F7E01BF10BEE0FFF1FE88323E0298339 -:101BA000AC0120E030E009C0F801E20FF31F8081B2 -:101BB000FA01808311822F5F3F4FF80101900020CE -:101BC000E9F73197E01BF10B4E5F5F4F2E173F0790 -:101BD00058F3CE010E946D0A90E0DF91CF911F91E2 -:101BE0000F910895EF92FF920F931F93CF93DF937E -:101BF0008C017B01CA010E94B40D282FE0913406AC -:101C0000F091350614C0A081B1818281843061F4E5 -:101C1000848190E08017910739F4868190E08E15D9 -:101C20009F0511F4ED0128870780F085E02D30979E -:101C300051F7DF91CF911F910F91FF90EF90089591 -:101C4000CF93DF93EC01CB010E94B40D382FA0910C -:101C50003406B091350611C09C91FD01218182812D -:101C6000823041F4E92FF22F858190E08C179D0797 -:101C700009F43683FD01A781B085109769F7DF91DC -:101C8000CF9108950E94B40D1816190614F480938C -:101C90004E0608950E94B40D1816190614F4809388 -:101CA0004D0608950E94B40D1816190614F4809379 -:101CB0004C0608951F9386E00E940B0986FF03C01F -:101CC0000E9458080EC082FF03C00E94620709C02C -:101CD00081FF03C00E94320704C084FF02C00E943B -:101CE000800787E00E940B09182F60E087E00E94C0 -:101CF0004309612F87E00E9443091F91089562E024 -:101D000081E00E94430908950E94020B0E94A40AE8 -:101D10000E94F20561E080E00E94430980E00E9499 -:101D20000B0980FDFBCF62E081E00E94430960E87F -:101D300084E00E94430960E480E20E94430968E075 -:101D400083E20E94430969E087E20E9443096FE051 -:101D50008DE00E9443096FE08BE00E94430968ED2B -:101D600089E00E94430963E38FE00E94430966ED26 -:101D700087E00E94430962E085E00E9443096CEC21 -:101D800080E00E94430908958EEC8093450381E032 -:101D900087BF8091450382BF83E083BF0895089584 -:101DA000089583E08093EB0481E08093EC048BE062 -:101DB0008093ED049FE69093EE0483E68093EF0416 -:101DC00084E78093F0049093F10480E78093F20419 -:101DD00085E78093F30483E78093F4048FE5809391 -:101DE000F50480E38093F60481E38093F704109276 -:101DF000F8048EE090E00E94BD010895FC0180810E -:101E0000833011F40E94D10E08951F9311E0812FA9 -:101E10000E94FE0F60E0812F0E94C4101F5F1431EA -:101E2000B1F718E1812F0E94FE0F60E0812F0E9420 -:101E3000C4101F5F1B32B1F71F910895FC0110827F -:101E400075836483738362834183478346830895E4 -:101E5000FC0190818181981710F080E00895A481A1 -:101E6000B5816D938781815019F48181A81BB109D7 -:101E70008783B583A4839FB7F89480818F5F808325 -:101E80009FBF81E00895FC0180818823E9F3A2814E -:101E9000B3812D918681815019F48181A81BB109EC -:101EA000B383A28386839FB7F89480818150808317 -:101EB0009FBF822F0895FC018081882319F42FEFA2 -:101EC0003FEF13C0A281B3812D918681815019F417 -:101ED0008181A81BB109B383A28386839FB7F8943D -:101EE0008081815080839FBF30E0C901089581E0E7 -:101EF000089581E0089581E0089581E00895982F84 -:101F00008150833120F08751833108F075C0E92F6B -:101F1000F0E0EB5BFC4F82E08183892F90E0FC01D5 -:101F20003197EC32F10508F067C0EA5BFF4FEE0F26 -:101F3000FF1F0590F491E02D0994159A5BC0169A45 -:101F400059C0179A57C0B89A55C0B99A53C0BA9A8F -:101F500051C0BB9A4FC0BC9A4DC0BD9A4BC0BE9AEF -:101F600049C0BF9A47C0889A45C0899A43C08A9A97 -:101F700041C08B9A3FC08C9A3DC08D9A3BC08E9ACF -:101F800039C08F9A37C0A09A35C0A19A33C0A29A9F -:101F900031C0A39A2FC0A49A2DC0A59A2BC0A69A8F -:101FA00029C080916100806803C0809161008064D5 -:101FB000809361001FC0809161008062F9CF8091A1 -:101FC00061008061F5CF809161008860F1CF8091E0 -:101FD00061008460EDCF809161008260E9CF8091E3 -:101FE00061008160E5CF109A05C0119A03C0129A72 -:101FF00001C0139A81E0089584E00895982F8150DC -:10200000833128F08751833110F084E00895892FBF -:102010000E947F0F81E00895982F8150833120F036 -:102020008751833108F075C0E92FF0E0EB5BFC4F7E -:1020300081E08183892F90E0FC013197EC32F1053A -:1020400008F067C0EE58FF4FEE0FFF1F0590F491A8 -:10205000E02D099415985BC0169859C0179857C081 -:10206000B89855C0B99853C0BA9851C0BB984FC0E2 -:10207000BC984DC0BD984BC0BE9849C0BF9847C0E2 -:10208000889845C0899843C08A9841C08B983FC0C2 -:102090008C983DC08D983BC08E9839C08F9837C0C2 -:1020A000A09835C0A19833C0A29831C0A3982FC082 -:1020B000A4982DC0A5982BC0A69829C08091610036 -:1020C0008F7703C0809161008F7B809361001FC078 -:1020D000809161008F7DF9CF809161008F7EF5CF77 -:1020E00080916100877FF1CF809161008B7FEDCF80 -:1020F000809161008D7FE9CF809161008E7FE5CF77 -:10210000109805C0119803C0129801C0139881E07F -:10211000089584E00895FB011082833089F08430B3 -:1021200028F4813049F0823029F408C0843051F01D -:10213000853051F085E0089586B307C083B305C0AC -:1021400080B303C081B101C080B1808381E0089574 -:10215000833089F0843028F4813049F0823029F4CA -:1021600008C0843051F0853059F084E0089568BB90 -:1021700005C065BB03C062BB01C063B981E00895BF -:102180006093620081E00895982FE82FF0E0EB5B08 -:10219000FC4F8181823011F086E00895892F90E014 -:1021A000FC013197EC32F10540F4E256FF4FEE0F9F -:1021B000FF1F0590F491E02D099484E008956623B3 -:1021C00011F01D9AFFC01D98FDC0662311F01E9AE4 -:1021D000F9C01E98F7C0662311F01F9AF3C01F982C -:1021E000F1C0662311F0C09AEDC0C098EBC0662321 -:1021F00011F0C19AE7C0C198E5C0662311F0C29AF8 -:10220000E1C0C298DFC0662311F0C39ADBC0C39857 -:10221000D9C0662311F0C49AD5C0C498D3C0662330 -:1022200011F0C59ACFC0C598CDC0662311F0C69AEB -:10223000C9C0C698C7C0662311F0C79AC3C0C79863 -:10224000C1C0662311F0909ABDC09098BBC06623B0 -:1022500011F0919AB7C09198B5C0662311F0929A87 -:10226000B1C09298AFC0662311F0939AABC0939817 -:10227000A9C0662311F0949AA5C09498A3C06623C0 -:1022800011F0959A9FC095989DC0662311F0969A7B -:1022900099C0969897C0662311F0979A93C0979823 -:1022A00091C0662311F0A89A8DC0A8988BC06623B0 -:1022B00011F0A99A87C0A99885C0662311F0AA9A3F -:1022C00081C0AA987FC0662311F0AB9A7BC0AB98FF -:1022D00079C0662311F0AC9A75C0AC9873C06623C0 -:1022E00011F0AD9A6FC0AD986DC0662311F0AE9A33 -:1022F00069C0AE9867C0662321F080916200806853 -:1023000049C0809162008F7745C0662321F080919B -:10231000620080643FC0809162008F7B3BC0662377 -:1023200021F080916200806235C0809162008F7DD3 -:1023300031C0662321F08091620080612BC08091C2 -:1023400062008F7E27C0662321F080916200886042 -:1023500021C080916200877F1DC0662321F080919B -:102360006200846017C0809162008B7F13C0662377 -:1023700021F08091620082600DC0809162008D7FAB -:1023800009C0662321F080916200816003C08091C2 -:1023900062008E7F8093620015C0662311F0189A48 -:1023A00011C018980FC0662311F0199A0BC0199824 -:1023B00009C0662311F01A9A05C01A9803C0662353 -:1023C00019F01B9A81E008951B9881E008951F93EE -:1023D000182F8150833128F08751833110F084E029 -:1023E0000EC0E12FF0E0EB5BFC4F83E08183812F97 -:1023F0000E947F0F61E0812F0E94C41081E01F9135 -:102400000895CF93DF93982FEB011882E82FF0E027 -:10241000EB5BFC4F8181813011F086E07AC0892F1F -:1024200090E0FC013197EC32F10540F4E653FF4FA8 -:10243000EE0FFF1F0590F491E02D099484E069C030 -:102440000D9B66C062C00E9B63C05FC00F9B60C0E7 -:102450005CC0B09B5DC059C0B19B5AC056C0B29B16 -:1024600057C053C0B39B54C050C0B49B51C04DC063 -:10247000B59B4EC04AC0B69B4BC047C0B79B48C037 -:1024800044C0809B45C041C0819B42C03EC0829BEE -:102490003FC03BC0839B3CC038C0849B39C035C023 -:1024A000859B36C032C0869B33C02FC0879B30C00F -:1024B0002CC0989B2DC029C0999B2AC026C09A9BEE -:1024C00027C023C09B9B24C020C09C9B21C01DC053 -:1024D000079B1EC01AC0069B1BC017C0059B18C0D7 -:1024E00014C0049B15C011C0039B12C00EC0029BF8 -:1024F0000FC00BC0089B0CC008C0099B09C005C0D9 -:102500000A9B06C002C00B9B03C081E0888301C008 -:1025100081E0DF91CF910895DF93CF930F92CDB7F4 -:10252000DEB79BE19093EB04BE016F5F7F4F0E948B -:1025300001128093EC0489818093ED041092EE04E3 -:1025400084E090E00E94BD010F90CF91DF9108954B -:102550009AE19093EB040E94C4108093EC041092D3 -:10256000ED0483E090E00E94BD01089598E190930E -:10257000EB040E94A8108093EC041092ED0483E019 -:1025800090E00E94BD010895982F89E18093EB04AB -:10259000933091F0943028F4913051F0923029F436 -:1025A00009C0943059F0953059F085E090E00AC0A8 -:1025B00096B307C093B305C090B303C091B101C0F7 -:1025C00090B181E08093EC049093ED041092EE04BE -:1025D00084E090E00E94BD01089597E19093EB04A0 -:1025E0000E94E7118093EC041092ED0483E090E0E8 -:1025F0000E94BD01089595E19093EB040E940C1098 -:102600008093EC041092ED0483E090E00E94BD0101 -:10261000089596E19093EB040E947F0F8093EC0461 -:102620001092ED0483E090E00E94BD01089584E1E2 -:102630008093EB0481E08093EC041092ED0483E03E -:1026400090E00E94BD01089582E18093EB0481E057 -:102650008093EC041092ED0483E090E00E94BD01B1 -:10266000089583E18093EB0481E08093EC04109261 -:10267000ED0483E090E00E94BD01089580E1809325 -:10268000EB0481E08093EC041092ED0483E090E091 -:102690000E94BD01089591E19093EB040E94FE0F0A -:1026A0008093EC041092ED0483E090E00E94BD0161 -:1026B0000895FC0180818531C9F1863180F4823131 -:1026C00031F1833130F48031D1F0813109F04CC0E7 -:1026D0001AC0833109F1843109F046C022C0883123 -:1026E00089F1893128F4863129F18731E9F526C04D -:1026F0008A3189F18A3158F18B31B1F531C082814B -:102700000E943E13089582810E944B1308956381B5 -:1027100082810E9424130895638182810E94311373 -:102720000895638182810E941713089582810E9417 -:10273000FB12089582810E940913089582810E94EC -:10274000ED120895638182810E94B61208958281FC -:102750000E94C4120895638182810E94A812089584 -:1027600082810E948C1208958093EB0483E0809311 -:10277000EC041092ED0483E090E00E94BD01089506 -:10278000E82F8152883018F024E030E007C0F0E0F4 -:10279000EB5BFC4F84E0818321E030E0C9010895C8 -:1027A000E82FF0E0EB5BFC4F8181843019F024E0EE -:1027B00030E003C0118221E030E0C901089517B86C -:1027C000823039F0833039F0813041F022E030E05E -:1027D00007C03E9A03C087B1806C87B921E030E022 -:1027E000C901089593E896B997B1907F982B97B94E -:1027F000369A3699FECF84B195B140E050E020E0A2 -:1028000030E0369A3699FECF84B195B1280F391F42 -:102810004F5F5F4F44305105A1F7379836952795A4 -:1028200036952795C9010895CF93DF93EB0119825F -:102830001882282F30E0F901EB5BFC4F8181843056 -:1028400019F026E030E00AC088E290E0821B930B8A -:102850000E94F2139983888321E030E0C901DF915F -:10286000CF910895982F83E28093EB0417B89230AC -:1028700039F0933039F0913041F082E090E007C0B8 -:102880003E9A03C087B1806C87B981E090E0809365 -:10289000EC041092ED0483E090E00E94BD010895E5 -:1028A000DF93CF9300D0CDB7DEB792E29093EB04E5 -:1028B000BE016F5F7F4F0E9414148093EC049981D6 -:1028C0008A818093ED049093EE041092EF0485E0EA -:1028D00090E00E94BD010F900F90CF91DF9108957D -:1028E00091E29093EB04E82FF0E0EB5BFC4F8181E9 -:1028F000843019F084E090E003C0118281E090E020 -:102900008093EC041092ED0483E090E00E94BD01FE -:102910000895E82F80E28093EB048E2F8152883057 -:1029200018F084E090E007C0F0E0EB5BFC4F84E03F -:10293000818381E090E08093EC041092ED0483E0C9 -:1029400090E00E94BD010895FC018081813271F008 -:10295000823218F48032B1F405C0823259F08332E9 -:1029600089F40CC082810E948914089582810E949A -:102970007014089582810E945014089582810E94EB -:10298000321408958093EB0483E08093EC0410925A -:10299000ED0483E090E00E94BD01089584E08093FF -:1029A0007400109271008BE0809352038CE080934E -:1029B000530381E090E00895E4E7F0E080818B7FAD -:1029C0008083109252031092530381E090E00895A7 -:1029D00080937000E1E7F0E080818C7F808381E06C -:1029E00090E0089580917100887F0895982F84EA7F -:1029F000809374008091740087FFFCCF80917100F8 -:102A0000887F883011F0803181F49093730084E8DE -:102A1000809374008091740087FFFCCF80917100D7 -:102A2000887F883129F0803419F022E030E002C03C -:102A300021E030E0C901089584E980937400809119 -:102A4000740084FDFCCF81E090E00895AC0120E0AB -:102A500030E094E812C0FA01E20FF31F8081809306 -:102A600073009093740080917100887F883219F010 -:102A700022E030E007C02F5F3F4F261737075CF397 -:102A800021E030E0C901089584EC809374008091C6 -:102A9000740087FFFCCF80917300089585E38093D5 -:102AA000EB0481E08093EC0420E030E094EC0EC075 -:102AB000909374008091740087FFFCCF8091730025 -:102AC000F901E351FB4F80832F5F3F4F26173707F4 -:102AD0007CF3FB01E351FB4F1082CB0103960E9474 -:102AE000BD010895AC0120E030E094E812C0FB0184 -:102AF000E20FF31F808180937300909374008091A4 -:102B00007100887F883219F082E090E007C02F5F63 -:102B10003F4F241735075CF381E090E08093EC048D -:102B20001092ED0483E090E00E94BD01089584E9D5 -:102B3000809374008091740084FDFCCF81E08093C9 -:102B4000EC041092ED0483E090E00E94BD01089532 -:102B50000E94F6148093EC041092ED0483E090E060 -:102B60000E94BD01089580937000E1E7F0E080814C -:102B70008C7F808381E08093EC041092ED0483E0ED -:102B800090E00E94BD010895E4E7F0E080818B7F32 -:102B90008083109252031092530381E08093EC04DF -:102BA0001092ED0483E090E00E94BD01089584E05E -:102BB00080937400109271008BE0809352038CE03C -:102BC0008093530381E08093EC041092ED0483E042 -:102BD00090E00E94BD010895FC0180818093EB0488 -:102BE00080818433D1F0853338F4813379F08233B6 -:102BF00081F0803341F507C08633F1F08633A8F0C9 -:102C0000873309F51DC00E94D71508950E94C41589 -:102C1000089582810E94B3150895BF016D5F7F4FB3 -:102C2000828190E00E9472150895638170E0828134 -:102C300090E00E944E15089582810E94A815089583 -:102C40000E949715089583E08093EC041092ED04A0 -:102C500083E090E00E94BD010895782F613041F03B -:102C6000613040F0623041F0633009F059C007C074 -:102C700060E006C060E001C061E050E002C061E0D9 -:102C800051E04330B9F0443028F4413059F042303B -:102C900078F40AC0453099F0453070F0463009F0BC -:102CA0003FC010C021E00CC021E041E030E00DC089 -:102CB00021E009C020E0F9CF20E041E005C020E09C -:102CC00040E0F4CF20E040E031E0BB9887B386607D -:102CD00087BB88B3817F88BB80E090E0772311F0C9 -:102CE00081E090E075E0880F991F7A95E1F78065A3 -:102CF000660F660F660F682B550F550F562B542B1A -:102D0000220F252B2DB93EB988E080934B038AE032 -:102D100080934C0389E080934D0321E030E002C0B2 -:102D200022E030E0C90108951DB81EB810924B038F -:102D300010924C0310924D0381E090E00895AC0195 -:102D400020E007C0E60FF71F80818FB9779BFECF89 -:102D50002F5FE22FF0E0E417F507A4F381E090E0A5 -:102D60000895DC0120E030E040E050E013C01FB8DF -:102D700008C083E0493E580714F088E008954F5F8B -:102D80005F4F779BF6CF8FB1FB01E20FF31F80837C -:102D90002F5F3F4F2A173B0754F381E00895CF93ED -:102DA000DF93EC0120E030E0A0E0B0E017C0FE01CE -:102DB000E20FF31F80818FB908C0119683E0A93E0E -:102DC000B8071CF028E030E00EC0779BF6CF8FB13B -:102DD000FB01E20FF31F80832F5F3F4F241735075E -:102DE00034F321E030E0C901DF91CF910895DC0197 -:102DF00083E48093EB0440E050E020E030E018C032 -:102E0000FD01E20FF31F80818FB909C04F5F5F4F53 -:102E100083E0493E58071CF028E030E00EC0779B65 -:102E2000F5CF8FB1F901E551FB4F82832F5F3F4F03 -:102E3000261737072CF321E030E02093EC04FB0148 -:102E4000E351FB4F1082CB0103960E94BD01089510 -:102E5000BC0184E48093EB0440E050E020E030E0EB -:102E600013C01FB808C083E0493E580714F088E03B -:102E70000FC04F5F5F4F779BF6CF8FB1F901E551E0 -:102E8000FB4F82832F5F3F4F2617370754F381E0B4 -:102E90008093EC04FB01E351FB4F1082CB010396BE -:102EA0000E94BD01089593E49093EB04282F30E035 -:102EB00090E007C0E60FF71F80818FB9779BFECFA8 -:102EC0009F5FE92FF0E0E217F307A4F381E080931E -:102ED000EC041092ED0483E090E00E94BD0108959F -:102EE00081E48093EB041DB81EB810924B0310923E -:102EF0004C0310924D0381E08093EC041092ED049A -:102F000083E090E00E94BD01089590E49093EB046B -:102F10000E942D168093EC041092ED0483E090E063 -:102F20000E94BD010895CF93DF93EC018881833423 -:102F3000A9F0843428F4803441F0813409F50BC0C1 -:102F4000843499F08534E1F414C04C816B818A811A -:102F50000E94851720C00E9470171DC0BE016D5FC2 -:102F60007F4F8A810E94531716C08A8190E00E9489 -:102F700028176A8170E0CE0103960E94F7160BC0F5 -:102F80008093EB0483E08093EC041092ED0483E0E3 -:102F900090E00E94BD01DF91CF910895B89AB99A4F -:102FA000BA9ABB98BC9ABD9AC498C59881E08093A0 -:102FB000560382E08093570380935803809359030C -:102FC00081E090E0089510925603109257031092FA -:102FD00058031092590381E090E00895C098C19879 -:102FE000C29880E29EE40197F1F7C09A8AE0982F98 -:102FF0009A95F1F7C29AC19A8A95F1F70895282F08 -:10300000C19887FD02C0C29801C0C29A8AE0982F79 -:103010009A95F1F7C19A8A95F1F7C19826FF02C0F7 -:10302000C29A01C0C2988AE0982F9A95F1F7C19A86 -:103030008A95F1F70895880F20E03AE0C19887FF5C -:1030400002C0C29A01C0C298932F9A95F1F7C19A13 -:10305000932F9A95F1F72F5F273011F0880FEECF5D -:10306000089520E03AE0C19887FF02C0C29A01C0EB -:10307000C298932F9A95F1F7C19A932F9A95F1F7E9 -:103080002F5F283011F0880FEECF0895C198C298B5 -:103090008AE0982F9A95F1F7C19A982F9A95F1F7AF -:1030A000C198C098982F9A95F1F7C19A982F9A9540 -:1030B000F1F7C1988A95F1F7C09A80E00895C19818 -:1030C000C098C298C39A08950E94EE1780E30E94A8 -:1030D000FF1780E60E941B1808950E94EE1780E0FB -:1030E0000E94FF1780E00E941B18C198C098C298E8 -:1030F000C39A08950F931F93182F062F0E94EE175F -:1031000080E40E94FF17812F0E941B18802F0E94CD -:10311000311881E01F910F9108951F93182F0E947D -:10312000EE1780EC0E94FF17812F0E941B180E944F -:1031300046181F910895C1988AE08A95F1F7C298C0 -:1031400020E080E04AE0880FC19A942F9A95F1F729 -:10315000C198B3998F5F3AE0942F9A95F1F72F5F5A -:10316000283089F7C098C19A932F9A95F1F7C09AA1 -:10317000C198932F9A95F1F708951F93182F0E94E5 -:10318000EE1780E80E94FF17812F0E941B180E94F3 -:103190009B181F910895DF92EF92FF920F931F9358 -:1031A000CF93DF93D82E7B018A01C0E0D0E009C025 -:1031B0008D2D8C0F0E94BD18F801EC0FFD1F808330 -:1031C0002196CE15DF05A0F381E090E0DF91CF914D -:1031D0001F910F91FF90EF90DF9008950F931F9331 -:1031E000082F162F0E946418612F802F0E947A18D2 -:1031F00081E01F910F910895DF92EF92FF920F935C -:103200001F93CF93DF93D82E7B018A01C0E0D0E0DB -:1032100009C0F801EC0FFD1F60818D2D8C0F0E94FD -:10322000EE182196CE15DF05A0F381E090E0DF9146 -:10323000CF911F910F91FF90EF90DF90089594E050 -:103240009093EB040E94FC188093EC041092ED0420 -:1032500083E090E00E94BD010895EF92FF920F93EA -:103260001F938B019BEEE92E94E0F92E93E090934F -:10327000EB04A7014E5F5F4F0E94CB188093EC04D4 -:103280000E5F1F4FE00EF11EF7011082C80101967C -:103290000E94BD011F910F91FF90EF90089582E071 -:1032A0008093EB0410925603109257031092580328 -:1032B0001092590381E08093EC041092ED0483E0B6 -:1032C00090E00E94BD01089581E08093EB040E948C -:1032D000CE178093EC041092ED0483E090E00E94FE -:1032E000BD010895FC018381823069F0833018F4B8 -:1032F0008130F1F405C0833049F08430C9F40FC047 -:103300000E94641908950E944F190895AF014A5F01 -:103310005F4F658170E084810E942D190895AF018F -:103320004A5F5F4F658170E084810E941F19089594 -:1033300080818093EB0483E08093EC041092ED0491 -:1033400083E090E00E94BD0108951F920F920FB696 -:103350000F9211240F900FBE0F901F9018959C0193 -:103360000897029718F024E030E017C0F901EB5BF2 -:10337000FC4F8DE081832830310561F02930310523 -:1033800019F027E030E009C0BD9A81E090E09BBDD4 -:103390008ABD01C0BC9A21E030E0C9010895FC015A -:1033A000EB5BFC4F118281E090E008959C01FC01F1 -:1033B000EB5BFC4F81818D3019F026E030E029C0B5 -:1033C0002830310521F12930310519F027E030E0AE -:1033D00020C063307105A9F0643071053CF46130A0 -:1033E000710559F06230710591F409C064307105BE -:1033F00051F06530710559F408C081E007C082E0E2 -:1034000005C083E003C084E001C085E08EBD21E0FB -:1034100030E0C90108959C01FC01EB5BFC4F818108 -:103420008D3019F026E030E00DC02830310541F034 -:103430002930310519F027E030E004C07BBD6ABDBA -:1034400021E030E0C90108959C0183E58093EB04FD -:10345000F901EB5BFC4F81818D3019F086E090E043 -:103460000DC02830310541F02930310519F087E0D1 -:1034700090E004C07BBD6ABD81E090E08093EC04E5 -:103480001092ED0483E090E00E94BD01089522E5D2 -:103490002093EB040E94D6198093EC041092ED0463 -:1034A00083E090E00E94BD01089521E52093EB04A4 -:1034B000FC01EB5BFC4F118281E08093EC041092E5 -:1034C000ED0483E090E00E94BD01089520E5209383 -:1034D000EB040E94AF198093EC041092ED0483E09A -:1034E00090E00E94BD010895FC018081813579F052 -:1034F000823518F48035F1F405C0823569F08335E2 -:10350000C9F411C0828190E00E94661A08958281F8 -:1035100090E00E94551A0895638170E0828190E0E6 -:103520000E94471A0895638170E0828190E00E94B2 -:10353000241A08958093EB0483E08093EC041092A6 -:10354000ED0483E090E00E94BD010895DF93CF93E6 -:10355000CDB7DEB7CF91DF910895089581E090E077 -:10356000089508958A3310F4805301C087556A3353 -:1035700010F4605301C067556F708295807F862B71 -:1035800008950895DC0180E1A030B80710F082E0D2 -:103590000895E199FECF9D0109C03FBB2EBB2F5F6F -:1035A0003F4FE09A8DB3E60FF71F8083822F8A1B6F -:1035B000E82FF0E0E417F50780F381E00895DC01DF -:1035C00080E1A030B80710F082E00895E199FECFC5 -:1035D0009D010AC03FBB2EBB2F5F3F4FE60FF71F79 -:1035E00080818DBBE29AE19A822F8A1BE82FF0E05E -:1035F000E417F50778F381E008950F931F938B018B -:1036000021E82093EB040E94DF1A8093EC041092CF -:10361000ED041F930F9389EF92E09F938F930E9485 -:10362000A61A83E090E00E94BD010F900F900F90CA -:103630000F901F910F910895CF93DF93AC01EB0191 -:1036400080E88093EB0480E14030580710F082E07E -:1036500015C0E199FECF9A0109C03FBB2EBB2F5F79 -:103660003F4FE09A8DB3E351FB4F8083822F841B41 -:10367000E82FF0E0EC17FD0780F381E08093EC0485 -:10368000FE01E351FB4F10828DEE94E09F938F93E8 -:1036900086E093E09F938F930E94A61ACE01039633 -:1036A0000E94BD010F900F900F900F90DF91CF916E -:1036B0000895EF92FF920F931F93CF93DF93EC0146 -:1036C0009B8180E02A817C01E20EF11C9D8180E0DB -:1036D0002C818C01020F111DFF92EF921F930F930B -:1036E00080E193E09F938F930E94A61A88812DB763 -:1036F0003EB72A5F3F4F0FB6F8943EBF0FBE2DBFB7 -:10370000803819F0813869F405C0B801C7010E94FA -:103710001C1B12C02696A801BE01C7010E94FD1AFB -:103720000BC08093EB0483E08093EC041092ED04D3 -:1037300083E090E00E94BD01DF91CF911F910F9136 -:10374000FF90EF900895CF93DF93BC0182309105F5 -:1037500010F462E070E0A0917006B0917106ED0186 -:10376000E0E0F0E040E050E021C0888199818617D8 -:10377000970769F48A819B81309719F0938382833C -:1037800004C09093710680937006FE0133C06817E1 -:10379000790738F44115510519F08417950708F495 -:1037A000AC01FE018A819B819C01E9012097E9F629 -:1037B00041155105A1F1CA01861B970B049708F426 -:1037C000BA01E0E0F0E029C08D919C911197841737 -:1037D0009507F1F46417750779F4ED018A819B81EF -:1037E000309719F09383828304C09093710680937D -:1037F0007006FD0132964CC0CA01861B970BFD0175 -:10380000E80FF91F6193719302978D939C9340C0C9 -:10381000FD01828193819C01D9011097A9F68091C5 -:103820006E0690916F06892B41F480913703909139 -:10383000380390936F0680936E0640913903509140 -:103840003A034115510541F44DB75EB780913503F8 -:1038500090913603481B590B20916E0630916F06EC -:10386000CA01821B930B8617970780F0AB014E5F4E -:103870005F4F8417950750F0420F531F50936F0608 -:1038800040936E06F9016193719302C0E0E0F0E0AD -:10389000CF01DF91CF910895CF93DF93009709F483 -:1038A0004EC0EC0122971B821A82A0917006B09143 -:1038B0007106109701F140E050E0AC17BD0700F130 -:1038C000BB83AA83FE0121913191E20FF31FAE1752 -:1038D000BF0771F48D919C911197280F391F2E5FAE -:1038E0003F4F39832883FD01828193819B838A83A3 -:1038F0004115510569F4D0937106C09370061FC03D -:10390000FD0182819381AD01009711F0DC01D5CFDB -:10391000FA01D383C28321913191E20FF31FCE17B5 -:10392000DF0769F488819981280F391F2E5F3F4F87 -:10393000FA01318320838A819B8193838283DF9183 -:10394000CF91089597FB092E07260AD077FD04D062 -:103950000CD006D000201AF4709561957F4F089521 -:10396000F6F7909581959F4F0895AA1BBB1B51E1D7 -:1039700007C0AA1FBB1FA617B70710F0A61BB70BDF -:10398000881F991F5A95A9F780959095BC01CD0184 -:063990000895F894FFCF3A -:10399600456D62656464656450726F6A65637473CD -:1039A600004F63746F70757355534220496E74658A -:1039B600726661636520436F6E7665727465722008 -:1039C600616E6420492F4F20457874656E73696F68 -:1039D6006E003230303831313038006669727374B7 -:1039E600207061636B6574206F662061206C6F6E5A -:1039F60067206D65737361676520286C656E6774F3 -:103A0600683A202564290A006F63746F7075732005 -:103A16006C6F6E672072756E6E696E67206D65736A -:103A2600736167650A006F63746F7075732E6C6FD0 -:103A36006E675F696E646578203C206F63746F7093 -:103A460075732E6C6F6E675F62797465730A006EAC -:103A56006F74206C617374207061636B65743A20B7 -:103A660064696666203E2036340A006C61737420F1 -:103A76007061636B65740A007061727365722C20E5 -:103A8600636865636B3A2025582C20636F6D6D6102 -:103A96006E643A2025580A0063616C6C696E672073 -:103AA600696F5F7061727365720A0063616C6C693D -:103AB6006E67206164635F7061727365720A00638A -:103AC600616C6C696E67206932635F7061727365E1 -:103AD600720A0063616C6C696E67207370695F704F -:103AE60061727365720A0063616C6C696E6720703F -:103AF600776D5F7061727365720A0063616E277419 -:103B06002063616C6C2063616E5F706172736572B5 -:103B1600202D206E6F2043414E2D737570706F728D -:103B2600740A0063616C6C696E6720656570726FFC -:103B36006D5F7061727365720A00756E6B6E6F777A -:103B46006E20636D640A00726563656976696E67E7 -:103B560020636F6D6D616E643A20255820286C6570 -:103B66006E6774683A202575290A00676574206EA9 -:103B76006578740A0067657420616E6420657865EF -:103B8600637574650A000904007772697474656E5A -:103B96003A2025730A00726561643A2025730A008B -:103BA600656570726F6D5F7061727365723A206CD5 -:103BB600656E6774683A2025752C20616464723AD4 -:0C3BC6002025750A002000720600000097 -:00000001FF diff --git a/firmware/octopus_stable_1_1.hex b/firmware/octopus_stable_1_1.hex deleted file mode 100644 index 5fa412b..0000000 --- a/firmware/octopus_stable_1_1.hex +++ /dev/null @@ -1,971 +0,0 @@ -:100000000C94F6000C9415010C9415010C94150138 -:100010000C9415010C94E4030C9415010C94150137 -:100020000C9415010C9415010C9415010C941501F8 -:100030000C94031A0C9415010C9415010C941501E1 -:100040000C94BD030C9415010C9417010C9415012C -:100050000C9415010C9415010C9415010C941501C8 -:100060000C9415010C9415010C9415010C941501B8 -:100070000C9415010C9415010C9415010C941501A8 -:100080000C9415010C9415010C941501001002102C -:100090000410061008100A100C100E101010121088 -:1000A0001410161018101A101C101E1020102210F8 -:1000B0002410661066106610661066106610261012 -:1000C00028102A102C102E10301032103410381036 -:1000D0003C10421046104A104E10521058105A1040 -:1000E0005C106010AF10B110B310B510B710B9109C -:1000F000BB10BD10BF10C110C310C510C710C91070 -:10010000CB10CD10CF10D110D31015111511151122 -:10011000151115111511D510D710D910DB10DD10E0 -:10012000DF10E110E310E710EB10F110F510F910FB -:10013000FD100111071109110B110F118111871108 -:100140008D11931199119F11A511AB11B111B71117 -:10015000BD11C311C911CF11D511DB11E111E71187 -:10016000ED117E117E117E117E117E117E11F31133 -:10017000F911FF1105120B12111217121D1227127D -:1001800033123D12471251125B1265126F12751233 -:100190007B128112CA12CD12D012D312D612D912EA -:1001A000DC12DF12E212E512E812EB12EE12F1128B -:1001B000F412F712FA12FD120013C712C712C71277 -:1001C000C712C712C7120313061309130C130F1318 -:1001D000181315131213151318131B131E132113C1 -:1001E00027132413241327132A132D1311241FBE9E -:1001F000CFEFD0E1DEBFCDBF13E0A0E0B1E0E6E598 -:10020000FAE300E00BBF02C007900D92AC33B107D8 -:10021000D9F716E0ACE3B3E001C01D92A237B107F5 -:10022000E1F70E942C010C942A1D0C9400001F92EF -:100230000F920FB60F9211240F900FBE0F901F90C8 -:100240001895FC0120E030E002C02F5F3F4F819104 -:100250008823D9F7C9010895CCEFD0E1DEBFCDBF27 -:10026000F8940E9453090E94CC0E8FEF87BB88BB85 -:10027000C7980E94B80981E897E10E94030A85E6C1 -:100280009CE00E94080A81E090E00E940D0ADE01D5 -:100290001196E6EFF2E083E001900D928150E1F7D4 -:1002A000CE0101960E94020E80E091E00E949E0E17 -:1002B00081E191E00E94960E82E491E00E948E0E10 -:1002C0000E94D80D4C0164E670E00E941B0A60E0B9 -:1002D00070E0C4010E94440D3C0140E050E0BC01CC -:1002E000C4010E943C0A2EE0A22E22E0B22ECC24B1 -:1002F000DD2490E4E92EF12C02E021E030E041E041 -:1003000050E0B301C4010E94D90C8DE2A82E83E015 -:10031000B82E21E030E041E050E0B301C4010E947A -:10032000110D10929A031092990310929C0310924F -:100330009B030E940E1B8FE784BB8AE285BB0E9451 -:10034000080485E585BB0E94080415BA0E94520F77 -:100350000E9453090E94D10E7894FFCF0F931F93F0 -:10036000CF93DF93EC018134910510F18091A503C7 -:100370009091A603892BE1F4DF93CF938BE491E076 -:100380009F938F930E94071B1092A2031092A103C8 -:10039000D093A403C093A30381E090E09093A603BD -:1003A0008093A503C0E4D0E00F900F900F900F90C2 -:1003B00068E08BE20E94A10900E010E00EC0E0912D -:1003C000A103F091A203E00FF11FE551FB4F608103 -:1003D00089E20E94A1090F5F1F4F0C171D0779F7D3 -:1003E0008091990390919A03019749F467E08BE219 -:1003F0000E94A10910929A03109299030AC063E027 -:100400008BE20E94A10981E090E090939A0380938F -:100410009903DF91CF911F910F910895CF93DF93AF -:100420008091A5039091A603019709F04CC088E73D -:1004300091E09F938F930E94071B2091A10330911D -:10044000A2038091A3039091A4030F900F9028170B -:100450003907C8F586E991E09F938F930E94071BA7 -:10046000C091A303D091A4038091A1039091A20312 -:10047000C81BD90B8091A1039091A203805C9F4F70 -:100480009093A2038093A1030F900F90C134D105E4 -:100490005CF08FEB91E09F938F930E94071B80E4A9 -:1004A00090E00E94AE010DC08BED91E09F938F9381 -:1004B0000E94071BCE010E94AE011092A60310926B -:1004C000A5030F900F90DF91CF9108950F931F9385 -:1004D000CF93DF938C011092A2031092A10310928C -:1004E000A6031092A503C79AFC018081282F2295AC -:1004F0002F70C22FDD2799279F938F93DF93CF9380 -:1005000088EE91E09F938F930E94071B8DB79EB753 -:1005100006960FB6F8949EBF0FBE8DBFC430D105AE -:1005200009F451C0C530D10584F4C130D10569F159 -:10053000C230D1051CF4CD2BC1F074C0C230D1053E -:1005400071F1239709F06EC034C0C630D10509F4AB -:100550004EC0C630D1050CF440C0C730D10509F4F7 -:1005600050C0289709F05EC053C0F80180818630E2 -:1005700041F48281813009F06AC0C8010E94D0191B -:1005800066C0C8010E944B0F62C088E092E09F9352 -:100590008F930E94071BC8010E940F1456C08BE165 -:1005A00092E09F938F930E94071BC8010E945315EE -:1005B0004CC08FE292E09F938F930E94071BC8016B -:1005C0000E94731642C083E492E09F938F930E942F -:1005D000071BC8010E94EE1738C087E592E09F9381 -:1005E0008F930E94071BC8010E94D51A2EC08BE171 -:1005F00092E09F938F930E94071BC8010E94E5051C -:1006000024C08BE692E09F938F930E94071B1DC02E -:1006100083E992E09F938F930E94071BC8010E9479 -:10062000B91B13C08AEA92E09F938F930E94071B25 -:10063000F80180818093EB0483E08093EC041092B6 -:10064000ED0483E090E00E94AE010F900F90C798F8 -:10065000DF91CF911F910F9108950F931F93CF9327 -:10066000DF93EC018C010F5F1F4F898199279F93C6 -:100670008F9387EB92E09F938F930E94071B80914B -:100680009B0390919C030F900F900F900F900197F8 -:1006900091F58BED92E09F938F930E94071B20E0D2 -:1006A00030E00F900F90E0919D03F0919E03E20FD8 -:1006B000F31FDE01A20FB31F8C91E555FC4F808321 -:1006C0002F5F3F4F2034310571F780919D0390914A -:1006D0009E03805C9F4F90939E0380939D03209187 -:1006E0009D0330919E0380919F039091A003281752 -:1006F0003907F0F128C085EE92E09F938F930E9416 -:10070000071B10929E0310929D0320E030E00F9093 -:100710000F90E0919D03F0919E03E20FF31FDE0125 -:10072000A20FB31F8C91E555FC4F80832F5F3F4F85 -:100730002034310571F730939E0320939D03F80117 -:100740002081203448F410929C0310929B038BEA82 -:1007500093E00E9466020CC081E090E090939C03BD -:1007600080939B03822F99279093A00380939F03EC -:10077000DF91CF911F910F9108951F920F920FB6A5 -:100780000F9211242F933F934F935F936F937F9317 -:100790008F939F93AF93BF93EF93FF930E941C0F90 -:1007A0008091450382BFFF91EF91BF91AF919F91DF -:1007B0008F917F916F915F914F913F912F910F900A -:1007C0000FBE0F901F9018951F920F920FB60F92A9 -:1007D00011242F933F934F935F936F937F938F9346 -:1007E0009F93AF93BF93EF93FF930E94A60EFF9149 -:1007F000EF91BF91AF919F918F917F916F915F9199 -:100800004F913F912F910F900FBE0F901F90189511 -:1008100020E080E49CE90197F1F72F5F2931C9F7C7 -:100820000895882329F0813069F084E090E00895EC -:100830008EE080936F038093700388E18AB981E032 -:1008400090E008958EE0809354038093550388E1EF -:1008500080939A0081E090E00895882329F0813008 -:1008600081F084E090E0089510926F03109270037D -:100870001092900019B81AB81092950081E090E09B -:1008800008951092540310925503109298001092FC -:10089000990010929A0010929D0081E090E00895D6 -:1008A0000F93882329F0813039F084E090E00AC06A -:1008B0002093900069B904C0209398006093990038 -:1008C00081E090E00F910895623011F492E001C050 -:1008D00090E0882329F0813071F084E090E0089561 -:1008E00080919500990F990F990F982B90939500EF -:1008F00081E090E0089580919D00990F990F990FE4 -:10090000982B90939D0081E090E00895663061F00F -:10091000673019F0653019F404C021E003C021E00C -:1009200004C020E090E002C020E091E0882329F09C -:10093000813079F084E090E0089580919500220F55 -:10094000220F990F922B982B9093950081E090E0C5 -:10095000089580919D00220F220F990F922B982BC2 -:1009600090939D0081E090E00895653439F06F34F4 -:1009700019F421E091E004C020E001C021E090E002 -:10098000882329F0813089F084E090E008958091F7 -:1009900095002295220F207E9295907F922B982B86 -:1009A0009093950081E090E0089580919D002295BC -:1009B000220F207E9295907F922B982B90939D00F2 -:1009C00081E090E00895882329F0813049F084E0A7 -:1009D00090E008955D9BFECF6CB981E090E00895B2 -:1009E00080919B0085FFFCCF60939C0081E090E0AC -:1009F0000895FF920F931F93CF93DF93F82EEB018F -:100A00008A0181E08F1548F484E090E00DC0F80180 -:100A100061918F018F2D0E94E3042197FFEFCF3F5B -:100A2000DF07A9F781E090E0DF91CF911F910F914F -:100A3000FF900895882329F0813039F084E090E018 -:100A400008955F9BFECF8CB106C080919B0087FF0D -:100A5000FCCF80919C0099270895FF920F931F93DC -:100A6000CF93DF93F82E8B0181E08F1518F484E08B -:100A700090E00EC0EA0107C08F2D0E941A05F80110 -:100A800081938F0121971C161D06B4F381E090E03D -:100A9000DF91CF911F910F91FF90089577270E94CA -:100AA000F9048093EC041092ED0483E090E00E943E -:100AB000AE0108950E9486048093EC041092ED0428 -:100AC00083E090E00E94AE0108950E948604809326 -:100AD000EC041092ED0483E090E00E94AE010895D2 -:100AE0000E9464048093EC041092ED0483E090E093 -:100AF0000E94AE0108950F930E9450048093EC046D -:100B00001092ED0483E090E00E94AE010F910895F1 -:100B10000E942D048093EC041092ED0483E090E099 -:100B20000E94AE0108950E9411048093EC0410927B -:100B3000ED0483E090E00E94AE010895CF92DF9231 -:100B4000EF92FF920F931F93CF93DF93CDB7DEB752 -:100B50008B01CDB6DEB62DB73EB7261B370B0FB6D1 -:100B6000F8943EBF0FBE2DBFEDB6FEB60894E11C53 -:100B7000F11CAB01B7010E942D058093EC0420E02D -:100B800030E00AC0F701E20FF31F8081F901E35161 -:100B9000FB4F80832F5F3F4F201731079CF3F801F5 -:100BA000E351FB4F1082C80103960E94AE010FB6BD -:100BB000F894DEBE0FBECDBEDF91CF911F910F9195 -:100BC000FF90EF90DF90CF9008950F93FC0180810C -:100BD0008093EB04843611F1853648F48236B1F007 -:100BE0008336E0F4803651F0813681F50BC08736CC -:100BF00039F18836E9F0853649F515C082810E94C1 -:100C000093052DC082810E94880529C00681258117 -:100C10004481638182810E947B0521C0638182813E -:100C20000E9470051CC0638182810E945A0517C012 -:100C3000AF014C5F5F4F638182810E944E050FC000 -:100C40006381772782810E949E0509C083E080939B -:100C5000EC041092ED0483E090E00E94AE010F914D -:100C6000089587E28093530685E28093520690E2CE -:100C7000909354061092550628E030E030935706C2 -:100C80002093560683E280935F0681E280935E069E -:100C9000909360061092610630936306209362067B -:100CA0000895089560916B0681E20E94A10908955C -:100CB00068E08BE20E94A10961E188E20E94A1093B -:100CC00068E08FE20E94A10961E18CE20E94A10923 -:100CD00061E08FE20E94A10910929A031092990399 -:100CE00065E083E20E94A10908950F931F938C0190 -:100CF00060E480E20E94A109F8016281605884E00A -:100D00000E94A109F801828180936A061F910F91C8 -:100D100008950F931F93CF93DF93EC0128853985B6 -:100D200012161306DCF58E819F81821793071CF53E -:100D300068E083E20E94A10900E010E00FC08A850C -:100D40009B85E80FF91F608181E20E94A1098E81D5 -:100D50009F8101969F838E830F5F1F4FEE81FF81DE -:100D600088859985083011051CF4E817F9073CF3CC -:100D7000E817F90724F061E087E20E94A1098B815E -:100D8000813031F465E089810E94A1091B8206C08F -:100D900061E089810E94A10981E08B83DF91CF917D -:100DA0001F910F910895CF93DF93CDB7DEB72497AE -:100DB0000FB6F894DEBF0FBECDBFDC01FC0122816F -:100DC0003381109265061092640681E0809361067B -:100DD000832F99278230D9F0833069F1813009F06F -:100DE00057C080913E0699279093670680936606C8 -:100DF0008EE396E0909369068093680686819781DA -:100E00008034910509F044C088E090E029C0FD01DC -:100E1000868197819093670680936606E22FFF276D -:100E2000EE0FFF1F8091500690915106E80FF91FB9 -:100E30008081918129C02223C1F0E22FFF27EE0F8C -:100E4000FF1F8091A9039091AA03E80FF91F019059 -:100E5000F081E02DF0936906E09368068081992780 -:100E6000909367068093660613C094E0998383E0AD -:100E70008A8389E08B839C8384E090E0909367066B -:100E800080936606CE01019690936906809368066A -:100E90008EE596E00E94890624960FB6F894DEBF90 -:100EA0000FBECDBFDF91CF910895CF93DF9382E244 -:100EB0000E947809C82FDD27C5FF1AC068E083E2C9 -:100EC0000E94A109C6FF10C02091640630916506FA -:100ED0008091660690916706281739072CF48EE5F5 -:100EE00096E00E94890604C061E087E20E94A109A1 -:100EF000DF91CF9108951F93CF93DF9388E00E94F5 -:100F00007809182FC82FDD27C6FF18C060E085E0DC -:100F10000E94A10960E884E00E94A10960E080E2EB -:100F20000E94A10968E083E20E94A10961E087E2D2 -:100F30000E94A10962E085E00E94A109C4FF04C0EB -:100F400060EC89E00E94A10917FF04C060ED89E010 -:100F50000E94A109DF91CF911F9108958AE00E941C -:100F60007809992780FF03C00E945507089581FFE3 -:100F70000DC08AE20E94780980912B06813061F4CD -:100F8000E0912E06F0912F060995089582E30E94C4 -:100F900078098AE30E94780908958EE00E94780912 -:100FA00068E08FE20E94A10961E08FE20E94A1093E -:100FB00020916606309167068091620690916306E3 -:100FC000821793075CF468E083E20E94A10961E064 -:100FD00087E20E94A10981E0809361060895AF92A3 -:100FE000BF92CF92DF92EF92FF920F931F93CF9316 -:100FF000DF93CDB7DEB728970FB6F894DEBF0FBEEC -:10100000CDBF86E20E94780986FF7EC08E010F5F09 -:101010001F4F580169E0C62ED12CCC0EDD1E8091E9 -:1010200052060E947809F80181938F017501EC1531 -:10103000FD05A9F768E087E20E94A10968E083E264 -:101040000E94A10980E20E9478098F77682F80E2D0 -:101050000E94A1098981992780769070803291053C -:1010600009F440C080349105D1F1892BF1F5F501E7 -:1010700081818630D9F0873048F48130F1F18130B8 -:10108000C8F08330D1F1853081F521C0893019F164 -:101090008A3018F4883049F505C08A3071F18B30F8 -:1010A00021F520C0C5010E94520627C0C5010E943B -:1010B000D30623C068E083E20E94A10961E081E2D7 -:1010C0000E94A10960E081E20E94A1090BC0C50154 -:1010D0000E94750612C0C5010E9458060EC0C501C7 -:1010E0000E94510965E083E206C080E20E9478090F -:1010F0008058682F80E20E94A109F701808188232F -:10110000D1F465E083E215C0209166063091670650 -:1011100080916206909163068217930764F410929F -:1011200067061092660668E083E20E94A10961E00A -:1011300087E20E94A10928960FB6F894DEBF0FBE81 -:10114000CDBFDF91CF911F910F91FF90EF90DF9076 -:10115000CF90BF90AF900895CF92DF92EF92FF9221 -:101160000F931F93CF93DF93CDB7DEB7C054D0401A -:101170000FB6F894DEBF0FBECDBF8CE00E94780999 -:10118000992780FF03C00E94EF077BC081FF2AC020 -:101190008EE20E9478098DE20E94780989838E018F -:1011A0000F5F1F4F6801FFE3EF2EF12CE00EF11EE1 -:1011B0000F5F1F4F0E946409F80180830E151F0501 -:1011C000B9F780913C03813031F4E0913F03F09115 -:1011D0004003C601099568E08FE20E94A10961E021 -:1011E0008FE22BC082FF2CC086E30E94780985E342 -:1011F0000E94780989838E010F5F1F4F6801EFE31A -:10120000EE2EF12CE00EF11E0F5F1F4F0E946409BD -:10121000F80180830E151F05B9F780913D038130D9 -:1012200031F4E0914103F0914203C601099568E071 -:1012300087E30E94A10961E087E30E94A10921C020 -:1012400083FF1FC08EE30E9478098E010F5F1F4F3E -:10125000680171E4E72EF12CEC0EFD1E8DE30E9477 -:101260007809F80181938F01EE15FF05B9F7809198 -:101270003E03813031F4E0913F03F0914003C60119 -:101280000995C05CDF4F0FB6F894DEBF0FBECDBF2F -:10129000DF91CF911F910F91FF90EF90DF90CF9052 -:1012A00008950895089581E08ABF80E189BFE4E64A -:1012B000F0E0808187608083E5E6F0E080818360F4 -:1012C0008083A79AAF9A089585B3805885BBE5E6D9 -:1012D000F0E0808122E0822780830000000089B353 -:1012E00095B3905895BB9081922790839927089544 -:1012F0009FEF9ABB8BBB85B3805885BBE5E6F0E0DA -:10130000808195E08927808385B3805885BB808163 -:101310008927808300001ABA0E94640999270895DA -:101320008BBB85B3805885BBE5E6F0E0808191E01A -:101330008927808385B3805885BB808189278083F6 -:1013400008958BBB8FEF8ABB85B3805885BBE5E6DC -:10135000F0E0808195E08927808385B3805885BB44 -:10136000808189278083862F0E949009089508959F -:1013700082E180933E0681E080933F0680E191E028 -:1013800090934106809340061092420610924306C5 -:101390001092440688E0809345061092470610920A -:1013A0004606109249061092480610924B0610927B -:1013B0004A0610924C0610924D0610924E0610925C -:1013C0004F0610923C0310923D0310923E03109280 -:1013D0002B0610922C0610922D06109235061092B4 -:1013E00034061092A8031092A7030895909347061D -:1013F00080934606709349066093480650934B06C7 -:1014000040934A06089590934706809346060895B0 -:101410009093490680934806089590934B068093D5 -:101420004A060895809342060895809343060895DE -:10143000809344060895CF93DF939C01CB01E09104 -:101440003406F091350662E070E00E94031D0FC083 -:10145000A081B1818281823039F4ED018D8199279B -:101460008217930709F468870780F085E02D30978D -:1014700079F7DF91CF910895CF93DF939C01E091AD -:101480003406F091350614C0A081B1818281843088 -:1014900061F4848199278217930739F4868199270B -:1014A0008617970711F4ED014B830780F085E02D37 -:1014B000309751F7DF91CF910895BF92CF92DF928D -:1014C000EF92FF920F931F93CF93DF936C01162F30 -:1014D000F42EB22EC0913406D09135062097A1F497 -:1014E00089E090E00E94051CFC01909335068093F2 -:1014F0003406D182C082138310861782F282B482AE -:101500000583E68215C0EC018F8198850097D9F795 -:1015100089E090E00E94051CFC0198878F83D182AE -:10152000C0821383F282B4820583E682108617821A -:10153000DF91CF911F910F91FF90EF90DF90CF90AF -:10154000BF900895EF92FF921F93CF93DF937C019A -:10155000C091A703D091A803209711F011E012C009 -:1015600085E090E00E94051CFC019093A803809305 -:10157000A703F182E08212821482138210E012C06B -:101580001F5FEC018B819C810097D1F785E090E093 -:101590000E94051CFC019C838B83F182E0821283F4 -:1015A00014821382812F9927DF91CF911F91FF9091 -:1015B000EF900895EF92FF920F931F93CF93DF93D5 -:1015C000E091A703F091A80380E090E00380F4810C -:1015D000E02D01963097D1F7880F991F0E94051CC6 -:1015E0009093AA038093A9030091A7031091A803E5 -:1015F000E801E880F9808A81C82FDD27CC0FDD1F44 -:101600008091A9039091AA03C80FD91FF701808187 -:1016100099270E94051C9983888320E030E017C039 -:10162000E801EA81FF27EE0FFF1F8091A903909147 -:10163000AA03E80FF91F0190F081E02DE20FF31FDC -:10164000D701A20FB31F8C9180832F5F3F4FF7010B -:1016500080819927281739071CF3E8018B819C8129 -:10166000009711F08C01C4CFDF91CF911F910F91A2 -:10167000FF90EF9008954F925F926F927F928F92BA -:101680009F92AF92BF92CF92DF92EF92FF920F9311 -:101690001F93CF93DF93E0913406F09135066624D3 -:1016A000772409C08281823019F40894611C711C6E -:1016B0000780F085E02D3097A9F74301880C991C2D -:1016C000C4010E94051C9093510680935006E1E0EE -:1016D000EE2EF12CAA24BB2455C0E0913406F091E3 -:1016E000350679E0C72ED12C15C0A081B181848147 -:1016F00099278E159F0519F48381C80ED11CED0121 -:101700008D818E1521F48281823009F45D0107807C -:10171000F085E02D309749F7009150061091510661 -:1017200002501040080D191DC6010E94051CF80149 -:101730009183808320E030E0E0915006F0915106E3 -:10174000E80DF91D32970190F081E02DE20FF31FB3 -:10175000D501A20FB31F8C9180832F5F3F4F29309B -:10176000310551F7E0915006F0915106E80DF91D51 -:1017700032970190F081E02D8C2D875F8283089451 -:10178000E11CF11C6E147F040CF0A7CF61E0C62EA3 -:10179000D12C59E0A52EB12C4424552442E0842EAE -:1017A000912CA1C0A0913406B091350612C0ED91E4 -:1017B000FC9111978181823049F4858199278C159C -:1017C0009D0521F48481482E552405C0ED01AF818B -:1017D000B885109761F731E0E32EF12C79C0609164 -:1017E0003406709135066DC0FB01C081D1818981BD -:1017F000843009F063C0868199278E159F0509F012 -:101800005DC0848199278C159D0509F057C095010D -:1018100040E050E0E0915006F0915106E80DF91DCE -:1018200032970190F081E02DE20FF31FDE01A40F4B -:10183000B51F8C9180832F5F3F4F4F5F5F4F4930C3 -:10184000510541F789E090E0A80EB91EC091340619 -:10185000D091350631C08A81853059F58C81992720 -:101860008C159D0531F58D8199278E159F0509F5FC -:1018700008811981950140E050E0E0915006F09117 -:101880005106E80DF91D32970190F081E02DE20F2D -:10189000F31FD801A40FB51F8C9180832F5F3F4F9A -:1018A0004F5F5F4F4730510541F7E7E0F0E0AE0E84 -:1018B000BF1E0F80D885C02D209769F6EB016F8180 -:1018C00078856115710509F08FCF0894E11CF11C32 -:1018D0004E145F040CF083CF0894C11CD11CE2E0CD -:1018E000F0E08E0E9F1E6C147D040CF05BCFDF9138 -:1018F000CF911F910F91FF90EF90DF90CF90BF900D -:10190000AF909F908F907F906F905F904F900895D1 -:101910006F927F928F929F92AF92BF92CF92DF92FF -:10192000EF92FF920F93CF93DF935C013B0149014C -:10193000E0913406F091350616C0A081B181848112 -:101940009927A816B90661F4868199278615970507 -:1019500039F48281843021F4ED018C818F5F8C8396 -:101960000780F085E02D309741F787E090E00E94F6 -:10197000051CFC0187E0808385E0818382820383EC -:10198000F582E482C682EE24062D2A2D45E067E02A -:10199000CF010E945D0ADF91CF910F91FF90EF90F0 -:1019A000DF90CF90BF90AF909F908F907F906F907F -:1019B0000895AF92BF92CF92DF92EF92FF920F9372 -:1019C000FC01A114B10401F14230510571F0433022 -:1019D000510599F041305105B9F481E080932B060F -:1019E000B0922F06A0922E060FC081E080932C06A5 -:1019F000B0923106A092300607C081E080932D0698 -:101A0000B0923306A092320620583F4FCF010E9479 -:101A1000880C0F91FF90EF90DF90CF90BF90AF9028 -:101A20000895AF92BF92CF92DF92EF92FF920F9301 -:101A3000FC014230510571F04330510599F04130BD -:101A40005105B9F481E080933C03B0924003A09229 -:101A50003F030FC081E080933D03B0924203A09208 -:101A6000410307C081E080933E03B0924403A092FB -:101A70004303CF010E94880C0F91FF90EF90DF90FD -:101A8000CF90BF90AF900895CF92DF92EF920F93D7 -:101A90001F93CF93DF936C018B01A0913406B0911B -:101AA0003506C0E0D0E014C02D913C911197F901AA -:101AB00085818C1551F4FD018281823031F4F90168 -:101AC00084818F5F8483C82FDD27FD01A781B085C6 -:101AD000109751F789E090E00E94051CFC0189E015 -:101AE000808384E0818302831382148215821682AC -:101AF00017821086EC2E00E02C2D44E069E0CF0127 -:101B00000E945D0ACE01DF91CF911F910F91EF905E -:101B1000DF90CF900895BF92CF92DF92EF92FF9225 -:101B20000F931F93CF93DF936C017B01142FB22E81 -:101B3000A0913406B0913506C0E0D0E014C02D91DC -:101B40003C911197F90185818C1551F4FD01828139 -:101B5000823031F4F90184818F5F8483C82FDD27BF -:101B6000FD01A781B085109751F789E090E00E94B0 -:101B7000051CFC0189E0808384E08183E28213827A -:101B800014821583B68207831086EC2E00E02C2D7C -:101B900044E069E0CF010E945D0ACE01DF91CF9160 -:101BA0001F910F91FF90EF90DF90CF90BF9008951D -:101BB000EF920F931F9310914F061F5F10934F06E4 -:101BC00089E090E00E94051CFC0189E0808389E0A7 -:101BD00090E09383828382E081831482158316824E -:101BE00080EA87838AE18087EE2400E020E042E0FB -:101BF00069E0CF010E945D0A812F99271F910F9103 -:101C0000EF900895CF93DF93EC01FC010190002049 -:101C1000E9F7E81BF90BCF01880F991F0E94051CFB -:101C20009C01FE0101900020E9F7EC1BFD0BEE0F7B -:101C3000FF1FDC01EC9383E0F901818340E050E079 -:101C400009C0FE01E40FF51F80818C93FD01118214 -:101C50004F5F5F4F1296FE0101900020E9F7319728 -:101C6000EC1BFD0B4E175F0760F3C9010E94A20A2F -:101C70009927DF91CF910895EF92FF920F931F93D1 -:101C8000CF93DF938C017B01CA010E94020E9C015D -:101C9000E0913406F091350614C0A081B1818281B3 -:101CA000843061F4848199278017910739F4868103 -:101CB00099278E159F0511F4ED0128870780F0857F -:101CC000E02D309751F7DF91CF911F910F91FF9049 -:101CD000EF9008950F931F93CF93DF938C01CB0167 -:101CE0000E94020E9C01E0913406F09135060FC06F -:101CF000A081B1818281823039F4ED018D819927F3 -:101D00008017910709F42E830780F085E02D309726 -:101D100079F7DF91CF911F910F9108950E94020EE4 -:101D20001816190614F480934E0608950E94020EA8 -:101D30001816190614F480934D0608950E94020E99 -:101D40001816190614F480934C0608951F9386E024 -:101D50000E947809992786FF03C00E94AC080EC034 -:101D600082FF03C00E94AE0709C081FF03C00E942A -:101D70007B0704C084FF02C00E94CD0787E00E9459 -:101D80007809182F60E087E00E94A109612F87E0A1 -:101D90000E94A1091F91089562E081E00E94A109BB -:101DA00008950E943B0B0E94DA0A0E94310661E00E -:101DB00080E00E94A10980E00E94780980FDFBCFAD -:101DC00062E081E00E94A10960E884E00E94A1092C -:101DD00060E480E20E94A10968E083E20E94A10918 -:101DE00069E087E20E94A1096FE08DE00E94A109ED -:101DF0006FE08BE00E94A10968ED89E00E94A109D3 -:101E000063E38FE00E94A10966ED87E00E94A109CB -:101E100062E085E00E94A1096CEC80E00E94A109CB -:101E200008958EEC8093450381E087BF8091450340 -:101E300082BF83E083BF08950895089583E080936F -:101E4000EB0481E08093EC048BE08093ED049FE64B -:101E50009093EE0483E68093EF0484E78093F0048C -:101E60009093F10480E78093F20485E78093F30474 -:101E700083E78093F4048FE58093F50480E38093F7 -:101E8000F60481E38093F7041092F8048EE090E06A -:101E90000E94AE010895FC018081833011F40E94FC -:101EA0001E0F08951F9311E0812F0E94751060E0AE -:101EB000812F0E9462111F5F1431B1F718E1812F49 -:101EC0000E94751060E0812F0E9462111F5F1B321B -:101ED000B1F71F910895CF93DF93DC01EC01EA8104 -:101EE000FB8121918E81815019F48981E81BF109D0 -:101EF000ED01FB83EA838E839FB7F8948C91815028 -:101F00008C939FBF822F9927DF91CF910895FC0179 -:101F1000108275836483738362834183478346831E -:101F20000895CF93DF93DC019C91ED01898198178F -:101F300018F080E090E016C0ED01EC81FD81619326 -:101F40008F81815019F48981E81BF109ED018F839C -:101F5000FD83EC839FB7F8948C918F5F8C939FBF28 -:101F600081E090E0DF91CF910895FC01808188238A -:101F7000E9F3CF010E946B0F99270895FC0180813E -:101F8000882319F48FEF9FEF0895CF010E946B0F04 -:101F90009927089581E090E0089581E090E0089508 -:101FA00081E090E0089581E090E00895CF93DF9381 -:101FB000CDB7DEB722970FB6F894DEBF0FBECDBF08 -:101FC000982F8150833120F08751833108F07EC0F3 -:101FD000E92FFF27EB5BFC4F82E08183892F992754 -:101FE000AA27BB27FC013197EC32F10508F06EC03F -:101FF000EA5BFF4FEE0FFF1F0590F491E02D09946F -:10200000159A5BC0169A5DC0179A57C0B89A59C006 -:10201000B99A53C0BA9A55C0BB9A4FC0BC9A51C026 -:10202000BD9A4BC0BE9A4DC0BF9A47C0889A49C05E -:10203000899A43C08A9A45C08B9A3FC08C9A41C006 -:102040008D9A3BC08E9A3DC08F9A37C0A09A39C0F6 -:10205000A19A33C0A29A35C0A39A2FC0A49A31C0C6 -:10206000A59A2BC0A69A2DC080916100806807C0F8 -:1020700080916100806419C08091610080628093CA -:1020800061001BC08091610080610FC08091610080 -:102090008860F5CF80916100846007C08091610005 -:1020A0008260EDCF8091610081608093610009C002 -:1020B000109A03C0119A05C0129A81E090E008C0FE -:1020C000139AE1E0F0E0FA83E98304C084E090E051 -:1020D0009A83898389819A8122960FB6F894DEBF0C -:1020E0000FBECDBFDF91CF910895982F81508331DE -:1020F00030F08751833118F084E090E00895892F03 -:102100000E94D60F81E090E00895CF93DF93CDB782 -:10211000DEB722970FB6F894DEBF0FBECDBF982F63 -:102120008150833120F08751833108F07EC0E92F40 -:10213000FF27EB5BFC4F81E08183892F9927AA273A -:10214000BB27FC013197EC32F10508F06EC0EE5868 -:10215000FF4FEE0FFF1F0590F491E02D09941598A5 -:102160005BC016985DC0179857C0B89859C0B99809 -:1021700053C0BA9855C0BB984FC0BC9851C0BD98C9 -:102180004BC0BE984DC0BF9847C0889849C0899839 -:1021900043C08A9845C08B983FC08C9841C08D98A9 -:1021A0003BC08E983DC08F9837C0A09839C0A19889 -:1021B00033C0A29835C0A3982FC0A49831C0A59869 -:1021C0002BC0A6982DC0809161008F7707C08091A9 -:1021D00061008F7B19C0809161008F7D80936100C9 -:1021E0001BC0809161008F7E0FC080916100877F4E -:1021F000F5CF809161008B7F07C0809161008D7F5A -:10220000EDCF809161008E7F8093610009C01098AE -:1022100003C0119805C0129881E090E008C013989F -:10222000E1E0F0E0FA83E98304C084E090E09A837F -:10223000898389819A8122960FB6F894DEBF0FBEFA -:10224000CDBFDF91CF910895FB011082833091F0D3 -:10225000843028F4813051F0823029F409C0843070 -:1022600059F0853059F085E090E0089586B307C0B5 -:1022700083B305C080B303C081B101C080B1808346 -:1022800081E090E00895833091F0843028F481302B -:1022900051F0823029F409C0843059F0853069F05A -:1022A00084E090E0089568BB05C065BB03C062BBD5 -:1022B00001C063B981E090E008956093620081E01D -:1022C00090E00895982FE82FFF27EB5BFC4F81816A -:1022D000823019F086E090E00895892F9927AA2787 -:1022E000BB27FC013197EC32F10540F4E256FF4F79 -:1022F000EE0FFF1F0590F491E02D099484E090E02B -:102300000895662311F01D9AFFC01D98FDC0662335 -:1023100011F01E9AF9C01E98F7C0662311F01F9A9B -:10232000F3C01F98F1C0662311F0C09AEDC0C098A9 -:10233000EBC0662311F0C19AE7C0C198E5C06623DF -:1023400011F0C29AE1C0C298DFC0662311F0C39AAF -:10235000DBC0C398D9C0662311F0C49AD5C0C49815 -:10236000D3C0662311F0C59ACFC0C598CDC06623EF -:1023700011F0C69AC9C0C698C7C0662311F0C79AA3 -:10238000C3C0C798C1C0662311F0909ABDC0909891 -:10239000BBC0662311F0919AB7C09198B5C066236F -:1023A00011F0929AB1C09298AFC0662311F0939A3F -:1023B000ABC09398A9C0662311F0949AA5C09498D5 -:1023C000A3C0662311F0959A9FC095989DC066237F -:1023D00011F0969A99C0969897C0662311F0979A33 -:1023E00093C0979891C0662311F0A89A8DC0A898C1 -:1023F0008BC0662311F0A99A87C0A99885C066236F -:1024000011F0AA9A81C0AA987FC0662311F0AB9AF6 -:102410007BC0AB9879C0662311F0AC9A75C0AC98BC -:1024200073C0662311F0AD9A6FC0AD986DC066237E -:1024300011F0AE9A69C0AE9867C0662321F0809112 -:10244000620080680DC0809162008F7709C06623AA -:1024500021F080916200806403C0809162008F7BD4 -:102460008093620051C0662321F0809162008062F7 -:10247000F7CF809162008F7DF3CF662321F08091AA -:1024800062008061EDCF809162008F7EE9CF66238C -:1024900021F0809162008860E3CF80916200877FA5 -:1024A000DFCF662321F0809162008460D9CF8091D4 -:1024B00062008B7FD5CF662321F08091620082601D -:1024C000CFCF809162008D7FCBCF662321F08091AA -:1024D00062008160C5CF809162008E7FC1CF66238C -:1024E00011F0189A11C018980FC0662311F0199AAC -:1024F0000BC0199809C0662311F01A9A05C01A98E2 -:1025000003C0662321F01B9A81E090E008951B9898 -:1025100081E090E008951F93182F8150833130F0AF -:102520008751833118F084E090E00FC0E12FFF273E -:10253000EB5BFC4F83E08183812F0E94D60F61E02B -:10254000812F0E94621181E090E01F910895CF9346 -:10255000DF93982FEB011882E82FFF27EB5BFC4FEE -:102560008181813019F086E090E07DC0892F992724 -:10257000AA27BB27FC013197EC32F10540F4E65362 -:10258000FF4FEE0FFF1F0590F491E02D099484E0BA -:1025900090E069C00D9B65C062C00E9B62C05FC0C9 -:1025A0000F9B5FC05CC0B09B5CC059C0B19B59C061 -:1025B00056C0B29B56C053C0B39B53C050C0B49BCF -:1025C00050C04DC0B59B4DC04AC0B69B4AC047C025 -:1025D000B79B47C044C0809B44C041C0819B41C061 -:1025E0003EC0829B3EC03BC0839B3BC038C0849BA7 -:1025F00038C035C0859B35C032C0869B32C02FC0E5 -:10260000879B2FC02CC0989B2CC029C0999B29C0A8 -:1026100026C09A9B26C023C09B9B23C020C09C9BA6 -:1026200020C01DC0079B1DC01AC0069B1AC017C042 -:10263000059B17C014C0049B14C011C0039B11C09C -:102640000EC0029B0EC00BC0089B0BC008C0099BAC -:1026500008C005C00A9B05C002C00B9B02C081E0F8 -:10266000888381E090E0DF91CF910895CF93DF934D -:10267000CDB7DEB721970FB6F894DEBF0FBECDBF42 -:102680009BE19093EB04BE016F5F7F4F0E94A71206 -:102690008093EC0489818093ED041092EE0484E031 -:1026A00090E00E94AE0121960FB6F894DEBF0FBEF7 -:1026B000CDBFDF91CF9108959AE19093EB040E94F2 -:1026C00062118093EC041092ED0483E090E00E948C -:1026D000AE01089598E19093EB040E94431180931A -:1026E000EC041092ED0483E090E00E94AE010895A6 -:1026F000982F89E18093EB04933099F0943028F47B -:10270000913059F0923029F40AC0943061F095303C -:1027100061F085E090E020E00BC026B307C023B352 -:1027200005C020B303C021B101C020B181E090E019 -:102730008093EC042093ED041092EE0484E090E08A -:102740000E94AE01089597E19093EB040E948B12D2 -:102750008093EC041092ED0483E090E00E94AE01BF -:10276000089595E19093EB040E9485108093EC040A -:102770001092ED0483E090E00E94AE01089596E18E -:102780009093EB040E94D60F8093EC041092ED041A -:1027900083E090E00E94AE01089584E18093EB0411 -:1027A00081E08093EC041092ED0483E090E00E94BD -:1027B000AE01089582E18093EB0481E08093EC0404 -:1027C0001092ED0483E090E00E94AE01089583E151 -:1027D0008093EB0481E08093EC041092ED0483E09D -:1027E00090E00E94AE01089580E18093EB0481E0C7 -:1027F0008093EC041092ED0483E090E00E94AE011F -:10280000089591E19093EB040E9475108093EC047D -:102810001092ED0483E090E00E94AE010895FC0167 -:1028200080818531C9F1863180F4823131F1833183 -:1028300030F48031D1F0813109F04CC01AC08331BD -:1028400009F1843109F046C022C0883189F189310B -:1028500028F4863129F18731E9F526C08A3189F1DA -:102860008A3158F18B31B1F531C082810E94F41365 -:10287000089582810E9401140895638182810E94DB -:10288000DA130895638182810E94E71308956381BA -:1028900082810E94CD13089582810E94B113089510 -:1028A00082810E94BF13089582810E94A31308951C -:1028B000638182810E946A13089582810E94781345 -:1028C0000895638182810E945C13089582810E9431 -:1028D000361308958093EB0483E08093EC04109208 -:1028E000ED0483E090E00E94AE010895E82F81524C -:1028F000883018F084E090E00895FF27EB5BFC4FF0 -:1029000084E0818381E090E00895E82FFF27EB5B6E -:10291000FC4F8181843019F084E090E008951182A9 -:1029200081E090E0089517B8823039F0833049F0A3 -:10293000813021F082E090E008953E9A81E090E0BD -:10294000089587B1806C87B981E090E0089593E89D -:1029500096B997B1907F982B97B9369A3699FECF52 -:1029600084B195B120E030E040E050E0369A3699ED -:10297000FECF84B195B1480F591F2F5F3F4F2430D0 -:102980003105A1F73798CA01969587959695879551 -:102990000895CF93DF93EB0119821882282F3327F4 -:1029A000F901EB5BFC4F8181843019F086E090E007 -:1029B0000AC088E290E0821B930B0E94A7149983BF -:1029C000888381E090E0DF91CF91089593E2909326 -:1029D000EB040E9493148093EC041092ED0483E0C6 -:1029E00090E00E94AE010895CF93DF93CDB7DEB79C -:1029F00022970FB6F894DEBF0FBECDBF92E2909340 -:102A0000EB04BE016F5F7F4F0E94C9148093EC04FA -:102A100029813A81832F99278093ED042093EE0436 -:102A20001092EF0485E090E00E94AE0122960FB66E -:102A3000F894DEBF0FBECDBFDF91CF91089591E234 -:102A40009093EB04E82FFF27EB5BFC4F81818430F0 -:102A500019F084E090E003C0118281E090E080935F -:102A6000EC041092ED0483E090E00E94AE01089522 -:102A7000E82F80E28093EB048E2F8152883018F08B -:102A800084E090E007C0FF27EB5BFC4F84E081838C -:102A900081E090E08093EC041092ED0483E090E0FC -:102AA0000E94AE010895FC018081813271F0823272 -:102AB00018F48032B1F405C0823259F0833289F4BF -:102AC0000CC082810E943815089582810E941F15D2 -:102AD000089582810E94F414089582810E94E61470 -:102AE00008958093EB0483E08093EC041092ED044E -:102AF00083E090E00E94AE010895E4E7F0E0808179 -:102B0000846080838BE0809352038CE08093530336 -:102B100081E090E00895E4E7F0E080818B7F80839E -:102B2000109252031092530381E090E00895809335 -:102B30007000E1E7F0E080818C7F8083808180837A -:102B400081E090E00895809171009927887F9070CE -:102B500008958091710084EA8093740080917400DC -:102B600087FFFCCF81E090E0089584E980937400B2 -:102B70008091740084FDFCCF81E090E00895AC0169 -:102B800020E030E00FC0FA01E20FF31F8081809354 -:102B9000730084E8809374008091740087FFFCCFF9 -:102BA0002F5F3F4F2617370774F3089584E880930B -:102BB00074008091740087FFFCCF80917300992787 -:102BC000089585E38093EB0481E08093EC0420E09A -:102BD00030E00FC084E8809374008091740087FF18 -:102BE000FCCF80917300F901E351FB4F80832F5F8D -:102BF0003F4F2617370774F3FB01E351FB4F108259 -:102C0000CB0103960E94AE0108959B01BC01C9014E -:102C10000E94BF1581E08093EC041092ED0483E0E4 -:102C200090E00E94AE01089584E980937400809141 -:102C3000740084FDFCCF81E08093EC041092ED04DD -:102C400083E090E00E94AE0108958091710084EAD3 -:102C5000809374008091740087FFFCCF81E08093A3 -:102C6000EC041092ED0483E090E00E94AE01089520 -:102C700080937000E1E7F0E080818C7F8083808129 -:102C8000808381E08093EC041092ED0483E090E077 -:102C90000E94AE010895E4E7F0E080818B7F80839D -:102CA000109252031092530381E08093EC0410922F -:102CB000ED0483E090E00E94AE010895E4E7F0E0C7 -:102CC0008081846080838BE0809352038CE08093CA -:102CD000530381E08093EC041092ED0483E090E0D4 -:102CE0000E94AE010895FC0180818093EB0484333F -:102CF000D1F0853338F4813379F0823381F0803339 -:102D000031F507C08633E9F08633A0F08733F9F454 -:102D10001BC00E945E1608950E944B160895828182 -:102D20000E943816089582813396BF0199270E9428 -:102D30000516089563817727828199270E94E115FE -:102D400008950E94251608950E941416089583E0A0 -:102D50008093EC041092ED0483E090E00E94AE01B9 -:102D60000895782F613079F0613050F0623021F0B1 -:102D7000633009F059C002C061E003C061E004C0E3 -:102D800060E030E002C060E031E04330D9F0443030 -:102D900028F4413089F0423090F40CC0453031F0D5 -:102DA0004530A0F0463009F03FC002C040E005C009 -:102DB00040E006C041E007C041E050E005C041E00E -:102DC00050E006C040E051E020E003C040E051E0A8 -:102DD00021E0BB9887B3866087BB88B3817F88BBBF -:102DE00080E090E0772311F081E090E075E0880FBB -:102DF000991F7A95E1F78065660F660F660F682B5D -:102E0000330F330F362B352B440F432B4DB92EB9CF -:102E100088E080934B038AE080934C0389E08093A1 -:102E20004D0381E090E0089582E090E008951DB8A0 -:102E30001EB810924B0310924C0310924D0381E088 -:102E400090E00895AC0120E030E008C0E60FF71FE5 -:102E500080818FB9779BFECF2F5F3F4FE22FFF27F7 -:102E6000E417F5079CF381E090E00895DC0120E091 -:102E700030E040E050E014C01FB809C083E0493E94 -:102E800058071CF088E090E008954F5F5F4F779BF4 -:102E9000F5CFFB01E20FF31F8FB180832F5F3F4F10 -:102EA0002A173B074CF381E090E00895CF93DF931E -:102EB000EC0120E030E0A0E0B0E017C0FE01E20F3E -:102EC000F31F80818FB908C0119683E0A93EB8072F -:102ED0001CF088E090E00EC0779BF6CFFB01E20F7C -:102EE000F31F8FB180832F5F3F4F2417350734F3D3 -:102EF00081E090E0DF91CF910895EF92FF920F93E0 -:102F00001F938B01EBEEEE2EE4E0FE2E23E42093E4 -:102F1000EB04B7016E5F7F4FA8010E9456178093A4 -:102F2000EC040E5F1F4FE00EF11EF7011082C80186 -:102F300001960E94AE011F910F91FF90EF900895AE -:102F4000EF92FF920F931F938C01FBEEEF2EF4E0B4 -:102F5000FF2E84E48093EB04B7016E5F7F4FC801BE -:102F60000E9436178093EC040E5F1F4FE00EF11E97 -:102F7000F7011082C80101960E94AE011F910F91C6 -:102F8000FF90EF90089593E49093EB0499270E94AB -:102F900022178093EC041092ED0483E090E00E94ED -:102FA000AE01089581E48093EB040E94171780938B -:102FB000EC041092ED0483E090E00E94AE010895CD -:102FC00090E49093EB040E94B1168093EC0410926D -:102FD000ED0483E090E00E94AE010895CF93DF936B -:102FE000EC0188818334A9F0843428F4803441F0E2 -:102FF000813409F50BC0843499F08534E1F414C0B0 -:103000004C816B818A810E94E01720C00E94D217F8 -:103010001DC0BE016D5F7F4F8A810E94C31716C01D -:103020008A8199270E94A0176A817727CE0103968B -:103030000E947D170BC08093EB0483E08093EC0427 -:103040001092ED0483E090E00E94AE01DF91CF91F9 -:103050000895B89AB99ABA9ABB98BC9ABD9AC4987E -:10306000C59881E08093560382E080935703809354 -:1030700058038093590381E090E00895109256031D -:1030800010925703109258031092590381E090E078 -:103090000895C098C198C29880E29EE40197F1F724 -:1030A000C09A8AE0982F9A95F1F7C29AC19A8A95A8 -:1030B000F1F70895282FC19887FD02C0C29801C07A -:1030C000C29A8AE0982F9A95F1F7C19A8A95F1F7FA -:1030D000C19826FF02C0C29A01C0C2988AE0982F08 -:1030E0009A95F1F7C19A8A95F1F70895282F220F42 -:1030F00030E0C19827FF02C0C29A01C0C2988AE09E -:10310000982F9A95F1F7C19A8A95F1F73F5F37307A -:1031100011F0220FEECF0895282F30E0C19827FF3D -:1031200002C0C29A01C0C2988AE0982F9A95F1F71E -:10313000C19A8A95F1F73F5F383011F0220FEECF38 -:103140000895C198C2988AE0982F9A95F1F7C19A8C -:10315000982F9A95F1F7C198C098982F9A95F1F702 -:10316000C19A982F9A95F1F7C1988A95F1F7C09A6C -:1031700080E090E00895C198C098C298C39A0895DD -:103180000E94491880E30E945A1880E60E9476182F -:1031900008950E94491880E00E945A1880E00E9419 -:1031A00076180E94BB1808950F931F93182F062FAF -:1031B0000E94491880E40E945A18812F0E947618B4 -:1031C000802F0E948C1881E090E01F910F9108954C -:1031D0001F93182F0E94491880EC0E945A18812FC3 -:1031E0000E9476180E94A11899271F910895C198EE -:1031F0008AE08A95F1F7C29830E090E0990FC19A81 -:103200002AE0822F8A95F1F7C198B3999F5F822FA8 -:103210008A95F1F73F5F383089F7C098C19A822FBD -:103220008A95F1F7C09AC1982A95F1F7892F9927C5 -:1032300008951F93182F0E94491880E80E945A1879 -:10324000812F0E9476180E94F71899271F910895E0 -:10325000DF92EF92FF920F931F93CF93DF93D82EBD -:103260007B018A01C0E0D0E009C08D2D8C0F0E9447 -:103270001919F801EC0FFD1F80832196CE15DF058B -:10328000A1F781E090E0DF91CF911F910F91FF9026 -:10329000EF90DF9008950F931F93082F162F0E9431 -:1032A000C018612F802F0E94D41881E090E01F91F8 -:1032B0000F910895DF92EF92FF920F931F93CF9398 -:1032C000DF93D82E7B018A01C0E0D0E009C0F8016D -:1032D000EC0FFD1F60818D2D8C0F0E944B192196E4 -:1032E000CE15DF05A1F781E090E0DF91CF911F912E -:1032F0000F91FF90EF90DF90089594E09093EB048E -:103300000E945A198093EC041092ED0483E090E03F -:103310000E94AE010895EF92FF920F931F938B01CD -:103320009BEEE92E94E0F92E93E09093EB04A70135 -:103330004E5F5F4F0E9428198093EC040E5F1F4F71 -:10334000E00EF11EF7011082C80101960E94AE0145 -:103350001F910F91FF90EF90089582E08093EB040E -:10336000109256031092570310925803109259036B -:1033700081E08093EC041092ED0483E090E00E94E1 -:10338000AE01089581E08093EB040E942918809398 -:10339000EC041092ED0483E090E00E94AE010895E9 -:1033A000FC018381823069F0833018F48130F1F4BC -:1033B00005C0833049F08430C9F40FC00E94C2199F -:1033C00008950E94AD190895AF014A5F5F4F65816E -:1033D000772784810E948B190895AF014A5F5F4F60 -:1033E0006581772784810E947D190895808180936B -:1033F000EB0483E08093EC041092ED0483E090E012 -:103400000E94AE0108951F920F920FB60F921124E1 -:103410000F900FBE0F901F9018959C010897029770 -:1034200018F084E090E00895F901EB5BFC4F8DE02B -:1034300081832830310561F02930310519F087E0AA -:1034400090E00895BD9A81E090E09BBD8ABD08950B -:10345000BC9A81E090E00895FC01EB5BFC4F118287 -:1034600081E090E008959C01FC01EB5BFC4F8181C1 -:103470008D3019F086E090E008952830310539F15B -:103480002930310519F087E090E008956330710527 -:10349000A9F0643071053CF46130710559F0623077 -:1034A0007105A9F409C06430710551F065307105EA -:1034B00071F408C081E007C082E005C083E003C06A -:1034C00084E001C085E08EBD81E090E0089581E058 -:1034D00090E008959C01FC01EB5BFC4F81818D30F5 -:1034E00019F086E090E008952830310531F0293058 -:1034F000310531F087E090E0089581E090E0089593 -:103500007BBD6ABD81E090E008959C0183E58093D6 -:10351000EB04F901EB5BFC4F81818D3019F086E003 -:1035200090E00DC02830310541F02930310519F007 -:1035300087E090E004C07BBD6ABD81E090E08093AD -:10354000EC041092ED0483E090E00E94AE01089537 -:1035500022E52093EB040E94331A8093EC0410922E -:10356000ED0483E090E00E94AE01089521E52093F0 -:10357000EB04FC01EB5BFC4F118281E08093EC04D7 -:103580001092ED0483E090E00E94AE01089520E5E2 -:103590002093EB040E940D1A8093EC041092ED042A -:1035A00083E090E00E94AE010895FC0180818135A6 -:1035B00079F0823518F48035F1F405C0823569F070 -:1035C0008335C9F411C0828199270E94C71A0895D2 -:1035D000828199270E94B61A089563817727828194 -:1035E00099270E94A81A08956381772782819927D5 -:1035F0000E94851A08958093EB0483E08093EC0485 -:103600001092ED0483E090E00E94AE010895CF9304 -:10361000DF93CDB7DEB7DF91CF910895089581E0B4 -:1036200090E0089508958A3310F4805301C08755BF -:103630006A3310F4605301C067556F708295807FC4 -:10364000682B862F992708950895DC0180E1A0302A -:10365000B80718F082E090E00895E199FECF9D014F -:1036600009C03FBB2EBB2F5F3F4FE09AE60FF71F0D -:103670008DB38083822F8A1BE82FFF27E417F5077D -:1036800080F381E090E00895DC0180E1A030B8078C -:1036900018F082E090E00895E199FECF9D010AC004 -:1036A0003FBB2EBB2F5F3F4FE60FF71F80818DBBC7 -:1036B000E29AE19A822F8A1BE82FFF27E417F50789 -:1036C00078F381E090E008950F931F938B0121E838 -:1036D0002093EB040E94441B8093EC041092ED04B1 -:1036E0001F930F9389EF92E09F938F930E94071B84 -:1036F00083E090E00E94AE010F900F900F900F902A -:103700001F910F910895CF92DF92EF92FF920F9346 -:103710001F937B010BEE14E020E82093EB0422E0E2 -:10372000C22ED12CC00ED11EAB01B6010E94251BAA -:103730008093EC0482E090E0E80EF91E0E0D1F1D50 -:10374000F8011082DF92CF9286E093E09F938F93EF -:103750000E94071BC70101960E94AE010F900F90B7 -:103760000F900F901F910F91FF90EF90DF90CF90EF -:103770000895EF92FF920F931F93CF93DF93EC0185 -:103780008B819927F82EEE248A81E80EF11C8D8119 -:103790009927182F00278C81080F111DFF92EF9297 -:1037A0001F930F9380E193E09F938F930E94071BD9 -:1037B00088812DB73EB72A5F3F4F0FB6F8943EBFC2 -:1037C0000FBE2DBF803819F0813869F405C0B801EB -:1037D000C7010E94831B12C02696A801BE01C70123 -:1037E0000E94641B0BC08093EB0483E08093EC0485 -:1037F0001092ED0483E090E00E94AE01DF91CF9142 -:103800001F910F91FF90EF900895CF93DF93AC013C -:10381000029710F442E050E0A0917006B09171065A -:10382000FD01C0E0D0E020E030E020C08081918147 -:103830008417950769F482819381209719F09B83FF -:103840008A8304C090937106809370069F0132C0F2 -:103850004817590738F42115310519F082179307D5 -:1038600008F49C01EF010280F381E02D3097F1F61E -:103870002115310599F1C901841B950B049708F4B2 -:10388000A901E0E0F0E028C08D919C91119782178A -:103890009307F9F44817590781F4ED018A819B8158 -:1038A000309719F09383828304C0909371068093BC -:1038B00070069D012E5F3F4F4CC0841B950BFD0190 -:1038C000E80FF91F4193519302978D939C939F01A9 -:1038D00040C0FD01A281B3811097B1F680916E06C0 -:1038E00090916F06892B41F48091370390913803B2 -:1038F00090936F0680936E062091390330913A03BE -:103900002115310549F48DB7282F332780913503D0 -:1039100090913603281B390BA0916E06B0916F066B -:103920002A1B3B0B2417350790F0CA010296281773 -:10393000390768F09D012E5F3F4FC901840F951F25 -:1039400090936F0680936E064D935C9302C020E0C7 -:1039500030E0C901DF91CF910895CF93DF930097B5 -:1039600009F44EC0EC0122971B821A82A0917006C6 -:10397000B0917106109711F140E050E001C0DC01F8 -:10398000AC17BD0700F1BB83AA83FE0121913191E1 -:10399000E20FF31FEA17FB0771F48D919C911197C9 -:1039A000280F391F2E5F3F4F39832883FD01828105 -:1039B00093819B838A834115510559F4D0937106F5 -:1039C000C09370061DC0FD0182819381AD010097F7 -:1039D000B1F6FA01D383C28321913191E20FF31F33 -:1039E000EC17FD0769F488819981280F391F2E5F34 -:1039F0003F4FFA01318320838A819B8193838283A5 -:103A0000DF91CF91089597FB092E07260AD077FD05 -:103A100004D00CD006D000201AF4709561957F4F29 -:103A20000895F6F7909581959F4F0895AA1BBB1BAB -:103A300051E107C0AA1FBB1FA617B70710F0A61BAE -:103A4000B70B881F991F5A95A9F780959095BC01CF -:063A5000CD010895FFCF37 -:103A5600456D62656464656450726F6A656374730C -:103A6600004F63746F70757355534220496E7465C9 -:103A7600726661636520436F6E7665727465722047 -:103A8600616E6420492F4F20457874656E73696FA7 -:103A96006E003230303831313038006669727374F6 -:103AA600207061636B6574206F662061206C6F6E99 -:103AB60067206D65737361676520286C656E677432 -:103AC600683A202564290A006F63746F7075732045 -:103AD6006C6F6E672072756E6E696E67206D6573AA -:103AE600736167650A006F63746F7075732E6C6F10 -:103AF6006E675F696E646578203C206F63746F70D3 -:103B060075732E6C6F6E675F62797465730A006EEB -:103B16006F74206C617374207061636B65743A20F6 -:103B260064696666203E2036340A006C6173742030 -:103B36007061636B65740A007061727365722C2024 -:103B4600636865636B3A2025582C20636F6D6D6141 -:103B56006E643A2025580A0063616C6C696E6720B2 -:103B6600696F5F7061727365720A0063616C6C697C -:103B76006E67206164635F7061727365720A0063C9 -:103B8600616C6C696E67206932635F706172736520 -:103B9600720A0063616C6C696E67207370695F708E -:103BA60061727365720A0063616C6C696E6720707E -:103BB600776D5F7061727365720A0063616E277458 -:103BC6002063616C6C2063616E5F706172736572F5 -:103BD600202D206E6F2043414E2D737570706F72CD -:103BE600740A0063616C6C696E6720656570726F3C -:103BF6006D5F7061727365720A00756E6B6E6F77BA -:103C06006E20636D640A00726563656976696E6726 -:103C160020636F6D6D616E643A20255820286C65AF -:103C26006E6774683A202575290A00676574206EE8 -:103C36006578740A0067657420616E64206578652E -:103C4600637574650A000904007772697474656E99 -:103C56003A2025730A00726561643A2025730A00CA -:103C6600656570726F6D5F7061727365723A206C14 -:103C7600656E6774683A2025752C20616464723A13 -:0C3C86002025750A0020007206000000D6 -:00000001FF diff --git a/firmware/pin.c b/firmware/pin.c deleted file mode 100644 index 97218b7..0000000 --- a/firmware/pin.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2009 Embedded Projects (http://www.embedded-projects.net) - * Author: Benedikt Sauter - * All rights reserved. - * - * Short descripton of file: - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of the FH Augsburg nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES{} LOSS OF USE, - * DATA, OR PROFITS{} OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include - -#include "pin.h" - - -char pin_get_conf(uint8_t i, pin_conf *p) -{ - switch(i) - { - case 3: p->ox_port = &PORTC; p->ox_pin = &PINC; p->ox_ddr = &DDRC; p->ox_p = PC0; break; - case 4: p->ox_port = &PORTC; p->ox_pin = &PINC; p->ox_ddr = &DDRC; p->ox_p = PC1; break; - case 5: p->ox_port = &PORTC; p->ox_pin = &PINC; p->ox_ddr = &DDRC; p->ox_p = PC2; break; - case 6: p->ox_port = &PORTC; p->ox_pin = &PINC; p->ox_ddr = &DDRC; p->ox_p = PC3; break; - case 7: p->ox_port = &PORTC; p->ox_pin = &PINC; p->ox_ddr = &DDRC; p->ox_p = PC4; break; - case 8: p->ox_port = &PORTC; p->ox_pin = &PINC; p->ox_ddr = &DDRC; p->ox_p = PC5; break; - case 9: p->ox_port = &PORTC; p->ox_pin = &PINC; p->ox_ddr = &DDRC; p->ox_p = PC6; break; - - case 10: p->ox_port = &PORTF; p->ox_pin = &PINF; p->ox_ddr = &DDRF; p->ox_p = PF7; break; - case 11: p->ox_port = &PORTF; p->ox_pin = &PINF; p->ox_ddr = &DDRF; p->ox_p = PF6; break; - case 12: p->ox_port = &PORTF; p->ox_pin = &PINF; p->ox_ddr = &DDRF; p->ox_p = PF5; break; - case 13: p->ox_port = &PORTF; p->ox_pin = &PINF; p->ox_ddr = &DDRF; p->ox_p = PF4; break; - case 14: p->ox_port = &PORTF; p->ox_pin = &PINF; p->ox_ddr = &DDRF; p->ox_p = PF3; break; - case 15: p->ox_port = &PORTF; p->ox_pin = &PINF; p->ox_ddr = &DDRF; p->ox_p = PF2; break; - case 16: p->ox_port = &PORTF; p->ox_pin = &PINF; p->ox_ddr = &DDRF; p->ox_p = PF1; break; - case 17: p->ox_port = &PORTF; p->ox_pin = &PINF; p->ox_ddr = &DDRF; p->ox_p = PF0; break; - - case 18: p->ox_port = &PORTE; p->ox_pin = &PINE; p->ox_ddr = &DDRE; p->ox_p = PE0; break; - case 19: p->ox_port = &PORTE; p->ox_pin = &PINE; p->ox_ddr = &DDRE; p->ox_p = PE1; break; - case 20: p->ox_port = &PORTE; p->ox_pin = &PINE; p->ox_ddr = &DDRE; p->ox_p = PE2; break; - case 21: p->ox_port = &PORTE; p->ox_pin = &PINE; p->ox_ddr = &DDRE; p->ox_p = PE3; break; - case 22: p->ox_port = &PORTE; p->ox_pin = &PINE; p->ox_ddr = &DDRE; p->ox_p = PE5; break; - case 23: p->ox_port = &PORTE; p->ox_pin = &PINE; p->ox_ddr = &DDRE; p->ox_p = PE6; break; - case 24: p->ox_port = &PORTE; p->ox_pin = &PINE; p->ox_ddr = &DDRE; p->ox_p = PE7; break; - - case 25: p->ox_port = &PORTB; p->ox_pin = &PINB; p->ox_ddr = &DDRB; p->ox_p = PB0; break; - case 26: p->ox_port = &PORTB; p->ox_pin = &PINB; p->ox_ddr = &DDRB; p->ox_p = PB1; break; - case 27: p->ox_port = &PORTB; p->ox_pin = &PINB; p->ox_ddr = &DDRB; p->ox_p = PB2; break; - case 28: p->ox_port = &PORTB; p->ox_pin = &PINB; p->ox_ddr = &DDRB; p->ox_p = PB3; break; - case 29: p->ox_port = &PORTB; p->ox_pin = &PINB; p->ox_ddr = &DDRB; p->ox_p = PB4; break; - case 30: p->ox_port = &PORTB; p->ox_pin = &PINB; p->ox_ddr = &DDRB; p->ox_p = PB5; break; - case 31: p->ox_port = &PORTB; p->ox_pin = &PINB; p->ox_ddr = &DDRB; p->ox_p = PB6; break; - case 32: p->ox_port = &PORTB; p->ox_pin = &PINB; p->ox_ddr = &DDRB; p->ox_p = PB7; break; - - case 33: p->ox_port = &PORTD; p->ox_pin = &PIND; p->ox_ddr = &DDRD; p->ox_p = PD0; break; - case 34: p->ox_port = &PORTD; p->ox_pin = &PIND; p->ox_ddr = &DDRD; p->ox_p = PD1; break; - case 35: p->ox_port = &PORTD; p->ox_pin = &PIND; p->ox_ddr = &DDRD; p->ox_p = PD2; break; - case 36: p->ox_port = &PORTD; p->ox_pin = &PIND; p->ox_ddr = &DDRD; p->ox_p = PD3; break; - case 37: p->ox_port = &PORTD; p->ox_pin = &PIND; p->ox_ddr = &DDRD; p->ox_p = PD4; break; - case 38: p->ox_port = &PORTD; p->ox_pin = &PIND; p->ox_ddr = &DDRD; p->ox_p = PD5; break; - case 39: p->ox_port = &PORTD; p->ox_pin = &PIND; p->ox_ddr = &DDRD; p->ox_p = PD6; break; - case 40: p->ox_port = &PORTD; p->ox_pin = &PIND; p->ox_ddr = &DDRD; p->ox_p = PD7; break; - - default: return 0; - } - - return 1; -} diff --git a/firmware/pin.h b/firmware/pin.h deleted file mode 100644 index f0deda7..0000000 --- a/firmware/pin.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2009 Embedded Projects (http://www.embedded-projecs.net) - * Author: Michael Hartmann - * All rights reserved. - * - * Short descripton of file: - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of the FH Augsburg nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef PIN_H -#define PIN_H - -#include - -#define OX_AD7 10 -#define OX_AD6 11 -#define OX_AD5 12 -#define OX_AD4 13 -#define OX_AD3 14 -#define OX_AD2 15 -#define OX_AD1 16 -#define OX_AD0 17 - -#define OX_RX0 18 -#define OX_TX0 19 -#define OX_RX1 35 -#define OX_TX1 36 - -#define OX_SS 25 -#define OX_SCK 26 -#define OX_MOSI 27 -#define OX_MISO 28 - -#define OX_PWM1 30 -#define OX_PWM2 29 - -#define OX_SCL 33 -#define OX_SDA 34 - -#define OX_LED1 3 -#define OX_LED2 4 -#define OX_LED3 5 -#define OX_LED4 6 -#define OX_LED5 7 -#define OX_LED6 8 -#define OX_LED7 9 -#define OX_LED_STATUS 32 - -typedef struct pin_conf { - volatile unsigned char *ox_port; - volatile unsigned char *ox_pin; - volatile unsigned char *ox_ddr; - volatile unsigned char ox_p; -} pin_conf; - -char pin_get_conf(uint8_t i, pin_conf *p); - -#endif /* PIN_H */ diff --git a/firmware/protocol.h b/firmware/protocol.h index af2c6fb..6ae1c2a 100644 --- a/firmware/protocol.h +++ b/firmware/protocol.h @@ -42,12 +42,10 @@ #define CMD_IO_PORT_GET 0x19 #define CMD_IO_PIN_SET 0x1A #define CMD_IO_PIN_GET 0x1B -#define CMD_IO_SET_STATUS_LED 0x1C #define CMD_ADC_INIT_PIN 0x20 -#define CMD_ADC_DEINIT_PIN 0x21 -#define CMD_ADC_GET 0x22 -#define CMD_ADC_REF 0x23 +#define CMD_ADC_GET 0x21 +#define CMD_ADC_REF 0x22 #define CMD_I2C_INIT 0x30 #define CMD_I2C_DEINIT 0x31 @@ -80,17 +78,6 @@ #define CMD_UART_RECV 0x67 #define CMD_UART_SEND 0x68 -#define CMD_CAN_INIT 0x70 -#define CMD_CAN_DEINIT 0x71 -#define CMD_CAN_SEND_DATA 0x72 -#define CMD_CAN_ENABLE_MOB 0x73 -#define CMD_CAN_DISABLE_MOB 0x74 -#define CMD_CAN_SEND_REMOTE 0x75 -#define CMD_CAN_RECEIVE_DATA 0x76 -#define CMD_CAN_SET_AUTOREPLY 0x77 - -#define CMD_EEPROM_READ_BYTES 0x80 -#define CMD_EEPROM_WRITE_BYTES 0x81 #define PARAM_ADC_AREF 0x01 #define PARAM_ADC_AVCC 0x02 diff --git a/firmware/pwm.c b/firmware/pwm.c index b8b6231..9e3666d 100644 --- a/firmware/pwm.c +++ b/firmware/pwm.c @@ -84,7 +84,7 @@ int pwm_init(int pin) { case 9: /* set pin as output */ - DDRB |=(1< 1000) - return RSP_TIMEOUT; - } - buf[i] = SPDR; + while(!(SPSR & (1 << SPIF))) { timeout++; if( timeout > 1000) return RSP_TIMEOUT; } + buf[i]=SPDR; } - return RSP_OK; } @@ -236,8 +164,8 @@ void spi_send_and_receive_usb(char * txbuf, int length) { answer[0]=CMD_SPI_SEND; answer[1]=(unsigned char)spi_send_and_receive(txbuf,(char *)&answer[2],length); - answer[2+length]=0; - CommandAnswer(3+length); + answer[2]=0; + CommandAnswer(2+length); } @@ -252,3 +180,9 @@ int spi_send_and_receive(char * txbuf, char * rxbuf, int length){ } return RSP_OK; } + + + + + + diff --git a/firmware/spi.h b/firmware/spi.h index 8a8a1fe..d7cfbf1 100644 --- a/firmware/spi.h +++ b/firmware/spi.h @@ -41,25 +41,24 @@ #define MISO PB3 #define SCK PB1 -enum { SPI_SPEED_125kHz, SPI_SPEED_250kHz, SPI_SPEED_500kHz, SPI_SPEED_1MHz, - SPI_SPEED_2MHz, SPI_SPEED_4MHz, SPI_SPEED_8MHz }; - void spi_parser(char *buf); -void spi_init_usb(uint8_t dord, uint8_t mode, uint8_t speed); -int spi_init(uint8_t dord, uint8_t mode, uint8_t speed); - -void spi_deinit_usb(void); +int spi_init(void); int spi_deinit(void); -void spi_send_usb(uint8_t length, char * buf); -int spi_send(int length, char * buf); +int spi_set_speed(int speed); +int spi_send(char * buf, int length); +unsigned char spi_receive( char * buf, int length); +int spi_send_and_receive(char * txbuf, char * rxbuf, int length); -void spi_receive_usb(int length); -unsigned char spi_receive(int length, char * buf); +void spi_init_usb(void); +void spi_deinit_usb(void); + +void spi_set_speed_usb(int speed); +void spi_send_usb(char * buf, int length); +void spi_receive_usb(int length); void spi_send_and_receive_usb(char * txbuf, int length); -int spi_send_and_receive(char * txbuf, char * rxbuf, int length); #endif /* SPI_H */ diff --git a/firmware/uart.c b/firmware/uart.c index 9ae00c9..ac856b2 100644 --- a/firmware/uart.c +++ b/firmware/uart.c @@ -39,7 +39,7 @@ void uart_parser(char *buf) break; default: answer[1] = RSP_UNKOWN_CMD; - answer[2] = 0; + answer[2] = '\0'; CommandAnswer(3); } } @@ -47,7 +47,7 @@ void uart_parser(char *buf) void uart_init_usb(char uartport) { answer[1] = (unsigned char)uart_init(uartport); - answer[2] = 0; + answer[2] = '\0'; CommandAnswer(3); } @@ -78,7 +78,7 @@ char uart_init(char uartport) void uart_deinit_usb(char uartport) { answer[1] = (unsigned char)uart_deinit(uartport); - answer[2] = 0; + answer[2] = '\0'; CommandAnswer(3); } @@ -113,7 +113,7 @@ char uart_deinit(char uartport) void uart_baudrate_usb(char uartport, char ubrrll, char ubrrlh, char ubrrhl, char ubrrhh) { answer[1] = (unsigned char)uart_baudrate(uartport, ubrrll, ubrrlh, ubrrhl, ubrrhh); - answer[2] = 0; + answer[2] = '\0'; CommandAnswer(3); } @@ -140,7 +140,7 @@ char uart_baudrate(char uartport, char ubrrll, char ubrrlh, char ubrrhl, char ub void uart_stopbits_usb(char uartport, char stopbits) { answer[1] = (unsigned char)uart_stopbits(uartport, stopbits); - answer[2] = 0; + answer[2] = '\0'; CommandAnswer(3); } @@ -174,7 +174,7 @@ char uart_stopbits(char uartport, char stopbits) void uart_databits_usb(char uartport, char databits) { answer[1] = (unsigned char)uart_databits(uartport, databits); - answer[2] = 0; + answer[2] = '\0'; CommandAnswer(3); } @@ -209,7 +209,7 @@ char uart_databits(char uartport, char databits) void uart_parity_usb(char uartport, char parity) { answer[1] = (unsigned char)uart_databits(uartport, parity); - answer[2] = 0; + answer[2] = '\0'; CommandAnswer(3); } @@ -243,7 +243,7 @@ char uart_parity(char uartport, char parity) void uart_send_usb(char uartport, char length, char *buf) { answer[1] = (unsigned char)uart_send(uartport, length, buf); - answer[2] = 0; + answer[2] = '\0'; CommandAnswer(3); } @@ -255,7 +255,9 @@ char uart_send(char uartport, unsigned int length, char *buf) return RSP_UNKOWN_PIN; while(length--) + { uart_putchar(uartport, *buf++); + } return RSP_OK; } @@ -293,8 +295,6 @@ void uart_recv_usb(char uartport, int length) for(i = 0; i < length; i++) answer[2+i] = data[i]; - answer[2+length] = 0; - CommandAnswer(3+length); } @@ -329,5 +329,3 @@ char uart_getchar(char uartport) return c; } - - diff --git a/firmware/uart_fifo.c b/firmware/uart_fifo.c deleted file mode 100644 index d4da869..0000000 --- a/firmware/uart_fifo.c +++ /dev/null @@ -1,368 +0,0 @@ -#include -#include - -#include "uart.h" -#include "common.h" -#include "protocol.h" -#include "fifo.h" - -#define BUFSIZE_IN 5 -#define BUFSIZE_OUT 5 - -uint8_t inbuf0[BUFSIZE_IN]; -uint8_t inbuf1[BUFSIZE_IN]; -fifo_t infifo0; -fifo_t infifo1; - -uint8_t outbuf1[BUFSIZE_OUT]; -uint8_t outbuf0[BUFSIZE_OUT]; -fifo_t outfifo0; -fifo_t outfifo1; - - -void uart_parser(char *buf) -{ - answer[0] = buf[0]; - - switch(buf[0]) - { - case CMD_UART_INIT: - uart_init_usb((char)buf[2]); - break; - case CMD_UART_DEINIT: - uart_deinit_usb((char)buf[2]); - break; - - case CMD_UART_BAUDRATE: - uart_baudrate_usb((char)buf[2], (char)buf[3], (char)buf[4], (char)buf[5], (char)buf[6]); - break; - case CMD_UART_STOPBITS: - uart_stopbits_usb((char)buf[2], (char)buf[3]); - break; - case CMD_UART_DATABITS: - uart_stopbits_usb((char)buf[2], (char)buf[3]); - break; - case CMD_UART_PARITY: - uart_parity_usb((char)buf[2], (char)buf[3]); - break; - - case CMD_UART_SEND: - uart_send_usb((char)buf[2], (char)buf[3], &buf[4]); - break; - case CMD_UART_RECV: - uart_recv_usb((char)buf[2], (char)buf[3]); - break; - default: - answer[1] = RSP_UNKOWN_CMD; - answer[2] = 0; - CommandAnswer(3); - } -} - -void uart_init_usb(char uartport) -{ - answer[1] = (unsigned char)uart_init(uartport); - answer[2] = 0; - - CommandAnswer(3); -} - -char uart_init(char uartport) -{ - switch(uartport) - { - case 0: - octopus.ports[41] = PIN_UART; - octopus.ports[42] = PIN_UART; - /* enable transmitter receiver */ - UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0); - break; - case 1: - octopus.ports[14] = PIN_UART; - octopus.ports[15] = PIN_UART; - /* enable transmitter receiver */ - UCSR1B = (1 << RXEN1) | (1 << TXEN1) | (1 << RXCIE1); - break; - default: - return RSP_UNKOWN_PIN; - } - - return RSP_OK; -} - -void uart_deinit_usb(char uartport) -{ - answer[1] = (unsigned char)uart_deinit(uartport); - answer[2] = 0; - - CommandAnswer(3); -} - -char uart_deinit(char uartport) -{ - switch(uartport) - { - case 0: - octopus.ports[41] = PIN_NONE; - octopus.ports[42] = PIN_NONE; - UBRR0H = 0; - UBRR0L = 0; - UCSR0B = 0; - UCSR0C = 0; - break; - case 1: - octopus.ports[14] = PIN_NONE; - octopus.ports[15] = PIN_NONE; - UBRR1H = 0; - UBRR1L = 0; - UCSR1B = 0; - UCSR1C = 0; - break; - default: - return RSP_UNKOWN_PIN; - } - - return RSP_OK; -} - -void uart_baudrate_usb(char uartport, char ubrrll, char ubrrlh, char ubrrhl, char ubrrhh) -{ - answer[1] = (unsigned char)uart_baudrate(uartport, ubrrll, ubrrlh, ubrrhl, ubrrhh); - answer[2] = 0; - - CommandAnswer(3); -} - -char uart_baudrate(char uartport, char ubrrll, char ubrrlh, char ubrrhl, char ubrrhh) -{ - switch(uartport) - { - case 0: - UBRR0H = (ubrrhh << 8) | ubrrhl; - UBRR0L = (ubrrhl << 8) | ubrrll; - break; - case 1: - UBRR1H = (ubrrhh << 8) | ubrrhl; - UBRR1L = (ubrrhl << 8) | ubrrll; - break; - default: - return RSP_UNKOWN_PIN; - } - - return RSP_OK; -} - -void uart_stopbits_usb(char uartport, char stopbits) -{ - answer[1] = (unsigned char)uart_stopbits(uartport, stopbits); - answer[2] = 0; - - CommandAnswer(3); -} - -char uart_stopbits(char uartport, char stopbits) -{ - char usbs; - - switch(stopbits) - { - case 1: usbs = 0; break; - case 2: usbs = 2; break; - default: usbs = 0; break; - } - - switch(uartport) - { - case 0: - UCSR0C |= (usbs << USBS0); - break; - case 1: - UCSR1C |= (usbs << USBS1); - break; - default: - return RSP_UNKOWN_PIN; - } - - return RSP_OK; -} - -void uart_databits_usb(char uartport, char databits) -{ - answer[1] = (unsigned char)uart_databits(uartport, databits); - answer[2] = 0; - - CommandAnswer(3); -} - -char uart_databits(char uartport, char databits) -{ - char ucsz1,ucsz0; - - switch(databits) { - case 5: ucsz1 = 0; ucsz0 = 0; break; - case 6: ucsz1 = 0; ucsz0 = 1; break; - case 7: ucsz1 = 1; ucsz0 = 0; break; - case 8: ucsz1 = 1; ucsz0 = 1; break; - default: ucsz1 = 1; ucsz0 = 1; break; - } - - switch(uartport) - { - case 0: - UCSR0C |= (ucsz1 << UCSZ01) | (ucsz0 << UCSZ00); - break; - case 1: - UCSR1C |= (ucsz1 << UCSZ11) | (ucsz0 << UCSZ10); - break; - default: - return RSP_UNKOWN_PIN; - } - - return RSP_OK; -} - -void uart_parity_usb(char uartport, char parity) -{ - answer[1] = (unsigned char)uart_databits(uartport, parity); - answer[2] = 0; - - CommandAnswer(3); -} - -char uart_parity(char uartport, char parity) -{ - char upm1, upm0; - switch(parity) - { - case 'N': upm1 = 0; upm0 = 0; break; - case 'E': upm1 = 1; upm0 = 0; break; - case 'O': upm1 = 1; upm0 = 1; break; - default: upm1 = 0; upm0 = 0; break; - } - - switch(uartport) - { - case 0: - UCSR0C |= (upm1 << UPM01) | (upm0 << UPM00); - break; - case 1: - UCSR1C |= (upm1 << UPM11) | (upm0 << UPM10); - break; - default: - return RSP_UNKOWN_PIN; - } - - return RSP_OK; -} - -void uart_send_usb(char uartport, char length, char *buf) -{ - answer[1] = (unsigned char)uart_send(uartport, length, buf); - answer[2] = 0; - - CommandAnswer(3); -} - - -char uart_send(char uartport, unsigned int length, char *buf) -{ - if(uartport != 0 && uartport != 1) - return RSP_UNKOWN_PIN; - - while(length--) - uart_putchar(uartport, *buf++); - - return RSP_OK; -} - -char uart_putchar(char uartport, char data) -{ - switch(uartport) - { - case 0: - fifo_put (&outfifo0, data); - UCSR0B |= (1 << UDRIE0); - break; - case 1: - fifo_put (&outfifo1, data); - UCSR1B |= (1 << UDRIE1); - break; - default: - return RSP_UNKOWN_PIN; - } - - return RSP_OK; -} - - -void uart_recv_usb(char uartport, int length) -{ - char data[length]; - int i; - - answer[1] = (char)uart_recv(uartport, data, length); - - for(i = 0; i < length; i++) - answer[2+i] = data[i]; - - answer[2+length] = 0; - - CommandAnswer(3+length); -} - -char uart_recv(char uartport, char * buf, int length) -{ - if(uartport != 0 && uartport != 1) - return RSP_UNKOWN_PIN; - - while(length-- > 0) - *buf++ = uart_getchar(uartport); - - return RSP_OK; -} - -char uart_getchar(char uartport) -{ - char c; - - switch(uartport) - { - case 0: - while (!(UCSR0A & (1 << RXC0))); - c = UDR0; - break; - case 1: - while (!(UCSR1A & (1 << RXC1))); - c = UDR1; - break; - default: - return RSP_UNKOWN_PIN; - } - - return c; -} - -// Empfangene Zeichen werden in die Eingabgs-FIFO gespeichert und warten dort -//SIGNAL (SIG_UART0_RECV) -//{ -// _inline_fifo_put (&infifo0, UDR0); -//} - -// Ein Zeichen aus der Ausgabe-FIFO lesen und ausgeben -// Ist das Zeichen fertig ausgegeben, wird ein neuer SIG_UART_DATA-IRQ getriggert -// Ist die FIFO leer, deaktiviert die ISR ihren eigenen IRQ. -SIGNAL (SIG_UART0_DATA) -{ - PORTC ^= 5; - if (outfifo0.count > 0) - { - PORTC ^= 2; - UDR0 = _inline_fifo_get (&outfifo0); - } - else - { - PORTC ^= 3; - UCSR0B &= ~(1 << UDRIE0); - } -} - diff --git a/firmware/usbn2mc.c b/firmware/usbn2mc.c index 413009c..d9b0fdd 100644 --- a/firmware/usbn2mc.c +++ b/firmware/usbn2mc.c @@ -81,7 +81,7 @@ USBNInitMC (void) USB_CS_DDR |= (1 << PF_CS); USB_CS_PORT |= (1 << PF_CS); - //sei (); + sei (); } -- cgit v1.2.1