From: Erik Andresen Date: Wed, 31 May 2017 18:27:22 +0000 (+0200) Subject: avr/nano: add third srf05 X-Git-Url: https://defiant.homedns.org/gitweb/?a=commitdiff_plain;h=ed122a75c49ea77b0bcf8e33e1be03e4eecd36a7;p=ros_wild_thumper.git avr/nano: add third srf05 --- diff --git a/avr/nano/main.c b/avr/nano/main.c index 51cd145..5ba3082 100644 --- a/avr/nano/main.c +++ b/avr/nano/main.c @@ -14,16 +14,21 @@ * 0x02 Distance left LSB * 0x03 Distance right MSB * 0x04 Distance right LSB - * 0x05 Distance forward MSB - * 0x06 Distance forward LSB + * 0x05 Distance forward1 MSB + * 0x06 Distance forward1 LSB * 0x07 Distance backward MSB * 0x08 Distance backward LSB - * 0x15 Distance forward MSB (read only) - * 0x16 Distance forward LSB (read only) - * 0x17 Distance backward MSB (read only) - * 0x18 Distance backward LSB (read only) * 0x09 Voltage MSB * 0x0A Voltage LSB + * 0x0B Distance forward2 MSB + * 0x0C Distance forward2 LSB + * + * 0x15 Distance forward1 MSB (read only) + * 0x16 Distance forward1 LSB (read only) + * 0x17 Distance backward MSB (read only) + * 0x18 Distance backward LSB (read only) + * 0x19 Distance forward2 MSB (read only) + * 0x1A Distance forward2 LSB (read only) * * 0xff Bootloader */ @@ -37,11 +42,14 @@ static volatile uint8_t ireg=0; static volatile uint8_t bootloader=0; static volatile uint16_t dist_left=0; static volatile uint16_t dist_right=0; -static volatile uint16_t dist_forward=0; +static volatile uint16_t dist_forward1=0; +static volatile uint16_t dist_forward2=0; static volatile uint16_t dist_backward=0; -static volatile uint8_t start_dist_fwd=0; +static volatile uint8_t start_dist_fwd1=0; +static volatile uint8_t start_dist_fwd2=0; static volatile uint8_t start_dist_bwd=0; static volatile uint16_t voltage=0; +static volatile uint8_t pind_pre=0; ISR(TWI_vect) { @@ -58,8 +66,9 @@ ISR(TWI_vect) case 0x00: // register select ireg = TWDR; - if (ireg == 0x05) start_dist_fwd=1; + if (ireg == 0x05) start_dist_fwd1=1; if (ireg == 0x07) start_dist_bwd=1; + if (ireg == 0x09) start_dist_fwd2=1; ireg--; // because we do ireg++ below TWI_ACK; @@ -92,12 +101,12 @@ ISR(TWI_vect) TWDR = tmp16; TWI_ACK; break; - case 0x05: // Distance forward MSB - tmp16 = dist_forward; + case 0x05: // Distance forward1 MSB + tmp16 = dist_forward1; TWDR = tmp16>>8; TWI_ACK; break; - case 0x06: // Distance forward LSB + case 0x06: // Distance forward1 LSB TWDR = tmp16; TWI_ACK; break; @@ -110,12 +119,30 @@ ISR(TWI_vect) TWDR = tmp16; TWI_ACK; break; - case 0x15: // Distance forward MSB - tmp16 = dist_forward; + case 0x09: // Voltage MSB + tmp16 = voltage; + TWDR = tmp16>>8; + TWI_ACK; + break; + case 0x0A: // Voltage LSB + TWDR = tmp16; + TWI_ACK; + break; + case 0x0B: // Distance forward2 MSB + tmp16 = dist_forward2; TWDR = tmp16>>8; TWI_ACK; break; - case 0x16: // Distance forward LSB + case 0x0C: // Distance forward2 LSB + TWDR = tmp16; + TWI_ACK; + break; + case 0x15: // Distance forward1 MSB + tmp16 = dist_forward1; + TWDR = tmp16>>8; + TWI_ACK; + break; + case 0x16: // Distance forward1 LSB TWDR = tmp16; TWI_ACK; break; @@ -128,12 +155,12 @@ ISR(TWI_vect) TWDR = tmp16; TWI_ACK; break; - case 0x09: // Voltage MSB - tmp16 = voltage; + case 0x19: // Distance forward2 MSB + tmp16 = dist_forward2; TWDR = tmp16>>8; TWI_ACK; break; - case 0x0A: // Voltage LSB + case 0x1A: // Distance forward2 LSB TWDR = tmp16; TWI_ACK; break; @@ -208,9 +235,9 @@ ISR(INT0_vect) { t_start = t_now; } else { t_diff = t_now - t_start; - dist_forward = t_diff*2.7586 + 0.5; // t [µs] / 580 = mm + dist_forward1 = t_diff*2.7586 + 0.5; // t [µs] / 580 = mm // disable this interrupt - EIMSK |= (1 << INT0); + EIMSK &= ~(1 << INT0); } } @@ -227,11 +254,34 @@ ISR(INT1_vect) { t_diff = t_now - t_start; dist_backward = t_diff*2.7586 + 0.5; // t [µs] / 580 = mm // disable this interrupt - EIMSK |= (1 << INT1); + EIMSK &= ~(1 << INT1); } } +ISR(PCINT2_vect) { + uint8_t pind_cur = PIND; + + if ((pind_cur ^ pind_pre) & (1<<4)) { // PCINT20 + static uint16_t t_start=0; + uint16_t t_now = TCNT1; + uint16_t t_diff; + + if (bit_is_set(pind_cur, 4)) { // high level + // start timer + t_start = t_now; + } else { + t_diff = t_now - t_start; + dist_forward2 = t_diff*2.7586 + 0.5; // t [µs] / 580 = mm + // disable this interrupt + PCMSK2 &= ~(1 << PCINT20); + } + } + + pind_pre = pind_cur; +} + + int main(void) { bootloader = 0x00; setup_uart(9600); @@ -247,6 +297,7 @@ int main(void) { // External Interrupts EICRA = (1 << ISC10) | (1 << ISC00); + PCICR = (1 << PCIE2); printf("\r\nStart\r\n"); @@ -274,9 +325,9 @@ int main(void) { break; } - if (start_dist_fwd) { - start_dist_fwd = 0; - dist_forward = 0; + if (start_dist_fwd1) { + start_dist_fwd1 = 0; + dist_forward1 = 0; DDRD |= (1 << 2); PORTD |= (1 << 2); @@ -284,6 +335,7 @@ int main(void) { PORTD &= ~(1 << 2); DDRD &= ~(1 << 2); // wait for interrupt + EIFR &= (1 << INTF0); // clear old interrupt before enabling EIMSK |= (1 << INT0); } if (start_dist_bwd) { @@ -296,8 +348,23 @@ int main(void) { PORTD &= ~(1 << 3); DDRD &= ~(1 << 3); // wait for interrupt + EIFR &= (1 << INTF1); // clear old interrupt before enabling EIMSK |= (1 << INT1); } + if (start_dist_fwd2) { + start_dist_fwd2 = 0; + dist_forward2 = 0; + + // PD4 = PCINT20 + DDRD |= (1 << 4); + PORTD |= (1 << 4); + _delay_us(10); + PORTD &= ~(1 << 4); + DDRD &= ~(1 << 4); + // wait for interrupt + pind_pre = PIND; + PCMSK2 |= (1 << PCINT20); + } sleep_mode(); } diff --git a/avr/nano/main.hex b/avr/nano/main.hex index eb18ba2..364e7b3 100644 --- a/avr/nano/main.hex +++ b/avr/nano/main.hex @@ -1,289 +1,313 @@ -:100000000C9458000C943F010C948A010C947500D8 -:100010000C9475000C9475000C9475000C9475008C -:100020000C9475000C9475000C9475000C9475007C -:100030000C9475000C9475000C9475000C9475006C -:100040000C9475000C9475000C94D5010C947500FB -:100050000C9475000C9475000C9475000C9475004C -:100060000C9477000C947500C600E500CB00E50009 -:10007000D600E500DB00E500E000E500EB00EB006A -:10008000EB00EB00EB00EB00EB00EB00EB00EB0018 -:10009000D600E500DB00E5004546476566670020C1 -:1000A0002B2D2E3031323334353637383968000055 -:1000B00011241FBECFEFD8E0DEBFCDBF11E0A0E01E -:1000C000B1E0E4EEF1E102C005900D92A031B1077C -:1000D000D9F721E0A0E1B1E001C01D92A939B20732 -:1000E000E1F70E94DE020C94F0080C9400001F92CD -:1000F0000F920FB60F9211248F939F93AF93BF93DC -:10010000EF93FF938091B900887F803879F048F4AD -:10011000803609F06BC085EC8093BC0010922301FF -:100120006DC0883A39F1883B29F160C08091230184 -:10013000882341F08F3F09F050C08091BB0080932D -:1001400022014BC08091BB00809323018091230149 -:10015000853019F481E08093190180912301873063 -:1001600019F481E0809318018091230181508093DC -:1001700023012FC08091230190E0FC013197E831E9 -:10018000F10548F5EC5CFF4F0C946B068091200163 -:100190009091210104C080911E0190911F018093D4 -:1001A0001401909315019093BB0013C080911C0122 -:1001B00090911D01F4CF80911A0190911B01EFCF16 -:1001C0008091160190911701EACF809114018093DC -:1001D000BB0085EC03C01092BB0085E88093BC0097 -:1001E000809123018F5F8093230108C08091BC0020 -:1001F0008B7E8093BC0085EC8093BC00FF91EF91D7 -:10020000BF91AF919F918F910F900FBE0F901F9054 -:10021000189593E890937A0080937C0080917C00FD -:10022000806480937C0080917A00806480937A005F -:1002300080917A0086FDFCCF8091780090917900C2 -:1002400045E080E090E020917A00206420937A00DD -:1002500020917A0026FDFCCF209178003091790022 -:10026000820F931F415079F720917A002F772093C6 -:100270007A0065E070E00E943806CB0108951F9275 -:100280000F920FB60F9211242F933F934F935F93CA -:100290006F937F938F939F93AF93BF93EF93FF934E -:1002A00080918400909185004A9B05C09093130132 -:1002B000809312011EC02091120130911301BC01E4 -:1002C000621B730B80E090E00E94470527EE3CE83C -:1002D00040E350E40E94D50520E030E040E05FE3D9 -:1002E0000E94B7040E941B0570931D0160931C01BE -:1002F000E89AFF91EF91BF91AF919F918F917F917C -:100300006F915F914F913F912F910F900FBE0F9082 -:100310001F9018951F920F920FB60F9211242F93D2 -:100320003F934F935F936F937F938F939F93AF937D -:10033000BF93EF93FF9380918400909185004B9B36 -:1003400005C090931101809310011EC020911001EF -:1003500030911101BC01621B730B80E090E00E94A0 -:10036000470527EE3CE840E350E40E94D50520E035 -:1003700030E040E05FE30E94B7040E941B057093E9 -:100380001B0160931A01E99AFF91EF91BF91AF9120 -:100390009F918F917F916F915F914F913F912F919D -:1003A0000F900FBE0F901F9018951F920F920FB6CF -:1003B0000F9211248F939F93EF93FF938091C0002E -:1003C00087FF17C0E0912601F09127018091C600B8 -:1003D000808381E0EB38F80730F43196F093270101 -:1003E000E093260106C088E291E090932701809374 -:1003F0002601FF91EF919F918F910F900FBE0F906B -:100400001F9018959C01E1ECF0E080818861808369 -:10041000808180688083E2ECF0E080818660808368 -:1004200040E050E084E0220F331F441F551F8A959F -:10043000D1F760E074E284EF90E00E944C06DA01AC -:10044000C9010197A109B109892F9A2FAB2FBB27A9 -:10045000A7FDBA958093C50021502093C40088E27F -:1004600091E090932501809324019093270180933C -:10047000260108952091C00025FFFCCFFC0180815A -:100480008093C6000895CF93DF931F92CDB7DEB758 -:100490008983CE0101960E943A0280E090E00F909D -:1004A000DF91CF910895CF93DF93EC01CE01219698 -:1004B000FC012081222319F00E943A02F7CFDF913C -:1004C000CF9108958091C00087FFFCCF8091C60036 -:1004D00090E008950C9462026AE672E083E492E090 -:1004E0000C949E06CF93DF93FC01E253FF4FA08153 -:1004F000B181EC01C453DF4F28813981A217B307C2 -:10050000B9F02091C00025FF13C02C912093C600A4 -:1005100020813181AC0145535F4F2417350718F412 -:100520002F5F3F4F03C09C0128593F4F31832083E9 -:10053000E0912401F09125012091260130912701BD -:100540002E173F07C1F1DC01AC59BF4FCD91DC91B3 -:100550001197208128836D917C9111979C012B52DA -:100560003F4FE9013881EB012881321307C09C011C -:100570002C523F4FE90148814F5F48839C012D5920 -:100580003F4F6217730728F4EB012196CD93DC935C -:1005900002C08D939C93D1E0EB38FD0730F4319687 -:1005A000F0932501E093240106C088E291E0909346 -:1005B000250180932401DF91CF91089510922201AB -:1005C00080E895E20E9402020E946C0282E580931C -:1005D000BA008091BC008B7E8093BC0085EC809338 -:1005E000BC001092800084E08093810085E08093BD -:1005F000690086E091E00E941B0783B7817F83BF7B -:100600007894C0E0D8E180912301833081F050F4E8 -:10061000813089F580E00E94090190932101809347 -:10062000200129C0893059F08F3FF1F024C081E0CA -:100630000E94090190931F0180931E011CC082E05B -:100640000E940901BC0180E090E00E94470528E477 -:1006500031EE4AEB5FE30E94D5050E941B057093C3 -:1006600017016093160107C080912201853A19F4A1 -:10067000F894FE01099580911901882379F0109270 -:10068000190110921D0110921C01529A5A9AF5E319 -:10069000FA95F1F700005A985298E89A809118015B -:1006A000882379F01092180110921B0110921A0100 -:1006B000539A5B9A85E38A95F1F700005B9853980B -:1006C000E99A83B7816083BF889583B78E7F83BFA4 -:1006D0009ACF6F927F929F92AF92BF92CF92DF920A -:1006E000EF92FF920F931F93CF93DF93CDB7DEB7B7 -:1006F0002C970FB6F894DEBF0FBECDBF8C017B01E7 -:100700003A01FC0117821682838181FF19C1CE0153 -:1007100001965C01F801D380F701D3FC2591D3FE4B -:1007200021917F01222309F407C1253249F4D3FC2A -:100730002591D3FE21917F01253211F0912C1BC010 -:10074000B801822F90E00E94E90663013601E2CFF2 -:10075000222309F4F1C0622F70E08FE990E02C872A -:100760000E9493062C85892B49F0F701D3FC259133 -:10077000D3FE21917F0197FEEBCF0CC0233221F4F1 -:10078000F92DF0619F2EF1CF2C3639F4292D2068F8 -:10079000922EEBCF222309F4CFC0622F70E088E9BC -:1007A00090E02C870E9493062C85892B41F06301F1 -:1007B000F4E0CF0ED11CB8018FE390E012C02336D5 -:1007C00041F0233789F0233521F5F92DF1609F2E73 -:1007D0000BC0630122E0C20ED11CB801F30180817D -:1007E00091810E94E906B2CF630122E0C20ED11CC2 -:1007F000F30160807180F30190FC859190FE8191FE -:100800003F01882309F4A2CFB80190E00E94E906D5 -:10081000F2CF243611F0293639F5630197FE09C06D -:10082000F4E0CF0ED11CF30160817181828193814C -:100830000AC0F2E0CF0ED11CF301608171818827DC -:1008400077FD8095982FF92DFF7E9F2E97FF09C089 -:1008500090958095709561957F4F8F4F9F4FF06475 -:100860009F2E2AE030E038C02037A1F040F4283530 -:10087000D1F02F3609F060C028E030E019C02537EC -:1008800019F0283751F058C0292D2F7E922E2AE0DA -:1008900030E00EC0892D8061982E992D9462992E9A -:1008A00020E130E005C0E92DE4609E2E20E132E039 -:1008B000630197FE09C0F4E0CF0ED11CF301608103 -:1008C00071818281938108C0F2E0CF0ED11CF301C7 -:1008D0006081718180E090E0A5010E944807782E38 -:1008E0007A1896FE05C0B8018DE290E00E94E906F4 -:1008F00094FE16C0FE01E70DF11D8081803381F06A -:10090000B80180E390E00E94E90692FE09C0292D1B -:100910002072822F90E0B801885A9F4F0E94E9060A -:100920007A94F501E70DF11D8081B80190E00E94F5 -:10093000E9067110F5CF0ACFF8018681978102C0D0 -:100940008FEF9FEF2C960FB6F894DEBF0FBECDBF92 -:10095000DF91CF911F910F91FF90EF90DF90CF909B -:10096000BF90AF909F907F906F9008955058BB2795 -:10097000AA270ED0E0C0D1D030F0D6D020F031F48C -:100980009F3F11F41EF4C6C00EF4E095E7FBBCC017 -:10099000E92FE2D080F3BA1762077307840795073F -:1009A00018F071F49EF5FAC00EF4E0950B2EBA2FF4 -:1009B000A02D0B01B90190010C01CA01A001112465 -:1009C000FF27591B99F0593F50F4503E68F11A1611 -:1009D000F040A22F232F342F4427585FF3CF4695A2 -:1009E00037952795A795F0405395C9F77EF41F16C4 -:1009F000BA0B620B730B840BBAF09150A1F0FF0F8E -:100A0000BB1F661F771F881FC2F70EC0BA0F621F79 -:100A1000731F841F48F4879577956795B795F79569 -:100A20009E3F08F0B3CF9395880F08F09927EE0FFB -:100A300097958795089598D088F09F5790F0B92F93 -:100A40009927B751A0F0D1F0660F771F881F991F23 -:100A50001AF0BA95C9F712C0B13081F09FD0B1E059 -:100A600008959CC0672F782F8827B85F39F0B93F69 -:100A7000CCF3869577956795B395D9F73EF4909525 -:100A80008095709561957F4F8F4F9F4F0895E894A3 -:100A900009C097FB3EF490958095709561957F4FC6 -:100AA0008F4F9F4F9923A9F0F92F96E9BB27939574 -:100AB000F695879577956795B795F111F8CFFAF484 -:100AC000BB0F11F460FF1BC06F5F7F4F8F4F9F4FB5 -:100AD00016C0882311F096E911C0772321F09EE813 -:100AE000872F762F05C0662371F096E8862F70E079 -:100AF00060E02AF09A95660F771F881FDAF7880F53 -:100B00009695879597F9089597F99F6780E870E023 -:100B100060E008959FEF80EC089500240A94161673 -:100B2000170618060906089500240A9412161306DB -:100B3000140605060895092E0394000C11F4882369 -:100B400052F0BB0F40F4BF2B11F460FF04C06F5F85 -:100B50007F4F8F4F9F4F089557FD9058440F551F5B -:100B600059F05F3F71F04795880F97FB991F61F02F -:100B70009F3F79F087950895121613061406551FA6 -:100B8000F2CF4695F1DF08C0161617061806991F12 -:100B9000F1CF86957105610508940895E894BB2707 -:100BA00066277727CB0197F908950BD0C4CFB5DF1F -:100BB00028F0BADF18F0952309F0A6CFABCF1124A7 -:100BC000EECFCADFA0F3959FD1F3950F50E0551FEC -:100BD000629FF001729FBB27F00DB11D639FAA2792 -:100BE000F00DB11DAA1F649F6627B00DA11D661FE1 -:100BF000829F2227B00DA11D621F739FB00DA11D02 -:100C0000621F839FA00D611D221F749F3327A00DBB -:100C1000611D231F849F600D211D822F762F6A2F57 -:100C200011249F5750408AF0E1F088234AF0EE0FDC -:100C3000FF1FBB1F661F771F881F91505040A9F7E9 -:100C40009E3F510570F060CFAACF5F3FECF3983E16 -:100C5000DCF3869577956795B795F795E7959F5F50 -:100C6000C1F7FE2B880F911D9695879597F90895EA -:100C7000AA1BBB1B51E107C0AA1FBB1FA617B707C2 -:100C800010F0A61BB70B881F991F5A95A9F78095DE -:100C90009095BC01CD010895052E97FB1EF400949C -:100CA0000E94630657FD07D00E94710607FC03D01F -:100CB0004EF40C94630650954095309521953F4F26 -:100CC0004F4F5F4F089590958095709561957F4F38 -:100CD0008F4F9F4F0895EE0FFF1F0590F491E02D69 -:100CE0000994A1E21A2EAA1BBB1BFD010DC0AA1F6D -:100CF000BB1FEE1FFF1FA217B307E407F50720F085 -:100D0000A21BB30BE40BF50B661F771F881F991FFF -:100D10001A9469F760957095809590959B01AC0148 -:100D2000BD01CF010895FC010590061621F00020B9 -:100D3000D9F7C00108953197CF0108950F931F93FC -:100D4000CF93DF93EC018B01009731F461157105AE -:100D500019F480E090E038C06EE070E081E090E04F -:100D60000E94A607FC010097A1F380E88383011588 -:100D7000110571F01387028781E8838380918F01C9 -:100D800090919001892B21F4F0939001E0938F01D1 -:100D90002097C9F0D187C087838182608383809147 -:100DA000910190919201892B71F4F0939201E0935B -:100DB00091018091930190919401892B21F4F093FA -:100DC0009401E0939301CF01DF91CF911F910F9197 -:100DD00008950F931F93CF93DF93182F092FEB01E3 -:100DE0008B8181FD03C08FEF9FEF20C082FF10C079 -:100DF0004E815F812C813D81421753077CF4E8814D -:100E0000F9819F012F5F3F4F39832883108306C0EC -:100E1000E885F985812F0995892B29F72E813F8156 -:100E20002F5F3F4F3F832E83812F902FDF91CF91F4 -:100E30001F910F9108950F931F93CF93DF93E0912C -:100E40009101F0919201238121FF1BC0EC0100E090 -:100E500010E089916091910170919201DB011896E7 -:100E6000ED91FC911997882331F00995892B89F32D -:100E70000FEF1FEFEECF8AE00995892B11F4C8011F -:100E800002C08FEF9FEFDF91CF911F910F910895D7 -:100E9000FA01AA27283051F1203181F1E8946F93AB -:100EA0006E7F6E5F7F4F8F4F9F4FAF4FB1E03ED051 -:100EB000B4E03CD0670F781F891F9A1FA11D680FEF -:100EC000791F8A1F911DA11D6A0F711D811D911D22 -:100ED000A11D20D009F468943F912AE0269F112497 -:100EE0003019305D3193DEF6CF010895462F4770FB -:100EF000405D4193B3E00FD0C9F7F6CF462F4F7056 -:100F0000405D4A3318F0495D31FD4052419302D0B3 -:100F1000A9F7EACFB4E0A695979587957795679559 -:100F2000BA95C9F700976105710508959B01AC0159 -:100F30000A2E06945795479537952795BA95C9F780 -:100F4000620F731F841F951FA01D08950F931F9399 -:100F5000CF93DF93869F8001879F100D969F100D82 -:100F60001124C8010E94C207EC01009729F0A801D2 -:100F700060E070E00E94E908CE01DF91CF911F91FF -:100F80000F910895CF93DF938230910510F482E0A2 -:100F900090E0E0919701F091980120E030E0A0E02E -:100FA000B0E0309739F14081518148175907B8F0C6 -:100FB0004817590771F482819381109729F013968D -:100FC0009C938E9312972CC09093980180939701D5 -:100FD00027C02115310531F04217530718F0A90138 -:100FE000DB0101C0EF019A01BD01DF010280F38145 -:100FF000E02DD7CF21153105F9F0281B390B24300E -:10100000310580F48A819B816115710521F0FB0116 -:101010009383828304C09093980180939701FE018B -:10102000329644C0FE01E20FF31F81939193225048 -:101030003109398328833AC0209195013091960176 -:10104000232B41F42091020130910301309396014A -:101050002093950120910001309101012115310566 -:1010600041F42DB73EB74091040150910501241B76 -:10107000350BE0919501F0919601E217F307A0F48A -:101080002E1B3F0B2817390778F0AC014E5F5F4FDE -:101090002417350748F04E0F5F1F50939601409379 -:1010A00095018193919302C0E0E0F0E0CF01DF91E0 -:1010B000CF910895CF93DF93009709F487C0FC0187 -:1010C000329713821282C0919701D0919801209794 -:1010D00081F420813181280F391F809195019091F1 -:1010E00096018217930779F5F0939601E0939501A5 -:1010F0006DC0DE0120E030E0AE17BF0750F412965D -:101100004D915C9113979D014115510509F1DA014B -:10111000F3CFB383A28340815181840F951F8A1737 -:101120009B0771F48D919C911197840F951F0296E6 -:101130009183808312968D919C91139793838283E0 -:101140002115310529F4F0939801E09397013EC0F1 -:10115000D9011396FC93EE9312974D915D91A40FD4 -:10116000B51FEA17FB0779F480819181840F951FE1 -:101170000296D90111969C938E9382819381139646 -:101180009C938E931297E0E0F0E08A819B81009718 -:1011900019F0FE01EC01F9CFCE01029628813981C8 -:1011A000820F931F209195013091960128173907DE -:1011B00069F4309729F4109298011092970102C0B7 -:1011C00013821282D0939601C0939501DF91CF9143 -:1011D0000895DC0101C06D9341505040E0F708953F -:0411E000F894FFCFB1 -:1011E4000000990120000D0A53746172740D00000F +:100000000C945A000C944E010C9498010C947700B7 +:100010000C9477000C94E2010C9477000C94770018 +:100020000C9477000C9477000C9477000C94770074 +:100030000C9477000C9477000C9477000C94770064 +:100040000C9477000C9477000C9443020C94770086 +:100050000C9477000C9477000C9477000C94770044 +:100060000C9479000C947700D000F400D500F400D3 +:10007000E500F400EA00F400E000F400EF00F40012 +:10008000FA00FA00FA00FA00FA00FA00FA00FA00A0 +:10009000E500F400EA00F400EF00F400454647658F +:1000A000666700202B2D2E30313233343536373809 +:1000B0003968000011241FBECFEFD8E0DEBFCDBFEE +:1000C00011E0A0E0B1E0EEE6F3E102C005900D9290 +:1000D000A031B107D9F721E0A0E1B1E001C01D9244 +:1000E000AF39B207E1F70E944D030C94B5090C94A7 +:1000F00000001F920F920FB60F9211248F939F93BF +:10010000AF93BF93EF93FF938091B900887F8038BE +:1001100079F048F4803609F078C085EC8093BC0013 +:10012000109229017AC0883A71F1883B61F16DC063 +:1001300080912901882341F08F3F09F05DC08091B3 +:10014000BB008093280158C08091BB008093290197 +:1001500080912901853019F481E080931D018091FF +:100160002901873019F481E080931B0180912901D6 +:10017000893019F481E080931C018091290181501C +:100180008093290135C0E09129018E2F90E0FC0178 +:100190003197EA31F10570F5EC5CFF4F0C94EA06FB +:1001A000809126019091270104C0809124019091B3 +:1001B000250180931601909317019093BB0018C0FE +:1001C0008091190190911A01F4CF809122019091B0 +:1001D0002301EFCF80911E0190911F01EACF809102 +:1001E000200190912101E5CF809116018093BB0001 +:1001F00085EC03C01092BB0085E88093BC00809121 +:1002000029018F5F8093290108C08091BC008B7EFB +:100210008093BC0085EC8093BC00FF91EF91BF916F +:10022000AF919F918F910F900FBE0F901F901895D7 +:1002300093E890937A0080937C0080917C008064A6 +:1002400080937C0080917A00806480937A00809112 +:100250007A0086FDFCCF809178009091790025E0AE +:1002600080E090E030917A00306430937A003091F1 +:100270007A0036FDFCCF4091780050917900840FD0 +:10028000951F215079F720917A002F7720937A00DB +:1002900065E070E00E94B706CB0108951F920F92AF +:1002A0000FB60F9211242F933F934F935F936F9349 +:1002B0007F938F939F93AF93BF93EF93FF9360913F +:1002C0008400709185004A9B05C07093150160936E +:1002D00014011DC08091140190911501681B790BC8 +:1002E00080E090E00E94BC0527EE3CE840E350E44B +:1002F0000E944A0620E030E040E05FE30E942105D2 +:100300000E948D057093230160932201E898FF916C +:10031000EF91BF91AF919F918F917F916F915F917D +:100320004F913F912F910F900FBE0F901F901895F6 +:100330001F920F920FB60F9211242F933F934F935A +:100340005F936F937F938F939F93AF93BF93EF933D +:10035000FF9360918400709185004B9B05C0709362 +:100360001301609312011DC080911201909113013D +:10037000681B790B80E090E00E94BC0527EE3CE80A +:1003800040E350E40E944A0620E030E040E05FE3B2 +:100390000E9421050E948D0570931F0160931E012C +:1003A000E998FF91EF91BF91AF919F918F917F91CC +:1003B0006F915F914F913F912F910F900FBE0F90D2 +:1003C0001F9018951F920F920FB60F9211242F9322 +:1003D0003F934F935F936F937F938F939F93AF93CD +:1003E000BF93EF93FF93CF93DF931F92CDB7DEB709 +:1003F00089B1898390911801892784FF2DC060916C +:10040000840070918500898184FF05C0709311017B +:100410006093100121C08091100190911101681B1F +:10042000790B80E090E00E94BC0527EE3CE840E3B9 +:1004300050E40E944A0620E030E040E05FE30E9482 +:1004400021050E948D057093210160932001809108 +:100450006D008F7E80936D008981809318010F90CD +:10046000DF91CF91FF91EF91BF91AF919F918F91CC +:100470007F916F915F914F913F912F910F900FBEA0 +:100480000F901F9018951F920F920FB60F92112484 +:100490008F939F93EF93FF938091C00087FF17C0C6 +:1004A000E0912C01F0912D018091C600808381E0C4 +:1004B000E139F80730F43196F0932D01E0932C01E7 +:1004C00006C08EE291E090932D0180932C01FF9164 +:1004D000EF919F918F910F900FBE0F901F901895E5 +:1004E0009C01E1ECF0E080818861808380818068FC +:1004F0008083E2ECF0E0808186608083C901A0E027 +:10050000B0E09C01AD0184E0220F331F441F551F52 +:100510008A95D1F760E074E284EF90E00E94CB0608 +:10052000DA01C9010197A109B109892F9A2FAB2FCF +:10053000BB27A7FDBA958093C50021502093C40026 +:100540008EE291E090932B0180932A0190932D01EC +:1005500080932C0108952091C00025FFFCCFFC0161 +:1005600080818093C6000895CF93DF931F92CDB70B +:10057000DEB78983CE0101960E94AB0280E090E055 +:100580000F90DF91CF910895CF93DF93EC01CE01CF +:100590002196FC012081222319F00E94AB02F7CFA3 +:1005A000DF91CF9108958091C00087FFFCCF8091AB +:1005B000C60090E008950C94D3026BED72E084EBDA +:1005C00092E00C945407CF93DF93FC01E253FF4F6A +:1005D000A081B181EC01C453DF4F28813981A2177A +:1005E000B307B9F02091C00025FF13C02C912093D0 +:1005F000C60020813181AC0145535F4F2417350778 +:1006000018F42F5F3F4F03C09C0128593F4F31839F +:100610002083E0912A01F0912B0120912C0130914F +:100620002D012E173F07B1F1EC01CC59DF4FA88106 +:10063000B98120812C93688179819C012B523F4F95 +:10064000D9013C91DB012C91321307C0AC014C5213 +:100650005F4FDA012C912F5F2C939C012D593F4F56 +:100660006217730728F4DB011196B983A88302C0CF +:1006700099838883B1E0E139FB0730F43196F09338 +:100680002B01E0932A0106C08EE291E090932B01AA +:1006900080932A01DF91CF9108951092280180E87C +:1006A00095E20E9470020E94DD0282E58093BA000A +:1006B0008091BC008B7E8093BC0085EC8093BC0055 +:1006C0001092800084E08093810095E0909369000F +:1006D0008093680086E091E00E94D70783B7817F0E +:1006E00083BF7894C0E0D8E180912901833081F004 +:1006F00050F4813089F580E00E9418019093270121 +:100700008093260129C0893059F08F3FF1F024C031 +:1007100081E00E94180190932501809324011CC060 +:1007200082E00E941801BC0180E090E00E94BC05BC +:1007300028E431EE4AEB5FE30E944A060E948D05F1 +:1007400070931A016093190107C080912801853ABE +:1007500019F4F894FE01099580911D01882391F008 +:1007600010921D011092230110922201529A5A9A5E +:10077000F5E3FA95F1F700005A9852988CB381701E +:100780008CBBE89A80911B01882391F010921B0189 +:1007900010921F0110921E01539A5B9A85E38A956D +:1007A000F1F700005B9853988CB382708CBBE99A88 +:1007B00080911C018823B1F010921C01109221013C +:1007C00010922001549A5C9AE5E3EA95F1F7000053 +:1007D0005C98549889B18093180180916D00806174 +:1007E00080936D0083B7816083BF889583B78E7FC8 +:1007F00083BF7ACFACE0B0E0E0E0F4E00C94F40624 +:100800006C015B017A01FC0117821682838181FFF2 +:100810000EC1CE0101964C01F6010381F50103FDE5 +:10082000159103FF11915F01112309F4FCC01532EA +:1008300049F403FD159103FF11915F01153211F089 +:1008400020E01BC0B601812F90E00E949F07370176 +:100850007301E2CF112309F4E6C0612F70E083EA4F +:1008600090E02C870E9449072C85892B49F0F501DF +:1008700003FD159103FF11915F0127FFEBCF09C025 +:10088000133229F01C3609F0D5C02068F0CF20E1E2 +:10089000EECF022F112309F4C6C0612F70E08CE95E +:1008A00090E02C870E9449072C85892B41F0370165 +:1008B000F4E06F0E711CB6018FE390E011C01336A7 +:1008C00039F0133781F0133519F5022F01600BC091 +:1008D000370182E0680E711CB601F70180819181B9 +:1008E0000E949F07B5CF3701F2E06F0E711CF70130 +:1008F000E080F180F70100FD859100FF81917F018B +:10090000882309F4A5CFB60190E00E949F07F2CF9B +:10091000143611F0193629F5370127FF09C0F4E024 +:100920006F0E711CF70160817181828193810AC011 +:10093000F2E06F0E711CF70160817181072E000CCF +:10094000880B990B022F0F7E97FF08C0909580951A +:10095000709561957F4F8F4F9F4F00642AE030E084 +:1009600033C0103799F040F41835B1F01F3609F054 +:100970005AC028E030E014C0153719F0183741F09C +:1009800052C0022F0F7E2AE030E00AC0022F006121 +:10099000046220E130E004C0022F046020E132E074 +:1009A000370107FF09C0F4E06F0E711CF701608189 +:1009B00071818281938108C0F2E06F0E711CF70192 +:1009C0006081718180E090E0A4010E940708182FE7 +:1009D000181906FF05C0B6018DE290E00E949F073E +:1009E00004FF15C0FE01E10FF11D8081803379F015 +:1009F000B60180E390E00E949F0702FF08C00072EA +:100A0000802F90E0B601885A9F4F0E949F07115097 +:100A1000F401E10FF11D8081B60190E00E949F0773 +:100A20001111F5CF15CFF6018681978105C08FEFA3 +:100A30009FEF02C0022F31CF2C96EEE00C941007EE +:100A40005058BB27AA270E9438050C9410060E9414 +:100A5000020638F00E94090620F039F49F3F19F48D +:100A600026F40C94FF050EF4E095E7FB0C94F905D1 +:100A7000E92F0E94210658F3BA176207730784070B +:100A8000950720F079F4A6F50C9443060EF4E09552 +:100A90000B2EBA2FA02D0B01B90190010C01CA0138 +:100AA000A0011124FF27591B99F0593F50F4503EE3 +:100AB00068F11A16F040A22F232F342F4427585FD5 +:100AC000F3CF469537952795A795F0405395C9F7ED +:100AD0007EF41F16BA0B620B730B840BBAF09150A5 +:100AE000A1F0FF0FBB1F661F771F881FC2F70EC044 +:100AF000BA0F621F731F841F48F487957795679517 +:100B0000B795F7959E3F08F0B0CF9395880F08F002 +:100B10009927EE0F9795879508950E94290688F0EA +:100B20009F5798F0B92F9927B751B0F0E1F0660FB1 +:100B3000771F881F991F1AF0BA95C9F714C0B130F2 +:100B400091F00E944306B1E008950C944306672F8C +:100B5000782F8827B85F39F0B93FCCF38695779521 +:100B60006795B395D9F73EF490958095709561950A +:100B70007F4F8F4F9F4F0895E89409C097FB3EF435 +:100B800090958095709561957F4F8F4F9F4F9923DA +:100B9000A9F0F92F96E9BB279395F6958795779558 +:100BA0006795B795F111F8CFFAF4BB0F11F460FF18 +:100BB0001BC06F5F7F4F8F4F9F4F16C0882311F070 +:100BC00096E911C0772321F09EE8872F762F05C084 +:100BD000662371F096E8862F70E060E02AF09A951F +:100BE000660F771F881FDAF7880F9695879597F914 +:100BF000089597F99F6780E870E060E008959FEF9F +:100C000080EC089500240A941616170618060906A3 +:100C1000089500240A941216130614060506089572 +:100C2000092E0394000C11F4882352F0BB0F40F4FA +:100C3000BF2B11F460FF04C06F5F7F4F8F4F9F4F3A +:100C4000089557FD9058440F551F59F05F3F71F0BC +:100C50004795880F97FB991F61F09F3F79F0879523 +:100C60000895121613061406551FF2CF4695F1DFAC +:100C700008C0161617061806991FF1CF869571053C +:100C8000610508940895E894BB2766277727CB0170 +:100C900097F908950E945D060C9410060E940206C2 +:100CA00038F00E94090620F0952311F00C94F90504 +:100CB0000C94FF0511240C9444060E94210670F345 +:100CC000959FC1F3950F50E0551F629FF001729FF1 +:100CD000BB27F00DB11D639FAA27F00DB11DAA1F00 +:100CE000649F6627B00DA11D661F829F2227B00D4D +:100CF000A11D621F739FB00DA11D621F839FA00DD8 +:100D0000611D221F749F3327A00D611D231F849F27 +:100D1000600D211D822F762F6A2F11249F5750407E +:100D20009AF0F1F088234AF0EE0FFF1FBB1F661FF9 +:100D3000771F881F91505040A9F79E3F510580F0C2 +:100D40000C94F9050C9444065F3FE4F3983ED4F309 +:100D5000869577956795B795F795E7959F5FC1F766 +:100D6000FE2B880F911D9695879597F90895AA1BDC +:100D7000BB1B51E107C0AA1FBB1FA617B70710F086 +:100D8000A61BB70B881F991F5A95A9F780959095B8 +:100D9000BC01CD010895052E97FB1EF400940E941E +:100DA000E20657FD07D00E94270707FC03D04EF448 +:100DB0000C94E20650954095309521953F4F4F4F4A +:100DC0005F4F089590958095709561957F4F8F4FF7 +:100DD0009F4F0895EE0FFF1F0590F491E02D0994A9 +:100DE0002F923F924F925F926F927F928F929F923B +:100DF000AF92BF92CF92DF92EF92FF920F931F9329 +:100E0000CF93DF93CDB7DEB7CA1BDB0B0FB6F894D9 +:100E1000DEBF0FBECDBF09942A88398848885F8419 +:100E20006E847D848C849B84AA84B984C884DF808A +:100E3000EE80FD800C811B81AA81B981CE0FD11D6E +:100E40000FB6F894DEBF0FBECDBFED010895A1E24D +:100E50001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F34 +:100E6000FF1FA217B307E407F50720F0A21BB30B7F +:100E7000E40BF50B661F771F881F991F1A9469F7FB +:100E800060957095809590959B01AC01BD01CF0157 +:100E90000895FC010590061621F00020D9F7C00145 +:100EA00008953197CF0108950F931F93CF93DF9348 +:100EB000009731F46115710519F480E090E03AC0B3 +:100EC0008B01EC016EE070E081E090E00E9465082B +:100ED000FC01892B91F380E883830115110571F0E2 +:100EE0001387028781E88383809195019091960111 +:100EF000892B21F4F0939601E09395012097C9F096 +:100F0000D187C0878381826083838091970190918C +:100F10009801892B71F4F0939801E09397018091E7 +:100F2000990190919A01892B21F4F0939A01E09311 +:100F30009901CF01DF91CF911F910F9108950F93E8 +:100F40001F93CF93DF93FB01238121FD03C08FEF1C +:100F50009FEF28C022FF16C046815781248135812A +:100F60004217530744F4A081B1819D012F5F3F4F89 +:100F7000318320838C93268137812F5F3F4F3783C6 +:100F8000268310C0EB01092F182F0084F185E02D76 +:100F90000995892BE1F68E819F8101969F838E832F +:100FA000812F902FDF91CF911F910F9108950F9373 +:100FB0001F93CF93DF93E0919701F09198012381E4 +:100FC00021FF1BC08C01D0E0C0E0F80181918F01AE +:100FD0006091970170919801DB011896ED91FC9159 +:100FE0001997882331F00995892B79F3DFEFCFEF3B +:100FF000ECCF8AE00995892B19F08FEF9FEF02C0A3 +:101000008D2F9C2FDF91CF911F910F910895FA01A1 +:10101000AA27283051F1203181F1E8946F936E7F37 +:101020006E5F7F4F8F4F9F4FAF4FB1E03ED0B4E028 +:101030003CD0670F781F891F9A1FA11D680F791F69 +:101040008A1F911DA11D6A0F711D811D911DA11D7A +:1010500020D009F468943F912AE0269F112430198A +:10106000305D3193DEF6CF010895462F4770405D25 +:101070004193B3E00FD0C9F7F6CF462F4F70405DD4 +:101080004A3318F0495D31FD4052419302D0A9F72F +:10109000EACFB4E0A6959795879577956795BA9529 +:1010A000C9F700976105710508959B01AC010A2EEF +:1010B00006945795479537952795BA95C9F7620FC6 +:1010C000731F841F951FA01D08950F931F93CF9327 +:1010D000DF93869F8001879F100D969F100D11242E +:1010E000C8010E948108EC01009729F0A80160E086 +:1010F00070E00E94AE09CE01DF91CF911F910F9158 +:101100000895CF93DF938230910510F482E090E050 +:10111000E0919D01F0919E0120E030E0C0E0D0E040 +:10112000309711F14081518148175907C0F0481795 +:10113000590761F482819381209719F09B838A83F8 +:101140002BC090939E0180939D0126C021153105EF +:1011500019F04217530718F49A01BE01DF01EF019D +:101160000280F381E02DDCCF2115310509F1281B28 +:10117000390B2430310590F412968D919C91139780 +:101180006115710521F0FB019383828304C0909364 +:101190009E0180939D01FD01329644C0FD01E20F46 +:1011A000F31F81939193225031092D933C933AC0C0 +:1011B00020919B0130919C01232B41F4209102014D +:1011C0003091030130939C0120939B0120910001F9 +:1011D000309101012115310541F42DB73EB7409101 +:1011E000040150910501241B350BE0919B01F09106 +:1011F0009C01E217F307A0F42E1B3F0B28173907B9 +:1012000078F0AC014E5F5F4F2417350748F04E0F62 +:101210005F1F50939C0140939B018193919302C067 +:10122000E0E0F0E0CF01DF91CF9108950F931F939D +:10123000CF93DF93009709F48CC0FC01329713829F +:10124000128200919D0110919E010115110581F4FA +:1012500020813181820F931F20919B0130919C014D +:101260002817390779F5F0939C01E0939B0171C031 +:10127000D80140E050E0AE17BF0750F412962D9110 +:101280003C911397AD012115310509F1D901F3CF37 +:101290009D01DA013383228360817181860F971F5C +:1012A0008217930769F4EC0128813981260F371FD3 +:1012B0002E5F3F4F318320838A819B81938382837A +:1012C000452B29F4F0939E01E0939D0142C01396B3 +:1012D000FC93EE931297ED01499159919E01240FD1 +:1012E000351FE217F30771F480819181840F951FF8 +:1012F000029611969C938E938281938113969C9370 +:101300008E931297E0E0F0E0D80112968D919C91B7 +:101310001397009719F0F8018C01F6CF8D919C91ED +:1013200098012E5F3F4F820F931F20919B013091B8 +:101330009C012817390769F4309729F410929E010F +:1013400010929D0102C01382128210939C0100939F +:101350009B01DF91CF911F910F910895DC0101C096 +:0E1360006D9341505040E0F70895F894FFCF90 +:10136E0000009F0120000D0A53746172740D00007D :00000001FF