diff --git a/STM8/2stepper4reductor/Readme b/STM8/2stepper4reductor/Readme index e69de29..5b33cfb 100644 --- a/STM8/2stepper4reductor/Readme +++ b/STM8/2stepper4reductor/Readme @@ -0,0 +1,70 @@ +Rotation direction as seems from back side of motor! + +Command protocol: [ addr command data ] + broadcast addr: b +commands: +0/1 - command for given motor: + E - get end-switches + L - move CCW + M - get motor state (RELAX, INFMV+/-, STOP, MVSTP+/-, OFFSW+/-, UNDEF) + N - go for N st./get rest + O - pull off the switch + P - get current position + R - move CW + S - get/set speed + X - stop motor + Z - stop and zero position +r - reset MCU +G - get board address +L 0/1 - LED on/off +P ch val - PWM on channel ch +T - time counter value + +examples: +[00E] -> [ 0 0 E 0 ] (no esw) +[01E] -> [ 0 1 E 3 ] (both - bad situation) +[00L] -> [ 0 0 L ] (all OK) +[01L] -> [ 0 1 L E 1 ] (on left endswitch) +[00R] -> [ 0 0 R E 2 ] (on right endswitch) +[01R][01M] -> [ 0 1 M INFMV+ ] +[01N400] -> [ 0 1 N 400 ] (start moving) +[01N] -> [ 0 1 N 46 ] (steps left) +[00N-300] -> [ 0 0 N err ] (on endswitch) +[00O-100] -> [ 0 0 O err ] (on left endswitch) +[00O100] -> [ 0 0 O 100 ] (on rigth endswitch or out of them) +[01P] -> [ 0 1 P 1903 ] (current position in full steps) +[00S] -> [ 0 0 S 2500 ] (get speed value) +[01S1500] -> [ 0 1 S 1500 ] (set speed value) +[01X] -> [ 0 1 X ] +[01Z] -> [ 0 1 Z ] + +[0r] -> + +Hello! My address is 0 + + +Command protocol: [ addr command data ] + broadcast addr: b +commands: +0/1 - command for given motor: + E - get end-switches + L - move CCW + M - get motor state + N - go for N st./get rest + O - pull off the switch + P - get current position + R - move CW + S - get/set speed + X - stop motor + Z - stop and zero position +r - reset MCU +G - get board address +L 0/1 - LED on/off +P ch val - PWM on channel ch +T - time counter value + + +[0G] -> [ 0 G 0 ] +[0L] -> [ 0 L 0 ], [0L1] -> [ 0 L 1 ], [0L] -> [ 0 L 1 ] +[0P] -> [ 0 P 0 0 ], [0P0100] -> [ 0 P 0 100 ], [0P0] -> [ 0 P 0 100 ], [0P510] -> [ 0 P -1 ], [0P0500] -> [ 0 P 0 -1 ] +[0T] -> [ 0 T 191593 ] diff --git a/STM8/2stepper4reductor/motors.c b/STM8/2stepper4reductor/motors.c index 5114662..91df543 100644 --- a/STM8/2stepper4reductor/motors.c +++ b/STM8/2stepper4reductor/motors.c @@ -122,7 +122,6 @@ static void stop_motor(U8 motorNum){ default: return; } Steps_left[motorNum] = 0; - Ustep[motorNum] = 0; Dir[motorNum] = DIR_STOP; } @@ -161,13 +160,21 @@ static void get_motor_state(U8 nmotor, char **buff){ // turn on motor's timer starting from the lowest speed static void turnontimer(U8 motorNum){ + U8 tmp; switch(motorNum){ case 0: + // turn on power + tmp = PORT(STP0_PORT, ODR) & ~STP_PINS; + PORT(STP0_PORT, ODR) = tmp | usteps[Ustep[0]]; + // start from the slowest speed TIM2_ARRH = MAX_USTEP_PERIOD >> 8; TIM2_ARRL = MAX_USTEP_PERIOD & 0xff; + // run timer TIM2_CR1 |= TIM_CR1_CEN; break; case 1: + tmp = PORT(STP1_PORT, ODR) & ~STP_PINS; + PORT(STP1_PORT, ODR) = tmp | usteps[Ustep[1]]; TIM3_ARRH = MAX_USTEP_PERIOD >> 8; TIM3_ARRL = MAX_USTEP_PERIOD & 0xff; TIM3_CR1 |= TIM_CR1_CEN; @@ -189,7 +196,6 @@ static int moveNsteps(U8 motorNum, long nsteps){ if(sw) return 0; // on zero end-switch: no moving backward, on positive - no moving at all! Dir[motorNum] = DIR_CCW; nsteps = -nsteps; - Ustep[motorNum] = 7; state[motorNum] = MOTOR_MOVENSTEPS; }else{ if(sw & 2) return 0; // for positive direction no moving to any side when on end-switch 2! @@ -216,7 +222,6 @@ static int pullofftheswitch(U8 motorNum, long nsteps){ if(sw & 1) return 0; // on zero end-switch: no moving backward Dir[motorNum] = DIR_CCW; nsteps = -nsteps; - Ustep[motorNum] = 7; }else{ Dir[motorNum] = DIR_CW; } @@ -236,26 +241,27 @@ void motor_command(const char *cmd, char **buff){ *((*buff)++) = '0' + motorNum; *((*buff)++) = ' '; c = *cmd++; - *((*buff)++) = c; *((*buff)++) = ' '; + *((*buff)++) = c; switch(c){ case 'E': // check endswitches state + *((*buff)++) = ' '; *((*buff)++) = '0' + check_endsw(motorNum); break; case 'L': // infinite move left - if(1 == check_endsw(motorNum)){ - *((*buff)++) = 'E'; *((*buff)++) = ' '; - *((*buff)++) = '1'; + if(check_endsw(motorNum) & 1){ + strtobuf(" E 1", buff); }else{ state[motorNum] = MOTOR_INFMOVE; Dir[motorNum] = DIR_CCW; - Ustep[motorNum] = 7; turnontimer(motorNum); } break; case 'M': // get motor state + *((*buff)++) = ' '; get_motor_state(motorNum, buff); break; case 'N': // go for N steps or get steps left + *((*buff)++) = ' '; if(!readLong(cmd, &l)){ // get long2buf(Steps_left[motorNum], buff); }else{ @@ -264,6 +270,7 @@ void motor_command(const char *cmd, char **buff){ } break; case 'O': // pull off the switch (if no steps given, go for PULLOFFTHESW_STEPS) + *((*buff)++) = ' '; if(!readLong(cmd, &l)){ // get l = PULLOFFTHESW_STEPS; } @@ -271,12 +278,12 @@ void motor_command(const char *cmd, char **buff){ else long2buf(l, buff); break; case 'P': // get current position + *((*buff)++) = ' '; long2buf(Current_pos[motorNum], buff); break; case 'R': // infinite move right - if(2 == check_endsw(motorNum)){ - *((*buff)++) = 'E'; *((*buff)++) = ' '; - *((*buff)++) = '2'; + if(check_endsw(motorNum) & 2){ + strtobuf(" E 2", buff); }else{ state[motorNum] = MOTOR_INFMOVE; Dir[motorNum] = DIR_CW; @@ -284,6 +291,7 @@ void motor_command(const char *cmd, char **buff){ } break; case 'S': // change speed + *((*buff)++) = ' '; if(!readLong(cmd, &l) || l < MIN_USTEP_PERIOD || l > MAX_USTEP_PERIOD){ // get speed if(motorNum == 0) spd = TIM2_ARRH << 8 | TIM2_ARRL; else spd = TIM3_ARRH << 8 | TIM3_ARRL; @@ -358,27 +366,21 @@ void stepper_interrupt(U8 motor_num){ break; default: return; } - if(Dir[motor_num] == DIR_CCW){ // counter-clockwise - if(Ustep[motor_num] == 0){ - --Steps_left[motor_num]; - --Current_pos[motor_num]; - if(state[motor_num] == MOTOR_STOP || state[motor_num] == MOTOR_ZEROSTOP){ - stop_motor(motor_num); - return; - } - Ustep[motor_num] = 7; - }else --Ustep[motor_num]; - }else{ // clockwise - if(++Ustep[motor_num] > 7){ - --Steps_left[motor_num]; - ++Current_pos[motor_num]; - if(state[motor_num] == MOTOR_STOP || state[motor_num] == MOTOR_ZEROSTOP){ - stop_motor(motor_num); - return; - } - Ustep[motor_num] = 0; + if(Ustep[motor_num] % 2 == 0){ // full amount of half-steps - increment step counters & check for stop + --Steps_left[motor_num]; + if(Dir[motor_num] == DIR_CCW) --Current_pos[motor_num]; + else ++Current_pos[motor_num]; + if(state[motor_num] == MOTOR_STOP || state[motor_num] == MOTOR_ZEROSTOP){ + stop_motor(motor_num); + return; } } + if(Dir[motor_num] == DIR_CCW){ // counter-clockwise + if(Ustep[motor_num] == 0) Ustep[motor_num] = 7; + else --Ustep[motor_num]; + }else{ // clockwise + if(++Ustep[motor_num] > 7) Ustep[motor_num] = 0; + } } /** diff --git a/STM8/2stepper4reductor/motors.h b/STM8/2stepper4reductor/motors.h index dd15ff1..a737a0b 100644 --- a/STM8/2stepper4reductor/motors.h +++ b/STM8/2stepper4reductor/motors.h @@ -24,17 +24,17 @@ #ifndef __MOTORS_H__ #define __MOTORS_H__ -// default speed @ start - 50 steps per second +// default speed @ start - 200 steps per second #define DEFAULT_USTEP_PERIOD (2500) -// max speed == 1/(625us*8) = 200 steps per second -#define MIN_USTEP_PERIOD (625) -// min speed as 16-bit timer can - 65535 - near 1.9 steps per second -// default min speed - 10 steps per second -#define MAX_USTEP_PERIOD (12500) +// max speed == 1/(800us*2) = 625 steps per second +#define MIN_USTEP_PERIOD (800) +// min speed as 16-bit timer can - 65535 - near 7.6 steps per second +// default min speed - 25 steps per second +#define MAX_USTEP_PERIOD (20000) // amount of steps to pull off the switch #define PULLOFFTHESW_STEPS (100) -// amount of microsteps for acceleration calculation -#define ACCEL_USTEPS (200) +// amount of microsteps for acceleration calculation (50 full steps) +#define ACCEL_USTEPS (100) //extern unsigned char irq_flag; diff --git a/STM8/2stepper4reductor/proto.c b/STM8/2stepper4reductor/proto.c index 367cb2c..1e42c81 100644 --- a/STM8/2stepper4reductor/proto.c +++ b/STM8/2stepper4reductor/proto.c @@ -43,8 +43,7 @@ void show_help(){ uart_write("G - get board address\n"); uart_write("L 0/1 - LED on/off\n"); uart_write("P ch val - PWM on channel ch\n"); - uart_write("T - time counter value\n"); - uart_write("\n\n"); + uart_write("T - time counter value\n\n"); } static void set_PWM(char *cmd, char **buff){ diff --git a/STM8/2stepper4reductor/twosteppers.bin b/STM8/2stepper4reductor/twosteppers.bin index f72a538..869a663 100644 Binary files a/STM8/2stepper4reductor/twosteppers.bin and b/STM8/2stepper4reductor/twosteppers.bin differ diff --git a/STM8/2stepper4reductor/twosteppers.c.tags b/STM8/2stepper4reductor/twosteppers.c.tags index 7f031af..bbf67da 100644 --- a/STM8/2stepper4reductor/twosteppers.c.tags +++ b/STM8/2stepper4reductor/twosteppers.c.tags @@ -1,4 +1,5 @@ # format=tagmanager +ACCEL_USTEPSÌ65536Ö0 ADC_AWCRHÌ65536Ö0 ADC_AWCRLÌ65536Ö0 ADC_AWSRHÌ65536Ö0 @@ -39,7 +40,10 @@ ADDR_MASK AWU_APRÌ65536Ö0 AWU_CSR1Ì65536Ö0 AWU_TBRÌ65536Ö0 +AccelerationÌ16384Ö0ÏU16 BEEP_CSRÌ65536Ö0 +BROADCAST_ADDRÌ65536Ö0 +BROADCAST_CHARÌ65536Ö0 CCRÌ65536Ö0 CFG_GCRÌ65536Ö0 CHK_M0E1Ì131072Í()Ö0 @@ -59,6 +63,12 @@ CLK_SWCR CLK_SWIMCCRÌ65536Ö0 CLK_SWRÌ65536Ö0 CONCATÌ131072Í(a,b)Ö0 +Current_posÌ16384Ö0Ïlong +DEFAULT_USTEP_PERIODÌ65536Ö0 +DIR_CCWÌ4Îanon_enum_1Ö0 +DIR_CWÌ4Îanon_enum_1Ö0 +DIR_STOPÌ4Îanon_enum_1Ö0 +DirÌ16384Ö0Ïvolatile motor_direction EEPROM_KEY1Ì65536Ö0 EEPROM_KEY2Ì65536Ö0 EEPROM_START_ADDRÌ65536Ö0 @@ -82,6 +92,7 @@ GPIO_PIN4 GPIO_PIN5Ì65536Ö0 GPIO_PIN6Ì65536Ö0 GPIO_PIN7Ì65536Ö0 +Global_timeÌ16384Ö0Ïvolatile unsigned long Global_timeÌ32768Ö0Ïvolatile unsigned long I2C_CCRHÌ65536Ö0 I2C_CCRLÌ65536Ö0 @@ -126,7 +137,16 @@ M1E1_PIN M1E1_PORTÌ65536Ö0 M1E2_PINÌ65536Ö0 M1E2_PORTÌ65536Ö0 +MAX_USTEP_PERIODÌ65536Ö0 +MCU_noÌ16384Ö0ÏU8 MCU_noÌ32768Ö0ÏU8 +MIN_USTEP_PERIODÌ65536Ö0 +MOTOR_INFMOVEÌ4Îanon_enum_0Ö0 +MOTOR_MOVENSTEPSÌ4Îanon_enum_0Ö0 +MOTOR_OFFSWITCHÌ4Îanon_enum_0Ö0 +MOTOR_RELAXÌ4Îanon_enum_0Ö0 +MOTOR_STOPÌ4Îanon_enum_0Ö0 +MOTOR_ZEROSTOPÌ4Îanon_enum_0Ö0 NULLÌ65536Ö0 PA_CR1Ì65536Ö0 PA_CR2Ì65536Ö0 @@ -159,6 +179,7 @@ PF_DDR PF_IDRÌ65536Ö0 PF_ODRÌ65536Ö0 PORTÌ131072Í(a,b)Ö0 +PULLOFFTHESW_STEPSÌ65536Ö0 PWM_PINSÌ65536Ö0 RST_SRÌ65536Ö0 SPI_CR1Ì65536Ö0 @@ -197,6 +218,9 @@ STP0_PORT STP1_PORTÌ65536Ö0 STP_PINSÌ65536Ö0 SWIM_CSRÌ65536Ö0 +Stepper_speedÌ16384Ö0ÏU16 +Steps_leftÌ16384Ö0Ïlong +Steps_left_at_eswÌ16384Ö0Ïlong TIM1_ARRHÌ65536Ö0 TIM1_ARRLÌ65536Ö0 TIM1_BKRÌ65536Ö0 @@ -300,8 +324,11 @@ UART_SR_RXNE UART_SR_TCÌ65536Ö0 UART_SR_TXEÌ65536Ö0 UART_TX_PINÌ65536Ö0 +UART_rxÌ16384Ö0ÏU8 UART_rxÌ32768Ö0ÏU8 +UART_txÌ16384Ö0ÏU8 UART_txÌ32768Ö0ÏU8 +UstepÌ16384Ö0ÏU8 WWDG_CRÌ65536Ö0 WWDG_WRÌ65536Ö0 _FORTIFY_SOURCEÌ65536Ö0 @@ -464,6 +491,7 @@ __LONG_LONG_MAX__ __LONG_MAX__Ì65536Ö0 __LP64__Ì65536Ö0 __MMX__Ì65536Ö0 +__MOTORS_H__Ì65536Ö0 __NO_INLINE__Ì65536Ö0 __ORDER_BIG_ENDIAN__Ì65536Ö0 __ORDER_LITTLE_ENDIAN__Ì65536Ö0 @@ -471,6 +499,7 @@ __ORDER_PDP_ENDIAN__ __PIC__Ì65536Ö0 __PIE__Ì65536Ö0 __PRAGMA_REDEFINE_EXTNAMEÌ65536Ö0 +__PROTO_H__Ì65536Ö0 __PTRDIFF_MAX__Ì65536Ö0 __PTRDIFF_TYPE__Ì65536Ö0 __REGISTER_PREFIX__Ì65536Ö0 @@ -603,27 +632,68 @@ __unix __unix__Ì65536Ö0 __x86_64Ì65536Ö0 __x86_64__Ì65536Ö0 +anon_enum_0Ì2Ö0 +anon_enum_1Ì2Ö0 +check_endswÌ16Í(U8 motor)Ö0ÏU8 disableInterruptsÌ131072Í()Ö0 enableInterruptsÌ131072Í()Ö0 +get_motor_stateÌ16Í(U8 nmotor, char **buff)Ö0Ïvoid haltÌ131072Í()Ö0 +hw_initÌ16Í()Ö0Ïvoid hw_initÌ1024Í()Ö0Ïvoid +ibufÌ16384Ö0Ïchar iretÌ131072Í()Ö0 linuxÌ65536Ö0 +long2bufÌ16Í(long Number, char **buf)Ö0Ïvoid long2bufÌ1024Í(long Number, char **buf)Ö0Ïvoid +motor_commandÌ16Í(const char *cmd, char **buff)Ö0Ïvoid +motor_commandÌ1024Í(const char *cmd, char **bufptr)Ö0Ïvoid +motor_directionÌ4096Ö0Ïanon_enum_1 +motor_stateÌ4096Ö0Ïanon_enum_0 +motors_initÌ16Í()Ö0Ïvoid +motors_initÌ1024Í()Ö0Ïvoid +moveNstepsÌ16Í(U8 motorNum, long nsteps)Ö0Ïint nopÌ131072Í()Ö0 +obufÌ16384Ö0Ïchar omit_whitespaceÌ1024Í(char *str)Ö0Ïchar * pop_ccrÌ131072Í()Ö0 +printUintÌ16Í(const U8 *val, U8 len)Ö0Ïvoid printUintÌ1024Í(const U8 *val, U8 len)Ö0Ïvoid +process_commandsÌ16Í(char *cmd)Ö0ÏU8 +process_stepperÌ16Í(U8 motor_num)Ö0Ïvoid +process_stepperÌ1024Í(unsigned char stepno)Ö0Ïvoid +process_stringÌ16Í()Ö0Ïvoid +process_stringÌ1024Í()Ö0Ïvoid +pullofftheswitchÌ16Í(U8 motorNum, long nsteps)Ö0Ïint push_ccrÌ131072Í()Ö0 +readLongÌ16Í(const char *buff, long *val)Ö0ÏU8 readLongÌ1024Í(const char *buff, long *val)Ö0ÏU8 rimÌ131072Í()Ö0 +rx_idxÌ16384Ö0ÏU8 rx_idxÌ32768Ö0ÏU8 +set_PWMÌ16Í(char *cmd, char **buff)Ö0Ïvoid +show_helpÌ16Í()Ö0Ïvoid +show_helpÌ1024Í()Ö0Ïvoid +show_motors_helpÌ16Í()Ö0Ïvoid +show_motors_helpÌ1024Í()Ö0Ïvoid simÌ131072Í()Ö0 +stateÌ16384Ö0Ïvolatile motor_state +stepper_interruptÌ16Í(U8 motor_num)Ö0Ïvoid +stepper_interruptÌ1024Í(unsigned char motor_num)Ö0Ïvoid +stop_motorÌ16Í(U8 motorNum)Ö0Ïvoid +strtobufÌ16Í(const char *str, char **buff)Ö0Ïvoid trapÌ131072Í()Ö0 +turnontimerÌ16Í(U8 motorNum)Ö0Ïvoid +tx_idxÌ16384Ö0ÏU8 tx_idxÌ32768Ö0ÏU8 +tx_lenÌ16384Ö0ÏU8 tx_lenÌ32768Ö0ÏU8 +uart_initÌ16Í()Ö0Ïvoid uart_initÌ1024Í()Ö0Ïvoid +uart_rdyÌ16384Ö0ÏU8 uart_rdyÌ32768Ö0ÏU8 +uart_writeÌ16Í(const char *str)Ö0Ïvoid uart_writeÌ1024Í(const char *str)Ö0Ïvoid unixÌ65536Ö0 +ustepsÌ16384Ö0Ïconst U8 wfiÌ131072Í()Ö0 diff --git a/STM8/2stepper4reductor/twosteppers.ihx b/STM8/2stepper4reductor/twosteppers.ihx index 29406ac..96b70ce 100644 --- a/STM8/2stepper4reductor/twosteppers.ihx +++ b/STM8/2stepper4reductor/twosteppers.ihx @@ -4,10 +4,10 @@ :2081040035FF50E235AA50E0AE500BF6A4E04EA40F44C7006635005260354F52613500524C :208124006235FF526335005265350052663500526735005268350052693500526A35705262 :1A81440058357052593570525A3511525C3501525D35815250721E526D8127 -:0597E000000000000084 +:05979B000000000000C9 :04808300725F000127 -:20815E008080808080808080808080AE5302F6A501270CA4FEAE5302F74B00CD8D24848046 -:20817E0080AE5322F6A501270CA4FEAE5322F74B01CD8D24848080805202AE5240F64D2AE4 +:20815E008080808080808080808080AE5302F6A501270CA4FEAE5302F74B00CD8D37848033 +:20817E0080AE5322F6A501270CA4FEAE5322F74B01CD8D37848080805202AE5240F64D2AD1 :20819E0043725D006A260DAE5245F6A47FF7725F00692030C6006AC100692319AE00221FAE :2081BE0001C6006997725C00694F9572FB01F6AE5241F7200FAE5245F6A47FF7725F006965 :2081DE00725F006A5B02805202AE5240F6A5202603CC8278AE5241F695725D0067267B9EEA @@ -24,178 +24,176 @@ :208324001C000A7F7B29A101270E7B29A10227197B29A104272E20451E27F66B184F5F6BB8 :20834400031F017B186B042034162717131E13FE1F23162317210F200F1F16211703161F74 :20836400170120191627171D1E1DE6036B1CE6026B1BFE1F19161B170316191701A6096B3C -:20838400054B0A5F894B001E07891E0789CD96685B08517B050A055F9772FB11909FAB3064 -:2083A400F74B0A5F894B001E07891E0789CD96FF5B081F0317011E0326041E0127067B05C8 +:20838400054B0A5F894B001E07891E0789CD96235B08517B050A055F9772FB11909FAB30A9 +:2083A400F74B0A5F894B001E07891E0789CD96BA5B081F0317011E0326041E0127067B050D :2083C400A1FF2CBD7B054C5F9772FB1189CD82BF5B025B248152130F0F961C00031F121E55 :2083E400121C000B7F0D162A14161890504F1217974F12169517181F16A6016B0FA60B6B96 -:20840400024B0A5F894B001E1C891E1C89CD96435B089F0A025F417B024172FB12AB30F7E5 -:208424004B0A5F894B001E1C891E1C89CD96D85B081F1817161E1826041E1627040D022634 +:20840400024B0A5F894B001E1C891E1C89CD95FE5B089F0A025F417B024172FB12AB30F72B +:208424004B0A5F894B001E1C891E1C89CD96935B081F1817161E1826041E1627040D022679 :20844400C07B020D0227110D0F270D7B024A5F9772FB1288A62DF7846B017B01A10C241D5C :208464001E1AE6016B11F66B101610905CFF5F7B019772FB12F61E10F70C0120DD5B1381D6 :2084840052120F05A6016B065F1F031F011E15F6A12D2607A6016B055C1F15161517111E6B :2084A40011F61E115C1F11A12B27F4A1302556A13922520F06881E04891E04894B0A5F8945 -:2084C4004B00CD97595B081F10170E84905F90975F905D2A015A72F90F9F190E889E190EE1 +:2084C4004B00CD97145B081F10170E84905F90975F905D2A015A72F90F9F190E889E190E26 :2084E400958472A20030A20002A20095511303909F1202909E12012E06A6016B0620061FC4 :20850400031701209A0D0627034F202F0D05271C7B04406B0C4F12036B0B4F12026B0A4F1B :1E85240012016B01160B17037B0A6B02161717071E071603EF021601FFA6015B128168 -:0497E5000000000080 +:0497A00000000000C5 :2080000082008083820000008200815E8200815F8200816082008161820081628200816304 :208020008200816482008165820000008200000082008166820081678200816882008169C3 :208040008200817E8200817F8200819482000000820000008200819582008196820081E569 :208060008200827B8200827C820082A38200000082000000820000008200000082000000D0 -:1D808700AE00612707724F00005A26F9AE004F2709D697DFD700615A26F7CC808071 +:1D808700AE00612707724F00005A26F9AE004F2709D6979AD700615A26F7CC8080B6 :03808000CC85426A :208542005205965C1F041E04A678F71E045CA60AF71E045C5C7FAE50B3F64D2704351F5035 :20856200B3CD80A4CD85BFCD82A49AAE85A789CD82BF5B02C60066AB301E04F71E0489CD51 -:2085820082BF5B02CD923435AA50E0725D00672703CD94EB4B00CD8F72844B01CD8F7284B2 +:2085820082BF5B02CD91FD35AA50E0725D00672703CD94A54B00CD8F31844B01CD8F3184B2 :1D85A20020E55B05810A0A48656C6C6F21204D7920616464726573732069732000A5 :2085BF003504530C3509530D35C4530E35015301AE5300F6AA84F73504532A3509532B35BF -:2085DF00C4532C35015321AE5320F6AA84F781AE913489CD82BF5B02AE914B89CD82BF5BEF -:2085FF0002AE915A89CD82BF5B02AE917089CD82BF5B02AE918C89CD82BF5B02AE91A689FD -:20861F00CD82BF5B02AE91C189CD82BF5B02AE91CF89CD82BF5B02AE91E389CD82BF5B02C4 -:20863F00AE91F489CD82BF5B02814F90977B03A10027087B03A1012718202BAE5006F6A566 +:2085DF00C4532C35015321AE5320F6AA84F781AE90F389CD82BF5B02AE910A89CD82BF5B72 +:2085FF0002AE911989CD82BF5B02AE912F89CD82BF5B02AE914B89CD82BF5B02AE91658901 +:20861F00CD82BF5B02AE918089CD82BF5B02AE918E89CD82BF5B02AE91A289CD82BF5B0287 +:20863F00AE91B389CD82BF5B02814F90977B03A10027087B03A1012718202BAE5006F6A5A7 :20865F0010260461A60161A520261E72A900022018AE5010F64D2B0461A60161A51026092D -:20867F0072A9000220034F2002909F8152027B05A10027087B05A101270F2047AE5005F61E +:20867F0072A9000220034F2002909F8152027B05A10027087B05A101270F203CAE5005F629 :20869F00A4F0F772115300200DAE500FF6A4F0F7721153202000AE00731F015F7B0597587A -:2086BF005872FB016F036F026F017FAE008F9F1B0502A900957FAE006F9F1B0502A900952C -:2086DF00A602F75B02815206160990F64D27201E0B1F031E03FE1F011E015C1F051E037BA8 -:2086FF0006E7017B05F790F6905C1E01F720DB5B06815209A62B6B017B0CA1012303CC8757 -:20871F00E8AE006F9F1B0C02A90095F6A1012604A62D6B01AE00719F1B0C02A90095F6957E -:20873F00889EA100842717160D1702A101271EA102273AA1042745A1052761CC87DBAE92BD -:20875F0011160D908989CD86E55B04207CAE9217160D908989CD86E55B041E02FE1F041EDF -:20877F00045C160290FF1E047B01F7205CAE921D160D908989CD86E55B04204DAE92221624 -:20879F000D908989CD86E55B041E02FE1F061E065C160290FF1E067B01F7202DAE922816A8 -:2087BF000D908989CD86E55B041E02FE1F081E085C160290FF1E087B01F7200DAE922E169C -:2087DF000D908989CD86E55B045B098152047B07A10027087B07A101271020453530530D22 -:2087FF0035D4530E72105300200E3530532B35D4532C72105320200090AE008B5F7B07972C -:20881F00581F0372F903AE006B72FB03FE1F01AE30D472F001908990AE00C86590855C9010 -:20883F00FF5B04815202AE006F9F1B0502A90095F6A10227045FCC88F47B0588CD86495B60 -:20885F00010D062A404D27045FCC88F4AE006F9F1B0502A90095A601F7160890504F12073C -:20887F00974F12069517081F06AE008F9F1B0502A90095A607F7AE00719F1B0502A9009504 -:20889F00A604F72031A50227035F204944240FAE00719F1B0502A90095A605F7200DAE001C -:2088BF00719F1B0502A90095A604F7AE006F9F1B0502A900957FAE00731F015F7B059758DE -:2088DF005872FB011608EF021606FF7B0588CD87EB84AE00015B02815204AE006F9F1B07FD -:2088FF0002A90095F6A10227045FCC89A77B0788CD86495B01974D26111E0A891E0A897B00 -:20891F000B88CD88435B05CC89A70D082A325424035F2074AE006F9F1B0702A90095A6010D -:20893F00F7160A90504F1209974F120895170A1F08AE008F9F1B0702A90095A607F7200BCD -:20895F00AE006F9F1B0702A900957FAE00731F035F7B079758581F011E0372FB01160AEF32 -:20897F00021608FFAE008372FB01160AEF021608FFAE00719F1B0702A90095A605F77B07A8 -:20899F0088CD87EB84AE00015B048152411E44F65C1F44A0306B057B05A1012303CC8CEE66 -:2089BF001646173C1E3CFE1F3E1E3E5C1F2E1E3C162EFF7B05AB301E3EF71E2E5C1F321ECD -:2089DF003C1632FF1E2EA620F71E44F65C1F441E2E5C5C1F0A1E3C160AFF1E32F7162E7232 -:2089FF00A900031E3CFF1E0A88A620F784A145273FA14C2757A14D2603CC8ADCA14E26034A -:208A1F00CC8AEAA14F2603CC8B45A1502603CC8B80A1522603CC8BA8A1532603CC8C0AA116 -:208A3F00582603CC8CD0A15A2603CC8CDFCC8CEE1E3CFE1F101E105C163C90FF7B0588CD06 -:208A5F0086495B01AB301E10F7CC8D217B0588CD86495B01A10126341E3CFE1F141E145C3D -:208A7F001F161E3C1616FF1E14A645F71E165C1F181E3C1618FF1E16A620F7161672A90083 -:208A9F00021E3CFF1E18A631F7CC8D21AE00719F1B0502A90095A601F7AE006F9F1B050244 -:208ABF00A90095A601F7AE008F9F1B0502A90095A607F77B0588CD87EB84CC8D211E3C89B3 -:208ADF007B0788CD87115B03CC8D21965C891E4689CD84845B044D2628AE00731F1A5F7BC5 -:208AFF000597585872FB1AE6036B1FE6026B1EFE163C90891620908989CD83D95B06CC8D7C -:208B1F00211E03891E03897B0988CD88435B055D2603CC8CEE1E3C891E05891E0589CD8366 -:208B3F00D95B06CC8D21965C891E4689CD84845B044D2608AE00641F035F1F011E03891ED0 -:208B5F0003897B0988CD88F75B055D2603CC8CEE1E3C891E05891E0589CD83D95B06CC8DC8 -:208B7F0021AE007B1F245F7B0597585872FB24E6036B29E6026B28FE163C9089162A9089D8 -:208B9F0089CD83D95B06CC8D217B0588CD86495B01A10226341E3CFE1F361E365C1F3A1E58 -:208BBF003C163AFF1E36A645F71E3A5C1F381E3C1638FF1E3AA620F7163A72A900021E3C47 -:208BDF00FF1E38A632F7CC8D21AE00719F1B0502A90095A601F7AE006F9F1B0502A9009500 -:208BFF007F7B0588CD87EB84CC8D21965C891E4689CD84845B044D271C1E03A302717B02B2 -:208C1F00A2007B01A2002F0DAE30D413034F12024F12012E4B0D052619AE530DF690954F6A -:208C3F000F35AE530EF60F401A3597909E1A4095201BAE532BF690954F0F2DAE532CF60F3B -:208C5F00301A2D6B0F909E1A306B0E1E0E905F7B3D887B3D88899089CD83D95B06CC8D21D2 -:208C7F001E3C891E05891E0589CD83D95B061603AE006B1F125F7B0597581F2A1E1272FBF9 -:208C9F002AFFAE008B72FB2A6F017F0D052611909E0F08AE530DF74FAE530E909FF7206234 -:208CBF00909E0F06AE532BF74FAE532C909FF72051AE00719F1B0502A90095A602F72042FD -:208CDF00AE00719F1B0502A90095A603F720331E46E6016B21F66B201620905C170C160CA5 -:208CFF00FF1620A66590F7160C905C17221622FF160CA67290F7160C72A90002FF1E22A62B -:208D1F0072F75B4181524C7B4FA10027097B4FA1012772CC8F6FAE008B1F4B1E4BFE1F413C -:208D3F001E412742AE530DF690954F0F46AE530EF60F471A4697909E1A479572F0411F0641 -:208D5F00AE006BFE1F0C1E06130C2409160C17061E4B6F017F7B060F12AE530DF77B0795ED -:208D7F004F9EAE530EF7AE5005F6A4F06B18AE912C1F1DAE008FF65F9772FB1DF61A18AEA1 -:208D9F005005F72076AE008D1F1F1E1FFE1F211E212749AE532BF690954F0F28AE532CF63F -:208DBF000F2E1A2897909E1A2E9572F0211F02AE006DFE1F341E0213342409163417021E4E -:208DDF001F6F017F7B020F3BAE532BF77B036B2A0F297B2A6B2BAE532C7B2BF7AE500FF629 -:208DFF00A4F06B01AE912C1F2CAE0090F65F9772FB2CF61A01AE500FF72000AE006F9F1BCF -:208E1F004F02A90095F65F417B4F4158581F36A1012703CC8EDDAE008F9F1B4F6B399EA9CA -:208E3F00006B381E38F66B3A0D3A2703CC8ED4AE007372FB36E6039097E6029095E6018890 -:208E5F00F66B248472A20001A2006B317B23A2006B30EF021630FFAE007B72FB361F431E3A -:208E7F0043E6039097E6029095FE72A20001173F9FA2006B3E9EA2006B3D1E43163FEF0291 -:208E9F00163DFFAE00711F045F7B4F9772FB04F6A102270FAE00719F1B4F02A90095F6A120 -:208EBF0003260A7B4F88CD868B84CC8F6F1E38A607F7CC8F6F7B3A4A1E38F7CC8F6FAE005A -:208EDF008F9F1B4F6B4A9EA9006B491E49F64CF7A107237CAE007372FB36E6039097E60288 -:208EFF009095E60188F66B098472A20001A2006B0F7B08A2006B0EEF02160EFFAE007B7253 -:208F1F00FB36E6039097E6029095E60188F66B158472A90001A900887B15A9006B1A84EFFD -:208F3F0002E7017B19F7AE00719F1B4F02A90095F6A102270FAE00719F1B4F02A90095F608 -:208F5F00A10326097B4F88CD868B8420031E497F5B4C8152257B2888CD86495B016B02AE85 -:208F7F00006F9F1B2802A90095F6A1012603A601214F6B01AE00719F1B2802A90095F66B5B -:208F9F00217B21A1012603CC90947B21A1022603CC90E65F7B289758581F077B21A10326BB -:208FBF0003CC91027B21A1042603CC905F7B21A1052703CC9129AE00731F171E1772FB0719 -:208FDF001F151E15E6036B06E6026B05FE1F031E05A300027B04A2007B03A2002E16AE003E -:208FFF00711F135F7B289772FB131F091E09A602F7CC9129AE00831F191E1972FB071F1BD4 -:20901F001E1BE6036B12E6026B11FE1F0F1E1172F0051F247B1012046B237B0F1203881EB5 -:20903F0025A300647B24A20084A2002E03CC9129AE00719F1B2802A90095A604F7CC91295F -:20905F00AE00731F0D1E0D72FB071F0B1E0BE6036B20E6026B1FFE1F1D1E1FA300027B1E17 -:20907F00A2007B1DA2002E0DAE00719F1B2802A90095A602F70D022603CC91290D012732B5 -:20909F00AE00719F1B2802A90095F6A10126147B02442476AE00719F1B2802A90095A60359 -:2090BF00F72067AE00719F1B2802A90095A602F720587B02A5022752AE00719F1B2802A972 -:2090DF000095A602F72043AE006F9F1B2802A90095F6A1022634AE00719F1B2802A9009567 -:2090FF007F2027AE006F9F1B2802A90095F6A1022618AE007B72FB076F036F026F017FAE58 -:20911F0000719F1B2802A900957F5B2581080A0206040501090945202D2067657420656E02 -:20913F00642D73776974636865730A00094C202D206D6F7665204343570A00094D202D20C8 -:20915F00676574206D6F746F722073746174650A00094E202D20676F20666F72204E207312 -:20917F00742E2F67657420726573740A00094F202D2070756C6C206F666620746865207306 -:20919F0077697463680A000950202D206765742063757272656E7420706F736974696F6EC9 -:2091BF000A000952202D206D6F76652043570A000953202D206765742F7365742073706557 -:2091DF0065640A000958202D2073746F70206D6F746F720A00095A202D2073746F70206197 -:2091FF006E64207A65726F20706F736974696F6E0A0052454C415800494E464D560053545C -:15921F004F50004D56535450004F4646535700554E444546000A -:2097E90009C409C402020000000000000000000000000000000000000000000000000000C2 -:0698090000000000000059 -:209234005202AE955C1F011E0189CD82BF5B02AE955F89CD82BF5B02AE958089CD82BF5BA9 -:2092540002AE959D89CD82BF5B02AE95A889CD82BF5B02CD85EEAE95C889CD82BF5B02AE58 -:2092740095D789CD82BF5B02AE95EE89CD82BF5B02AE960289CD82BF5B02AE962089CD82DF -:20929400BF5B021E0189CD82BF5B048152130F011E16F65C1F16A0306B027B02A102231345 -:2092B4001E18894BFF4BFF4BFF4BFFCD83D95B06CC93B31618170F1E0FFE1F071E075C1FD2 -:2092D400121E0F1612FF7B02AB301E07F71E125C160F90FF1E12A620F7161690F6957B02AF -:2092F400A1002606A6016B1120020F117B02A1012606A6016B0D20020F0D7B02A102260634 -:20931400A6016B0E20020F0E9E4D26260D11260A0D0D260E0D0E26122072AE5266F66B015A -:20933400206AAE5268F66B012062AE526AF66B01205A961C0003899089CD84845B044D27FE -:20935400110D032B0DAE00FF13054F12044F12032E121E0F894BFF4BFF4BFF4BFFCD83D9CB -:209374005B06203B7B066B010D11260A0D0D260E0D0E26122016AE52667B01F7200EAE5204 -:20939400687B01F72006AE526A7B01F77B010F0B5F160F9089887B0E8889CD83D95B065BA1 -:2093B40013815210AE00911F0A1E0A1C00041F0D160D170135AA50E01613170F1E0FF66BA0 -:2093D400031E0A5C5CC60066AB30F77B03A13027067B03A131260E965C891E1189CD89AA65 -:2093F4005B04CC94D21E0D7B03F71E0D5C1F01A620F71E0D5C5C1F04160417011E0F5C1FE4 -:20941400131E0D1C00031F067B03A147272D7B03A14C27357B03A15027717B03A15427781C -:209434007B03A1722703CC94CF355550E0350050E1350150E235AA50E020FEC60066AB3072 -:209454001E04F71606170120751E13F64D271BAE500A88F69584A13026099EAA10AE500A61 -:20947400F720079EA4EFAE500AF71604170816061701AE500AF6A5102706A6306B0C2004CC -:20949400A6316B0C1E087B0CF72033965C891E1589CD92A05B0420261E047F1E0A89CD82F7 -:2094B400BF5B02AE00624B0489CD82FC5B03CE963889CD82BF5B02A60120194F20161E01D7 -:2094D4007F1E0A89CD82BF5B02CE963889CD82BF5B02A6015B1081520DAE00421F0A160A22 -:2094F4001704AE00021F0C1E0C5C1F011E0CF6A030725D0067274EC10066270EA132270AC1 -:20951400725F0067725F0068203B16011708160417060F037B03C1006824141E08F61E08CB -:209534005C1F081E06F71E065C1F060C0320E5725F0068725F00671E0A89CD93B65B024DDE -:209554002603CD92345B0D810A0A00436F6D6D616E642070726F746F636F6C3A205B2061B7 -:2095740064647220636F6D6D616E64002064617461205D0A092062726F6164636173742061 -:20959400616464723A20620A00636F6D6D616E64733A0A00302F31202D20636F6D6D616E48 -:2095B4006420666F7220676976656E206D6F746F723A0A0072202D207265736574204D434C -:2095D400550A0047202D2067657420626F61726420616464726573730A004C20302F3120D0 -:2095F4002D204C4544206F6E2F6F66660A00502063682076616C202D2050574D206F6E20A8 -:209614006368616E6E656C2063680A0054202D2074696D6520636F756E7465722076616C75 -:0F96340075650A00963A205D0A005B20582000F9 -:20980F005B2058200000000000000000000000000000000000000000000000000000000046 -:209643001E0916072A03CD97D58990891E0916072A03CD97D5899089CD96685B087B032A99 -:2096630003CD97D58152030F030F017B0A484F494D262E160C1E0A905859170C1F0A1E08B0 -:20968300130C7B07120B7B06120A240D160C1E0A549056170C1F0A20080C017B016B03202C -:2096A300CA7B036B021E0872F00C7B07120B90977B06120A25061F0890951706160C1E0A1D -:2096C300549056170C1F0A7B020A024D26D71E0816065B03811E0916072A03CD97D589904A -:2096E300891E0916072A03CD97D5899089CD96FF5B087B0318072A03CD97D58152065F1F73 -:20970300051F03A6206B027B09484F496B01160B1E09905859170B1F0916051E03905859CC -:2097230017051F030D0127067B06AA016B061E0572F00F7B04120E90977B03120D250C1FC9 -:2097430005909517037B0CAA016B0C0A0226B81E0B16095B06815F89897B0A977B0E421F8E -:20976300037B09977B0E4272FB021F024FA9006B017B0A977B0D4272FB021F024F19016BBF -:20978300017B0A977B0C4272FB011F017B09977B0D4272FB011F017B08977B0E4272FB018C -:2097A3001F017B07977B0E429F1B016B017B0A977B0B429F1B016B017B09977B0C429F1BD2 -:1D97C300016B017B08977B0D429F1B016B019085858190535D2703535C81905C81EF +:2086BF005872FB016F036F026F017FAE006F9F1B0502A90095A602F75B0281520616099063 +:2086DF00F64D27201E0B1F031E03FE1F011E015C1F051E037B06E7017B05F790F6905C1E37 +:2086FF0001F720DB5B06815209A62B6B017B0CA1012303CC87DDAE006F9F1B0C02A900954C +:20871F00F6A1012604A62D6B01AE00719F1B0C02A90095F695889EA100842717160D1704C2 +:20873F00A101271EA102273AA1042745A1052761CC87D0AE91D0160D908989CD86DA5B046D +:20875F00207CAE91D6160D908989CD86DA5B041E04FE1F021E025C160490FF1E027B01F7FF +:20877F00205CAE91DC160D908989CD86DA5B04204DAE91E1160D908989CD86DA5B041E04F2 +:20879F00FE1F061E065C160490FF1E067B01F7202DAE91E7160D908989CD86DA5B041E04F1 +:2087BF00FE1F081E085C160490FF1E087B01F7200DAE91ED160D908989CD86DA5B045B09A3 +:2087DF0081520A7B0DA10027097B0DA101272ECC8870AE5005F6A4F06B06AE90EB1F04AE09 +:2087FF00008FF65F9772FB04F61A06AE5005F7354E530D3520530E72105300202BAE500F98 +:20881F00F6A4F06B01AE90EB1F02AE0090F65F9772FB02F61A01AE500FF7354E532B3520F5 +:20883F00532C72105320200090AE008B5F7B0D97581F0972F909AE006B72FB09FE1F07AEE9 +:20885F004E2072F007908990AE00646590855C90FF5B0A815202AE006F9F1B0502A90095AC +:20887F00F6A10227045FCC89167B0588CD86495B010D062A324D27035F207CAE006F9F1B93 +:20889F000502A90095A601F7160890504F1207974F12069517081F06AE00719F1B0502A910 +:2088BF000095A604F72031A50227035F204944240FAE00719F1B0502A90095A605F7200D15 +:2088DF00AE00719F1B0502A90095A604F7AE006F9F1B0502A900957FAE00731F015F7B05FF +:2088FF0097585872FB011608EF021606FF7B0588CD87E084AE00015B02815204AE006F9F1B +:20891F001B0702A90095F6A10227045FCC89BB7B0788CD86495B01974D26101E0A891E0AAE +:20893F00897B0B88CD88735B0520710D082A255424035F2067AE006F9F1B0702A90095A63F +:20895F0001F7160A90504F1209974F120895170A1F08200BAE006F9F1B0702A900957FAE43 +:20897F0000731F035F7B079758581F011E0372FB01160AEF021608FFAE008372FB01160A7F +:20899F00EF021608FFAE00719F1B0702A90095A605F77B0788CD87E084AE00015B04815245 +:2089BF003F1E42F65C1F42A0306B017B01A1012303CC8D01164417361E36FE1F381E385C6A +:2089DF001F3C1E36163CFF7B01AB301E38F71E3C5C1F3E1E36163EFF1E3CA620F71E42F6AD +:2089FF005C1F42163C72A900021E36FF1E3EF7A145273FA14C2766A14D2603CC8ABBA14EA9 +:208A1F002603CC8ADAA14F2603CC8B47A1502603CC8B94A1522603CC8BCDA1532603CC8C6D +:208A3F000BA1582603CC8CE3A15A2603CC8CF2CC8D011E36FE1F061E065C1F081E36160857 +:208A5F00FF1E06A620F71E085C163690FF7B0188CD86495B01AB301E08F7CC8D347B018835 +:208A7F00CD86495B01442410AE91F31636908989CD86DA5B04CC8D34AE00719F1B0102A9A9 +:208A9F000095A601F7AE006F9F1B0102A90095A601F77B0188CD87E084CC8D341E36FE1F14 +:208ABF000A1E0A5C163690FF1E0AA620F71E36897B0388CD87065B03CC8D341E36FE1F0EA2 +:208ADF001E0E5C163690FF1E0EA620F7965C5C891E4489CD84845B044D2628AE00731F1248 +:208AFF005F7B0197585872FB12E6036B17E6026B16FE163690891618908989CD83D95B0625 +:208B1F00CC8D341E04891E04897B0588CD88735B055D2603CC8D011E36891E06891E06890C +:208B3F00CD83D95B06CC8D341E36FE1F181E185C163690FF1E18A620F7965C5C891E448954 +:208B5F00CD84845B044D2608AE00641F045F1F021E04891E04897B0588CD89195B055D26E2 +:208B7F0003CC8D011E36891E06891E0689CD83D95B06CC8D341E36FE1F1A1E1A5C16369030 +:208B9F00FF1E1AA620F7AE007B1F1C5F7B0197585872FB1CE6036B2FE6026B2EFE163690D5 +:208BBF00891630908989CD83D95B06CC8D347B0188CD86495B01A5022710AE91F816369021 +:208BDF008989CD86DA5B04CC8D34AE00719F1B0102A90095A601F7AE006F9F1B0102A90010 +:208BFF00957F7B0188CD87E084CC8D341E36FE1F301E305C163690FF1E30A620F7965C5C7A +:208C1F00891E4489CD84845B044D271C1E04A303207B03A2007B02A2002F0DAE4E20130467 +:208C3F004F12034F12022E4B0D012619AE530DF690954F0F21AE530EF60F241A2197909EA8 +:208C5F001A2495201BAE532BF690954F0F29AE532CF60F261A296B2B909E1A266B2A1E2A9D +:208C7F00905F7B37887B3788899089CD83D95B06CC8D341E36891E06891E0689CD83D95BFE +:208C9F00061604AE006B1F345F7B0197581F3A1E3472FB3AFFAE008B72FB3A6F017F0D0131 +:208CBF002611909E0F0CAE530DF74FAE530E909FF72062909E0F10AE532BF74FAE532C908E +:208CDF009FF72051AE00719F1B0102A90095A602F72042AE00719F1B0102A90095A603F799 +:208CFF0020331E44E6016B1FF66B1E161E905C17221622FF161EA66590F71622905C1732ED +:208D1F001632FF1622A67290F7162272A90002FF1E32A672F75B3F81523A7B3DA100270933 +:208D3F007B3DA1012772CC8F2EAE008B1F2F1E2FFE1F351E352742AE530DF690954F0F34FB +:208D5F00AE530EF60F391A3497909E1A399572F0351F37AE006BFE1F041E371304240916D6 +:208D7F000417371E2F6F017F7B370F06AE530DF77B38954F9EAE530EF7AE5005F6A4F06B47 +:208D9F0008AE90EB1F09AE008FF65F9772FB09F61A08AE5005F7206FAE008D1F311E31FE43 +:208DBF001F0D1E0D2742AE532BF690954F0F12AE532CF60F191A1297909E1A199572F00DAA +:208DDF001F01AE006DFE1F1F1E01131F2409161F17011E316F017F7B010F2DAE532BF77B9E +:208DFF0002954F9EAE532CF7AE500FF6A4F06B03AE90EB1F0BAE0090F65F9772FB0BF61AA2 +:208E1F0003AE500FF72000AE008F9F1B3D6B149EA9006B131E13F6442403CC8EFCAE00738B +:208E3F00905F7B3D909790589058171572FB151F171E17E6039097E6029095FE72A200012C +:208E5F009FA2006B229EA2006B211E17EF021621FFAE006F9F1B3D02A90095F6A101262AC1 +:208E7F00AE007B72FB15E6039097E6029095E60188F66B268472A20001A2006B2A7B25A203 +:208E9F00006B29EF021629FF202CAE007B72FB151F0F1E0FE6039097E6029095FE72A90068 +:208EBF0001171D9FA9006B1C9EA9006B1B1E0F161DEF02161BFFAE00719F1B3D02A90095EB +:208EDF00F6A102270FAE00719F1B3D02A90095F6A10326097B3D88CD868B842032AE006F74 +:208EFF009F1B3D02A90095F697161390F6889FA1018426104D26071E13A607F720114A1E75 +:208F1F0013F7200B4C1E13F7A10723031E137F5B3A8152257B2888CD86495B016B02AE0040 +:208F3F006F9F1B2802A90095F6A1012603A601214F6B01AE00719F1B2802A90095F66B0398 +:208F5F007B03A1012603CC90537B03A1022603CC90A55F7B289758581F1C7B03A1032603E0 +:208F7F00CC90C17B03A1042603CC901E7B03A1052703CC90E8AE00731F041E0472FB1C1F4F +:208F9F001A1E1AE6036B19E6026B18FE1F161E18A300027B17A2007B16A2002E16AE0071B0 +:208FBF001F145F7B289772FB141F121E12A602F7CC90E8AE00831F101E1072FB1C1F0E1E9F +:208FDF000EE6036B0DE6026B0CFE1F0A1E0C72F0181F087B0B12176B077B0A1216881E0935 +:208FFF00A300647B08A20084A2002E03CC90E8AE00719F1B2802A90095A604F7CC90E8AEB7 +:20901F0000731F241E2472FB1C1F221E22E6036B21E6026B20FE1F1E1E20A300027B1FA2ED +:20903F00007B1EA2002E0DAE00719F1B2802A90095A602F70D022603CC90E80D012732AE2A +:20905F0000719F1B2802A90095F6A10126147B02442476AE00719F1B2802A90095A603F750 +:20907F002067AE00719F1B2802A90095A602F720587B02A5022752AE00719F1B2802A900A9 +:20909F0095A602F72043AE006F9F1B2802A90095F6A1022634AE00719F1B2802A900957F28 +:2090BF002027AE006F9F1B2802A90095F6A1022618AE007B72FB1C6F036F026F017FAE0002 +:2090DF00719F1B2802A900957F5B2581080A0206040501090945202D2067657420656E64DF +:2090FF002D73776974636865730A00094C202D206D6F7665204343570A00094D202D206706 +:20911F006574206D6F746F722073746174650A00094E202D20676F20666F72204E20737445 +:20913F002E2F67657420726573740A00094F202D2070756C6C206F66662074686520737743 +:20915F00697463680A000950202D206765742063757272656E7420706F736974696F6E0A76 +:20917F00000952202D206D6F76652043570A000953202D206765742F73657420737065653C +:20919F00640A000958202D2073746F70206D6F746F720A00095A202D2073746F7020616ECE +:2091BF0064207A65726F20706F736974696F6E0A0052454C415800494E464D560053544FBB +:1E91DF0050004D56535450004F4646535700554E444546002045203100204520320024 +:2097A40009C409C40202000000000000000000000000000000000000000000000000000007 +:0697C4000000000000009F +:2091FD00AE951689CD82BF5B02AE951989CD82BF5B02AE953A89CD82BF5B02AE955789CD54 +:20921D0082BF5B02AE956289CD82BF5B02CD85EEAE958289CD82BF5B02AE959189CD82BF96 +:20923D005B02AE95A889CD82BF5B02AE95BC89CD82BF5B02AE95DA89CD82BF5B02815213EB +:20925D000F061E16F65C1F16A0306B017B01A10223131E18894BFF4BFF4BFF4BFFCD83D980 +:20927D005B06CC936D161817071E07FE1F121E125C1F101E071610FF7B01AB301E12F71E63 +:20929D00105C160790FF1E10A620F7161690F6957B01A1002606A6016B0A20020F0A7B014B +:2092BD00A1012606A6016B0920020F097B01A1022606A6016B0F20020F0F9E4D26260D0A74 +:2092DD00260A0D09260E0D0F26122071AE5266F66B062069AE5268F66B062061AE526AF60C +:2092FD006B062059965C5C899089CD84845B044D27110D022B0DAE00FF13044F12034F12EE +:20931D00022E121E07894BFF4BFF4BFF4BFFCD83D95B06203B7B056B060D0A260A0D0926BF +:20933D000E0D0F26122016AE52667B06F7200EAE52687B06F72006AE526A7B06F77B060FF4 +:20935D000D5F16079089887B108889CD83D95B065B13815210AE00911F041E041C00041F8C +:20937D000D160D170135AA50E01613170A1E0AF66B031E045C5CC60066AB30F77B03A1307C +:20939D0027067B03A131260E965C891E0C89CD89BE5B04CC948C1E0D7B03F71E0D5C1F012B +:2093BD00A620F71E0D5C5C1F06160617011E0A5C1F131E0D1C00031F0F7B03A147272D7B34 +:2093DD0003A14C27357B03A15027717B03A15427787B03A1722703CC9489355550E0350078 +:2093FD0050E1350150E235AA50E020FEC60066AB301E06F7160F170120751E13F64D271BE0 +:20941D00AE500A88F69584A13026099EAA10AE500AF720079EA4EFAE500AF7160617081691 +:20943D000F1701AE500AF6A5102706A6306B0C2004A6316B0C1E087B0CF72033965C891EB9 +:20945D001589CD925B5B0420261E067F1E0489CD82BF5B02AE00624B0489CD82FC5B03CEDA +:20947D0095F389CD82BF5B02A60120194F20161E017F1E0489CD82BF5B02CE95F389CD820C +:20949D00BF5B02A6015B1081520DAE00421F0616061703AE00021F0C1E0C5C1F011E0CF6B5 +:2094BD00A030725D0067274EC10066270EA132270A725F0067725F0068203B1601170A169A +:2094DD000317080F057B05C1006824141E0AF61E0A5C1F0A1E08F71E085C1F080C0520E5B1 +:2094FD00725F0068725F00671E0689CD93705B024D2603CD91FD5B0D810A0A00436F6D6DAA +:20951D00616E642070726F746F636F6C3A205B206164647220636F6D6D616E640020646115 +:20953D007461205D0A092062726F61646361737420616464723A20620A00636F6D6D616EDA +:20955D0064733A0A00302F31202D20636F6D6D616E6420666F7220676976656E206D6F74E7 +:20957D006F723A0A0072202D207265736574204D43550A0047202D2067657420626F6172E0 +:20959D006420616464726573730A004C20302F31202D204C4544206F6E2F6F66660A00503B +:2095BD002063682076616C202D2050574D206F6E206368616E6E656C2063680A0054202D53 +:2095DD002074696D6520636F756E7465722076616C75650A0A0095F5205D0A005B2058202A +:0195FD00006D +:2097CA005B205820000000000000000000000000000000000000000000000000000000008C +:2095FE001E0916072A03CD97908990891E0916072A03CD9790899089CD96235B087B032AAE +:20961E0003CD97908152030F030F017B0A484F494D262E160C1E0A905859170C1F0A1E083A +:20963E00130C7B07120B7B06120A240D160C1E0A549056170C1F0A20080C017B016B032071 +:20965E00CA7B036B021E0872F00C7B07120B90977B06120A25061F0890951706160C1E0A62 +:20967E00549056170C1F0A7B020A024D26D71E0816065B03811E0916072A03CD97908990D4 +:20969E00891E0916072A03CD9790899089CD96BA5B087B0318072A03CD97908152065F1F87 +:2096BE00051F03A6206B027B09484F496B01160B1E09905859170B1F0916051E0390585912 +:2096DE0017051F030D0127067B06AA016B061E0572F00F7B04120E90977B03120D250C1F0F +:2096FE0005909517037B0CAA016B0C0A0226B81E0B16095B06815F89897B0A977B0E421FD4 +:20971E00037B09977B0E4272FB021F024FA9006B017B0A977B0D4272FB021F024F19016B04 +:20973E00017B0A977B0C4272FB011F017B09977B0D4272FB011F017B08977B0E4272FB01D1 +:20975E001F017B07977B0E429F1B016B017B0A977B0B429F1B016B017B09977B0C429F1B17 +:1D977E00016B017B08977B0D429F1B016B019085858190535D2703535C81905C8134 :00000001FF