16 Commits
main ... master

Author SHA1 Message Date
526207e544 Update README.md 2023-01-10 19:00:20 -08:00
5af6ecd8bf Update README.md 2020-03-20 02:24:29 +01:00
79dd130028 Merge pull request #132 from hexagon5un/simple_serial_framing
minimalistic framing for UART command
2019-12-18 22:08:10 +01:00
3ee11fc248 fixed bug with signed/unsigned
needed explicit cast in checksum verification
2019-12-18 21:31:22 +01:00
c3fbbab485 a periodic usart reset works much better
tying the usart buffer clear to the 25*5 ms system tick makes sense
2019-12-18 15:42:51 +01:00
976ba2d44a minimalistic framing for UART command
copied the uart framing idea from
https://github.com/EmanuelFeru/hoverboard-firmware-hack-FOC

to use:
send $AAAA to start frame
then steer, speed as usual
and XOR($AAAA, steer, speed) as checksum

commands that don't match are ignored, and UART DMA is reset
hopefully this will set it up to catch the next one
re-send frequently.
2019-12-16 16:11:07 +01:00
2569b22640 Update README.md 2019-08-03 02:32:27 +02:00
000c0fccb8 Update README.md 2019-08-03 02:31:57 +02:00
23c4a3c8ac Update README.md 2019-08-02 23:10:33 +02:00
e9ebbcc1ac Update README.md 2019-08-02 23:08:36 +02:00
3e2cfe973a Fixed timeout. Now it is usable for other input methods than nunchuck.
Cosmetical cleanup in motor-test.
2019-06-01 16:17:48 +02:00
ffda2219f1 Added Motor-Test-Mode: Sweep motors slowly forward and backward without any input.
Better config-validation.
Fixed board temperature calculation and serial output when speed > 50.
2019-05-31 19:06:47 +02:00
2c666c8cb4 Merge pull request #95 from btsimonh/master
Add ref to BiPropellant to readme
2019-04-29 19:41:00 +02:00
e410438330 Merge pull request #24 from btsimonh/bipropellantref2
Add BiPropellant reference to readme
2019-04-29 07:27:33 +01:00
5fbd54d9ab Add BiPropellant reference to readme 2019-04-29 07:25:49 +01:00
226278b2fc Merge pull request #23 from NiklasFauth/master
update master
2019-04-29 07:23:04 +01:00
5 changed files with 514 additions and 441 deletions

View File

@ -9,10 +9,11 @@
#define DELAY_IN_MAIN_LOOP 5 // in ms. default 5. it is independent of all the timing critical stuff. do not touch if you do not know what you are doing.
#define TIMEOUT 5 // number of wrong / missing input commands before emergency off
#define START_FRAME 0xAAAA // serial command start-of-frame magic word
// ############################### GENERAL ###############################
// How to calibrate: connect GND and RX of a 3.3v uart-usb adapter to the right sensor board cable (be careful not to use the red wire of the cable. 15v will destroye verything.). if you are using nunchuck, disable it temporarily. enable DEBUG_SERIAL_USART3 and DEBUG_SERIAL_ASCII use asearial terminal.
// How to calibrate: connect GND and RX of a 3.3v uart-usb adapter to the right sensor board cable (be careful not to use the red wire of the cable. 15v will destroy everything.). if you are using nunchuck, disable it temporarily. enable DEBUG_SERIAL_USART3 and DEBUG_SERIAL_ASCII use asearial terminal.
// Battery voltage calibration: connect power source. see <How to calibrate>. write value nr 5 to BAT_CALIB_ADC. make and flash firmware. then you can verify voltage on value 6 (devide it by 100.0 to get calibrated voltage).
#define BAT_CALIB_REAL_VOLTAGE 43.0 // input voltage measured by multimeter
@ -47,7 +48,7 @@
#define DEBUG_SERIAL_USART3 // right sensor board cable, disable if I2C (nunchuck or lcd) is used!
#define DEBUG_BAUD 115200 // UART baud rate
//#define DEBUG_SERIAL_SERVOTERM
//#define DEBUG_SERIAL_SERVOTERM // Software for plotting graphs: https://github.com/STMBL/Servoterm-app
#define DEBUG_SERIAL_ASCII // "1:345 2:1337 3:0 4:0 5:0 6:0 7:0 8:0\r\n"
// ############################### INPUT ###############################
@ -58,13 +59,13 @@
// for Arduino, use void loop(void){ Serial.write((uint8_t *) &steer, sizeof(steer)); Serial.write((uint8_t *) &speed, sizeof(speed));delay(20); }
// ###### CONTROL VIA RC REMOTE ######
// left sensor board cable. Channel 1: steering, Channel 2: speed.
// left sensor board cable. Channel 1: steering, Channel 2: speed. Use a very short cable!
//#define CONTROL_PPM // use PPM-Sum as input. disable CONTROL_SERIAL_USART2!
//#define PPM_NUM_CHANNELS 6 // total number of PPM channels to receive, even if they are not used.
// ###### CONTROL VIA TWO POTENTIOMETERS ######
// ADC-calibration to cover the full poti-range: connect potis to left sensor board cable (0 to 3.3V) (do NOT use the red 15V wire in the cable!). see <How to calibrate>. turn the potis to minimum position, write value 1 to ADC1_MIN and value 2 to ADC2_MIN. turn to maximum position and repeat it for ADC?_MAX. make, flash and test it.
#define CONTROL_ADC // use ADC as input. disable CONTROL_SERIAL_USART2!
//#define CONTROL_ADC // use ADC as input. disable CONTROL_SERIAL_USART2!
#define ADC1_MIN 0 // min ADC1-value while poti at minimum-position (0 - 4095)
#define ADC1_MAX 4095 // max ADC1-value while poti at maximum-position (0 - 4095)
#define ADC2_MIN 0 // min ADC2-value while poti at minimum-position (0 - 4095)
@ -74,6 +75,11 @@
// left sensor board cable. keep cable short, use shielded cable, use ferrits, stabalize voltage in nunchuck, use the right one of the 2 types of nunchucks, add i2c pullups. use original nunchuck. most clones does not work very well.
//#define CONTROL_NUNCHUCK // use nunchuck as input. disable DEBUG_SERIAL_USART3!
// ###### MOTOR TEST MODE ######
// slowly move both wheels forward and backward, ignoring all inputs
#define CONTROL_MOTOR_TEST
#define CONTROL_MOTOR_TEST_MAX_SPEED 300 // sweep slowly from -MAX_SPEED to MAX_SPEED (0 - 1000)
// ############################### DRIVING BEHAVIOR ###############################
// inputs:
@ -149,6 +155,41 @@ else {\
#error DEBUG_I2C_LCD and DEBUG_SERIAL_USART3 not allowed. it is on the same cable.
#endif
#if defined CONTROL_PPM && defined CONTROL_ADC && defined CONTROL_NUNCHUCK || defined CONTROL_PPM && defined CONTROL_ADC || defined CONTROL_ADC && defined CONTROL_NUNCHUCK || defined CONTROL_PPM && defined CONTROL_NUNCHUCK
#error only 1 input method allowed. use CONTROL_PPM or CONTROL_ADC or CONTROL_NUNCHUCK.
#ifdef CONTROL_SERIAL_USART2
#if defined CONTROL_DEFINED
#error select exactly 1 input method in config.h!
#endif
#define CONTROL_DEFINED
#endif
#ifdef CONTROL_PPM
#if defined CONTROL_DEFINED
#error select exactly 1 input method in config.h!
#endif
#define CONTROL_DEFINED
#endif
#ifdef CONTROL_ADC
#if defined CONTROL_DEFINED
#error select exactly 1 input method in config.h!
#endif
#define CONTROL_DEFINED
#endif
#ifdef CONTROL_NUNCHUCK
#if defined CONTROL_DEFINED
#error select exactly 1 input method in config.h!
#endif
#define CONTROL_DEFINED
#endif
#ifdef CONTROL_MOTOR_TEST
#if defined CONTROL_DEFINED
#error select exactly 1 input method in config.h!
#endif
#define CONTROL_DEFINED
#endif
#ifndef CONTROL_DEFINED
#error select exactly 1 input method in config.h!
#endif

View File

@ -17,12 +17,12 @@ https://media.ccc.de/v/gpn18-95-howto-moving-objects
Here are detailed build instructions for some finished projects.
If possible, a prebuild firmware release is available for these usecases, so you don't need to compile the firmware yourself
TranspOtter: https://github.com/NiklasFauth/hoverboard-firmware-hack/wiki/Build-Instruction:-TranspOtter
TranspOtter: https://github.com/lucysrausch/hoverboard-firmware-hack/wiki/Build-Instruction:-TranspOtter
---
## Hardware
![otter](https://raw.githubusercontent.com/NiklasFauth/hoverboard-firmware-hack/master/pinout.png)
![otter](https://raw.githubusercontent.com/lucysrausch/hoverboard-firmware-hack/master/pinout.png)
The original Hardware supports two 4-pin cables that originally were connected to the two sensor boards. They break out GND, 12/15V and USART2&3 of the Hoverboard mainboard.
Both USART2 & 3 can be used for UART and I2C, PA2&3 can be used as 12bit ADCs.
@ -80,7 +80,7 @@ Most robust way for input is to use the ADC and potis. It works well even on 1m
---
## Examples
## Examples and links
Have a look at the config.h in the Inc directory. That's where you configure to firmware to match your project.
Currently supported: Wii Nunchuck, analog potentiometer and PPM-Sum signal from a RC remote.
@ -89,11 +89,25 @@ https://github.com/p-h-a-i-l/hoverboard-firmware-hack
If you need additional features like a boost button, have a look at the while(1) loop in the main.c
### Hoverboardhack for AT32F403RCT6 based mainboards
* [https://github.com/cloidnerux/hoverboard-firmware-hack](https://github.com/cloidnerux/hoverboard-firmware-hack)
### Hoverboardhack for split mainboards
* [https://github.com/flo199213/Hoverboard-Firmware-Hack-Gen2](https://github.com/flo199213/Hoverboard-Firmware-Hack-Gen2)
### Online Compiler
* [RoboDurdens awesome](https://github.com/RoboDurden) online compiler: [https://pionierland.de/hoverhack/](https://pionierland.de/hoverhack/)
### Additional Hardware
* [breakout/interconnect boards](https://github.com/Jan--Henrik/hoverboard-breakout) Breakout/Interconnection boards for hoverboard hacking.
### Projects based on it
* [Bidirectional UART communication](https://github.com/RoboDurden/hoverboard-firmware-hack) with Arduino example code
* [bobbycar-optimized firmware](https://github.com/larsmm/hoverboard-firmware-hack-bbcar) based on this one with driving modes, acceleration ramps and some other features
* [wheel chair](https://github.com/Lahorde/steer_speed_ctrl) controlled with a joystick or using a CC2650 sensortag to control it over bluetooth with pitch/roll.
* [TranspOtterNG](https://github.com/Jan--Henrik/transpOtterNG) TranspOtter is an open source semi self driving transportation platform based on hoverboard hardware
* [TranspOtterNG](https://github.com/Jana-Marie/transpOtterNG) TranspOtter is an open source semi self driving transportation platform based on hoverboard hardware
* [BiPropellant](https://github.com/bipropellant) - fork which focusses on reliable machine control, but also retains HoverBoard functionality if desired.

View File

@ -105,8 +105,6 @@ void Nunchuck_Read() {
HAL_Delay(5);
if (HAL_I2C_Master_Receive(&hi2c2,0xA4,(uint8_t*)nunchuck_data, 6, 100) == HAL_OK) {
timeout = 0;
} else {
timeout++;
}
if (timeout > 3) {

View File

@ -41,9 +41,10 @@ int cmd2;
int cmd3;
typedef struct{
int16_t steer;
int16_t speed;
//uint32_t crc;
uint16_t start_of_frame;
int16_t steer;
int16_t speed;
uint16_t checksum;
} Serialcommand;
volatile Serialcommand command;
@ -67,6 +68,9 @@ extern volatile uint32_t timeout; // global variable for timeout
extern float batteryVoltage; // global variable for battery voltage
uint32_t inactivity_timeout_counter;
uint32_t main_loop_counter;
int32_t motor_test_direction = 1;
extern uint8_t nunchuck_data[6];
#ifdef CONTROL_PPM
@ -77,7 +81,9 @@ int milli_vel_error_sum = 0;
void poweroff() {
#ifndef CONTROL_MOTOR_TEST
if (abs(speed) < 20) {
#endif
buzzerPattern = 0;
enable = 0;
for (int i = 0; i < 8; i++) {
@ -86,7 +92,9 @@ void poweroff() {
}
HAL_GPIO_WritePin(OFF_PORT, OFF_PIN, 0);
while(1) {}
#ifndef CONTROL_MOTOR_TEST
}
#endif
}
@ -150,7 +158,7 @@ int main(void) {
#ifdef CONTROL_SERIAL_USART2
UART_Control_Init();
HAL_UART_Receive_DMA(&huart2, (uint8_t *)&command, 4);
HAL_UART_Receive_DMA(&huart2, (uint8_t *)&command, sizeof(command));
#endif
#ifdef DEBUG_I2C_LCD
@ -211,14 +219,29 @@ int main(void) {
timeout = 0;
#endif
#ifdef CONTROL_SERIAL_USART2
cmd1 = CLAMP((int16_t)command.steer, -1000, 1000);
cmd2 = CLAMP((int16_t)command.speed, -1000, 1000);
#ifdef CONTROL_SERIAL_USART2
if (command.start_of_frame == START_FRAME &&
command.checksum ==(uint16_t)(START_FRAME ^ command.steer ^ command.speed)) {
cmd1 = CLAMP((int16_t)command.steer, -1000, 1000);
cmd2 = CLAMP((int16_t)command.speed, -1000, 1000);
} else { // restart DMA to hopefully get back in sync
// Try a periodic reset
if (main_loop_counter % 25 == 0) {
HAL_UART_DMAStop(&huart2);
HAL_UART_Receive_DMA(&huart2, (uint8_t *)&command, sizeof(command));
}
}
timeout = 0;
#endif
#ifdef CONTROL_MOTOR_TEST
if (motor_test_direction == 1) cmd2 += 1;
else cmd2 -= 1;
if (abs(cmd2) > CONTROL_MOTOR_TEST_MAX_SPEED) motor_test_direction = -motor_test_direction;
timeout = 0;
#endif
// ####### LOW-PASS FILTER #######
steer = steer * (1.0 - FILTER) + cmd1 * FILTER;
speed = speed * (1.0 - FILTER) + cmd2 * FILTER;
@ -252,7 +275,7 @@ int main(void) {
lastSpeedR = speedR;
if (inactivity_timeout_counter % 25 == 0) {
if (main_loop_counter % 25 == 0) {
// ####### CALC BOARD TEMPERATURE #######
board_temp_adc_filtered = board_temp_adc_filtered * 0.99 + (float)adc_buffer.temp * 0.01;
board_temp_deg_c = ((float)TEMP_CAL_HIGH_DEG_C - (float)TEMP_CAL_LOW_DEG_C) / ((float)TEMP_CAL_HIGH_ADC - (float)TEMP_CAL_LOW_ADC) * (board_temp_adc_filtered - (float)TEMP_CAL_LOW_ADC) + (float)TEMP_CAL_LOW_DEG_C;
@ -310,6 +333,9 @@ int main(void) {
if (inactivity_timeout_counter > (INACTIVITY_TIMEOUT * 60 * 1000) / (DELAY_IN_MAIN_LOOP + 1)) { // rest of main loop needs maybe 1ms
poweroff();
}
main_loop_counter += 1;
timeout++;
}
}

View File

@ -1,23 +1,23 @@
:020000040800F2
:1000000000C00020913D0008753D0008773D0008C4
:10001000793D00087B3D00087D3D000800000000A0
:100020000000000000000000000000007F3D00080C
:10003000813D000800000000833D0008853D000868
:10004000D93D0008D93D0008D93D0008D93D000838
:10005000D93D0008D93D0008D93D0008D93D000828
:10006000D93D0008D93D0008D93D0008A135000858
:10007000D93D0008D93D0008D93D0008D93D000808
:10008000D93D0008D93D0008D93D0008D93D0008F8
:10009000D93D0008D93D0008D93D0008D93D0008E8
:1000A000D93D0008D93D0008D93D0008D93D0008D8
:1000B000D93D0008D93D0008D93D0008D93D0008C8
:1000C000D93D0008D93D0008D93D0008D93D0008B8
:1000D000D93D0008D93D0008D93D0008D93D0008A8
:1000E000D93D0008D93D0008D93D0008D93D000898
:1000F000D93D0008D93D0008D93D0008D93D000888
:10010000D93D0008D93D0008D93D0008D93D000877
:10011000D93D0008D93D0008D93D0008D93D000867
:10012000D93D0008D93D0008D93D0008D93D000857
:1000000000C00020293D00080D3D00080F3D0008FC
:10001000113D0008133D0008153D000800000000D8
:10002000000000000000000000000000173D000874
:10003000193D0008000000001B3D00081D3D0008A0
:10004000713D0008713D0008713D0008713D0008D8
:10005000713D0008713D0008713D0008713D0008C8
:10006000713D0008713D0008713D000839350008F8
:10007000713D0008713D0008713D0008713D0008A8
:10008000713D0008713D0008713D0008713D000898
:10009000713D0008713D0008713D0008713D000888
:1000A000713D0008713D0008713D0008713D000878
:1000B000713D0008713D0008713D0008713D000868
:1000C000713D0008713D0008713D0008713D000858
:1000D000713D0008713D0008713D0008713D000848
:1000E000713D0008713D0008713D0008713D000838
:1000F000713D0008713D0008713D0008713D000828
:10010000713D0008713D0008713D0008713D000817
:10011000713D0008713D0008713D0008713D000807
:10012000713D0008713D0008713D0008713D0008F7
:1001300000000000000000000000000000000000BF
:1001400000000000000000000000000000000000AF
:10015000000000000000000000000000000000009F
@ -31,9 +31,9 @@
:1001D000000000000000000000000000000000001F
:0401E0005FF8E0F1F3
:1001E80010B5054C237833B9044B13B10448AFF369
:1001F80000800123237010BD88000020000000004B
:100208007046000808B5034B1BB103490348AFF318
:10021800008008BD000000008C0000207046000827
:1001F80000800123237010BD8C0000200000000047
:100208000846000808B5034B1BB103490348AFF380
:10021800008008BD0000000090000020084600088B
:10022800034613F8012B002AFBD1181A013870472E
:1002380081F0004102E000BF83F0004330B54FEA8F
:1002480041044FEA430594EA050F08BF90EA020FFC
@ -354,7 +354,7 @@
:1015F800624412F8100C13F4803F05D10C4B03FB26
:1016080000F007B010BC7047084B5B68C3F3404359
:10161800634413F8142C074BB3FBF2F300FB03F0FD
:10162800EFE70448EDE700BF8846000800100240D5
:10162800EFE70448EDE700BF20460008001002403D
:1016380000093D0000127A00594B1B6803F00703AC
:101648008B420CD2564A136823F007030B431360EE
:10165800136803F007038B4201D00120704770B56F
@ -378,12 +378,12 @@
:1017780023F46053296943EAC1035360FFF724FF48
:10178800084B5B68C3F30313074AD35CD840074B85
:101798001860002000F03EFD002070BD0120FCE72D
:1017A80000200240001002409C4600080000002073
:1017A80000200240001002403446000800000020DB
:1017B800014B1868704700BF0000002008B5FFF70C
:1017C800F7FF044B5B68C3F30223034AD35CD8409A
:1017D80008BD00BF00100240AC46000808B5FFF77E
:1017D80008BD00BF001002404446000808B5FFF7E6
:1017E800E7FF044B5B68C3F3C223034AD35CD840CA
:1017F80008BD00BF00100240AC46000830B4036AC0
:1017F80008BD00BF001002404446000830B4036A28
:1018080023F001030362056A4268846924F07304C3
:101818000B681C4325F002058B682B43104DA8422A
:1018280003D005F50065A84205D123F00803CD686B
@ -551,7 +551,7 @@
:1022480008B5074A136843F0100313600320FFF72B
:10225800CDFD0020FFF7DEFFFFF7DAFF002008BD05
:1022680000200240024A136801331360704700BF20
:10227800E0000020014B1868704700BFE000002014
:10227800E4000020014B1868704700BFE40000200C
:1022880030B583B00190FFF7F5FF0546019CB4F126
:10229800FF3F00D00134FFF7EDFF401BA042FAD307
:1022A80003B030BD7047000030B482B00023019302
@ -729,7 +729,7 @@
:102D68003046FEF785FF21463046FEF7ABFF0421CB
:102D78003046FEF7A7FF39463046FEF7A3FF2B681B
:102D880001221A633268136843F00103136019B013
:102D9800BDE8F08F00100240AC0100203C03002089
:102D9800BDE8F08F00100240B00100204003002081
:102DA800002C0140003401402DE9F04186B0424E2C
:102DB800B36943F40073B361B36903F40073009318
:102DC800009B3E4C3E4B23604FF48073A36000256C
@ -747,9 +747,9 @@
:102E8800019B114B1D60C3F80480104A9A60104AD8
:102E9800DA6040F6A2221A601A6842F001021A604B
:102EA8002A4629463846FEF7B3FF3846FEF7E4FFC0
:102EB80006B0BDE8F08100BF001002407402002097
:102EB80006B0BDE8F08100BF001002407802002093
:102EC8000024014000000140080002404C24014059
:102ED800E8020020F0B585B0284B9A6942F4806278
:102ED800EC020020F0B585B0284B9A6942F4806274
:102EE8009A619B6903F480630093009B244C254BF3
:102EF80023604FF48073A3600023E36063614FF4A1
:102F08006022E2616360052626612046FFF744FBE4
@ -760,394 +760,388 @@
:102F5800FFF7AAF9072303930197029601A92046D0
:102F6800FFF7A2F923689A6842F480729A609A6817
:102F780042F001029A6005B0F0BD00BF00100240A7
:102F880028010020002801400D4B1B681333262B15
:102F980014D810B500240B4B1C700B4B1C7005E0AB
:102FA8000A4B1C706420FFF76BF90134072CF7DD1E
:102FB800002220210648FFF796F8FEE7704700BF79
:102FC80094030020A8000020B4000020A4000020E2
:102FD8000008014030B597B002250C9501231093E5
:102FE800102311931395002414944FF46013159330
:102FF8000CA8FEF7FBF80F230793089509944FF4E4
:1030080080630A930B94294607A8FEF715FB0195E0
:103018004FF44043039301A8FFF770F8FEF7C8FB8D
:10302800084BA3FB00308009FEF732FF0420FEF7AF
:1030380045FF224621464FF0FF30FEF7E9FE17B064
:1030480030BD00BFD34D62102DE9F04F85B0FFF7BA
:10305800F7F8B34CA36943F00103A361A36903F034
:1030680001030393039B0320FEF7C0FE00221146D1
:103078006FF00B00FEF7CCFE002211466FF00A003D
:10308800FEF7C6FE002211466FF00900FEF7C0FEEB
:10309800002211466FF00400FEF7BAFE0022114626
:1030A8006FF00300FEF7B4FE002211466FF0010036
:1030B800FEF7AEFE002211464FF0FF30FEF7A8FEE5
:1030C800FFF788FF636923F001036361FFF772FC70
:1030D800FFF772FDFFF768FEFFF7FCFEFFF71EFC27
:1030E800012220218F48FEF7FEFF8F48FFF7B8F92D
:1030F8008E48FFF7B5F9082405E08D4B1C70642055
:10310800FFF7BEF8013C002CF7DA4FF0000A884BB5
:1031180083F800A0012204218648FEF7E4FF864BCD
:10312800188AFDF709FE0190844B01221A70D346D4
:103138004FE14FF47A7861E14FF47A7473E14FF418
:103148007A7642464B4620462946FDF777F80446EC
:103158000D4600227A4BFDF7B7FC80B96AA3D3E984
:10316800002320462946FDF791FC00285DD1204622
:103178002946FDF7B3FC074603E0724EE1E74FF43A
:103188007A77714B1A68714BA3FB0213DB0803EBC8
:10319800830303EB83039A4249D00AF13203BB420B
:1031A80014DDAAF1320ABA4510DA0BF13203B34240
:1031B8000CDDABF1320BB34508DA654B1B68042B09
:1031C80004D8644B1E607B42634A13600221554851
:1031D800FEF782FF38B1614B1B6823B9604B1B684F
:1031E800002B00F082805F4B1C685F492046FDF78A
:1031F80099FF28B15D4B1B681333262B40F2818061
:103208005B492046FDF78EFF002800F0BD80564937
:103218002046FDF7A5FF002800F0B680444B0522A4
:103228001A70544B06221A70BAE0464FA9E7019863
:10323800FDF762F936A3D3E90023FDF7B5F9044693
:103248000D46DFF8F480B8F81000FDF775FDFDF7BE
:1032580053F931A3D3E90023FDF7A6F902460B463B
:1032680020462946FCF7EAFFFDF760FC0546019079
:103278004149FDF7AFFC4149FDF7B6FD4049FDF76F
:10328800ABFC0446B8F80E10002000F029FDB8F891
:103298001210012000F024FD3146022000F020FD2C
:1032A8003946032000F01CFDB8F80C10042000F08B
:1032B80017FD34492B4B1868FDF796FDFDF75AFFAB
:1032C8000146052000F00CFD2846FDF753FF014696
:1032D800062000F005FD2046FDF74CFF01460720BB
:1032E80000F0FEFC00F002FD57E7144B00221A70B4
:1032F80002210C48FEF7F0FE0028F9D1FFF744FE42
:1033080071E7FFF741FE4BE00000000000408FC06E
:10331800AE47E17A14AEEF3F7B14AE47E17A843FC3
:10332800001002400008014074020020280100201B
:10333800A4000020000C0140E8020020B400002096
:1033480000408F4018FCFFFF7C0300201F85EB51D5
:1033580004000020C8000020C4000020D000002085
:10336800CC00002008000020CCCC064294030020AA
:1033780000000C42A800002000E0CE44083748BEF8
:1033880033330F420000C842734B1B6813F1320FEE
:1033980080F2CA80714B05221A70714B01221A7093
:1033A80087EAE773A3EBE773322B06DC86EAE6735A
:1033B800A3EBE673322B40F3BD806A4B00221A6000
:1033C800684B1A68684B9A4201D9FFF7DDFDB3468E
:1033D800BA460220FEF754FF644BDB899BB2B3F573
:1033E800805FBFF4A6AE614BDA89D889FDF7A8FCE7
:1033F8005F49FDF7ADFDFDF7BDFE80465D4BC3F8A7
:1034080000805A4B5B8A9BB2B3F5805FBFF494AEE1
:10341800564B5A8A588AFDF793FC5549FDF798FD93
:10342800FDF7A8FE0446544B1C60504AD3899BB252
:10343800B3F5FA6F94BF0023012350490B70538AE8
:103448009BB2B3F5FA6F94BF002301234C4A137063
:103458004C4B00221A604C4D2868FDF73BF838A306
:10346800D3E90023FDF7A0F806460F464046FDF7CE
:1034780031F835A3D3E90023FDF796F802460B4649
:1034880030463946FCF7DAFEFDF728FB0646286089
:10349800314D2868FDF71EF829A3D3E90023FDF76D
:1034A80083F8804689462046FDF714F826A3D3E919
:1034B8000023FDF779F802460B4640464946FCF7DB
:1034C800BDFEFDF70BFB2860FDF704F800222F4B2B
:1034D800FDF76AF804460D463046FCF7FBFF00226C
:1034E8002A4BFDF761F88046894602460B4620467E
:1034F8002946FCF7A1FE06460F460022244BFDF79D
:10350800E3FA00287FF41BAE11A3D3E90023304669
:103518003946FDF7BBFA00287FF42FAE304639460E
:10352800FDF7DCFA06460CE600230C4A13700C4A39
:10353800137035E70B4A13680133136040E700BF87
:10354800CDCCCCCCCCCCEC3F9A9999999999B93FF0
:103558000000000000408FC094030020A400002059
:10356800A80000207C03002000710200E80200206F
:103578003D0A83409C030020880300209803002014
:1035880084030020040000208C0300200000E03F9A
:1035980000408F4000000000774B02225A60774BB2
:1035A8001B68B3F57A7F5EDB2DE9F041744B1A682E
:1035B800744BA3FB02139B094FF47A7101FB13238D
:1035C8000BBB714C2068FCF797FF65A3D3E9002378
:1035D800FCF7EAFF06460F466C4B9889FDF7ACFBF3
:1035E8006B49FDF701FCFCF787FF5FA3D3E90023D4
:1035F800FCF7DAFF02460B4630463946FCF71EFE5A
:10360800FDF794FA2060614B5889624B1C68001BD7
:10361800FCF760FF56A3D3E90023FCF7C5FF00229F
:103628000023FDF733FA002852D1584B5889001B64
:10363800FCF750FF4EA3D3E90023FCF7B5FF0022A7
:10364800554BFDF741FA002852D1544B1B68052B06
:103658004ED8534B1B78002B4AD0524A536C43F434
:103668000043536449E00133444A1360474A908851
:103678004D490B68034403EBD3735B100B60D08890
:103688004A490B68034403EBD3735B100B60108843
:1036980047490B68034403EBD3735B100B605088F6
:1036A80044490B68034403EBD3735B100B605089E8
:1036B80038490B68034403EBD3735B100B60118923
:1036C8003D4A13680B4403EBD3735B1013607047D8
:1036D8002E4B5889001BFCF7FDFE25A3D3E90023D8
:1036E800FCF762FF0022354BFDF7D0F90028ACD07B
:1036F8002C4A536C23F400435364244B18892E4BF3
:103708001C68001BFCF7E6FE19A3D3E90023FCF7AD
:103718004BFF00220023FDF7B9F9002852D11B4BBB
:103728001889001BFCF7D6FE11A3D3E90023FCF788
:103738003BFF0022184BFDF7C7F9002852D1174B61
:103748001B68052B4ED8164B1B78002B4AD01C4AF9
:10375800536C43F40043536449E000BFAFF3008067
:10376800AE47E17A14AEEF3F7B14AE47E17A843F6F
:103778007B14AE47E17A943F00000240B800002075
:10378800AC000020D34D621008000020E8020020A1
:1037980017B9CE3C0C00002000002E400400002089
:1037A800B40000200034014014000020180000205C
:1037B8001C000020200000201000002000002EC067
:1037C800002C0140904B1889001BFCF783FE8CA34A
:1037D800D3E90023FCF7E8FE00228C4BFDF756F9ED
:1037E8000028ACD08A4A536C23F4004353648949B7
:1037F8008B6813F0200F0CBF012300238A6812F096
:10380800400F0CBF01220022896811F0800F0CBF05
:10381800012500258049886810F4806F0CBF0120BD
:1038280000208C6814F4006F0CBF01240024896800
:1038380011F4805F02EB450203EB4203774EF35C21
:1038480077490B600B6803F102030B600D68754B39
:1038580083FB0572A2EBE57202EB42024FEA4207D4
:10386800A5EB07020A600CBF02220022224400EBEB
:103878004202B05C6C4A1060106802301060106838
:1038880083FB0043A3EBE07303EB43035C00031BE0
:10389800136009685C488388644A12689A1AC38866
:1038A800634800681B1A052934D8DFE801F00323B0
:1038B80026292C2FD31A5F4A13605F4A13680133F5
:1038C80013605E4A14684CB35D4AA2FB0312120BE4
:1038D8005C4909680131B2FBF1F001FB1022EAB939
:1038E800B3FBF4F204FB1233EBB910215648FEF790
:1038F80000FC18E04F4B1A60DFE74E4B1A60DCE71C
:103908004C4A1360D9E74B4A1360D6E79B1A494AD9
:103918001360D2E7474B00221A60CEE7002210213D
:103928004948FEF7E0FB494BD3F800C03C4B1B6805
:10393800052B2BD8DFE803F00312171C2226CCF145
:10394800000064469C46424B1968374B1B68052BA0
:1039580052D8DFE803F01F3F43474B4E6446CCF193
:10396800000C0020EFE76046CCF1000C0024EAE7E9
:10397800CCF1000460464FF0000CE4E7CCF1000401
:103988000020E0E7CCF100000024DCE7002004463A
:103998008446D8E74E420F4619462C4B1B68002B2D
:1039A80040F398802B4B1D681D4B1B6805331D4A3F
:1039B80082FB03E2A2EBE37202EB42024FEA420E01
:1039C800A3EB0E02052A00F2B980DFE802F0456A8F
:1039D8006F74797E0F4649420026DEE70E4649425B
:1039E8000027DAE74F420E460021D6E74F4200266D
:1039F800D3E74E420027D0E7002637463146CCE7CA
:103A08007B14AE47E17A943FE802002000002EC004
:103A1800002C0140000C014000100140B446000891
:103A2800BC000020ABAAAA2AC00000201400002075
:103A380018000020B0000020AC000020A4000020E6
:103A48005917B7D1A800002000080140C400002081
:103A5800C8000020CC000020C5F10008AE4615467D
:103A6800654474444044964B1B68002B40F3D78050
:103A7800944B1B68944A126802F1050C934A82FB26
:103A88000CE2A2EBEC7202EB42024FEA420EACEB04
:103A98000E02052A00F2F980DFE802F058A8ADB25C
:103AA800B7BCAE466D424FF00008D9E7A8466D4254
:103AB8004FF0000ED4E7C5F1000EA8460025CFE769
:103AC800C5F1000E4FF00008CAE7C5F100084FF035
:103AD800000EC5E77E4B1D68C5F1000E7D4B1A68C8
:103AE80001327A4B83FB0283A3EBE27303EB4303BC
:103AF8004FEA4308A2EB0803052B1AD8DFE803F0C6
:103B08000323060A0E14A8461D46A9E7F0464FF0FF
:103B1800000EA5E7F046AE460025A1E72B46754600
:103B28009E464FF000089BE7A84675464FF0000EEA
:103B380096E74FF00008C646454691E74FF0000863
:103B4800C64645468CE74FF0000889E7C3F10008F0
:103B58009E461346194407EB0E0206EB080305F5CB
:103B68007A7540F2C676B54200F397800A2DB8BF41
:103B78000A25594E756304F57A7440F2C675AC424D
:103B880000F38E800A2CB8BF0A24534DAC6300F5AD
:103B98007A7040F2C674A04200F385800A28B8BF44
:103BA8000A204D4CE06301F57A7140F2C6708142FB
:103BB8007CDC0A29B8BF0A214848416302F57A72B9
:103BC80040F2C6718A4274DC0A2AB8BF0A22434905
:103BD8008A6303F57A7340F2C67293426CDC0A2B4F
:103BE800B8BF0A233D4AD363BDE8F0819E465B42D5
:103BF8004FF00008AEE798465B424FF0000EA9E789
:103C0800C3F1000E98460023A4E7C3F1000E4FF05D
:103C180000089FE7C3F100084FF0000E9AE7294B10
:103C28001B68C3F1000E284A12680132DFF89CC0F5
:103C38008CFB028CACEBE27C0CEB4C0C4FEA4C0896
:103C4800A2EB080CBCF1050F1AD8DFE80CF003232F
:103C5800060A0E14984663467CE7F0464FF0000EBD
:103C680078E7F0469E46002374E71A467346964660
:103C78004FF000086EE7984673464FF0000E69E76C
:103C88004FF00008C646434664E74FF00008C646B2
:103C980043465FE74FF000085CE740F2C67568E707
:103CA80040F2C67471E740F2C6707AE740F2C67116
:103CB80082E740F2C6728AE740F2C67392E700BF15
:103CC800C8000020D0000020C0000020ABAAAA2A0B
:103CD800CC000020BC00002000340140002C014032
:103CE800014B23F81010704704040020F0B587B08A
:103CF8001A4F64220021384600F090F818490A88C3
:103D0800B1F802C0888800B2CC8824B20D892DB2DF
:103D18004E8936B28B891BB2C98909B205910493C1
:103D280003960295019400900FFA8CF312B20D4994
:103D3800384600F07BF80C4B5B686BB90A4C23687B
:103D480023F0010323603846FCF76AFA6060E760F5
:103D5800236843F00103236007B0F0BDA0030020EF
:103D680004040020BC4600081C0002407047FEE71F
:103D7800FEE7FEE7FEE770477047704708B5FEF7B5
:103D880071FAFEF7ACF808BD002103E00B4B5B5855
:103D9800435004310A480B4B42189A42F6D30A4A58
:103DA80002E0002342F8043B084B9A42F9D3FEF79D
:103DB8008FFD00F00FF8FFF747F970472447000818
:103DC800000000208800002088000020180400203F
:103DD800FEE7000070B500250C4E0D4CA41BA41086
:103DE800A54209D100F040FC00250A4E0A4CA41B4C
:103DF800A410A54205D170BD56F825309847013565
:103E0800EEE756F8253098470135F2E71C470008D9
:103E18001C4700081C4700082047000803460244C6
:103E2800934200D1704703F8011BF9E70EB46FF015
:103E3800004100B59CB01DAB02900690079104911B
:103E48000848094953F8042B0591006802A9019311
:103E580000F066F80022029B1A701CB05DF804EBB3
:103E680003B07047240000200802FFFF2DE9F04747
:103E78008E6882469E420C469046994637D88A8973
:103E880012F4906F31D00223256809696F1A6569A9
:103E980005EB450595FBF3F509F101033B449D420C
:103EA80038BF1D46530530D5294600F035FB064678
:103EB80050B90C234FF0FF30CAF80030A38943F003
:103EC8004003A381BDE8F0873A46216900F0B4FABF
:103ED800A38923F4906343F08003A38126613E44C1
:103EE80026604E466561ED1BA5604E4500D94E46DD
:103EF80032464146206800F0AAFAA36800209B1BBE
:103F0800A36023681E442660DCE72A4600F05EFBB7
:103F180006460028E2D12169504600F0B1FAC8E708
:103F28002DE9F04F9DB003938B8980461D060C4602
:103F380016460FD50B696BB9402100F0EDFA2060E9
:103F4800206128B90C23C8F800304FF0FF30C7E0D3
:103F5800402363610023099320238DF829303023FF
:103F68004FF0010B8DF82A3037463D4615F8013BD6
:103F78000BB1252B3ED1B7EB060A0BD05346324680
:103F880021464046FFF772FF013000F0A480099BEC
:103F9800534409933B78002B00F09D8000234FF099
:103FA800FF32CDE90523049307938DF853301A9314
:103FB8002F46052217F8011B4F4800F02FFA049BE3
:103FC800D0B9D90644BF20228DF853201A0744BF20
:103FD8002B228DF853202A782A2A15D02F46002024
:103FE8000A25079A394611F8013B303B092B4DD970
:103FF800B8B10FE02F46B8E73F4A3D46801A0BFAA2
:1040080000F018430490D3E7039A111D1268039136
:10401800002A01DB079204E0524243F002030792B0
:1040280004933B782E2B0CD17B782A2B33D1039B1E
:1040380002371A1D1B680392002BB8BF4FF0FF33DD
:1040480005932E4D03223978284600F0E7F938B158
:104058004023401B03FA00F0049B013703430493F9
:104068003978062226487E1C8DF8281000F0D6F9EB
:10407800002838D0234B13BB039B073323F00703D7
:1040880008330393099B4B4409936DE705FB023200
:1040980001200F46A6E700230A2519460137059394
:1040A800384610F8012B303A092A03D9002BC8D01A
:1040B8000591C6E705FB012101230746F0E703AB9D
:1040C80000932246104B04A94046AFF30080B0F19C
:1040D800FF3F8146D6D1A3895B063FF536AF0998E5
:1040E8001DB0BDE8F08F03AB00932246064B04A930
:1040F800404600F081F8EAE7E8460008EE46000886
:10410800F246000800000000753E00082DE9F0475F
:1041180091461F468A680B6906469342B8BF134604
:10412800C9F8003091F843200C46DDF8208012B120
:104138000133C9F800302368990642BFD9F8003026
:104148000233C9F80030256815F0060507D104F1D7
:10415800190AE368D9F800209B1AAB4229DC94F8C5
:1041680043302268003318BF012392062ED404F18D
:10417800430239463046C047013021D02368E568FC
:1041880003F00603042B18BF0025D9F800204FF0D0
:10419800000908BFAD1AA368226908BF25EAE575BA
:1041A8009342C4BF9B1AED181A344D451AD100200A
:1041B80008E00123524639463046C047013003D152
:1041C8004FF0FF30BDE8F0870135C2E73020E11835
:1041D80081F843005A1C94F845102244023382F8AF
:1041E8004310C4E70123224639463046C047013010
:1041F800E6D009F10109D8E72DE9F04301F1430CB4
:104208000C46097E85B06E291746064698460C9AD4
:1042180000F0B38022D8632936D00AD8002900F0EC
:10422800B980582900F0838004F1420584F84210CF
:1042380032E0642901D06929F6D12068136805069F
:1042480003F104012AD51B681160002B03DA2D2223
:104258005B4284F843206F480A2239E0732900F052
:104268009D8008D86F2920D07029DDD1236843F0BC
:104278002003236003E0752917D07829D4D1782347
:10428800654884F8453055E0136804F14205191D66
:104298001B68116084F8423001238CE01B6810F021
:1042A800400F116018BF1BB2CFE713682568181DAF
:1042B8001060280601D51B6802E06806FBD51B883C
:1042C8006F2914BF0A2208225248002184F843109B
:1042D8006568002DA560C0F29580216821F0040171
:1042E8002160002B3DD1002D40F08E806546082AC4
:1042F8000BD12368DB0708D5236962689A42DEBFC1
:10430800302305F8013C05F1FF35ACEB05032361CB
:10431800CDF800803B4603AA21463046FFF7F6FE5B
:1043280001304DD14FF0FF3005B0BDE8F08339487A
:1043380084F84510136821681D1D1B6815600A065E
:104348000BD5CA0744BF41F0200121601BB9226880
:1043580022F0200222601022B7E74D0648BF9BB228
:10436800EFE76546B3FBF2F102FB1133C35C05F8D6
:10437800013D0B460029F5D1B9E713682568181DDA
:104388006169106028061B6801D5196002E06A0699
:10439800FBD51980002365462361B9E71368191D09
:1043A80011601D6862680021284600F037F808B1DE
:1043B800401B606063682361002384F84330A7E7EB
:1043C80023692A4639463046C0470130AAD02368B7
:1043D8009B0713D4E068039B9842B8BF1846A3E72D
:1043E80001234A4639463046C04701309AD0013544
:1043F800E368039A9B1AAB42F2DCEBE7002504F171
:104408001909F5E7002BACD1037804F1420584F8CB
:1044180042306CE7F94600080A47000810B5C9B2EF
:1044280002449042034601D1002303E01C78013086
:104438008C42F6D1184610BD10B5431E0A4491426D
:1044480000D110BD11F8014B03F8014FF7E788427E
:1044580010B501EB020307D8421E99420AD011F8A1
:10446800014B02F8014FF8E78342F5D98118D21AB7
:10447800D34200D110BD13F8014D01F8014DF7E703
:1044880038B50546002943D051F8043C0C1F002BD1
:10449800B8BFE41800F0D0F81E4A1368104633B9C4
:1044A800636014602846BDE8384000F0C6B8A342EF
:1044B8000BD921686218934201BF1A685B685218C9
:1044C800226063600460EDE713465A680AB1A242AD
:1044D800FAD919685818A0420BD120680144581815
:1044E80082421960DED110685268014419605A602E
:1044F800D8E702D90C232B60D4E7206821188A4218
:1045080001BF116852680918216062605C60C9E7E0
:1045180038BD00BFD400002070B5CD1C25F00305C0
:1045280008350C2D38BF0C25002D064601DBA942A5
:1045380003D90C233360002070BD00F07DF8214AB8
:104548001468214691B9204C23681BB9304600F005
:1045580063F820602946304600F05EF8431C24D1F9
:104568000C233046336000F068F8E4E70B685B1B07
:1045780018D40B2B0FD90B60CC18CD50304600F057
:104588005CF804F10B00231D20F00700C31AD3D0F8
:104598005A42E250D0E74B688C4216BF6360136002
:1045A8000C46EBE70C464968CCE7C41C24F003042E
:1045B800A04205D0211A304600F02EF80130CFD0A5
:1045C8002560DBE7D4000020D8000020F8B50746B6
:1045D80014460E4621B9BDE8F8401146FFF79CBFC6
:1045E80022B9FFF74DFF25462846F8BD00F026F80A
:1045F800A0420FD221463846FFF78EFF0546002815
:10460800F2D031462246FFF717FF31463846FFF70A
:1046180037FFE9E73546E7E738B50023054C054697
:104628000846236000F012F8431C02D1236803B146
:104638002B6038BD140400207047704751F8043CC3
:10464800181F002BBCBF0B58C0187047044A0549F7
:104658001368002B08BF0B461844106018467047B3
:10466800DC00002018040020F8B500BFF8BC08BC26
:104678009E467047F8B500BFF8BC08BC9E46704718
:1046880002030405060708090A0B0C0D0E0F10108B
:104698000102000000000000000000000102030405
:1046A80006070809000000000102030400000201D7
:1046B80004050300313A256920323A256920333A46
:1046C800256920343A256920353A256920363A2566
:1046D8006920373A256920383A25690D0A00000013
:1046E800232D302B2000686C4C00656667454647D3
:1046F8000030313233343536373839414243444556
:1047080046003031323334353637383961626364C4
:0447180065660000D2
:04471C000D02000882
:04472000E9010008A3
:1047240000A24A046400000000002042D0070000F8
:10473400D0070000D0070000D0070000D007000019
:10474400D007000028000020000000000000000046
:104754000000000000000000000000000000000055
:104764000000000000000000000000000000000045
:104774000000000000000000000000000000000035
:104784000000000000000000000000000000000025
:104794000000000000000000000000000000000015
:0847A40000000000000000000D
:0400000508003D9121
:102F88002C0100200028014010B50024094B1C70BA
:102F9800094B1C7005E0094B1C706420FFF770F9A1
:102FA8000134072CF7DD002220210548FFF79BF8A4
:102FB800FEE700BFAC000020B8000020A8000020F9
:102FC8000008014030B597B002250C9501231093F5
:102FD800102311931395002414944FF46013159340
:102FE8000CA8FEF703F90F230793089509944FF4EB
:102FF80080630A930B94294607A8FEF71DFB0195E9
:103008004FF44043039301A8FFF778F8FEF7D0FB8D
:10301800084BA3FB00308009FEF73AFF0420FEF7B7
:103028004DFF224621464FF0FF30FEF7F1FE17B064
:1030380030BD00BFD34D62102DE9F04F85B0FFF7CA
:10304800FFF8AB4CA36943F00103A361A36903F044
:1030580001030393039B0320FEF7C8FE00221146D9
:103068006FF00B00FEF7D4FE002211466FF00A0045
:10307800FEF7CEFE002211466FF00900FEF7C8FEEB
:10308800002211466FF00400FEF7C2FE002211462E
:103098006FF00300FEF7BCFE002211466FF001003E
:1030A800FEF7B6FE002211464FF0FF30FEF7B0FEE5
:1030B800FFF788FF636923F001036361FFF77AFC78
:1030C800FFF77AFDFFF770FEFFF704FFFFF726FC16
:1030D800012220218748FFF706F88748FFF7C0F943
:1030E8008648FFF7BDF9082405E0854B1C7064206D
:1030F800FFF7C6F8013C002CF7DA4FF0000A804BC6
:1031080083F800A0012204217E48FEF7ECFF7E4BE5
:10311800188AFDF711FE01907C4B01221A70D346E4
:1031280044E17B490A6801320A604BE14FF47A783E
:1031380032463B4620462946FDF780F804460D46B0
:103148000022744BFDF7C0FC88B963A3D3E90023C0
:1031580020462946FDF79AFC00285DD120462946DD
:10316800FDF7BCFC044604E0DFF8DC81E0E74FF43F
:103178007A740AF13203A34215DDAAF1320AA24594
:1031880011DA0BF1320343450DDDABF1320BC345C8
:1031980009DA614B1B68042B05D8604BC3F8008023
:1031A80063425F4A13605F4B1A685F4BA3FB0213CD
:1031B800DB0803EB830303EB83039A422ED002213F
:1031C8004C48FEF789FF30B1584B1B681BB9584B68
:1031D8001B68002B73D0574B1D6857492846FDF7CD
:1031E800A1FF20B1554B1B681333262B72D95449C4
:1031F8002846FDF797FF002800F0B0804E49284682
:10320800FDF7AEFF002800F0A9803D4B05221A709B
:103218004C4B06221A70ADE04B4CAAE70198FDF71B
:103228006BF92FA3D3E90023FDF7BEF906460F4635
:10323800354D288AFDF780FDFDF75EF92AA3D3E90D
:103248000023FDF7B1F902460B4630463946FCF734
:10325800F5FFFDF76BFC074601903C49FDF7BAFC0A
:103268003B49FDF7C1FD3B49FDF7B6FC0646414623
:10327800022000F001FD2146032000F0FDFCA98991
:10328800042000F0F9FC34492A4B1868FDF7ACFD1E
:10329800FDF770FF0146052000F0EEFC3846FDF70B
:1032A80069FF0146062000F0E7FC3046FDF762FFA3
:1032B8000146072000F0E0FC00F0E4FC7FE7134B38
:1032C80000221A7002210B48FEF706FF0028F9D1E8
:1032D800FFF75AFEFFF758FE0000000000408FC0BD
:1032E800AE47E17A14AEEF3F7B14AE47E17A843FF4
:1032F8000010024000080140780200202C01002044
:10330800A8000020000C0140EC020020B8000020BA
:103318009003002000408F4004000020CC000020D3
:10332800C8000020800300201F85EB51D400002036
:10333800D00000200C0000208FC221429C030020F6
:1033480000002842AC00002018FCFFFF00E0CE443B
:10335800083748BE33330F420000C842664B1B682B
:1033680013F1320F80F2AD80644B05221A70644B62
:1033780001221A7084EAE473A3EBE473322B06DCAF
:1033880088EAE873A3EBE873322B40F3A0805D4B27
:1033980000221A605B4B1A685B4B9A4200F29C80D1
:1033A8005A4A136801331360A246C3460520FEF744
:1033B80067FF574B1B68012B3FF4B3AE55490A68AA
:1033C800013A0A60534A176887EAE772A2EBE77284
:1033D800B2F5967F02DD5B424D4A13604E4B0022E8
:1033E8001A60DFF84481D8F80000FDF773F83CA3B1
:1033F800D3E90023FDF7D8F804460D46474B186873
:10340800FDF768F838A3D3E90023FDF7CDF80246A5
:103418000B4620462946FCF711FFFDF75FFB0646E1
:10342800C8F80000DFF8D080D8F80000FDF752F89F
:103438002BA3D3E90023FDF7B7F804460D46384619
:10344800FDF748F828A3D3E90023FDF7ADF80246B5
:103458000B4620462946FCF7F1FEFDF73FFBC8F86E
:103468000000FDF737F800222D4BFDF79DF80446C4
:103478000D463046FDF72EF80022294BFDF794F84B
:1034880006460F4602460B4620462946FCF7D4FE60
:10349800804689460022234BFDF716FB00287FF45F
:1034A80045AE13A3D3E9002340464946FDF7EEFA9B
:1034B80000287FF459AE40464946FDF70FFB804689
:1034C80036E600230D4A13700D4A137052E70D4A71
:1034D8001368013313605DE7FFF756FDAFF3008013
:1034E800666666666666EE3F9A9999999999A93FC4
:1034F8000000000000408FC09C030020A8000020AE
:10350800AC000020840300208038010080030020E4
:10351800080000209003002004000020A4030020DD
:103528000000E03F00408F409403002000000000AE
:10353800774B02225A60774B1B68B3F57A7F5EDBC4
:103548002DE9F041744B1A68744BA3FB02139B09D5
:103558004FF47A7101FB13230BBB714C2068FCF705
:10356800CBFF65A3D3E90023FDF71EF806460F46F7
:103578006C4B9889FDF7E0FB6B49FDF735FCFCF7D0
:10358800BBFF5FA3D3E90023FDF70EF802460B4605
:1035980030463946FCF752FEFDF7C8FA2060614B09
:1035A8005889624B1C68001BFCF794FF56A3D3E9AB
:1035B8000023FCF7F9FF00220023FDF767FA002833
:1035C80052D1584B5889001BFCF784FF4EA3D3E90E
:1035D8000023FCF7E9FF0022554BFDF775FA002898
:1035E80052D1544B1B68052B4ED8534B1B78002BDC
:1035F8004AD0524A536C43F40043536449E00133C0
:10360800444A1360474A90884D490B68034403EBCA
:10361800D3735B100B60D0884A490B68034403EBF3
:10362800D3735B100B60108847490B68034403EBA6
:10363800D3735B100B60508844490B68034403EB59
:10364800D3735B100B60508938490B68034403EB54
:10365800D3735B100B6011893D4A13680B4403EB6D
:10366800D3735B10136070472E4B5889001BFCF70F
:1036780031FF25A3D3E90023FCF796FF0022354B41
:10368800FDF704FA0028ACD02C4A536C23F400430D
:103698005364244B18892E4B1C68001BFCF71AFF37
:1036A80019A3D3E90023FCF77FFF00220023FDF7CD
:1036B800EDF9002852D11B4B1889001BFCF70AFFB3
:1036C80011A3D3E90023FCF76FFF0022184BFDF785
:1036D800FBF9002852D1174B1B68052B4ED8164B07
:1036E8001B78002B4AD01C4A536C43F400435364A4
:1036F80049E000BFAFF30080AE47E17A14AEEF3F78
:103708007B14AE47E17A843F7B14AE47E17A943F5D
:1037180000000240BC000020B0000020D34D621021
:103728000C000020EC02002017B9CE3C100000204D
:1037380000002E4004000020B800002000340140A2
:10374800180000201C000020200000202400002079
:103758001400002000002EC0002C0140904B188956
:10376800001BFCF7B7FE8CA3D3E90023FCF71CFF72
:1037780000228C4BFDF78AF90028ACD08A4A536C9A
:1037880023F40043536489498B6813F0200F0CBF5E
:10379800012300238A6812F0400F0CBF0122002287
:1037A800896811F0800F0CBF0125002580498868C1
:1037B80010F4806F0CBF012000208C6814F4006F97
:1037C8000CBF01240024896811F4805F02EB4502D4
:1037D80003EB4203774EF35C77490B600B6803F108
:1037E80002030B600D68754B83FB0572A2EBE57253
:1037F80002EB42024FEA4207A5EB07020A600CBF40
:1038080002220022224400EB4202B05C6C4A1060A3
:10381800106802301060106883FB0043A3EBE0736C
:1038280003EB43035C00031B136009685C4883884F
:10383800644A12689A1AC388634800681B1A0529E3
:1038480034D8DFE801F0032326292C2FD31A5F4A46
:1038580013605F4A1368013313605E4A14684CB3FF
:103868005D4AA2FB0312120B5C4909680131B2FBE5
:10387800F1F001FB1022EAB9B3FBF4F204FB1233B6
:10388800EBB910215648FEF734FC18E04F4B1A608C
:10389800DFE74E4B1A60DCE74C4A1360D9E74B4A26
:1038A8001360D6E79B1A494A1360D2E7474B0022B8
:1038B8001A60CEE7002210214948FEF714FC494B54
:1038C800D3F800C03C4B1B68052B2BD8DFE803F06E
:1038D8000312171C2226CCF1000064469C46424B7A
:1038E8001968374B1B68052B52D8DFE803F01F3FD8
:1038F80043474B4E6446CCF1000C0020EFE760468E
:10390800CCF1000C0024EAE7CCF1000460464FF04B
:10391800000CE4E7CCF100040020E0E7CCF1000063
:103928000024DCE7002004468446D8E74E420F46D0
:1039380019462C4B1B68002B40F398802B4B1D68B5
:103948001D4B1B6805331D4A82FB03E2A2EBE372A1
:1039580002EB42024FEA420EA3EB0E02052A00F2E6
:10396800B980DFE802F0456A6F74797E0F464942F4
:103978000026DEE70E4649420027DAE74F420E46A8
:103988000021D6E74F420026D3E74E420027D0E772
:10399800002637463146CCE77B14AE47E17A943FA0
:1039A800EC02002000002EC0002C0140000C014059
:1039B800001001404C460008C0000020ABAAAA2A0B
:1039C800C4000020180000201C000020B4000020C3
:1039D800B0000020A80000205917B7D1AC00002083
:1039E80000080140C8000020CC000020D0000020C2
:1039F800C5F10008AE461546654474444044964BEC
:103A08001B68002B40F3D780944B1B68944A1268BC
:103A180002F1050C934A82FB0CE2A2EBEC7202EB7A
:103A280042024FEA420EACEB0E02052A00F2F98080
:103A3800DFE802F058A8ADB2B7BCAE466D424FF011
:103A48000008D9E7A8466D424FF0000ED4E7C5F14B
:103A5800000EA8460025CFE7C5F1000E4FF000087C
:103A6800CAE7C5F100084FF0000EC5E77E4B1D6898
:103A7800C5F1000E7D4B1A6801327A4B83FB028335
:103A8800A3EBE27303EB43034FEA4308A2EB0803FB
:103A9800052B1AD8DFE803F00323060A0E14A846FC
:103AA8001D46A9E7F0464FF0000EA5E7F046AE46E2
:103AB8000025A1E72B4675469E464FF000089BE778
:103AC800A84675464FF0000E96E74FF00008C64628
:103AD800454691E74FF00008C64645468CE74FF04B
:103AE800000889E7C3F100089E461346194407EB0E
:103AF8000E0206EB080305F57A7540F2C676B54264
:103B080000F397800A2DB8BF0A25594E756304F54E
:103B18007A7440F2C675AC4200F38E800A2CB8BFA6
:103B28000A24534DAC6300F57A7040F2C674A04283
:103B380000F385800A28B8BF0A204D4CE06301F5E0
:103B48007A7140F2C67081427CDC0A29B8BF0A212A
:103B58004848416302F57A7240F2C6718A4274DCC1
:103B68000A2AB8BF0A2243498A6303F57A7340F2E6
:103B7800C67293426CDC0A2BB8BF0A233D4AD36352
:103B8800BDE8F0819E465B424FF00008AEE79846DC
:103B98005B424FF0000EA9E7C3F1000E98460023E0
:103BA800A4E7C3F1000E4FF000089FE7C3F1000837
:103BB8004FF0000E9AE7294B1B68C3F1000E284A04
:103BC80012680132DFF89CC08CFB028CACEBE27C03
:103BD8000CEB4C0C4FEA4C08A2EB080CBCF1050F9F
:103BE8001AD8DFE80CF00323060A0E149846634639
:103BF8007CE7F0464FF0000E78E7F0469E4600233B
:103C080074E71A46734696464FF000086EE79846E2
:103C180073464FF0000E69E74FF00008C64643466A
:103C280064E74FF00008C64643465FE74FF00008D8
:103C38005CE740F2C67568E740F2C67471E740F287
:103C4800C6707AE740F2C67182E740F2C6728AE728
:103C580040F2C67392E700BFCC000020D4000020D9
:103C6800C4000020ABAAAA2AD0000020C00000206F
:103C780000340140002C0140014B23F8101070471C
:103C88000C040020F0B587B01A4F64220021384692
:103C980000F090F818490A88B1F802C0888800B284
:103CA800CC8824B20D892DB24E8936B28B891BB2CD
:103CB800C98909B20591049303960295019400906D
:103CC8000FFA8CF312B20D49384600F07BF80C4B12
:103CD8005B686BB90A4C236823F0010323603846FC
:103CE800FCF79EFA6060E760236843F001032360F5
:103CF80007B0F0BDA80300200C04002054460008BB
:103D08001C0002407047FEE7FEE7FEE7FEE770474B
:103D18007047704708B5FEF7A5FAFEF7E0F808BD4A
:103D2800002103E00B4B5B58435004310A480B4B0E
:103D380042189A42F6D30A4A02E0002342F8043BAA
:103D4800084B9A42F9D3FEF7C3FD00F00FF8FFF7CE
:103D580073F97047BC460008000000208C00002062
:103D68008C00002020040020FEE7000070B500252C
:103D78000C4E0D4CA41BA410A54209D100F040FC28
:103D880000250A4E0A4CA41BA410A54205D170BDFB
:103D980056F8253098470135EEE756F8253098470C
:103DA8000135F2E7B4460008B4460008B4460008F6
:103DB800B846000803460244934200D1704703F80E
:103DC800011BF9E70EB46FF0004100B59CB01DABC4
:103DD80002900690079104910848094953F8042B6A
:103DE8000591006802A9019300F066F80022029B81
:103DF8001A701CB05DF804EB03B07047280000206F
:103E08000802FFFF2DE9F0478E6882469E420C4665
:103E18009046994637D88A8912F4906F31D0022398
:103E2800256809696F1A656905EB450595FBF3F582
:103E380009F101033B449D4238BF1D46530530D567
:103E4800294600F035FB064650B90C234FF0FF30E9
:103E5800CAF80030A38943F04003A381BDE8F08786
:103E68003A46216900F0B4FAA38923F4906343F039
:103E78008003A38126613E4426604E466561ED1BA2
:103E8800A5604E4500D94E4632464146206800F0AE
:103E9800AAFAA36800209B1BA36023681E4426601F
:103EA800DCE72A4600F05EFB06460028E2D12169DD
:103EB800504600F0B1FAC8E72DE9F04F9DB00393E2
:103EC8008B8980461D060C4616460FD50B696BB9C3
:103ED800402100F0EDFA2060206128B90C23C8F8D1
:103EE80000304FF0FF30C7E040236361002309939F
:103EF80020238DF8293030234FF0010B8DF82A301C
:103F080037463D4615F8013B0BB1252B3ED1B7EBA3
:103F1800060A0BD05346324621464046FFF772FF49
:103F2800013000F0A480099B534409933B78002B8F
:103F380000F09D8000234FF0FF32CDE90523049364
:103F480007938DF853301A932F46052217F8011B53
:103F58004F4800F02FFA049BD0B9D90644BF20225D
:103F68008DF853201A0744BF2B228DF853202A7846
:103F78002A2A15D02F4600200A25079A394611F813
:103F8800013B303B092B4DD9B8B10FE02F46B8E7BC
:103F98003F4A3D46801A0BFA00F018430490D3E7D5
:103FA800039A111D12680391002A01DB079204E0AD
:103FB800524243F00203079204933B782E2B0CD114
:103FC8007B782A2B33D1039B02371A1D1B68039277
:103FD800002BB8BF4FF0FF3305932E4D03223978DD
:103FE800284600F0E7F938B14023401B03FA00F0F7
:103FF800049B0137034304933978062226487E1C24
:104008008DF8281000F0D6F9002838D0234B13BBC0
:10401800039B073323F0070308330393099B4B449F
:1040280009936DE705FB023201200F46A6E700233E
:104038000A25194601370593384610F8012B303AFE
:10404800092A03D9002BC8D00591C6E705FB012131
:1040580001230746F0E703AB00932246104B04A95F
:104068004046AFF30080B0F1FF3F8146D6D1A38927
:104078005B063FF536AF09981DB0BDE8F08F03AB7E
:1040880000932246064B04A9404600F081F8EAE76F
:1040980080460008864600088A460008000000009E
:1040A8000D3E00082DE9F04791461F468A680B69C6
:1040B80006469342B8BF1346C9F8003091F843202A
:1040C8000C46DDF8208012B10133C9F800302368AE
:1040D800990642BFD9F800300233C9F80030256884
:1040E80015F0060507D104F1190AE368D9F800208C
:1040F8009B1AAB4229DC94F843302268003318BF7E
:10410800012392062ED404F1430239463046C047B3
:10411800013021D02368E56803F00603042B18BF9B
:104128000025D9F800204FF0000908BFAD1AA36890
:10413800226908BF25EAE5759342C4BF9B1AED18AA
:104148001A344D451AD1002008E001235246394659
:104158003046C047013003D14FF0FF30BDE8F0874B
:104168000135C2E73020E11881F843005A1C94F861
:1041780045102244023382F84310C4E70123224643
:1041880039463046C0470130E6D009F10109D8E781
:104198002DE9F04301F1430C0C46097E85B06E29E8
:1041A8001746064698460C9A00F0B38022D8632931
:1041B80036D00AD8002900F0B980582900F0838049
:1041C80004F1420584F8421032E0642901D06929DB
:1041D800F6D120681368050603F104012AD51B6887
:1041E8001160002B03DA2D225B4284F843206F48CC
:1041F8000A2239E0732900F09D8008D86F2920D061
:104208007029DDD1236843F02003236003E075297A
:1042180017D07829D4D17823654884F8453055E0FB
:10422800136804F14205191D1B68116084F84230B7
:1042380001238CE01B6810F0400F116018BF1BB2FF
:10424800CFE713682568181D1060280601D51B687C
:1042580002E06806FBD51B886F2914BF0A220822D2
:104268005248002184F843106568002DA560C0F20B
:104278009580216821F004012160002B3DD1002D9B
:1042880040F08E806546082A0BD12368DB0708D5E5
:10429800236962689A42DEBF302305F8013C05F1C4
:1042A800FF35ACEB05032361CDF800803B4603AA3C
:1042B80021463046FFF7F6FE01304DD14FF0FF3072
:1042C80005B0BDE8F083394884F8451013682168C3
:1042D8001D1D1B6815600A060BD5CA0744BF41F0AF
:1042E800200121601BB9226822F0200222601022DE
:1042F800B7E74D0648BF9BB2EFE76546B3FBF2F15F
:1043080002FB1133C35C05F8013D0B460029F5D1CA
:10431800B9E713682568181D6169106028061B68CD
:1043280001D5196002E06A06FBD5198000236546AD
:104338002361B9E71368191D11601D6862680021BF
:10434800284600F037F808B1401B606063682361B5
:10435800002384F84330A7E723692A4639463046C4
:10436800C0470130AAD023689B0713D4E068039B99
:104378009842B8BF1846A3E701234A463946304653
:10438800C04701309AD00135E368039A9B1AAB42C3
:10439800F2DCEBE7002504F11909F5E7002BACD1B5
:1043A800037804F1420584F842306CE7914600082E
:1043B800A246000810B5C9B202449042034601D192
:1043C800002303E01C7801308C42F6D1184610BD5A
:1043D80010B5431E0A44914200D110BD11F8014B9B
:1043E80003F8014FF7E7884210B501EB020307D83D
:1043F800421E99420AD011F8014B02F8014FF8E722
:104408008342F5D98118D21AD34200D110BD13F8CE
:10441800014D01F8014DF7E738B50546002943D0AD
:1044280051F8043C0C1F002BB8BFE41800F0D0F87A
:104438001E4A1368104633B9636014602846BDE805
:10444800384000F0C6B8A3420BD9216862189342DD
:1044580001BF1A685B685218226063600460EDE768
:1044680013465A680AB1A242FAD919685818A042E4
:104478000BD120680144581882421960DED11068B7
:104488005268014419605A60D8E702D90C232B609E
:10449800D4E7206821188A4201BF116852680918B8
:1044A800216062605C60C9E738BD00BFD8000020A9
:1044B80070B5CD1C25F0030508350C2D38BF0C252B
:1044C800002D064601DBA94203D90C2333600020E6
:1044D80070BD00F07DF8214A1468214691B9204C3E
:1044E80023681BB9304600F063F82060294630463F
:1044F80000F05EF8431C24D10C233046336000F0F2
:1045080068F8E4E70B685B1B18D40B2B0FD90B601A
:10451800CC18CD50304600F05CF804F10B00231D98
:1045280020F00700C31AD3D05A42E250D0E74B68B4
:104538008C4216BF636013600C46EBE70C46496873
:10454800CCE7C41C24F00304A04205D0211A30464D
:1045580000F02EF80130CFD02560DBE7D80000202E
:10456800DC000020F8B5074614460E4621B9BDE820
:10457800F8401146FFF79CBF22B9FFF74DFF2546CB
:104588002846F8BD00F026F8A0420FD2214638464A
:10459800FFF78EFF05460028F2D031462246FFF786
:1045A80017FF31463846FFF737FFE9E73546E7E7B3
:1045B80038B50023054C05460846236000F012F87C
:1045C800431C02D1236803B12B6038BD1C040020B2
:1045D8007047704751F8043C181F002BBCBF0B589C
:1045E800C0187047044A05491368002B08BF0B46DA
:1045F8001844106018467047E0000020200400208E
:10460800F8B500BFF8BC08BC9E467047F8B500BFB7
:08461800F8BC08BC9E46704787
:1046200002030405060708090A0B0C0D0E0F1010F3
:10463000010200000000000000000000010203046D
:10464000060708090000000001020304000002013F
:1046500004050300313A256920323A256920333AAE
:10466000256920343A256920353A256920363A25CE
:104670006920373A256920383A25690D0A0000007B
:10468000232D302B2000686C4C006566674546473B
:1046900000303132333435363738394142434445BE
:1046A000460030313233343536373839616263642D
:0446B000656600003B
:0446B4000D020008EB
:0446B800E90100080C
:1046BC0000A24A0464000000010000000000404217
:1046CC00D0070000D0070000D0070000D007000082
:1046DC00D0070000D00700002C00002000000000D4
:1046EC0000000000000000000000000000000000BE
:1046FC0000000000000000000000000000000000AE
:10470C00000000000000000000000000000000009D
:10471C00000000000000000000000000000000008D
:10472C00000000000000000000000000000000007D
:0C473C0000000000000000000000000071
:0400000508003D2989
:00000001FF