/tags/V2.06a/FlightCtrl.aps |
---|
0,0 → 1,0 |
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>11-Oct-2007 22:58:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\MikroKopter\FlightCtrl\branches\V0.64_ZeroWarnings\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>uart.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>timer0.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>fc.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>fc.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>TWIMASTER.C</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>uart.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>analog.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>gps.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>main.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>rc.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>Settings.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>timer0.h</FileName><Status>1</Status></File00018></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio> |
/tags/V2.06a/GPS.c |
---|
0,0 → 1,16 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Copyright (c) Holger Buss, Ingo Busker |
// + only for non-profit use |
// + www.MikroKopter.com |
// + see the File "License.txt" for further Informations |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
signed int GPS_Nick = 0; |
signed int GPS_Roll = 0; |
unsigned char GPS_Aid_StickMultiplikator = 0; // 64 = 100% |
/tags/V2.06a/Hex-Files/Flight-Ctrl_MEGA1284p_V2_06a.hex |
---|
0,0 → 1,5546 |
:100000000C94EE0B0C94480C0C94480C0C94480C7B |
:100010000C94480C0C94480C0C94480C0C94480C10 |
:100020000C94480C0C94E81F0C94480C0C94480C4D |
:100030000C94C33A0C94480C0C94480C0C94480C47 |
:100040000C94480C0C94480C0C940B1C0C94480C0D |
:100050000C94A2120C94480C0C946C120C94480C46 |
:100060000C94F6210C94480C0C94B5350C94480C67 |
:100070000C94D1A80C94480C0C940F9E0C94480C32 |
:100080000C94480C0C94480C0C94480C1F2224220D |
:10009000292232224922602270228022EE22462525 |
:1000A00060220A241B2430244F246C24B724032507 |
:1000B000B6279A283D29B629EE299E2A582BC12B0E |
:1000C0003C2C6E2CDA2C082D352D952DEE2D532E33 |
:1000D0009E2EE82E4C2FEE730A758F759274E37581 |
:1000E00015762D74C1744B89EC89718ACC8A1D8B6D |
:1000F000878B4699088C3C8C3C8C3C8C3C8C3C8C93 |
:100100003C8C3C8C3C8C3C8C708CEC8C7D8DA38D21 |
:10011000E78D418ED88EEE8F529052905290529031 |
:100120005290529052905290529085909A90BA90DC |
:1001300016915291AD91DA9170924699C592C592FD |
:10014000C592C592C592C592C592C592CEA6D1A6BA |
:10015000D1A6D1A6DAA6DDA6E0A6F2A6EFA60A0DE4 |
:100160003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3DBF |
:100170003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3DAF |
:100180003D3D3D000A0D426174743A002025642013 |
:1001900043656C6C732000204C6F77207761726E22 |
:1001A000696E673A2025642E25645600202041752B |
:1001B000746F2D43483A2025642E25645600202074 |
:1001C0004175746F6C616E64696E673A2025642EA8 |
:1001D000256456000A0D4F6C642046432048617226 |
:1001E0006477617265206E6F7420737570706F72C2 |
:1001F0007465642062792074686973204672696D41 |
:100200007761726521000A0D466F756E6420424C5D |
:100210002D4374726C3A20002564000A0D0A0D21EA |
:1002200021204D495353494E4720424C2D435452AF |
:100230004C3A202564202121000A0D43616C69623B |
:10024000726174696E672070726573737572652070 |
:1002500073656E736F722E2E004F4B0A0D000A0DE0 |
:10026000466C696768742D74696D65202575206D0D |
:10027000696E20546F74616C3A2575206D696E004B |
:10028000416E676C654E69636B2020202020202022 |
:10029000416E676C65526F6C6C20202020202020FE |
:1002A0004163634E69636B202020202020202020A2 |
:1002B000416363526F6C6C2020202020202020207E |
:1002C0005961774779726F2020202020202020203C |
:1002D000416C746974756465205B302E316D5D20EE |
:1002E0004163635A2020202020202020202020202D |
:1002F0004761732020202020202020202020202043 |
:10030000436F6D706173732056616C75652020209A |
:10031000566F6C74616765205B302E31565D20200E |
:100320005265636569766572204C6576656C202040 |
:100330004779726F20436F6D7061737320202020A6 |
:100340004D6F746F7220312020202020202020202B |
:100350004D6F746F7220322020202020202020201A |
:100360004D6F746F72203320202020202020202009 |
:100370004D6F746F722034202020202020202020F8 |
:100380003136202020202020202020202020202046 |
:100390003137202020202020202020202020202035 |
:1003A0003138202020202020202020202020202024 |
:1003B0003139202020202020202020202020202013 |
:1003C000536572766F2020202020202020202020BE |
:1003D000486F7665726761732020202020202020DE |
:1003E00043757272656E74205B302E31415D202042 |
:1003F0004361706163697479205B6D41685D2020A1 |
:1004000048656967687420536574706F696E7420FD |
:1004100032352020202020202020202020202020B5 |
:1004200032362020202020202020202020202020A4 |
:100430003237202020202020202020202020202093 |
:100440004932432D4572726F7220202020202020D7 |
:10045000424C204C696D69742020202020202020EF |
:100460004750535F4E69636B2020202020202020BE |
:100470004750535F526F6C6C20202020202020209A |
:1004800021212120494E434F4D50415449424C4572 |
:1004900020212121002E005B25695D005B25695D1F |
:1004A000002B204D696B726F4B6F70746572202B3F |
:1004B0000048573A5625642E25642053573A256440 |
:1004C0002E253032642563200053657474696E678D |
:1004D0003A2564202573004D697865722045727253 |
:1004E0006F7221004552522532643A0048617264AD |
:1004F00077617265204572726F7220313A256420EF |
:100500002121004D697373696E6720424C2D43743D |
:10051000726C3A2564202121004932432045525211 |
:100520004F5221212100424C2D53656C6674657336 |
:1005300074204572723A25326400486569676874B0 |
:100540003A202025356900536574706F696E743ADE |
:100550002535690050726573737572653A25356982 |
:10056000004F66667365743A20202535690028417E |
:1005700029002569006163742E2062656172696ECD |
:1005800067004E69636B3A202020202020253569C2 |
:1005900000526F6C6C3A2020202020202535690005 |
:1005A000436F6D706173733A202020253569004BCD |
:1005B00025693A25346920204B25693A253469207C |
:1005C000004E693A2534692020526F3A253469205B |
:1005D0000047733A253469202047693A2534692059 |
:1005E0000050313A253469202050323A25346920B0 |
:1005F0000050333A253469202050343A253469209C |
:10060000004779726F202D2053656E736F72004E14 |
:1006100069636B2025346920282533692E257829C4 |
:1006200000526F6C6C2025346920282533692E25F3 |
:1006300078290059617720202534692028253369DD |
:100640002900414343202D2053656E736F72004E85 |
:1006500069636B2025346920282533692900526F8E |
:100660006C6C20253469202825336929005A202004 |
:10067000202025346920282533692900566F6C74A1 |
:100680006167653A2020202533692E25316956009F |
:1006900043757272656E743A2020202533692E25C9 |
:1006A00031694100506F7765723A20202020202563 |
:1006B000346957004469736368617267653A20253D |
:1006C00035696D41680052656365697665720052EF |
:1006D000432D5175616C6974793A20253469005253 |
:1006E000432D4368616E6E656C733A25346900551D |
:1006F0006E646572766F6C74616765732020005755 |
:1007000061726E3A202532642E25645600486F6D62 |
:10071000653A202532642E256456004C616E643A99 |
:10072000202532642E25645600506F746925693A7D |
:10073000202025336900506F746925693A202025EF |
:10074000336900466C696768742D54696D652020B3 |
:1007500000546F74616C3A2535756D696E004163A4 |
:10076000743A20202535756D696E002872657365B1 |
:10077000742900436F6D70617373004D61676E651E |
:10078000743A202020253569004779726F3A20207D |
:1007900020202025356900547275653A20202020DC |
:1007A0002025356900536572766F202000536574EB |
:1007B000706F696E74202025336900506F736974FF |
:1007C000696F6E3A202533690052616E67653A257C |
:1007D00033692D25336900424C2D4374726C2045DA |
:1007E00072726F72732000253364202533642025D4 |
:1007F0003364202533642000424C2054656D7065BD |
:100800007261747572650025336420253364202578 |
:100810003364202533642000424C20437572726596 |
:100820006E740028696E20302E3141290025336412 |
:100830002025336420253364202533642000424C76 |
:100840002D4374726C20666F756E642000202563E2 |
:1008500020202025632020202563202020256320C0 |
:1008600000202563202020256320202025632020D0 |
:1008700020256320002025632020202D2020202DEE |
:100880002020202D20003130003131003132000A8B |
:100890000D2D2D3E2048617264776172652056658A |
:1008A0007273696F6E2042797465204368616E6768 |
:1008B0006564203C2D2D000A0D47656E65726174DC |
:1008C000696E672064656661756C74205061726141 |
:1008D0006D6574657220536574202564000A0D559A |
:1008E00073696E6720506172616D65746572205323 |
:1008F0006574202564000A0D47656E657261746930 |
:100900006E672064656661756C74204D69786572E8 |
:10091000205461626C65000A0D4D697865722D4343 |
:100920006F6E6669673A2027257327202825752072 |
:100930004D6F746F727329000A0D414343206E6F2F |
:10094000742063616C69627261746564210D0A00D0 |
:1009500000008F001E01AD013B02CA025803E603EE |
:10096000740402058F051B06A7063307BE07480857 |
:10097000D2085B09E3096B0AF20A780BFD0B810CC4 |
:10098000040D860D070E870E060F840F00107B10D6 |
:10099000F5106E11E5115B12CF124213B31323143D |
:1009A0009214FE146A15D3153B16A1160517671786 |
:1009B000C81727188318DE1837198E19E319361A45 |
:1009C000871AD61A231B6E1BB61BFD1B411C831CEA |
:1009D000C31C001D3C1D751DAB1DE01D121E421EDB |
:1009E0006F1E9A1EC31EE91E0D1F2E1F4D1F691F6D |
:1009F000841F9B1FB01FC31FD31FE11FEC1FF51FD8 |
:100A0000FB1FFF1F002008010000777B000201018F |
:100A1000D37C01030202677D02040303D78103052F |
:100A200004090F7E0406050A3A7E0507060B657E5B |
:100A30000608070C7A7E07000806C47D0409090928 |
:100A40001680050A0A0AEE80060B0B0B4C7F070C7A |
:100A50000C0C8F7E2532692E2531695600253364B2 |
:100A6000256320253033646D2563005374617475EC |
:100A700073004552524F523A20253264200053658C |
:100A80007425643A257320200025346920253269B5 |
:100A90003A25303269002534696D256300520025FE |
:100AA00033692025336920253369202533690025E2 |
:100AB00033692025336920253369202533690054A3 |
:100AC000656D7065726174757265732020202000F9 |
:100AD0002563432020202020002532692E253169FE |
:100AE00056202533692E2531694100253469572068 |
:100AF0002536696D4168004D61676E65743A25332E |
:100B000069252520253369256300496E636C692EAC |
:100B10003A2533692563202825692920004C6F6117 |
:100B20006420576179706F696E7473002846697824 |
:100B3000656429202020202020004C6F616420570C |
:100B40006179706F696E7473002852656C617469A5 |
:100B5000766529202020004C6F61642073696E67E0 |
:100B60006C2E506F696E7400536176652073696EE8 |
:100B7000676C2E506F696E74005361766520506FFC |
:100B8000696E743A006E6F2053442D4361726400A5 |
:100B90006E6F204750532D4669780025326400441B |
:100BA00069723A25336420416C743A2533646D00D0 |
:100BB0002D3E002020004C6F616420506F696E74E0 |
:100BC000006E6F2053442D4361726400253264002F |
:100BD000446973743A25336420416C743A25336454 |
:100BE0002000202020202020202020202020202025 |
:100BF0002020002D3E0020200046495820576179D2 |
:100C0000706F696E7473004649583A2573006E6FB1 |
:100C10002053442D436172640023253264205750D1 |
:100C20003A002532642F256420002D2D2F2D2D0014 |
:100C30002D3E0020200052656C6174697665205756 |
:100C40005073200052656C3A2573006E6F20534438 |
:100C50002D43617264006E6F204750532D466978B2 |
:100C60000023253264205750733A002532642F2523 |
:100C70006420002D2D2F2D2D002D3E00202000253D |
:100C800032756D2F73205361743A25642000202043 |
:100C90003344004E6F4678004447505300486F6D10 |
:100CA000653A2533646D2025336425632025630070 |
:100CB0004E6F204E6176694374726C21000000050E |
:100CC00000050004010601080006010200040004FA |
:100CD00000070007000700070007000700070003E0 |
:100CE000010301050017010F01060009010A01199E |
:100CF000010501050119011A010F01010009000692 |
:100D00000006004E6F204572726F72202020202056 |
:100D1000202020004E6F7420636F6D7061746962D3 |
:100D20006C652020004D4B334D6167206E6F742041 |
:100D3000636F6D7061004E6F20464320636F6D6D71 |
:100D4000756E6963617400436F6D706173732063C6 |
:100D50006F6D6D756E69630047505320636F6D6DE5 |
:100D6000756E69636174696F00636F6D7061737331 |
:100D70002076616C756520202000524320536967FE |
:100D80006E616C206C6F737420200046432073707A |
:100D900069207278206572726F7220004E6F204E4B |
:100DA0004320636F6D6D756E696361740046432007 |
:100DB0004E69636B204779726F20202020004643E4 |
:100DC00020526F6C6C204779726F202020200046E3 |
:100DD0004320596177204779726F2020202020001E |
:100DE0004643204E69636B2041434320202020204E |
:100DF00000464320526F6C6C20414343202020204A |
:100E000020004643205A2D4143432020202020200B |
:100E100020200050726573737572652073656E7360 |
:100E20006F7220004932432046432D3E424C2D43F1 |
:100E300074726C2000426C204D697373696E672078 |
:100E40002020202020004D69786572204572726F45 |
:100E50007220202020200043617265667265652043 |
:100E60004572726F722020004750532046697820E7 |
:100E70006C6F737420202020004D61676E657420B4 |
:100E80004572726F7220202020004D6F746F7220A7 |
:100E90007265737461727420202000424C204C698A |
:100EA0006D69746174696F6E202020004750532073 |
:100EB00052616E676520202020202020004E6F2088 |
:100EC00053442D436172642020202020200053448D |
:100ED0002D4C6F6767696E67206572726F7200468E |
:100EE0006C79696E672072616E6765212020200031 |
:100EF0004D617820416C74697475646521202020EF |
:100F0000004E6F2047505320666978202020202013 |
:100F10002000636F6D70617373206E6F7420636166 |
:100F20006C2E00424C2D53656C66746573742020E2 |
:100F3000202020006E6F206578742E20636F6D7006 |
:100F40006173732000636F6D706173732073656EDE |
:100F5000736F7220200053657420203A00202121F5 |
:100F60002020204C414E44494E4720202020212162 |
:100F7000202000202121204C69506F20766F6C7456 |
:100F800061676520212120200020202020204D693C |
:100F90006B726F4B6F7074657220202020200020D0 |
:100FA0002020202020202020202020202020202041 |
:100FB000202020200020202532692E25316956204E |
:100FC000200020202532692E25316956202000413D |
:100FD0004C543A2534696D20256300414C543A2520 |
:100FE00034696D202000414C543A2D2D2D2D2000C8 |
:100FF00020202532693A2530326920200020202522 |
:1010000032693A253032692020004449523A20257D |
:10101000336425630043002000202025356920200B |
:10102000002020253569202000493A2532692E25E7 |
:1010300031694120003A003A003A002D2D2D2D2D26 |
:101040002D2D2D2D2B2D2D2D2D2D2D2D2D2D2D2DD2 |
:10105000002D2D2D2D2D2D2D2D2D2D2D2D2D2D2DED |
:101060002D2D2D2D2D2D003A005341543A2532645B |
:101070002000444953543A2533646D004420003322 |
:1010800044002121004D41473A2533752525200094 |
:10109000484D3A253364256320256300696E636CEF |
:1010A0003A25326425632825326929002020202032 |
:1010B0002532756D2F733A2020484D3A253364252B |
:1010C00063202563004552523A20253264202100D6 |
:1010D0004552523A20002121204C69506F20766FF2 |
:1010E0006C7461676520212100207777772E4D6928 |
:1010F0006B726F4B6F707465722E646520200020D8 |
:101100002532693A2530326920202532692E253171 |
:101110006956202534696D416800202532693A25D9 |
:1011200030326920202532692E2531695620253438 |
:10113000696D4168004449523A2533642563004192 |
:101140004C543A2534696D00414C543A2534696D4C |
:1011500000414C543A2D2D2D2D2000256300484D83 |
:101160003A25336425632020444953543A25336497 |
:101170006D202563005057523A2532692E2531697A |
:101180004120282569572920004346002020004798 |
:1011900050533A2532756D2F73205341543A2564CC |
:1011A00020002020334420004E4F46495800444739 |
:1011B000505320002020204E6F204E6176694374EA |
:1011C000726C20202020202020002532692E2569E5 |
:1011D000202532692E2569202532692E2569202592 |
:1011E00032692E2569410025336920253369202580 |
:1011F000336920253369256343002532692E25692B |
:10120000202532692E256941002532692E25692065 |
:101210002532692E2569202532692E25692025323F |
:10122000692E2569410025336920253369256343EB |
:10123000202020202020202000253369202533690C |
:101240002025336920253369256343004552523AEE |
:10125000202532642021004552523A2000212120CD |
:101260004C69506F20766F6C746167652021210096 |
:10127000207777772E4D696B726F4B6F7074657244 |
:101280002E646520200053657474696E673A257575 |
:1012900020257320004D696E3A2532692E2531696B |
:1012A000562025732000414C543A00504F54493A7F |
:1012B0002533752000284F4E29202000284F464610 |
:1012C0002920004C494D495400564152494F004491 |
:1012D000495341424C45440043463A004449534136 |
:1012E000424C45440020284F4E29200020284F46DC |
:1012F000462900205445414348004750533A004492 |
:10130000495341424C45440028465245452900284E |
:10131000484F4D4529002841494429200028484F7D |
:101320004C4429002046533A257573656B200048CC |
:101330004F4D4520414C543A0025756D00484F4CA7 |
:101340004420004E693A25346920526F3A253469A9 |
:1013500020433A2533690047733A2534692059619F |
:101360003A253469200050313A2534692050323A08 |
:1013700025346920333A2533690050343A253469DD |
:101380002050353A25346920363A25336900434FD9 |
:1013900055504C494E47204F46462120004C4F4F58 |
:1013A00050494E472120004848212000434F4D50CE |
:1013B000415353204F46462120004C6F6164205713 |
:1013C0006179706F696E7473002852656C6174691D |
:1013D000766520506F736974696F6E73290041637D |
:1013E000746976652057503A2532642F25642000B1 |
:1013F0004E6F2057507320616374697665202020FA |
:101400002020002532692E253169562000257300E1 |
:1014100020202000253269202020004C6F616420AC |
:101420006C6973743A004C6F6164206C6973743A30 |
:10143000202D2D20004E6F2053442D4361726420D7 |
:1014400020200028536574202D3E204C6F616429B4 |
:1014500000202020202020202020202020200021CB |
:101460004E6F204750532D4669782120004C6F6104 |
:101470006420576179706F696E74730028466978CB |
:10148000656420506F736974696F6E7329004163DE |
:10149000746976652057503A2532642F2564200000 |
:1014A0004E6F205750732061637469766520202049 |
:1014B00020002532692E2531695620002573004C05 |
:1014C0006F6164206C6973743A002020200025321B |
:1014D0006420284649582900202D2D004E6F2053A6 |
:1014E000442D436172642020200028536574202D10 |
:1014F0003E204C6F616429002020202020202020E5 |
:1015000020202020200053746F72652073696E675D |
:101510006C6520506F736974696F6E0020253269A5 |
:101520002E253169562000202532693A253032694E |
:101530002000414C543A2534696D004449523A2008 |
:1015400025336425630043616D3A202533690053D8 |
:10155000746F726520706F696E743A0020202000ED |
:1015600025326420002D2D004E6F2053442D436101 |
:1015700072642020200028536574202D3E2053746F |
:101580006F72652900214E6F204750532D466978B0 |
:101590002120004C6F61642073696E676C65205078 |
:1015A0006F736974696F6E00202532692E25316969 |
:1015B000562000202532693A2530326920005750E4 |
:1015C0003A2532642F256420446973743A253364C4 |
:1015D0006D2000414C543A2534692F25696D200057 |
:1015E000414C543A2534696D202020200044495252 |
:1015F0003A2025336425630043616D3A2025336921 |
:10160000006C6F616420706F696E743A0020202056 |
:1016100000253264002D2D004E6F2053442D436170 |
:1016200072642020200028536574202D3E204C6FCA |
:1016300061642900257300004F5051525354535692 |
:101640005748005859005A554546474841004942B5 |
:101650004A4A0000000000000000000000444C4D19 |
:1016600000000000004E0000004B00430A0D777799 |
:10167000772E4D696B726F4B6F707465722E646557 |
:101680002028632920486953797374656D73204756 |
:101690006D6248000A0D74686520757365206F6679 |
:1016A000207468697320736F66747761726520694E |
:1016B00073206F6E6C79207065726D6974746564E7 |
:1016C000200A0D6F6E206F726967696E616C204D24 |
:1016D000696B726F4B6F707465722D4861726477BD |
:1016E000617265005573657200486F54542056341A |
:1016F000004143542044534C004A657469005370C0 |
:10170000656B7472756D0050504D000A0D52656323 |
:1017100065697665723A2000532E42757300756EC6 |
:101720006B6E6F776E2E205573696E672050504D2B |
:101730002E2E2E006E6F7420737570706F7274652C |
:101740006420627920686172647761726521000AA1 |
:101750000D202D204C4942204E4F5420434F4D50D8 |
:10176000415449424C452021212121000A0D0A0DF6 |
:10177000212120426F6F746C6F61646572206E6FFF |
:101780007420636F6D70617469626C6520746F2082 |
:101790004861726477617265203E20322E322021CA |
:1017A000210A0D0A0D000A0D466C69676874436FC3 |
:1017B0006E74726F6C0A0D48617264776172653A7B |
:1017C00025642E25640A0D536F6674776172653A3D |
:1017D0005625642E253032642563200011241FBE57 |
:1017E000CFEFD0E4DEBFCDBF12E0A0E0B1E0E4E88F |
:1017F000F8E501E00BBF02C007900D92AE3EB107C5 |
:10180000D9F71DE0AEEEB2E001C01D92AD33B107D5 |
:10181000E1F77AEAE2E0F0E081E280935700149188 |
:1018200020EF37EF41E050E0C4EBD5E06FE0DA01A4 |
:10183000C9012F5F3F4F4F4F5F4FABBFFC018791F7 |
:101840008993615067FFF3CF84EE8ABD8091BC0518 |
:1018500080938805893138F086E08093140187E011 |
:10186000809313017BEAE4EBF5E06EE08191782749 |
:101870007095615067FFFACF8091C305781721F00A |
:10188000173911F40000FECF0E947D0D0C9441AC7D |
:101890000C9400008EE591E09F938F938EE199E187 |
:1018A0009F938F93E091C705F091C80509950F901C |
:1018B0000F900F900F90089580916C08E82FFF27EC |
:1018C000EE0FFF1FED50F64F808191818D5E9F4F8F |
:1018D00014F010920401808191818A5B9F4FCCF4B7 |
:1018E000809104018823A9F481E080930401809110 |
:1018F000FB058F5F8093FB05853038F088EE93E021 |
:101900009093270380932603089566E970E00E9470 |
:10191000E93D0895CF93DF93C82F882311F184E820 |
:1019200091E09F938F938EE199E19F938F93E09144 |
:10193000C705F091C805099580912601909127016E |
:101940006BE270E00E94B4ABCB018F5F809300012B |
:101950000F900F900F900F90873018F086E08093D3 |
:10196000000180918F08823328F590910001989FA3 |
:10197000802D112480930201CC23F1F068EC70E0FB |
:10198000892F0E94E93D8091000199279F938F93B1 |
:101990008CE891E09F938F938EE199E19F938F93D1 |
:1019A000E091C705F091C80509958DB79EB70696D9 |
:1019B0008DBF02C0809302019091DF08923340F402 |
:1019C00080910001899F802D11248093F80202C02C |
:1019D0009093F8023091E008323340F48091000196 |
:1019E000839F802D11248093F70202C03093F70269 |
:1019F0008091F80290910201981720F491509093F1 |
:101A0000F8029F5F8091F702891720F09150909320 |
:101A1000F7029F5F8091F8022091F702821728F069 |
:101A2000332319F021502093F802CC2309F462C02B |
:101A3000892F6AE00E9494AB892F99279F938F93F7 |
:101A4000809102010E9494AB99279F938F9387E91D |
:101A500091E09F938F93CEE1D9E1DF93CF93E09113 |
:101A6000C705F091C80509958DB79EB708968DBF3B |
:101A70008091F7028823E9F06AE00E9494AB892FF5 |
:101A800099279F938F938091F7020E9494AB992797 |
:101A90009F938F938CEA91E09F938F93DF93CF93E3 |
:101AA000E091C705F091C80509958DB79EB70896D6 |
:101AB0008DBF8091F8028823E9F06AE00E9494AB20 |
:101AC000892F99279F938F938091F8020E9494AB5E |
:101AD00099279F938F938EEB91E09F938F93DF9342 |
:101AE000CF93E091C705F091C80509958DB79EB7D2 |
:101AF00008968DBFDF91CF910895CFEFD0E4DEBF80 |
:101B0000CDBF88249924C1E07C2E14B815B88AE092 |
:101B10008AB98FE58BB9B7EECB2EB3E0DB2E2EEC76 |
:101B20003FEFC20ED31ED7FEFACF6624199B08C022 |
:101B30004C9B04C085E18093030108C086E101C08D |
:101B400089E18093030181E08093150481E887B9DE |
:101B50003E9A8FEF88B98BE184B981E085B9469AC6 |
:101B600084B7877F84BF8091600088618093600024 |
:101B70001092600084EC99E09093270380932603F1 |
:101B800010926304109262041092F8091092F709FF |
:101B90001092650410926404109267041092660417 |
:101BA00020910301243128F084EC94E0A0E0B0E01F |
:101BB00004C08BE095E0A0E0B0E0809343019093F7 |
:101BC0004401A0934501B09346012898293111F4AE |
:101BD000299A01C029980E945C1D0E942D1D0E9417 |
:101BE00026190E948A3A0E94182181E00E946835D5 |
:101BF0000E9494720E94D38286E00E9446A7809140 |
:101C00000301893111F4299A01C0299878940E941E |
:101C10004F34809103018431E8F488E190E02CE0B6 |
:101C20000FB6F894A895809360000FBE20936000D3 |
:101C300084ED91E09F938F938EE199E19F938F9331 |
:101C4000E091C705F091C80509950F900F900F908E |
:101C50000F90EECF80917503826080937503109290 |
:101C600078030E948B4984EF91E00E94F31C6C0181 |
:101C70008091750380FD05C0C6010E94FC1C88236D |
:101C8000B9F386E092E09F938F93AEE1AA2EA9E18B |
:101C9000BA2EBF92AF92E091C705F091C8050995A1 |
:101CA00080EA9FE00E94F31C6C01C0E0D0E00F903E |
:101CB0000F900F900F9009E819E0F1E0EF2EF9E096 |
:101CC000FF2E0E948B498091750380FD05C0C601DF |
:101CD0000E94FC1C8823B9F3F70180811816ACF42C |
:101CE0000BC00E948B498091750380FD05C0C60121 |
:101CF0000E94FC1C8823B9F3C6010E94FC1C8823A7 |
:101D000021F4F8018081882364F7F801808187FF3E |
:101D100019C02196DF93CF93219788E192E09F939A |
:101D20008F93BF92AF92E091C705F091C8050995D6 |
:101D30008091F0028F5F8093F0022DB73EB72A5F4B |
:101D40003F4F2DBF219684E090E0E80EF91E075F1B |
:101D50001F4FCC30D10508F4B4CFC0E0D0E006E886 |
:101D600019E0E1E0EE2EE9E0FE2EF801838187FD27 |
:101D70001DC0F70180811816CCF42196DF93CF9314 |
:101D800021978BE192E09F938F938EE199E19F934E |
:101D90008F93E091C705F091C805099582E0809383 |
:101DA00024032DB73EB72A5F3F4F2DBFF801838133 |
:101DB00080788383219624E030E0E20EF31E075FF3 |
:101DC0001F4FCC30D10588F20E944A0C90916A08CE |
:101DD0008091F002981728F48091E105806180934A |
:101DE000E105993020F088E080933E0102C0909395 |
:101DF0003E0189E392E09F938F93CEE1D9E1DF9397 |
:101E0000CF93E091C705F091C805099588EE93E05E |
:101E10000E94F31C6C010E9456210F900F900F90AE |
:101E20000F90C6010E94FC1C8823D9F389E592E03B |
:101E30009F938F93DF93CF93E091C705F091C805EF |
:101E4000099580E00E949E3E289880ED97E090934F |
:101E500027038093260385E58093FD058EE090E0BF |
:101E60000E946F329927182F00278FE090E00E9480 |
:101E70006F32080F111D1093F6020093F5028AE0ED |
:101E800090E00E946F329927182F00278BE090E096 |
:101E90000E946F32080F111D1093F4020093F30299 |
:101EA0000F900F900F900F900F5F1F4F39F08091A0 |
:101EB000F5029091F6028F5F9F4F41F41092F60267 |
:101EC0001092F5021092F4021092F3028091F30244 |
:101ED0009091F4029F938F938091F5029091F60276 |
:101EE0009F938F938EE592E09F938F93DF93CF9391 |
:101EF000E091C705F091C80509950E942E2788E852 |
:101F000093E190933D0180933C01C1E0C093FC05B7 |
:101F10008C2F0E948A0C809192080E9492A60E94A7 |
:101F20004A0C80ED97E00E94F31C6C018AEF90E070 |
:101F30000E94F31C83E08093C4071092EF0280910B |
:101F4000E5082DB73EB7285F3F4F2DBF84FF02C085 |
:101F5000C093F90212BC11BC8091FB02882311F0DE |
:101F60004798FECF80912A03882309F4A4C2809168 |
:101F70001801882309F49FC2F89480912A038150A4 |
:101F800080932A0378948091FB05882319F00E949E |
:101F90005C0C02C00E94474D0E948B49289880919A |
:101FA0005604882331F08091560481508093560462 |
:101FB0000EC080916F00806280936F001092F409D0 |
:101FC0001092F3098091E10588608093E10580918A |
:101FD0003C0190913D01019790933D0180933C011C |
:101FE00080913C0190913D01892B21F080917603F5 |
:101FF0008823C9F180913C0190913D01892BD9F44E |
:102000000E94933585E090E090933D0180933C01E0 |
:102010008091FE079091FF0701969093FF078093B0 |
:10202000FE078091E10581608093E1058091C507FD |
:1020300082608093C50780910B0190910C018F5FA6 |
:102040009F4F91F480915504882371F088EA91E6BE |
:10205000909327038093260380E890E090930C01EF |
:1020600080930B0101C028980E9444A880912A0304 |
:10207000882309F01EC280918305882319F00E94ED |
:10208000C69917C280912503882311F40E94B57266 |
:1020900080911101882311F00E94B61D0E947019D1 |
:1020A0000E94F714C6010E94FC1C882309F4FDC19C |
:1020B00084E190E0C80ED91E0E94741D80919208A0 |
:1020C000863019F40E94EC8804C0843011F40E9418 |
:1020D000969A80911504882331F180910B08909194 |
:1020E0000C088C52914074F08091D4079091D507E0 |
:1020F00080509240C4F480910B0890910C08835555 |
:1021000093408CF0639432E3361570F4809155045B |
:10211000882331F08091E00580628093E00504C05F |
:102120008093410401C0662480917603882329F4BA |
:1021300080916D0B8E3150F405C08091E105826075 |
:102140008093E1058091C50782600FC080912603CE |
:1021500090912703892B59F480913C0190913D0186 |
:10216000079728F08091C5078D7F8093C5078091E0 |
:10217000F902882361F080915604873940F010926B |
:10218000F90288E893E190932703809326038091D6 |
:102190000601882321F08150809306012EC0809390 |
:1021A0000706109229041092280410922704109216 |
:1021B000260410922504109224048091560488234A |
:1021C000E1F480910B0190910C018F5F9F4FA9F476 |
:1021D0002091F902223089F088E99AE3909327034D |
:1021E0008093260380E09CE090930C0180930B0188 |
:1021F000222319F082E08093F9028091A501893CA5 |
:1022000070F081508093A5018091E1058B7F8093D0 |
:10221000E1058091E40581608093E40551C08091DF |
:10222000FA0A8823F9F08091E10584608093E10542 |
:1022300089E08093360580910B0190910C018F5FAE |
:102240009F4F81F480915504882361F088E99AE3D7 |
:10225000909327038093260380E098EA90930C01E3 |
:1022600080930B01109229051092280510922705E2 |
:1022700010922605109225051092ED0A8FEF80939B |
:10228000620B10922C0B10922B0B10922E0B1092B3 |
:102290002D0B8FEF9FEF90932A0B8093290B1092B9 |
:1022A000450410924604109247041092480410927C |
:1022B00049048091E4058E7F8093E4051092A50186 |
:1022C00060910201262F33278091260190912701EA |
:1022D00028173907F4F080911D04806280931D0453 |
:1022E00080910B0190910C018F5F9F4F91F4809131 |
:1022F0002601909127010B9764F080E797E1909376 |
:1023000027038093260380E093E090930C01809351 |
:102310000B018091FA028F5F8093FA02813309F0FA |
:102320007BC01092FA0280916305882319F08150D6 |
:102330008093630580911D0481FF0AC08091F102A2 |
:102340009091F20201969093F2028093F10204C000 |
:102350005AEA852E55E0952E80911E0490911F0417 |
:102360008050944008F049C020910D0830910E082B |
:1023700040910F085091100880911E0190911F010B |
:10238000A0912001B0912101281739074A075B0766 |
:1023900064F480910D0890910E08A0910F08B091FF |
:1023A00010080596A11DB11D20C020910D08309187 |
:1023B0000E0840910F085091100880911E019091D5 |
:1023C0001F01A0912001B091210182179307A4075A |
:1023D000B5079CF480910D0890910E08A0910F080C |
:1023E000B09110080597A109B10980930D08909349 |
:1023F0000E08A0930F08B0931008862F9927019616 |
:102400002091260130912701821793072CF48091A7 |
:102410001D048F7D80931D040894811C911C82E70C |
:1024200088168BE0980609F040C0882499242091F2 |
:10243000F5023091F6022F5F3F4F3093F602209362 |
:10244000F5028091F3029091F40201969093F402C8 |
:102450008093F302832F9927682F8EE090E00E94EB |
:1024600077328091F5029091F6029070682F8FE09C |
:1024700090E00E9477328091F3029091F402892FCC |
:102480009927682F8AE090E00E9477328091F302CA |
:102490009091F4029070682F8BE090E00E94773268 |
:1024A00084E190E00E94F31C6C010E940C780E9471 |
:1024B0000D8371107A94772039F40E94D0778823A5 |
:1024C00019F08CE0782E46CD80912503882309F001 |
:1024D00041CD0E94B5723ECD1F920F920FB60F9262 |
:1024E00011248F939F93EF93FF938091080188238A |
:1024F000E1F48091150390911603019690931603D1 |
:1025000080931503FC01E851F94FE081ED3019F09B |
:102510008C3D910539F4109216031092150381E059 |
:1025200080930801E093C60004C010921603109235 |
:102530001503FF91EF919F918F910F900FBE0F9018 |
:102540001F9018951F920F920FB60F9211242F9380 |
:102550003F934F935F936F937F938F939F93AF932B |
:10256000BF93CF93EF93FF9390E08091FB02813074 |
:1025700029F48091C6008093CE00D1C08091FB02E7 |
:10258000823029F48091C60080930A06C8C08091E9 |
:10259000C60080930D0350911B035C3D10F0909397 |
:1025A0001C0380910D038D3009F06AC080911C03DB |
:1025B000823009F065C090931C03852F9927865FB0 |
:1025C000994FFC01329740812091170330911803F5 |
:1025D000241B3109DC0111978C91281B3109C90199 |
:1025E0009F70909318038093170346E09695879504 |
:1025F0004A95E1F7982F935C909319032F733070ED |
:10260000235C20931A038081981729F48C91281752 |
:1026100011F491E006C090E080910A038F5F8093EF |
:102620000A0380910C03882309F079C0992309F4E7 |
:1026300076C081E080930C03580F509309035150EA |
:10264000E52FFF27E65FF94F8DE0808380910C0630 |
:10265000823509F064C0C0915504CC2309F05FC0F5 |
:102660000E942E2788E190E02CE00FB6F894A89500 |
:10267000809360000FBE20936000C09324034FC07E |
:1026800020911C03822F992781309105F9F0823027 |
:1026900091051CF4892B21F040C0029711F13DC037 |
:1026A00080910D03833239F480910C03882319F44F |
:1026B00081E080931C0380910D0380930A0681E0E2 |
:1026C00080931B0380910D03992722C02F5F2093D5 |
:1026D0001C03E52FFF27E65FF94F80910D038083F0 |
:1026E00009C0E52FFF27E65FF94F80910D03808336 |
:1026F0005C3D20F45F5F50931B0302C010921C03EB |
:1027000020910D038091170390911803820F911D62 |
:10271000909318038093170302C010921C03FF913B |
:10272000EF91CF91BF91AF919F918F917F916F91D9 |
:102730005F914F913F912F910F900FBE0F901F907F |
:102740001895AC01A0E0B0E09D01A817B90748F4C6 |
:10275000E8EEF6E08191280F311D1196A417B50718 |
:10276000C8F33F70FD01E851F94FC90156E0969555 |
:1027700087955A95E1F7835C80831196FD01E851B6 |
:10278000F94F2F733070822F835C8083A751B94F2C |
:102790008DE08C93109208018091E8068093C6002A |
:1027A0000895A0E0B0E0E7EDF3E10C940DAC2C85CA |
:1027B0009D850E85BB2483E28093E8069F59909304 |
:1027C000E9062093EA0633E0E32EF12C002309F416 |
:1027D0009EC0CF84D888BE016D5E7F4FA989BA891B |
:1027E0000150109709F493C01097B9F0F601EB0D62 |
:1027F000F11DB3949081119791F4002349F1FB01ED |
:102800006E5F7F4FDB01C080D1806E5F7F4F0D9088 |
:10281000BC91A02DBB24015002C090E019C01097BC |
:10282000B9F0F601EB0DF11DB3944081119791F4CD |
:10283000002341F1FB016E5F7F4FDB01C080D1803F |
:102840006E5F7F4F0D90BC91A02DBB24015002C044 |
:1028500040E018C01097B1F0F601EB0DF11DB394F4 |
:102860001081119781F4002371F0FB013296DB0196 |
:10287000CD90DC90BF016E5F7F4FA081B181BB2402 |
:10288000015001C010E0F701E851F94F892F8695FA |
:102890008695835C80830894E11CF11CF701E85164 |
:1028A000F94F892F99278370907024E0880F991F22 |
:1028B0002A95E1F755279A0194E0369527959A9540 |
:1028C000E1F7822B835C80830894E11CF11CF70103 |
:1028D000E851F94F4F705070440F551F440F551F6A |
:1028E000812F992726E0969587952A95E1F7842BE5 |
:1028F000835C80830894E11CF11CF701E851F94FD7 |
:102900001F73135C10830894E11CF11C6ACFC7018C |
:102910000E94A113E9E00C9429ACA3E07A2F409126 |
:1029200009034650442309F458C0E72FFF27E65F08 |
:10293000F94F80818D537F5FE72FFF27E65FF94FC7 |
:1029400020812D537F5FE72FFF27E65FF94F30810E |
:102950003D537F5FE72FFF27E65FF94F60816D539F |
:102960007F5F9927880F991F880F991F522F5295C3 |
:102970005F70582B822F99278F709070F4E0880F2A |
:10298000991FFA95E1F7232F26952695282B832F5B |
:10299000992783709070E6E0880F991FEA95E1F718 |
:1029A000682B41504F3FC9F0EA2FFF27E65FF94FF0 |
:1029B0005083AF5F41504F3F81F0EA2FFF27E65F22 |
:1029C000F94F2083AF5F41504F3F39F0EA2FFF2787 |
:1029D000E65FF94F6083AF5FA5CF8DE096E09093FF |
:1029E000080380930703A350A09306030895A2E071 |
:1029F000B0E0EDEFF4E10C9413AC80910C0388236C |
:102A000009F418C40E948D1480910B06823609F0D7 |
:102A1000E4C280910C0699278037910509F4AFC074 |
:102A200081379105C4F48A36910509F441C28B3689 |
:102A3000910544F48B34910571F18636910509F4C2 |
:102A40006AC1CBC28D36910509F469C08E369105F5 |
:102A500009F44DC0C2C28437910541F18537910513 |
:102A60004CF48137910509F491C08337910509F43D |
:102A7000EAC0B3C28737910509F4DCC188379105F4 |
:102A80002CF48537910509F498C1A7C289379105BF |
:102A900009F47DC1A2C2E0910703F091080380818F |
:102AA0009181909392018093910197C28091090343 |
:102AB000A0910703B0910803853140F080E1E5EE75 |
:102AC000F5E00D9001928A95E1F70DC08D919D91F1 |
:102AD0000D90BC91A02D8093E5059093E605A09301 |
:102AE000E705B093E80580EF809304034BC0809125 |
:102AF00008018823E1F38DE490E09F938F9384EFA6 |
:102B000098E09F938F9381E08F938F938EE48F93C0 |
:102B10000E94D1138DB79EB707968DBF5EC2A0915C |
:102B20000703B09108031C91113081F48DE4E4EFA8 |
:102B3000F8E00D9001928A95E1F70E948A3319839B |
:102B40008091E1058F7E8093E10501C0198280911B |
:102B500008018823E1F381E090E09F938F93CE01F9 |
:102B600001969F938F9381E08F938F938DE48F9342 |
:102B70000E94D113ADB7BEB71796ADBF2EC281E08C |
:102B800080930F038FEF8093060127C28091550435 |
:102B90008823E1F5E0910703F0910803E0818E2F8F |
:102BA0008A508A3058F48983882311F481E003C065 |
:102BB000863010F085E0898361E00EC08E2F84514D |
:102BC0008A3070F48983882311F481E003C0863051 |
:102BD00010F085E0898360E089810E940C3412C086 |
:102BE000E983EF3F19F40E94ED33898389818823BB |
:102BF00011F481E003C0863010F085E0898389817B |
:102C00000E948D3280E00E948A0C03C00E94ED3346 |
:102C10008983809108018823E1F388E890E09F93FD |
:102C20008F938BE698E09F938F9381E090E09F9342 |
:102C30008F93CE0101969F938F9382E08F9381E0D3 |
:102C40008F9381E52DC12091070330910803D901AD |
:102C50008C918150853008F045C0F901818186361C |
:102C600009F040C0809155048823E1F52F5F3F4F64 |
:102C700088E8EBE6F8E0D9010D9001928A95E1F73A |
:102C8000F90182910E94FA328091AC089927AA2713 |
:102C9000BB27BC01CD0124EC39E040E050E00E94AC |
:102CA00075ABDC01CB018093890190938A01A093DD |
:102CB0008B01B0938C018091AD089927AA27BB277F |
:102CC000BC01CD010E9475ABDC01CB018093850175 |
:102CD00090938601A0938701B09388010E94ED3301 |
:102CE000898301C01982809108018823E1F381E082 |
:102CF00090E09F938F93CE0101969F938F9381E0F5 |
:102D00008F938F9383E58F930E94D1138DB79EB7D6 |
:102D100007968DBF2BC080915504882309F05DC1B3 |
:102D2000E0910703F0910803E0818E2F81508530F8 |
:102D300018F48E2F0E948D320E94ED33898380918A |
:102D400008018823E1F381E090E09F938F93CE0107 |
:102D500001969F938F9381E08F938F9386E48F9357 |
:102D60000E94D113ADB7BEB71796ADBF10915504F1 |
:102D7000112341F46EE670E089810E94E93D812FC4 |
:102D80000E948A0C809192080E9492A626C1198204 |
:102D90002981A0910703B0910803E3EFF9E08D9139 |
:102DA000992787FD909593A382A3822F8F5F8983B4 |
:102DB000282F32968C3098F310C1E0910703F091E0 |
:102DC000080380810E94DE398A83882319F481E018 |
:102DD000898301C01982809108018823E1F388E08A |
:102DE00090E09F938F938EE799E09F938F9321E0DC |
:102DF00030E03F932F9380910703909108039F93B6 |
:102E00008F933F932F93CE0102969F938F933F937F |
:102E10002F93CE01820F931F9F938F9384E08F9304 |
:102E200081E08F9385E58F930E94D113EDB7FEB7B4 |
:102E300073963CC080910603893008F4CEC020917F |
:102E40000703309108032F5F3F4F88E0AEE7B9E0FA |
:102E5000F90101900D928A95E1F7D9018E910E94B6 |
:102E60002E398A83882319F481E0898301C019826D |
:102E7000809108018823E1F321E030E03F932F9314 |
:102E8000CE0102969F938F933F932F93CE01820F93 |
:102E9000931F9F938F9382E08F9381E08F9387E5B9 |
:102EA0008F930E94D113EDB7FEB73B96EDBF95C04F |
:102EB00080915504882309F090C00E9449A6898317 |
:102EC000823019F0843009F088C020E430E0F894B2 |
:102ED0008091C1008F738093C1008091C9008F736E |
:102EE0008093C9008091C100877E8093C10080914A |
:102EF000C900877E8093C9008091C80087FF03C006 |
:102F00008091CE00F9CF8091C00087FF03C08091EF |
:102F1000C600F9CFE0910703F0910803E081E130AA |
:102F200021F482E08093FB022EC0E43611F421E804 |
:102F300030E081E08093FB02832F99278093CD00BE |
:102F40002093CC008091CD008093C5008091CC006F |
:102F50008093C4008091CA008F7D8093CA008091C5 |
:102F6000CA008F7E8093CA008091C9008B7F8093B6 |
:102F7000C9008091CA0084608093CA008091CA0011 |
:102F800082608093CA008091CA00877F8093CA00C4 |
:102F90008091C200877F8093C2008091C9008E7F9C |
:102FA0008093C9008091C10088618093C1008091A5 |
:102FB000C90088618093C9008091C10080688093B6 |
:102FC000C1008091C90080688093C90010926E0092 |
:102FD00010926F0010927000789480910C069927DF |
:102FE0008436910509F4BBC085369105ACF4813671 |
:102FF000910509F46FC0823691052CF48B3491054C |
:1030000009F45DC00FC18236910509F470C08336A2 |
:10301000910509F47FC006C18C36910509F4EDC015 |
:103020008D3691054CF48736910509F4F8C0883641 |
:10303000910509F4B2C0F6C08437910529F08637AE |
:10304000910509F4E8C0EEC080910903A09107033F |
:10305000B0910803803140F080E1E5EEF5E00D909D |
:1030600001928A95E1F70DC08D919D910D90BC91D3 |
:10307000A02D8093E5059093E605A093E705B09316 |
:10308000E805809108018823E1F31F9280910501F2 |
:103090008F9384E58F930E94D1138AEF809304036A |
:1030A0008FEF8093060180EA9FE00E94F31C9093CB |
:1030B000FD028093FC020F900F900F90B3C0E0913F |
:1030C0000703F0910803808191819093920180938E |
:1030D0009101A8C0E0910703F091080380818093DB |
:1030E0000701803298F08FE1809307010FC0A09113 |
:1030F0000703B09108038BE0EDEFF5E00D9001922E |
:103100008A95E1F780910606809306088FEF8093F9 |
:10311000060188C08091000390910103892B89F4F6 |
:10312000E0910703F0910803E081EE2351F08AE07B |
:10313000E89FC00111240E94F31C9093D80580934E |
:10314000D705E0910703F091080390818AE0989FEA |
:10315000C0011124909301038093000315C08FEFE9 |
:1031600080930601E0910703F091080390818AE0C3 |
:10317000989FC00111249093030380930203892B2D |
:1031800019F081E08093110380EA9FE00E94F31C14 |
:103190009093FD028093FC0245C08FEF809306015F |
:1031A000E0910703F0910803908197FD08C082E049 |
:1031B00080930E031092FF021092FE021AC09095A7 |
:1031C00080916E03892B80936E0391818AE0989F92 |
:1031D000C00111249093FF028093FE0284E080934B |
:1031E0000E0380EA9FE00E94F31C9093FD028093FF |
:1031F000FC0281E08093120315C08FEF80930601DB |
:10320000E0910703F0910803808180936F0381E0D0 |
:103210008093130307C081E08093100303C081E013 |
:103220008093140310920C0310920803109207036A |
:1032300010920603E3E0CE5F0C942FAC982F8091A0 |
:10324000C00085FFFCCF9093C60008950F931F9395 |
:1032500088E18093C1008091C00082608093C000AB |
:103260008091C10080688093C1008091C10080641A |
:103270008093C10000E010E00093C5008AE290E076 |
:103280008093C40080910203909103030E94F31C79 |
:103290009093DA058093D9058CED90E00E94F31CA1 |
:1032A000909309068093080682E08093DB0586E010 |
:1032B0008093DC051092DF058BE08093DD05109292 |
:1032C000DE051092E305809103018093E2051093DF |
:1032D000080300930703109206031F910F910895AE |
:1032E000A0E1B0E0E6E7F9E10C9412AC80910801AE |
:1032F000882309F48CC28091FC029091FD020E9407 |
:10330000FC1C882361F01092FF021092FE021092C2 |
:1033100003031092020310920103109200038091A4 |
:10332000FE029091FF02892B41F08091E606909178 |
:10333000E7060E94FC1C882329F48091120388234D |
:1033400009F460C080910801882309F45BC0809172 |
:103350000E030AE118E08430A8F00E94442780E5BB |
:1033600090E09F938F931F930F9381E08F938F93A0 |
:1033700088E48F930E94D1132DB73EB7295F3F4F4A |
:103380002DBF34C01092700380E894E09F938F9318 |
:1033900087E397E29F938F93E091C705F091C8056B |
:1033A000099584E190E09F938F931F930F9381E0A1 |
:1033B00090E09F938F938EE093E09F938F9382E0B2 |
:1033C0008F9381E08F9388E48F930E94D113809133 |
:1033D0000E03982F8F5F80930E032DB73EB7215FAA |
:1033E0003F4F2DBF943010F010920E038091FE02DB |
:1033F0009091FF020E94F31C9093E7068093E606EB |
:103400001092120380911303882351F180910801D7 |
:10341000882331F10E94442780E590E09F938F93A9 |
:103420008AE198E09F938F9321E030E03F932F93C0 |
:1034300088E291E09F938F933F932F938FE693E0E1 |
:103440009F938F9383E08F9381E08F938CE48F938E |
:103450000E94D113109213038DB79EB70F968DBFA4 |
:10346000809110038823D1F0809108018823B1F066 |
:103470008AE090E09F938F938BED95E09F938F93DD |
:1034800081E08F938F9386E58F930E94D1131092E2 |
:1034900010032DB73EB7295F3F4F2DBF8091140316 |
:1034A0008823D9F0809108018823B9F08BE090E05F |
:1034B0009F938F938DEF95E09F938F9381E08F93F0 |
:1034C000809105018F9387E48F930E94D11310920E |
:1034D00014038DB79EB707968DBF8091020390911C |
:1034E0000303892B41F08091D9059091DA050E9460 |
:1034F000FC1C882321F480911103882341F18091E1 |
:103500000801882321F10E94FB3C82E490E09F9314 |
:103510008F9384EC97E09F938F9381E08F938F93A9 |
:1035200084E48F930E94D113109211032DB73EB7FC |
:10353000295F3F4F2DBF80910203909103030097B5 |
:1035400031F00E94F31C9093DA058093D9058091A5 |
:10355000000390910103892B09F497C08091D7054E |
:103560009091D8050E94FC1C882309F48EC080919C |
:103570000801882309F489C08091000B9091010B08 |
:103580009093CA058093C9058091020B9091030B1B |
:103590009093CC058093CB052091E20A3091E30A09 |
:1035A0004091E40A5091E50ADA01C90163E0880F0D |
:1035B000991FAA1FBB1F6A95D1F7820F931FA41FE3 |
:1035C000B51F820F931FA41FB51F20914301309197 |
:1035D00044014091450150914601BC01CD010E943A |
:1035E000E9AB3093CE052093CD058091780490917E |
:1035F0007904A0917A04B0917B0449E0B595A79530 |
:10360000979587954A95D1F78093CF05809174045B |
:1036100090917504A0917604B091770439E0B59546 |
:10362000A795979587953A95D1F78093D005809186 |
:10363000800490918104A0918204B091830429E0D8 |
:10364000B595A795979587952A95D1F78093D1053C |
:103650008EE090E09F938F9389EC95E09F938F93FA |
:1036600081E08F938F9383E48F930E94D113809195 |
:103670000003909101030E94F31C9093D80580935E |
:10368000D7058DB79EB707968DBF809107018F3FF5 |
:1036900079F1992704E0880F991F0A95E1F780587E |
:1036A0009D4F40E150E0BC01CE0101960E94BFA9B0 |
:1036B00080E190E09F938F93CE0101969F938F932B |
:1036C00081E090E09F938F9387E091E09F938F93A9 |
:1036D00082E08F9381E08F9381E48F930E94D113D6 |
:1036E0008FEF809307012DB73EB7255F3F4F2DBF6A |
:1036F000809106088823C9F0809108018823A9F0E9 |
:1037000081E090E09F938F9386E098E09F938F9362 |
:1037100081E08F938F9382E48F930E94D113109254 |
:1037200006088DB79EB707968DBF80910F0388233B |
:10373000D1F0809108018823B1F086E490E09F9356 |
:103740008F9383EF99E09F938F9381E08F938F9373 |
:1037500080E58F930E94D11310920F032DB73EB7CF |
:10376000295F3F4F2DBF80910806909109060E9466 |
:10377000FC1C882309F44BC080910801882309F4BC |
:1037800046C08091A501882361F58091000B90913E |
:10379000010B9093F6058093F5058091020B9091B3 |
:1037A000030B9093F8058093F70580913204809382 |
:1037B000F905809131048093FA0588E090E09F93A9 |
:1037C0008F9385EF95E09F938F9381E08F9383E0B4 |
:1037D0008F938BE68F930E94D1138DB79EB7079678 |
:1037E0008DBF8091FB05853018F086E08093FB0546 |
:1037F00080912303882319F083E690E002C087EECE |
:1038000093E00E94F31C9093090680930806E4E07D |
:10381000C05F0C942EAC1F920F920FB60F92112422 |
:103820002F933F935F936F937F938F939F93AF9368 |
:10383000BF93EF93FF9380912503882329F0809114 |
:10384000250381508093250380914905882319F031 |
:1038500081508093490580912D03815080932D03E1 |
:103860008F3F09F051C089E080932D0380912B0395 |
:1038700090912C03019690932C0380932B038091BD |
:1038800012018F5F817080931201882349F4809127 |
:103890002A03843028F480912A038F5F80932A03BF |
:1038A000349903C081E08093230380912603909193 |
:1038B0002703892B11F180912603909127030B9701 |
:1038C00050F080912603909127030A979093270345 |
:1038D0008093260304C01092270310922603809140 |
:1038E00026039091270320910B0130910C01822334 |
:1038F0009323892B41F0479A07C08FEF9FEF909356 |
:103900000C0180930B01479880912303882309F4CD |
:103910005AC02091A501222309F055C08091D00AF8 |
:1039200083FF51C086B19927FC01E071F07084FFDC |
:1039300013C0809128039091290301969093290345 |
:10394000809328038091280390912903895E9340F6 |
:10395000D0F12093230337C080912803909129034D |
:10396000892B69F180912803909129038A5691400F |
:1039700030F5809128039091290369E270E00E945C |
:10398000A0AB8091280390912903860F971F9093F5 |
:1039900029038093280380912803909129030B9792 |
:1039A00050F080912803909129030A9790939201F7 |
:1039B0008093910104C0F0939201E09391011092E1 |
:1039C000290310922803FF91EF91BF91AF919F912E |
:1039D0008F917F916F915F913F912F910F900FBECB |
:1039E0000F901F90189520912B0330912C03280FD6 |
:1039F000391FC9010196089520912B0330912C03A2 |
:103A0000821B930B892F9927869580749070089557 |
:103A1000CF93DF930E94F31CEC01CE010E94FC1CAB |
:103A20008823D9F3DF91CF910895CF93DF930E943C |
:103A3000F31CEC0109C080911801882329F09093B0 |
:103A400018018FEC80937A00CE010E94FC1C982F05 |
:103A5000882389F3DF91CF9108959FB7F8945F98F9 |
:103A60003E9A469A8091B0008F708093B00080910A |
:103A7000B00083608093B0008091B1008B7380931D |
:103A8000B1008091B1008B608093B1001092B200C0 |
:103A90008FEF8093B3008091B00080688093B00076 |
:103AA000809170008A7F80937000809170008260A6 |
:103AB000809370009FBF08958AE090E00E94F31CFD |
:103AC000909308088093070882E085BD83EB84BD4E |
:103AD0008FEF88BD84EB87BD86E086BD80916E0048 |
:103AE000816080936E0008958091E40820917001B8 |
:103AF00082FF30C090919B088CE3989FB001112405 |
:103B000090919A0880E5989FA0011124922F9058D7 |
:103B100097FD9D5F9595959586E09802C0011124CB |
:103B20002091090130910A01281B390B30930A01B9 |
:103B300020930901421753072CF050930A01409338 |
:103B4000090108952617370784F070930A016093DE |
:103B500009010895822F992736E0880F991F3A9519 |
:103B6000E1F790930A01809309010895EF92FF9283 |
:103B70000F931F93CF93DF938091A208E82FFF2725 |
:103B8000E75BFE4F9681C08180911101813009F081 |
:103B900021C18091E60887FF05C0C0E0D0E0E0E0E9 |
:103BA000F0E046C0892F992787FD9095A92FB92F5E |
:103BB0002091B0043091B1044091B2045091B3040B |
:103BC000BC01CD010E9475AB97FF04C061587F4FC7 |
:103BD0008F4F9F4F7B018C0187E015950795F794D8 |
:103BE000E7948A95D1F78C2F992787FD9095A92F77 |
:103BF000B92F2091A8043091A9044091AA045091B2 |
:103C0000AB04BC01CD010E9475AB97FF04C06158A5 |
:103C10007F4F8F4F9F4FB7E0959587957795679525 |
:103C2000BA95D1F7F801E701C61BD70BE80BF90BE2 |
:103C30002091300530913105C901A3E0880F991F0B |
:103C4000AA95E1F7821B930BAA2797FDA095BA2F9F |
:103C5000C81BD90BEA0BFB0B80916E019927AA2791 |
:103C6000BB27BC01CD019E01AF010E9475AB97FF40 |
:103C700004C061507E4F8F4F9F4FFC01EB0179E0F4 |
:103C8000F595E795D795C7957A95D1F71091E40802 |
:103C90006091090170910A0112FF05C07093100133 |
:103CA00060930F0118C040910F0150911001809155 |
:103CB000A108282F3327CB01841B950BB9010E9443 |
:103CC000B4AB80910F0190911001860F971F9093D4 |
:103CD000100180930F0110FF14C080910F0190918B |
:103CE000100197FD0F9664E0959587956A95E1F729 |
:103CF000AA2797FDA095BA2FC80FD91FEA1FFB1F4F |
:103D000015C080910F019091100197FD0F9654E01E |
:103D1000959587955A95E1F7AA2797FDA095BA2F13 |
:103D20008C1B9D0BAE0BBF0BFD01EC012091D60847 |
:103D3000222321F1332780911F0390912003829F3A |
:103D4000A001839F500D929F500D1124CA01AA27F4 |
:103D500097FDA095BA2F8C0F9D1FAE1FBF1F2F5F21 |
:103D60003F4F442737FD4095542FBC01CD010E94A1 |
:103D7000E9AB3093200320931F0304C0D0932003AA |
:103D8000C0931F0380919A08282F3327220F331FD7 |
:103D9000220F331F80911F039091200382179307F6 |
:103DA0007CF080919B08282F3327220F331F220F8E |
:103DB000331F80911F03909120032817390724F4A3 |
:103DC0003093200320931F03809111018F5F809314 |
:103DD0001101F9C0892F992787FD9095A92FB92F37 |
:103DE0002091A8043091A9044091AA045091AB04F9 |
:103DF000BC01CD010E9475AB97FF04C061587F4F95 |
:103E00008F4F9F4F7B018C0187E015950795F794A5 |
:103E1000E7948A95D1F78C2F992787FD9095A92F44 |
:103E2000B92F2091B0043091B1044091B204509167 |
:103E3000B304BC01CD010E9475AB9B01AC0197FF9F |
:103E400004C021583F4F4F4F5F4FC7E055954795EE |
:103E500037952795CA95D1F72E0D3F1D401F511F4D |
:103E600080916D019927AA27BB27BC01CD010E9433 |
:103E700075AB97FF04C061507E4F8F4F9F4FFC0181 |
:103E8000EB01B9E0F595E795D795C795BA95D1F7C8 |
:103E900080916F019927A6E0880F991FAA95E1F7F5 |
:103EA00040910D0150910E012091A1083327841BF0 |
:103EB000950BB9010E94B4AB80910D0190910E0158 |
:103EC000860F971F90930E0180930D018091E40857 |
:103ED00081FF14C080910D0190910E0197FD0F9606 |
:103EE00074E0959587957A95E1F7AA2797FDA095B7 |
:103EF000BA2FC80FD91FEA1FFB1F15C080910D01F3 |
:103F000090910E0197FD0F9664E0959587956A95BF |
:103F1000E1F7AA2797FDA095BA2F8C1B9D0BAE0B3E |
:103F2000BF0BFD01EC012091D708222321F133279B |
:103F300080911D0390911E03829FA001839F500DCD |
:103F4000929F500D1124CA01AA2797FDA095BA2F60 |
:103F50008C0F9D1FAE1FBF1F2F5F3F4F442737FDA4 |
:103F60004095542FBC01CD010E94E9AB30931E0354 |
:103F700020931D0304C0D0931E03C0931D038091A2 |
:103F80009E08282F3327220F331F220F331F8091C3 |
:103F90001D0390911E03821793077CF080919F0868 |
:103FA000282F3327220F331F220F331F80911D0329 |
:103FB00090911E032817390724F430931E03209391 |
:103FC0001D0310921101E6E0CDB7DEB70C942CACC6 |
:103FD0001F920F920FB60F9211242F933F934F937E |
:103FE0005F938F939F93EF93FF9380912E0388238A |
:103FF00009F0DDC08091B00086FF9FC08091B000C5 |
:104000008F7B8093B000E09131032091A008EE23D4 |
:10401000D9F433278DED96E0289FA001299F500DFC |
:10402000389F500D1124CA0120912F033091300385 |
:10403000821B930B909322038093210310923003F1 |
:1040400010922F03469AB0C02E1738F48AE090E001 |
:104050009093220380932103A7C089EA93E0909371 |
:104060002203809321038E2F992783309105D9F065 |
:104070008430910534F48130910549F0029761F064 |
:1040800020C08430910591F0059799F01AC0809175 |
:104090001F039091200304C080911D0390911E0383 |
:1040A00087559E4F1DC08091AC0A05C08091850A3E |
:1040B00002C08091B50A9927880F991F880F991F10 |
:1040C000EFCFFF27EE0FFF1FED50F64F208131811C |
:1040D000220F331F8091210390912203820F931F9F |
:1040E00090932203809321038091210390912203D6 |
:1040F00055E08D3D950718F08CED95E005C087578C |
:10410000914030F487E791E090932203809321035C |
:1041100020912103309122032C5B30403093220305 |
:104120002093210380912F0390913003820F931FDE |
:104130009093300380932F0337C08091B000806448 |
:104140008093B0008CEB90E0909322038093210346 |
:1041500080912F039091300384549F4F90933003AC |
:1041600080932F0380912403882321F080915604AB |
:10417000882321F480912403823011F4469801C0F1 |
:10418000469A809131038F5F80933103282F332724 |
:104190008091A00899270196821793072CF481E05B |
:1041A000809311011092310381E080932E032091BE |
:1041B00021033091220341E02F37340730F08FEF95 |
:1041C0008093B3002F5F30400FC02F3F3105C9F0FF |
:1041D000C0F0A9014F5F50404F37510550F480E8BF |
:1041E0008093B30020583040309322032093210362 |
:1041F00012C08FEF8093B3005093220340932103AA |
:104200000AC0809121038093B30010922203109280 |
:10421000210310922E03FF91EF919F918F915F9157 |
:104220004F913F912F910F900FBE0F901F901895B7 |
:1042300010927C008FEC80937A0008958091150491 |
:10424000609116017091170120913E03882379F047 |
:10425000CB01AA27BB27332727FD3095432F532FA8 |
:10426000BC01CD010E9475ABDC01CB0116C084E01E |
:10427000660F771F8A95E1F7CB01AA27BB27332763 |
:1042800027FD3095432F532FBC01CD010E9475AB04 |
:10429000DC01CB010497A109B10980933603909307 |
:1042A0003703A0933803B09339030895CF93DF9376 |
:1042B00010923E030E941E2183E090E00E946F3224 |
:1042C000C82FDD27C03FD10508F42A96C7BD8C2F23 |
:1042D000809588BD86E990E00E94151D80911C01A3 |
:1042E00090911D018152934010F0C0EFD0E0C63094 |
:1042F000D10510F1C7BD8C2F809588BD84E690E074 |
:104300000E94151D85E994E09F938F938EE199E1BA |
:104310009F938F93E091C705F091C805099580910F |
:104320001C0190911D010F900F900F900F908152E2 |
:10433000934010F42197DBCFC09317086C2F83E0D4 |
:1043400090E00E9477328091780880FF0AC08091C7 |
:1043500017088A508C3D28F08091E0058064809396 |
:10436000E00580E180931501809115048823E9F030 |
:1043700080910301873150F4CC38D105B0F480EA44 |
:1043800090E08C1B9D0B6AE170E009C0CA3AD10530 |
:1043900060F48CEB90E08C1B9D0B63E170E00E945D |
:1043A000A0ABCB01805F8093150180911501282F70 |
:1043B000332780911C0190911D01829FA001839F52 |
:1043C000500D929F500D1124CA01AA27BB2780933C |
:1043D0001E0190931F01A0932001B09321018CE254 |
:1043E00091E00E94151DDF91CF9108951F920F92C9 |
:1043F0000FB60F921124EF92FF920F931F932F93FA |
:104400003F934F935F936F937F938F939F93AF935C |
:10441000BF93CF93DF93EF93FF9380915603282FA1 |
:104420003327442755278F5F80935603F9012231A4 |
:10443000310508F0ECC4EA5BFF4F0C943BAC809173 |
:1044400078009091790046C0809178009091790031 |
:10445000EBC1809178009091790090935A038093FA |
:104460005903FBC18091BA049091BB04209178005C |
:1044700030917900821B930B90930A08809309086E |
:104480008091090890910A089093640380936303D4 |
:1044900003C280917800909179002091BC04309102 |
:1044A000BD04821B930B909316088093150880918E |
:1044B0001508909116089093660380936503A9C42C |
:1044C00080915D0390915E03209178003091790096 |
:1044D000820F931F90935E0380935D0381E09AC4E3 |
:1044E00080915B0390915C0320917800309179007A |
:1044F000820F931F90935C0380935B0384E08AC4D4 |
:104500008091E50883FF26C08091260190912701C4 |
:104510009C01220F331F280F391F409178005091C2 |
:1045200079008BE090E0489FB001499F700D589F43 |
:10453000700D1124CB016EE170E00E94A0AB260F3C |
:10454000371F369527953695279530932701209369 |
:10455000260142C080916C0390916D03892B91F4E8 |
:104560002091780030917900C90153E0880F991F9C |
:104570005A95E1F7820F931F820F931F90936D035B |
:1045800080936C032091780030917900C90143E059 |
:10459000880F991F4A95E1F7820F931F820F931F8F |
:1045A00020916C0330916D038217930718F02E5FF2 |
:1045B0003F4F02C02250304030936D0320936C0374 |
:1045C00080916C0390916D036FE170E00E94A0AB4D |
:1045D000709327016093260185E01CC480917800C8 |
:1045E0009091790090930C0880930B0880910B08B0 |
:1045F00090910C084091B6045091B704841B950B20 |
:104600006091B504262F332727FD3095821B930B2D |
:10461000909344038093430380911504882309F009 |
:1046200071C0809143039091440302977CF172E042 |
:104630004E3E57070CF0A7C0209157033091580306 |
:104640002B5F3F4F30935803209357032550304042 |
:1046500080911E0490911F04845F914030F4215F8B |
:104660003F4F309358032093570380915703909105 |
:104670005803853691050CF486C04F5F5F4F509309 |
:10468000B7044093B6048456904037C080914303EA |
:10469000909144038F5F9F4F0CF075C082E04732CA |
:1046A00058070CF470C020915703309158032550DF |
:1046B000304030935803209357032B5F3F4F809136 |
:1046C0001E0490911F04845F914030F42F503040BD |
:1046D00030935803209357038091570390915803C8 |
:1046E0007FEF8C3997070CF04EC0415050405093EB |
:1046F000B7044093B6048C599F4F9093580380930E |
:10470000570341C08091A10A9091A20A8F5C9F41FA |
:10471000D4F180914303909144030297ACF020912F |
:10472000570330915803C901019690935803809321 |
:104730005703895893413CF166301CF46F5F6093D6 |
:10474000B504275833411BC0809143039091440323 |
:104750008F5F9F4FC4F42091570330915803C901D4 |
:104760000197909358038093570388579C4E5CF4AD |
:104770006B3F1CF061506093B50429573C4E309359 |
:1047800058032093570380914303909144039C0165 |
:10479000442737FD4095542F809170049091710407 |
:1047A000A0917204B0917304820F931FA41FB51FD0 |
:1047B0008093700490937104A0937204B093730477 |
:1047C00020917004309171044091720450917304EF |
:1047D00057FF04C021503C4F4F4F5F4F9AE0559513 |
:1047E0004795379527959A95D1F7809170049091C8 |
:1047F0007104A0917204B0917304821B930BA40BFB |
:10480000B50B8093700490937104A0937204B093DD |
:104810007304F7C080915B0390915C032091780052 |
:1048200030917900820F931F90935C0380935B0318 |
:1048300010925503F1C22091780030917900809157 |
:10484000590390915A03280F391F8FEF97E0821B6D |
:10485000930B90934A038093490380911401DAC229 |
:104860008091BA049091BB04209178003091790036 |
:10487000821B930B90930A08809309088091090882 |
:1048800090910A082091630330916403820F931F73 |
:10489000909348038093470380911301BBC280919A |
:1048A0007800909179002091BC043091BD04821B66 |
:1048B000930B90931608809315088091150890919A |
:1048C00016082091650330916603820F931F909321 |
:1048D0004603809345039DC220915D0330915E03A2 |
:1048E0008091780090917900280F391F220F331F93 |
:1048F000220F331F30935E0320935D03C90137FD00 |
:10490000079603E0959587950A95E1F790934E03F6 |
:1049100080934D0380915F0390916003820F931FFA |
:1049200097FD0196959587959093600380935F031B |
:104930002091C6043091C704821B930B90932501EC |
:1049400080932401209153033091540380912401DA |
:1049500090912501280F391F37FF02C02F5F3F4F6D |
:10496000359527953093540320935303B7CD209169 |
:104970005B0330915C038091780090917900280F5F |
:10498000391F220F331F220F331F30935C032093F4 |
:104990005B03C90137FD0796A3E095958795AA9516 |
:1049A000E1F790934C0380934B03809161039091C6 |
:1049B0006203820F931F97FD0196959587959093BB |
:1049C0006203809361032091C4043091C504821B6B |
:1049D000930B9093230180932201209151033091F6 |
:1049E00052038091220190912301280F391F37FF34 |
:1049F00002C02F5F3F4F3595279530935203209388 |
:104A0000510383E007C280911504882309F180E0F7 |
:104A10000E94CAA49B01AC0120503F4F4F4F5F4FF3 |
:104A200057FF06C09B01AC0121503D4F4F4F5F4FD8 |
:104A300079E055954795379527957A95D1F7209345 |
:104A4000320330933303409334035093350310C043 |
:104A50008091500490915104A0915204B09153045C |
:104A60008093320390933303A0933403B0933503C0 |
:104A70001092560381E08093180180913A0390913F |
:104A80003B03019690933B0380933A038091780017 |
:104A90009091790090931D0180931C0180911504E1 |
:104AA000882309F472C080911C0190911D017C0142 |
:104AB000002711278091360390913703A091380386 |
:104AC000B0913903E81AF90A0A0B1B0BE09267034D |
:104AD000F09268030093690310936A0380911501B3 |
:104AE000282F33274427552780911E0190911F01BD |
:104AF000A0912001B0912101BC01CD010E94E9AB40 |
:104B000080911E0190911F01A0912001B09121017F |
:104B1000821B930BA40BB50B80931E0190931F0176 |
:104B2000A0932001B093210180911E0190911F015B |
:104B3000A0912001B09121018E0D9F1DA01FB11FDA |
:104B400080931E0190931F01A0932001B093210137 |
:104B500080910D0890910E08A0910F08B091100857 |
:104B600020911E0130911F0140912001509121019F |
:104B7000821B930BA40BB50B8093500490935104AC |
:104B8000A0935204B093530444C180911C019091AE |
:104B90001D01AA27BB27C0916703D0916803E0914C |
:104BA0006903F0916A03C80FD91FEA1FFB1FC09366 |
:104BB0006703D0936803E0936903F0936A038091DD |
:104BC0006B038F5F80936B03803108F422C1809167 |
:104BD0001E0190911F01A0912001B09121019C0123 |
:104BE000AD0163E0220F331F441F551F6A95D1F7B3 |
:104BF000281B390B4A0B5B0B2C0F3D1F4E1F5F1FF1 |
:104C00008091360390913703A0913803B091390316 |
:104C1000281B390B4A0B5B0B57FF04C0295F3F4F22 |
:104C20004F4F5F4F03E055954795379527950A9568 |
:104C3000D1F720931E0130931F0140932001509320 |
:104C40002101C0910D08D0910E08E0910F08F0915C |
:104C5000100880911E0190911F01A0912001B09138 |
:104C60002101C81BD90BEA0BFB0BC0935004D09356 |
:104C70005104E0935204F093530420913F03309188 |
:104C80004003409141035091420357FF04C0215F0C |
:104C90003F4F4F4F5F4F14E05595479537952795F8 |
:104CA0001A95D1F780913F0390914003A091410361 |
:104CB000B0914203821B930BA40BB50B80933F036F |
:104CC00090934003A0934103B093420380913F032C |
:104CD00090914003A0914103B09142038C0F9D1F1E |
:104CE000AE1FBF1F80933F0390934003A0934103E7 |
:104CF000B093420380913F0390914003A091410300 |
:104D0000B0914203B7FF03C00F96A11DB11DC4E0CF |
:104D1000B595A79597958795CA95D1F72091500499 |
:104D200030915104281B390B64E0213036071CF008 |
:104D300020E034E006C07CEF2030370714F420E098 |
:104D40003CEF80913C0390913D0380913C03909116 |
:104D50003D0397FF03C0909581959F4FA901F3E014 |
:104D6000440F551FFA95E1F78D5B9240C4F0809196 |
:104D70003C0390913D039C01E4E0220F331FEA9530 |
:104D8000E1F7281B390B240F351F37FF02C0215FC5 |
:104D90003F4F74E0359527957A95E1F717C08091DC |
:104DA0003C0390913D039C0165E0220F331F6A95FF |
:104DB000E1F7281B390B240F351F37FF02C0215E96 |
:104DC0003F4F45E0359527954A95E1F730933D03F0 |
:104DD00020933C038091670390916803A09169033D |
:104DE000B0916A03B7FF03C00196A11DB11DB5952F |
:104DF000A795979587958093670390936803A093F1 |
:104E00006903B0936A0388E080936B0302C0109239 |
:104E1000560382E0809355038091550380937C0074 |
:104E200080915603882319F08FEC80937A00FF91CC |
:104E3000EF91DF91CF91BF91AF919F918F917F9132 |
:104E40006F915F914F913F912F911F910F91FF9023 |
:104E5000EF900F900FBE0F901F90189590E2EAE12F |
:104E6000F8E08FE49193815087FFFCCF08959091F3 |
:104E70007003903540F4E92FFF27E65EF74F8083FB |
:104E80009F5F909370030895A0E0B0E0EAE4F7E23A |
:104E90000C940EAC20916E0320FF0AC080916F032A |
:104EA000882311F0815002C08091280180936F0304 |
:104EB00021FF0CC090916F0380912801981719F47D |
:104EC00010926F0303C09F5F90936F03822F992707 |
:104ED00080FF04C081FF02C010926F030E942E2742 |
:104EE00080916F03282F332707E317E2C091C7058E |
:104EF000D091C8058A3098F481E1809370033F9384 |
:104F00002F9387E994E09F938F931F930F93FE0154 |
:104F100009952DB73EB72A5F3F4F2DBF12C080E1E4 |
:104F2000809370033F932F938CE994E09F938F932A |
:104F30001F930F93FE0109954DB75EB74A5F5F4F10 |
:104F40004DBF20916F03822F9927AA27BB27FC0111 |
:104F5000439710F00C944830E85AFF4F07E317E2EC |
:104F6000C091C705D091C8050C943BAC109270035A |
:104F700081EA94E09F938F9357E3E52E57E2F52E55 |
:104F80001F930F93FE01099584E1809370030F90A6 |
:104F90000F900F900F9081E690E09F938F9386E0A3 |
:104FA00090E09F938F9382E090E09F938F93809106 |
:104FB00003016AE00E9494AB892F99279F938F93F6 |
:104FC000809103010E9494AB99279F938F9381EB6B |
:104FD00094E09F938F931F930F93E091C705F091F7 |
:104FE000C805099588E2809370038DB79EB70E9629 |
:104FF0008DBF85EF98E09F938F9380910101992752 |
:105000009F938F9389EC94E09F938F931F930F93BB |
:10501000E091C705F091C80509958091E1059927B0 |
:10502000EDB7FEB73896EDBFEC01C071D07084FFCC |
:105030000BC08CE38093700387ED94E09F938F9374 |
:105040001F930F930C943E3090913605992351F1A4 |
:105050008CE380937003892F99279F938F9384EE1D |
:1050600094E09F938F93FF92EF92E091C705F091A8 |
:10507000C8050995DF93CF939091360581E1989FFC |
:10508000C00111248D5F924F9F938F93FF92EF92F7 |
:10509000E091C705F091C80509952DB73EB7245F8B |
:1050A0003F4FFFC59091E005992371F08CE3809309 |
:1050B0007003892F99279F938F938CEE94E09F9391 |
:1050C0008F93FF92EF927FC5909176039923B9F069 |
:1050D0008CE380937003892F99279F938F9383E0AC |
:1050E00095E09F938F93FF92EF92E091C705F09127 |
:1050F000C80509958DB79EB706968DBFD2C780911A |
:105100003C0190913D01069730F48CE3809370034D |
:1051100089E195E0AFC790916D0B9E3108F0C1C752 |
:105120008CE380937003892F99279F938F9386E256 |
:1051300095E017C110927003809150049091510432 |
:10514000A0915204B0915304BC01CD0125E030E0A0 |
:1051500040E050E00E94E9AB3F932F938AE395E053 |
:105160009F938F931F930F93FE01099584E1809382 |
:1051700070032DB73EB72A5F3F4F2DBF80914C047F |
:1051800090914D04A0914E04B0914F04BC01CD010B |
:1051900025E030E040E050E00E94E9AB3F932F93E0 |
:1051A00087E495E09F938F931F930F93E091C7053A |
:1051B000F091C805099588E2809370034DB75EB7FA |
:1051C0004A5F5F4F4DBF80911C0190911D019F93DD |
:1051D0008F9384E595E09F938F931F930F93E091B6 |
:1051E000C705F091C80509958CE3809370038DB7CE |
:1051F0009EB706968DBF87B599279F938F9381E6BB |
:1052000095E09F938F931F930F93E091C705F091C3 |
:10521000C8050995EDB7FEB73696EDBF8091150428 |
:10522000882309F43EC789E3809370038EE695E0F6 |
:105230009F938F931F930F93E091C705F091C8053B |
:1052400009958DE4809370030F900F900F900F904D |
:105250008091150199279F938F9382E795E09F9303 |
:105260008F931F930F93E091C705F091C80509959F |
:105270002DB73EB72A5F3F4F14C51092700385E7E4 |
:1052800095E09F938F9347E3E42E47E2F42E1F931C |
:105290000F93FE01099584E1809370030F900F90A6 |
:1052A0000F900F908091B0049091B104A091B2043E |
:1052B000B091B304B7FF04C081509C4FAF4FBF4FB4 |
:1052C0003AE0B595A795979587953A95D1F7BF930D |
:1052D000AF939F938F9382E895E09F938F93FF9274 |
:1052E000EF92E091C705F091C805099588E2809397 |
:1052F00070034DB75EB7485F5F4F4DBF8091A80404 |
:105300009091A904A091AA04B091AB04B7FF04C086 |
:1053100081509C4FAF4FBF4F2AE0B595A795979509 |
:1053200087952A95D1F7BF93AF939F938F9381E988 |
:1053300095E09F938F93FF92EF92E091C705F091D4 |
:10534000C80509958CE3809370038DB79EB70896C6 |
:105350008DBF8091D90A9091DA0A9F938F9380EA4A |
:1053600095E09F938F93FF92EF927CC291E0F92E8C |
:10537000C1E0D0E005EF19E09F2D969584E1989F5C |
:10538000C001112480937003F801828193819F935F |
:105390008F932196DF93CF932197808191819F9363 |
:1053A0008F93DF93CF938FEA95E09F938F9387E35B |
:1053B00097E29F938F93E091C705F091C8050995F7 |
:1053C0002DB73EB7245F3F4F2DBF32E0F30E22963C |
:1053D0000C5F1F4F48E04F1578F663C610927003BC |
:1053E00080916D08E82FFF27EE0FFF1FED50F64F5D |
:1053F000808191819F938F9380916C08E82FFF2784 |
:10540000EE0FFF1FED50F64F808191819F938F9398 |
:1054100081EC95E09F938F931F930F93FE01099565 |
:1054200084E1809370038DB79EB708968DBF8091FD |
:105430006F08E82FFF27EE0FFF1FED50F64F80811A |
:1054400091819F938F9380916E08E82FFF27EE0F35 |
:10545000FF1FED50F64F8081918181589F4F9F93A0 |
:105460008F9381ED95E09F938F931F930F93E0911E |
:10547000C705F091C805099588E280937003EDB7E0 |
:10548000FEB73896EDBF80917108E82FFF27EE0F29 |
:10549000FF1FED50F64F8081918181589F4F9F9360 |
:1054A0008F9380917008E82FFF27EE0FFF1FED50BC |
:1054B000F64F8081918181589F4F9F938F9381EE0A |
:1054C00095E09F938F931F930F93E091C705F09101 |
:1054D000C80509958CE3809370032DB73EB7285F0C |
:1054E0003F4F2DBF80917308E82FFF27EE0FFF1F5E |
:1054F000ED50F64F8081918181589F4F9F938F93FC |
:1055000080917208E82FFF27EE0FFF1FED50F64F36 |
:105510008081918181589F4F9F938F9381EF95E078 |
:105520009F938F931F930F93E091C705F091C80548 |
:1055300009954DB75EB7485F5F4F4EC31092700339 |
:1055400081E096E09F938F9387E3E82E87E2F82E21 |
:105550001F930F93FE01099584E1809370030F90D0 |
:105560000F900F900F908091C6049091C7049C01FA |
:1055700097FF02C0215F3F4F207F821B930B97FD57 |
:105580000196959587959F938F938091C6049091EE |
:10559000C70497FD0F96B4E095958795BA95E1F706 |
:1055A0009F938F932091C6043091C70437FF02C0A8 |
:1055B000295F3F4FA3E035952795AA95E1F78091A4 |
:1055C0004D0390914E03821B930B9F938F938FE01B |
:1055D00096E09F938F93FF92EF92E091C705F09131 |
:1055E000C805099588E2809370038DB79EB70A9627 |
:1055F0008DBF8091C4049091C5049C0197FF02C0A7 |
:10560000215F3F4F207F821B930B97FD019695955D |
:1056100087959F938F938091C4049091C50497FDC3 |
:105620000F96E4E095958795EA95E1F79F938F9320 |
:105630002091C4043091C50437FF02C0295F3F4F59 |
:1056400073E0359527957A95E1F780914B0390911A |
:105650004C03821B930B9F938F9381E296E09F9361 |
:105660008F93FF92EF92E091C705F091C8050995DD |
:105670008CE380937003EDB7FEB73A96EDBF80914F |
:10568000C2049091C30497FD0196959587959F93C9 |
:105690008F938091C2049091C3042091490330916B |
:1056A0004A03821B930B9F938F9383E396E0ECC294 |
:1056B0001092700382E496E09F938F931F930F9351 |
:1056C000FE01099584E1809370030F900F900F9075 |
:1056D0000F908091BC049091BD049F938F93809113 |
:1056E0004503909146039F938F938FE496E09F9399 |
:1056F0008F931F930F93E091C705F091C80509950B |
:1057000088E2809370034DB75EB7485F5F4F4DBF2F |
:105710008091BA049091BB049F938F93809147032B |
:10572000909148039F938F938EE596E09F938F937C |
:105730001F930F93E091C705F091C80509958CE37D |
:10574000809370038DB79EB708968DBF8091B60485 |
:105750009091B7049F938F9380914303909144035A |
:105760009F938F938DE696E09F938F931F930F9354 |
:10577000E091C705F091C8050995EDB7FEB73896D9 |
:1057800079C01092700380912601909127016AE000 |
:1057900070E00E94B4AB9F938F938091260190910B |
:1057A00027016AE070E00E94B4AB7F936F938CE7AF |
:1057B00096E09F938F931F930F93FE01099584E1C9 |
:1057C000809370032DB73EB7285F3F4F2DBF809168 |
:1057D000670B9091680B6AE070E00E94A0AB9F930A |
:1057E0008F938091670B9091680B6AE070E00E9444 |
:1057F000A0AB7F936F9380E996E09F938F931F9365 |
:105800000F93E091C705F091C805099588E2809350 |
:1058100070034DB75EB7485F5F4F4DBF8091690B16 |
:1058200090916A0B9F938F9384EA96E09F938F9356 |
:105830001F930F93E091C705F091C80509958CE37C |
:10584000809370038DB79EB706968DBF80916B0BCA |
:1058500090916C0B9F938F9384EB96E09F938F9323 |
:105860001F930F93E091C705F091C8050995EDB717 |
:10587000FEB73696EDBF15C41092700386EC96E025 |
:105880009F938F931F930F93FE01099588E2809356 |
:1058900070030F900F900F900F90809156049927EE |
:1058A0009F938F938FEC96E09F938F931F930F930B |
:1058B000E091C705F091C80509958CE380937003CA |
:1058C0002DB73EB72A5F3F4F2DBF8091F209992730 |
:1058D00001979F938F938FED96E071C110927003A3 |
:1058E0008FEE96E09F938F931F930F93FE01099580 |
:1058F00084E1809370030F900F900F900F90809130 |
:1059000002016AE00E9494AB892F99279F938F939D |
:10591000809102010E9494AB99279F938F938FEF00 |
:1059200096E09F938F931F930F93E091C705F0919B |
:10593000C805099588E2809370038DB79EB70896D5 |
:105940008DBF8091F7026AE00E9494AB892F99275E |
:105950009F938F938091F7020E9494AB99279F9316 |
:105960008F938DE097E09F938F931F930F93E09118 |
:10597000C705F091C80509958CE380937003EDB7D6 |
:10598000FEB73896EDBF8091F8026AE00E9494ABB2 |
:10599000892F99279F938F938091F8020E9494AB4F |
:1059A00099279F938F938BE197E09F938F931F93FA |
:1059B0000F936EC157E5C52E54E0D52E20E030E0A0 |
:1059C000E90143E0F42EC0937003F60181916F0169 |
:1059D00099279F938F9389010F5F1F4F1F930F93F9 |
:1059E00089E297E09F938F9387E397E29F938F934A |
:1059F000E091C705F091C80509952DB73EB7285F1E |
:105A00003F4F2DBFFA9464969801F7FEDCCF49C34F |
:105A10009BE5C92E94E0D92EC0E0D0E08E0183E052 |
:105A2000F82E00937003F60181916F0199279F93DF |
:105A30008F932596DF93CF9386E397E09F938F9381 |
:105A400087E397E29F938F93E091C705F091C80594 |
:105A500009952DB73EB7285F3F4F2DBFFA940C5ED6 |
:105A60001F4F2497F7FEDDCF1CC31092700383E411 |
:105A700097E09F938F931F930F93FE01099584E105 |
:105A8000809370030F900F900F900F908091F3020E |
:105A90009091F4029F938F9381E597E09F938F936A |
:105AA0001F930F93E091C705F091C805099588E20F |
:105AB000809370034DB75EB74A5F5F4F4DBF8091D3 |
:105AC000F5029091F6029F938F938EE597E09F9356 |
:105AD0008F931F930F93E091C705F091C805099527 |
:105AE00089E4809370038DB79EB706968DBF8BE6D1 |
:105AF00097E09F938F931F930F93E091C705F091C9 |
:105B0000C805099580916E030F900F900F900F902C |
:105B100083FFC7C21092F6021092F50260E070E0B7 |
:105B20008EE090E00E948832BCC21092700383E73E |
:105B300097E09F938F931F930F93FE01099584E144 |
:105B4000809370030F900F900F900F9080919101B0 |
:105B5000909192019F938F938BE797E09F938F9300 |
:105B60001F930F93E091C705F091C805099588E24E |
:105B700080937003EDB7FEB73696EDBF80918D0A26 |
:105B800090918E0A9F938F9389E897E09F938F93CC |
:105B90001F930F93E091C705F091C80509958CE319 |
:105BA000809370032DB73EB72A5F3F4F2DBF809182 |
:105BB000D90A9091DA0A9F938F9387E997E09F9390 |
:105BC0008F931F930F93E091C705F091C805099536 |
:105BD0004DB75EB74A5F5F4F4DBF63C2109270030F |
:105BE00085EA97E09F938F93B7E3EB2EB7E2FB2E06 |
:105BF0001F930F93FE01099584E1809370030F902A |
:105C00000F900F900F908091700199279F938F9321 |
:105C10008DEA97E09F938F931F930F93E091C705B1 |
:105C2000F091C805099588E2809370038DB79EB7FF |
:105C300006968DBF80911F039091200397FD0396D8 |
:105C400095958795959587959F938F938BEB97E087 |
:105C50009F938F93FF92EF92E091C705F091C80553 |
:105C600009958CE380937003EDB7FEB73696EDBFD0 |
:105C700080919B0899279F938F9380919A089927E9 |
:105C80009F938F9389EC97E09F938F93FF92EF926E |
:105C9000E091C705F091C80509952DB73EB7285F7B |
:105CA0003F4F2DBFFEC11092700387ED97E09F9389 |
:105CB0008F93F7E3CF2EF7E2DF2E1F930F93FE01B2 |
:105CC00009950F900F900F900F90C6E8D9E000E073 |
:105CD00010E0E2E0FE2E802F8C5E809370038E8DAC |
:105CE00099278F7790709F938F938D8999278F77BE |
:105CF00090709F938F938C8599278F7790709F9347 |
:105D00008F938B8199278F7790709F938F9387EED6 |
:105D100097E09F938F93DF92CF92E091C705F09128 |
:105D2000C80509954DB75EB7445F5F4F4DBFFA9404 |
:105D30000C5E1F4FA496F7FECECFB3C11092700336 |
:105D400088EF97E09F938F9377E3C72E77E2D72E64 |
:105D50001F930F93FE0109950F900F900F900F90D6 |
:105D6000C6E8D9E000E010E062E0F62E802F8C5EFD |
:105D7000809370038AA1992787FD90959F938F93B5 |
:105D8000898D992787FD90959F938F93888999276F |
:105D900087FD90959F938F938F81992787FD90958D |
:105DA0009F938F9387E098E09F938F93DF92CF929A |
:105DB000E091C705F091C80509958DB79EB70C967F |
:105DC0008DBFFA940C5E1F4FA496F7FECFCF69C12A |
:105DD0001092700388E198E09F938F9357E3C52E4C |
:105DE00057E2D52E1F930F93FE01099587E4809308 |
:105DF00070030F900F900F900F9083E298E09F93A5 |
:105E00008F931F930F93E091C705F091C8050995F3 |
:105E1000FF240F900F900F900F90C0E0D0E08E0104 |
:105E2000802F8C5E809370038C2F8D5F0E94EA829E |
:105E30009F938F938C2F8E5F0E94EA829F938F9304 |
:105E40008C2F8F5F0E94EA829F938F938C2F0E94EA |
:105E5000EA829F938F938DE298E09F938F93DF92D6 |
:105E6000CF92E091C705F091C80509959E012C5F7E |
:105E70003F4F80916A089927EDB7FEB73C96EDBF7A |
:105E8000281739070CF00DC1F3940C5E1F4FE90180 |
:105E9000F2E0FF1528F605C1109270038EE398E03A |
:105EA0009F938F9347E3E42E47E2F42E1F930F93C3 |
:105EB000FE01099584E1809370030F900F900F907D |
:105EC0000F908091A409881F8827881F97E0899FD9 |
:105ED000C00111248D969F938F9380919B09881FF9 |
:105EE0008827881F96E0899FC00111248D969F9373 |
:105EF0008F9380919209881F8827881F95E0899F3A |
:105F0000C00111248D969F938F9380918909881FDA |
:105F10008827881F9927880F991F880F991F8D96AA |
:105F20009F938F938DE498E09F938F931F930F938C |
:105F3000E091C705F091C805099588E28093700348 |
:105F40002DB73EB7245F3F4F2DBF8091C809881FF2 |
:105F50008827881F9BE0899FC00111248D969F93FD |
:105F60008F938091BF09881F8827881F9AE0899F97 |
:105F7000C00111248D969F938F938091B609881F3D |
:105F80008827881F99E0899FC00111248D969F93CF |
:105F90008F938091AD09881F8827881F992723E058 |
:105FA000880F991F2A95E1F78D969F938F9381E62D |
:105FB00098E09F938F931F930F93E091C705F09103 |
:105FC000C80509958CE3809370034DB75EB7445FB5 |
:105FD0005F4F4DBF8091D109881F8827881F9CE0A3 |
:105FE000899FC00111248D969F938F9385E798E038 |
:105FF0009F938F931F930F93E091C705F091C8056E |
:1060000009958091DA09EDB7FEB73696EDBF87FFA7 |
:1060100012C080E48093700386E898E09F938F938A |
:106020001F930F93E091C705F091C80509950F9054 |
:106030000F900F900F908091E30987FF12C084E4C6 |
:106040008093700389E898E09F938F93FF92EF927B |
:10605000E091C705F091C80509950F900F900F903A |
:106060000F908091EC0987FF1CC088E48093700337 |
:106070008CE898E09F938F93FF92EF92E091C70591 |
:10608000F091C80509950F900F900F900F9009C0DF |
:1060900080912801281719F421502093280110928B |
:1060A0006F0310926E03E8E0CDB7DEB70C942AAC14 |
:1060B000F999FECF92BD81BDF89A80B599270895D0 |
:1060C000F999FECF1FBA92BD81BD60BD0FB6F8949D |
:1060D000FA9AF99A0FBE08954AEA20E030E02617AE |
:1060E000370740F4FC018191480F2F5F3F4F26177F |
:1060F0003707C8F3842F99270895EAEA40E050E073 |
:106100004617570778F49C01F999FECF32BD21BD9F |
:10611000F89A80B5E80F4F5F5F4F2F5F3F4F4617EC |
:10612000570790F38E2F9927089581E080936E088A |
:1061300082E080936D0883E080936C0884E0809314 |
:106140006F0885E08093700886E08093710887E08F |
:106150008093720888E08093730889E080937408C4 |
:106160008AE0809375088BE0809376088CE08093BA |
:106170007708089586E680936B088CE0E7EEF8E0F8 |
:1061800011928A95E9F78AE080938B081092AF0804 |
:106190008BE1809387088EE48093AC088093AD08F0 |
:1061A00080E28093AE081092E3088AE68093780834 |
:1061B00082E78093E50880E58093E60886E0809397 |
:1061C00092081092D0081092CD0838E030938508DC |
:1061D00086EE8093860880E48093880885E080932B |
:1061E0007B082EE12093790890911504992399F06A |
:1061F00084E180937C0888E280937A0820937E086B |
:1062000081E080937F08109280088FE78093810857 |
:106210002093D30810C08FE080937C0820937A08E5 |
:1062200090937E0830937F0884E180938008909358 |
:1062300081089093D3088FE080937D081092DC084A |
:106240008CE08093DD0810929408109295081092CB |
:106250009608109297081092B1081092B208109206 |
:10626000B3081092B40890E89093980842E34093E2 |
:106270009908E2E0E093E40888E180939A0886EECA |
:1062800080939B0883E08093A0085DE75093A30868 |
:106290005093A4085093A50890939C0875E57093BB |
:1062A0009D0866E460939E088CED80939F088CE3C4 |
:1062B0008093A1081092A2089AEA9093B5088CECFA |
:1062C0008093B7081092B9089093BA0898E2909317 |
:1062D000B6089093B8081092BB081092E10840935A |
:1062E000E2084093A6082AE52093A7084093A8084F |
:1062F00036E03093BC0884E68093BD088093BE08E6 |
:106300002093BF0888E78093C0089093C4088BE46B |
:106310008093C1087093C2088093C3083093C50866 |
:1063200088E08093C6084093C7088AE28093C80833 |
:106330001092C9081092CC089CE89093CA08E09388 |
:10634000CB081092CE081092CF0881E48093900879 |
:10635000209391081092D1081092D20886E9809378 |
:10636000D4085093A90884E38093AA081092D50812 |
:106370001092D6081092D7089093D8086093D90845 |
:106380009093DA086093DB081092DE0880E2809335 |
:106390008F088FE18093E0088EE18093DF080895F5 |
:1063A0000E94BA308AE08093820880E1809383085B |
:1063B00026E0209384089AE59093890888E78093E3 |
:1063C0008A0890938C0880938D0820938E0880E231 |
:1063D000809393088CE38093AB088BE48093B008A0 |
:1063E00086E491E6A3E7B4E78093E7089093E80892 |
:1063F000A093E908B093EA0868E870E08BE698E0BB |
:106400000E946C308093F3080895CF93DF930E942D |
:10641000BA3088E08093820830E13093830826E028 |
:106420002093840894E69093890888E780938A08EB |
:1064300090938C0880938D0820938E083093930856 |
:1064400086E48093AB088093B008A7EEB8E085E0BF |
:10645000E9E2F1E0ED01019009928A95E1F768E83F |
:1064600070E0CD018C5790400E946C308093F3080F |
:10647000DF91CF9108950E94BA3026E020938208E0 |
:106480008AE08093830884E08093840894E6909364 |
:10649000890888E780938A0890938C0880938D08F8 |
:1064A00020938E0880E18093930886E48093AB0864 |
:1064B0008093B00885E491E6A3E7B9E78093E70805 |
:1064C0009093E808A093E908B093EA0868E870E0C0 |
:1064D0008BE698E00E946C308093F3080895F99958 |
:1064E000FECF92BD81BDF89A80B599270895F9999C |
:1064F000FECF1FBA92BD81BD60BD0FB6F894FA9A67 |
:10650000F99A0FBE089568E570E30E9403AA089502 |
:1065100040E650E30E943DAA0895EF92FF920F9348 |
:106520001F93CF93C82F8150853008F0C3E089E8CE |
:10653000C89F800111248BEDE82E8FEFF82EE00E1E |
:10654000F11E68E870E0C7010E947D30682F980155 |
:106550002D593F4F8FB39927AC014270507081FD88 |
:10656000F9CF32BD21BDF89A80B5861711F0CA0166 |
:1065700023C08FB399279C012270307081FDF9CF21 |
:10658000F2BCE1BCF89A80B5863611F0C90114C09E |
:1065900089E8C89FC0011124859728E530E349E8C0 |
:1065A00050E0BC018BE698E00E94DEA90E94FD77D6 |
:1065B0000E9464A381E090E0CF911F910F91FF9022 |
:1065C000EF900895282F863010F025E003C088232F |
:1065D00009F421E020930101F999FECF1FBA82E06E |
:1065E00090E092BD81BD20BD0FB6F894FA9AF99A59 |
:1065F0000FBE0895CF93C82F80916B08863609F09F |
:1066000051C0C63010F0C5E003C0CC2309F44AC025 |
:106610000E942EA88091E60882FF07C08091900812 |
:10662000843618F080E58093900868E870E08BE687 |
:1066300098E00E946C308093F30889E8C89FC001FD |
:10664000112420E630E349E850E06BE678E08597D6 |
:106650000E941BAA20E630E34CE050E06CE678E0B4 |
:1066600080E590E00E941BAA6CE070E08CE698E068 |
:106670000E946C30282FF999FECF1FBA8CE590E06C |
:1066800092BD81BD20BD0FB6F894FA9AF99A0FBE5B |
:106690008C2F0E94E2320E94FD770E9464A381E069 |
:1066A00090E002C080E090E0CF9108956DE470E04A |
:1066B00088EE93E00E947D30482F8FB399279C018C |
:1066C0002270307081FDF9CF85E394E092BD81BDE9 |
:1066D000F89A80B5841779F48FB399279C012270BA |
:1066E000307081FDF9CF88EE93E092BD81BDF89ABC |
:1066F00080B5813011F0C901089528E530E34EE4FA |
:1067000050E068EE73E084EF98E00E94DEA981E03B |
:1067100090E008958091F4088130A9F46DE470E070 |
:1067200084EF98E00E946C308093410920E630E3CA |
:106730004EE450E064EF78E088EE93E00E941BAAFC |
:1067400081E090E0089580E090E00895CF93DF939A |
:1067500081E08093F408E4EFF8E08FE01586168678 |
:106760001786108A8150349687FFF8CF80E4809393 |
:106770000109809302091092030980930409809310 |
:10678000050990EC90930609109207098093080977 |
:106790008093090910920A0990930B0990930C09B0 |
:1067A00080930D0910920E0980930F0990931009A0 |
:1067B000A5EFB8E08CE0EFE2F1E0ED010190099285 |
:1067C0008A95E1F76DE470E0CD0101970E946C308D |
:1067D00080934109DF91CF910895F999FECF82E02E |
:1067E00090E092BD81BDF89A80B5282F863078F070 |
:1067F00023E0322FF999FECF1FBA82E090E092BDDC |
:1068000081BD30BD0FB6F894FA9AF99A0FBE209365 |
:106810000101822F992708951F93CF93C82F162F18 |
:10682000863010F0C5E003C0882309F4C1E08C2F46 |
:1068300099278230910541F08330910544F4019706 |
:1068400031F40E94D03105C00E94053202C00E947E |
:106850003B321123E1F06CE070E080E590E00E94B3 |
:106860007D30282FF999FECF8CE590E092BD81BD57 |
:10687000F89A80B5821759F428E530E34CE050E0EF |
:1068800060E570E08CE698E00E94DEA902C00E94FC |
:1068900095308C2F0E94FA32CF911F910895DF928C |
:1068A000EF92FF920F931F93CF93FF24DF2CEF2CD7 |
:1068B00081E190E00E946F3290910301981791F16D |
:1068C000963169F481E190E00E946F32853139F4AC |
:1068D0004C9905C06F2D81E090E00E947732609165 |
:1068E000030181E190E00E94773288E190E028E0A6 |
:1068F0000FB6F894A895809360000FBE20936000B7 |
:106900008FE898E09F938F938EE199E19F938F9307 |
:10691000E091C705F091C80509950F900F900F9071 |
:106920000F90FFCF81E090E00E946F32863611F029 |
:1069300031E0E32E6CE070E080E590E00E947D3075 |
:10694000C82FF999FECF8CE590E092BD81BDF89AF1 |
:1069500080B58C1711F421E0D22EC1E001E010E0E7 |
:10696000EE2029F48C2F0E948D328823B9F591E016 |
:10697000F92E1F930F9387EB98E09F938F938EE1EF |
:1069800099E19F938F93E091C705F091C805099510 |
:106990002DB73EB72A5F3F4F2DBF0130110521F0C3 |
:1069A0000230110521F006C00E94D03105C00E94BE |
:1069B000053202C00E943B32DD2059F028E530E369 |
:1069C0004CE050E060E570E08CE698E00E94DEA9C3 |
:1069D00002C00E9495308C2F0E94FA32CF5F0F5F69 |
:1069E0001F4FC63008F4BCCFFF2019F083E00E948F |
:1069F000E2320E94ED33C82F0E948D328C2F9927EE |
:106A00009F938F938DED98E09F938F930EE119E103 |
:106A10001F930F93E091C705F091C805099581E098 |
:106A200090E00E946F322DB73EB72A5F3F4F2DBFD7 |
:106A30008F3F21F00E945633882399F486EF98E027 |
:106A40009F938F931F930F93E091C705F091C80513 |
:106A500009950E94A6330E948A330F900F900F90E1 |
:106A60000F90EE2029F066E681E090E00E947732F8 |
:106A700010926A0890E0E1E0F9E0CFE0808134967E |
:106A800018160CF49F5FC150C7FFF8CF90936A08A7 |
:106A9000892F99279F938F9385EF98E09F938F93EA |
:106AA00087E199E09F938F931F930F93E091C70520 |
:106AB000F091C80509950E944A0C8DB79EB70896BB |
:106AC0008DBFCF911F910F91FF90EF90DF900895B0 |
:106AD000982F2FB7F8943998389A88B1836088B97D |
:106AE0008091B9008C7F8093B9008AE28093B800CE |
:106AF00010927B031092790310927803992381F00E |
:106B0000E6E8F9E08BE0108211821282138214828F |
:106B100015821682178210868150399687FFF3CF2F |
:106B200078942FBF089510927B0384E98093BC0072 |
:106B300080E88093BC001092BD001092BA001092C1 |
:106B4000BB001092B9001092B8001092770380E059 |
:106B50000E9468351092BB0085E88093BC0080914C |
:106B6000750382608093750308951F920F920FB68C |
:106B70000F9211242F933F936F937F938F939F9343 |
:106B8000EF93FF9380917B03282F33278F5F8093B0 |
:106B90007B032330310509F41CC1243031055CF43A |
:106BA0002130310509F454C0223031050CF099C070 |
:106BB000232B71F030C32530310509F470C1253025 |
:106BC00031050CF41EC12630310509F433C223C34C |
:106BD00081E08093770309C0809179038C3090F431 |
:106BE000809179038F5F8093790380917903E82FF7 |
:106BF000FF27EE0FFF1FEE0FFF1FEC50F74F8585AD |
:106C0000181654F7809179036CE00E9494AB90932E |
:106C10007903809181038F5F8093810390913E017E |
:106C2000981770F4109281031092740310927303FA |
:106C300085E080937B0380917803880F8D5A04C090 |
:106C400080917903880F8E5A8093BB0085E824C118 |
:106C5000809179039927FC0123E0EE0FFF1F2A950D |
:106C6000E1F7E80FF91FEA57F64F81818093BB00E7 |
:106C700085E88093BC00809179039927FC01EE0F91 |
:106C8000FF1FEE0FFF1FEE0FFF1FE80FF91FEA5760 |
:106C9000F64F808180FF9BC0809179039927FC018A |
:106CA000EE0FFF1FEE0FFF1FEE0FFF1FE80FF91F84 |
:106CB000EA57F64F8281882329F080916A0887304D |
:106CC00008F4BFC28091730390917403892B09F07B |
:106CD000B8C28091710390917203892B09F0B1C2FF |
:106CE00076C08091790321E030E002C0220F331F8B |
:106CF0008A95E2F7809171039091720328233923DA |
:106D0000232B81F0809179039927FC0173E0EE0F2A |
:106D1000FF1F7A95E1F7E80FF91FEA57F64F80E178 |
:106D200084830EC0809179039927FC0163E0EE0F04 |
:106D3000FF1F6A95E1F7E80FF91FEA57F64F148233 |
:106D4000809179039927FC01EE0FFF1FEE0FFF1FC3 |
:106D5000EE0FFF1FE80FF91FEA57F64F8481282F27 |
:106D60003327220F331F220F331F220F331F80912F |
:106D700079039927FC0133E0EE0FFF1F3A95E1F705 |
:106D8000E80FF91FEA57F64F82818770822B8093B4 |
:106D9000BB0085E88093BC002091790381E090E0FE |
:106DA00002C0880F991F2A95E2F720917303309152 |
:106DB000740382239323892B51F08EE799E09093FB |
:106DC0007F0380937E0388E0809380033AC284E04F |
:106DD0001FC2E0917E03F0917F0381918093BB00FD |
:106DE00085E88093BC00F0937F03E0937E0380915D |
:106DF0008003815080938003882309F422C283E0BA |
:106E000007C28091B900803379F580917C03882393 |
:106E100029F4809179038F5F80937C0380917903BB |
:106E20009927FC01EE0FFF1FEE0FFF1FEE0FFF1F54 |
:106E3000E80FF91FEA57F64F838199278F779070F3 |
:106E40008F3791058CF4809179039927FC01EE0F1F |
:106E5000FF1FEE0FFF1FEE0FFF1FE80FF91FEA578E |
:106E6000F64F83818F5F838310927B0384E9809345 |
:106E7000BC008AE090E090933D0180933C018091BA |
:106E800079038F5F8093790310927B038091750360 |
:106E90008E7F8093750385EA8093BC00D2C1809178 |
:106EA000B9008034D1F1809178039927FC0173E017 |
:106EB000EE0FFF1F7A95E1F7E80FF91FEA57F64F3B |
:106EC00083818F778383809178038F5F80937803AA |
:106ED000809178038C30A0F01092780310927203A6 |
:106EE0001092710380917D038F5F80937D038C30BE |
:106EF00038F010927D03809175038D7F8093750328 |
:106F00008091750381608093750310927B0384E9FF |
:106F10008093BC001092770386C0809178039927F4 |
:106F2000FC0163E0EE0FFF1F6A95E1F7E80FF91F20 |
:106F3000EA57F64F8381806883838091780399278D |
:106F4000FC01EE0FFF1FEE0FFF1FEE0FFF1FE80FFC |
:106F5000F91FEA57F64F808180FF41C08091780386 |
:106F60009927FC01EE0FFF1FEE0FFF1FEE0FFF1F13 |
:106F7000E80FF91FEA57F64F848199270097D9F057 |
:106F8000409709F047C08EE799E090937F03809384 |
:106F90007E0388E080938003809178039927FC0129 |
:106FA00033E0EE0FFF1F3A95E1F7E80FF91FEA57BC |
:106FB000F64F14822FC09091780389E0989FC0010A |
:106FC00011248557964F90937F0380937E03909171 |
:106FD000780380917D039817D1F483E019C09091D4 |
:106FE000780389E0989FC00111248557964F9093AC |
:106FF0007F0380937E038091750381FD06C090918D |
:10700000780380917D03981711F482E001C081E03C |
:107010008093800380918003813011F485E801C062 |
:1070200085EC8093BC0080917C0380937603109262 |
:107030007C0307C1E0917E03F0917F038091BB0048 |
:10704000808380917E0390917F03019690937F03CC |
:1070500080937E03809180038150809380038230EF |
:1070600010F085ECD2C0813011F485E8CEC080915B |
:10707000750381FF7BC080911D0480FD77C08091E6 |
:1070800078039927FC0123E0EE0FFF1F2A95E1F713 |
:10709000E80FF91FEA57F64F868199278C7F907089 |
:1070A000883F910591F4809178039927FC01EE0FB8 |
:1070B000FF1FEE0FFF1FEE0FFF1FE80FF91FEA572C |
:1070C000F64F8081816080830FC08091780399277B |
:1070D000FC01EE0FFF1FEE0FFF1FEE0FFF1FE80F6B |
:1070E000F91FEA57F64F1082809178039927FC0127 |
:1070F00073E0EE0FFF1F7A95E1F7E80FF91FEA57EB |
:10710000F64F8681883F81F4809178039927FC01AE |
:1071100063E0EE0FFF1F6A95E1F7E80FF91FEA57EA |
:10712000F64F8081866021C0809178039927FC0109 |
:10713000EE0FFF1FEE0FFF1FEE0FFF1FE80FF91FEF |
:10714000EA57F64F8681893F89F480917803992721 |
:10715000FC01EE0FFF1FEE0FFF1FEE0FFF1FE80FEA |
:10716000F91FEA57F64F80818460808380911D0467 |
:1071700081FF23C0809178039927FC0133E0EE0F53 |
:10718000FF1F3A95E1F7E80FF91FEA57F64F86819E |
:107190008E3F98F4809178039927FC0123E0EE0F4D |
:1071A000FF1F2A95E1F7E80FF91FEA57F64F808590 |
:1071B0008F5F808789E08093B101809178038F5F32 |
:1071C00080937803809178038C30A0F0109278033C |
:1071D000109272031092710380917D038F5F8093F0 |
:1071E0007D038C3038F010927D03809175038D7F84 |
:1071F0008093750310927B0384E98093BC00809197 |
:1072000075038160809375031AC08093BC0086E08B |
:1072100080937B0316C010927B0384E98093BC00AB |
:10722000809175038160809375038AE090E090936C |
:107230003D0180933C0110927903109278031092E3 |
:107240007703FF91EF919F918F917F916F913F9184 |
:107250002F910F900FBE0F901F9018951F93CF93F3 |
:10726000DF93182F80915504882321F48091040323 |
:10727000882319F081E090E09DC01D3008F098C08F |
:107280001123C9F0812F9927FC0143E0EE0FFF1F66 |
:107290004A95E1F7E80FF91FEA57F64F36978081D4 |
:1072A000369688230CF084C03997808180FD03C016 |
:1072B00083E090E07FC080917E0999278B70907069 |
:1072C000029719F084E090E075C067E070E08EE707 |
:1072D00099E00E946C3090918509891719F085E03A |
:1072E00090E068C080ED97E00E94F31CEC01809173 |
:1072F000750380FD05C0CE010E94FC1C8823B9F3F4 |
:10730000112319F48FEF90E00BC0212F3327215068 |
:10731000304081E090E002C0880F991F2A95E2F783 |
:107320009093740380937303A1E0B0E0E6E8F9E082 |
:1073300040E050E06BE0CD01042E02C0880F991FA1 |
:107340000A94E2F72091730330917403822393230C |
:10735000892B11F01182128261504F5F5F4F399675 |
:1073600067FFE9CF1092790310927B038091750338 |
:107370008E7F8093750385EA8093BC0080917503AE |
:1073800080FD05C0CE010E94FC1C8823B9F38091CA |
:10739000730390917403892B29F0CE010E94FC1C89 |
:1073A000882311F38091730390917403009711F077 |
:1073B00082E090E0DF91CF911F9108950F931F938A |
:1073C000CF93DF93982F80915504882321F48091E7 |
:1073D0000403882319F081E090E097C09D30B0F459 |
:1073E000992319F486E090E090C0C92FDD27FE01B3 |
:1073F00053E0EE0FFF1F5A95E1F7EC0FFD1FEA5720 |
:10740000F64F36978081369687FD03C082E090E084 |
:107410007CC03997808180FD03C083E090E075C017 |
:1074200080ED97E00E94F31C8C018091750380FD34 |
:1074300005C0C8010E94FC1C8823B9F3219721E0F4 |
:1074400030E0C90102C0880F991FCA95E2F79093F6 |
:10745000720380937103D901E6E8F9E040E050E05F |
:107460006BE0CD01042E02C0880F991F0A94E2F749 |
:10747000209171033091720382239323892B11F0A1 |
:107480001182128261504F5F5F4F399667FFE9CFDB |
:107490001092780310927E091092850910927B0356 |
:1074A000809175038E7F8093750385EA8093BC007D |
:1074B0008091750380FD05C0C8010E94FC1C8823D3 |
:1074C000B9F38091710390917203892B29F0C8015F |
:1074D0000E94FC1C882311F380917E0999278B70F0 |
:1074E0009070029719F084E090E00FC067E070E0C0 |
:1074F0008EE799E00E946C3090918509891719F008 |
:1075000085E090E002C080E090E0DF91CF911F9194 |
:107510000F910895CF93DF9380E021E83FEFC9E317 |
:10752000DAE0E3EFF9E0DF01853020F411961C92F8 |
:107530001E9202C0318320831982188222968F5FA7 |
:1075400012963296833280F38FE790E09093320A5E |
:107550008093310A81E89FEF9093300A80932F0A3D |
:107560001092340A1092330A1092C3041092C2048B |
:107570001092C5041092C4041092C7041092C6045D |
:10758000DF91CF9108951F920F920FB60F921124A1 |
:107590000F931F932F933F934F935F936F937F931B |
:1075A0008F939F93AF93BF93CF93DF93EF93FF930B |
:1075B0008091E50882FDC2C040918600509187000D |
:1075C0008091830390918403481B590B809186001E |
:1075D000909187009093840380938303CA018D5414 |
:1075E0009440A0918503B0918603835F9A4158F43B |
:1075F000809185038093F209149714F01092410151 |
:1076000081E090E096C0A131B1050CF0DFC1CA0164 |
:107610008B5F9040845B914008F086C080913F0171 |
:1076200090914001481B590BE091D508EE2351F091 |
:10763000FF27EE0FFF1FED50F64F808191818436BA |
:107640009105ECF4FD01EA0FFB1FED50F64F808130 |
:107650009181FA01E81BF90BCF01F7FF03C0909568 |
:1076600081959F4F06975CF480915604883C20F4E6 |
:1076700080915604865F01C088EC80935604FD011A |
:10768000EA0FFB1FED50F64F808191819C01220F84 |
:10769000331F280F391F240F351F37FF02C02D5FFE |
:1076A0003F4FE901D595C795D595C795CA01019674 |
:1076B0008C179D0714F4219706C041505040C41701 |
:1076C000D5070CF4219680915604833CE0F08D019F |
:1076D0000A0F1B1FF801ED50F64F808191819E012A |
:1076E000281B390BC90163E070E00E94B4ABCB01E9 |
:1076F000880F991F860F971F075C154FD8011196A9 |
:107700009C938E9307C0AA0FBB1FA75CB54F119621 |
:107710001C921E92E0918503F0918603EE0FFF1FED |
:10772000ED50F64FD183C0838091850390918603FD |
:107730000196909386038093850348C1409186000B |
:10774000509187008091870390918803481B590BC3 |
:10775000809186009091870090938803809387039F |
:10776000CA018D54944060911104835F9A4108F0DE |
:1077700072C06093820380918203843008F453C006 |
:107780009091F20980918203981709F04CC05091B2 |
:1077900012045B3008F43FC01092410110921104B2 |
:1077A00040E05F31C0F0E42FFF27EE0FFF1F9F0185 |
:1077B00023533C4FDF01AD50B64F8D919C91D901C1 |
:1077C0008D939C93DF01A75CB54F8D919C91E15106 |
:1077D000FC4F91838083E42FFF27EE0FFF1F9F0153 |
:1077E0002D50364FDF01A757BC4F8D919C91D90189 |
:1077F00011969C938E93DF01A555BC4F8D919C9162 |
:10780000E75CF54F91838083842F8F5F482F813110 |
:1078100040F280931104809112048F3F79F08F5FC2 |
:10782000809312040BC080911204853620F08AE008 |
:107830008093120402C010921204289A81E080936F |
:10784000110480915504882309F0C0C080918203FF |
:107850008093F209BBC0613108F098C0CA018B5F08 |
:107860009040845B914008F090C080913F019091DE |
:107870004001481B590BE62FFF27EE0FFF1FE7576C |
:10788000FC4F80819181FA01E81BF90BCF0105962D |
:107890000B9720F5E091D508EE2351F0FF27EE0F6E |
:1078A000FF1FED50F64F8081918184369105B4F42D |
:1078B000809112048A3120F080915604865F05C0C1 |
:1078C0008B3028F0809156048E5F8093560480910F |
:1078D0005604893C18F088EC80935604E62FFF2765 |
:1078E000EE0FFF1FE757FC4F808191819C01220F13 |
:1078F000331F280F391F240F351F37FF02C02D5F9C |
:107900003F4FE901D595C795D595C795CA01019611 |
:107910008C179D0714F4219706C041505040C4179E |
:10792000D5070CF42196809156048E3BD8F0E62FB3 |
:10793000FF27EE0FFF1FDF01A757BC4F8D919C91D2 |
:107940009E01281B390BC90163E070E00E94B4ABB3 |
:10795000CB01880F991F860F971FE555FC4F918328 |
:10796000808308C0E62FFF27EE0FFF1FE555FC4F71 |
:107970001182108280911104E82FFF27EE0FFF1F64 |
:10798000E757FC4FD183C08301C0289A809111042E |
:10799000843120F48F5F8093110418C08431B1F4D6 |
:1079A000289A8EE18093110420E1C9E3DAE0ADEC7E |
:1079B000B3E0E3EFF9E08D919D919183808332965E |
:1079C000198218822296215027FFF5CFFF91EF915F |
:1079D000DF91CF91BF91AF919F918F917F916F91E7 |
:1079E0005F914F913F912F911F910F910F900FBE7B |
:1079F0000F901F9018958091000B9091010B909320 |
:107A0000C7078093C6078091020B9091030B909358 |
:107A1000C9078093C8078091D40A9091D50A97FD31 |
:107A2000039695958795959587959093CB07809329 |
:107A3000CA078091E60A9091E70A97FD039695950B |
:107A40008795959587959093CD078093CC078091E6 |
:107A5000C2049091C3042091490330914A03821BD0 |
:107A6000930B9093CF078093CE0780915004909111 |
:107A70005104A0915204B0915304BC01CD012AE0FD |
:107A800030E040E050E00E94E9AB3093D107209312 |
:107A9000D00780910B0890910C089093D3078093A6 |
:107AA000D20780919101909192019093D707809392 |
:107AB000D60780912601909127019093D907809352 |
:107AC000D8078091560499279093DB078093DA07B3 |
:107AD00080918D0A90918E0A9093DD078093DC0748 |
:107AE0008091870999279093DF078093DE07809123 |
:107AF000900999279093E1078093E0078091990975 |
:107B000099279093E3078093E2078091A209992730 |
:107B10009093E5078093E40780911F0390912003E1 |
:107B20009093EF078093EE0780913A0490913B0485 |
:107B30009093F1078093F0078091670B9091680B09 |
:107B40009093F3078093F20780916B0B90916C0BED |
:107B50009093F5078093F40780914C0490914D0425 |
:107B6000A0914E04B0914F04BC01CD012AE030E059 |
:107B700040E050E00E94E9AB3093F7072093F6070E |
:107B800080916D0B99279093010880930008809154 |
:107B9000280590912905909303088093020880910D |
:107BA00026059091270590930508809304088091FD |
:107BB000E005882321F48091E105882321F080915C |
:107BC000C507816003C08091C5078E7F8093C5077C |
:107BD0000895EF92FF921F93CF93DF93182F7B01AD |
:107BE00080915504882371F580910301893111F446 |
:107BF000299801C0299A11501F3FE9F0F0922703FC |
:107C0000E0922603E7018091260390912703892BB8 |
:107C100011F4209781F380912A038823A1F3109215 |
:107C20002A038091260390912703892B09F4219739 |
:107C30000E9444A8E8CF80910301893111F4299A68 |
:107C400001C02998DF91CF911F91FF90EF90089587 |
:107C5000EF92FF920F931F9310927A0080914D0341 |
:107C600090914E039093980A8093970A80914B03CA |
:107C700090914C039093890A8093880A80914903DC |
:107C800090914A039093DC0A8093DB0A209145038C |
:107C900030914603C901880F991F880F991F820FE1 |
:107CA000931F820F931F9093D50A8093D40A20913B |
:107CB000470330914803C901880F991F880F991F06 |
:107CC000820F931F820F931F9093E70A8093E60A17 |
:107CD0008FEC80937A008091AC089927AA27BB2764 |
:107CE00044ECE42E49E0F42E012D112DBC01CD0110 |
:107CF000A80197010E9475ABDC01CB01809389013B |
:107D000090938A01A0938B01B0938C018091AD0870 |
:107D10009927AA27BB27BC01CD010E9475ABDC01C6 |
:107D2000CB018093850190938601A0938701B09346 |
:107D300088011F910F91FF90EF900895A0E0B0E0AF |
:107D4000E4EAFEE30C9408AC782E91E0692EEE2470 |
:107D5000FF2457014701E7011092E005F092BD04AE |
:107D6000E092BC04F092BB04E092BA04F092B70433 |
:107D7000E092B6041092B504F092C704E092C604F3 |
:107D8000F092C504E092C404F092C304E092C204ED |
:107D900010926B0110926A0110923E030E94283EDD |
:107DA00084E690E00E94151D0E94283EF092E707AD |
:107DB000E092E607F092E907E092E8078091780800 |
:107DC00080FF14C080911C0190911D01875B93403E |
:107DD00058F480911C0190911D018E5E924020F01C |
:107DE00080913E03882311F00E94562100911C01CE |
:107DF00010911D0187B58B5F87BD87B5809588BDC4 |
:107E00008FE1C82E8AE090E00E94151D8091490301 |
:107E100090914A03E80EF91E80914D0390914E0314 |
:107E2000A80EB91E80914B0390914C03880E991EA9 |
:107E300080910B0890910C08C80FD91FCA94C7FEF7 |
:107E4000E1CF80911C0190911D01825F934080F4ED |
:107E500080911C0190911D01459750F080911C016B |
:107E600090911D01081B190B109317010093160127 |
:107E700087B5855087BD87B5809588BD9501205F02 |
:107E80003F4F36952795369527953093C704209315 |
:107E9000C604C401409696958795969587959093CC |
:107EA000C5048093C40440E150E0E40EF51EB5E043 |
:107EB000F694E794BA95E1F7F092C304E092C20415 |
:107EC000C40FD51FA5E0D695C795AA95E1F7D09325 |
:107ED000B704C093B6049093C1048093C004309358 |
:107EE000BF042093BE0452E07516C9F58091D40AF0 |
:107EF0009091D50A97FF03C0909581959F4F6CE0B4 |
:107F000070E00E94B4AB9B017093BD046093BC040D |
:107F10008091E60A9091E70A97FF03C090958195BA |
:107F20009F4F6CE070E00E94B4AB7093BB04609311 |
:107F3000BA04B90184E090E00E9488326091BA04EA |
:107F40007091BB0486E090E00E9488326091B60494 |
:107F50007091B70488E090E00E9488324FC084E0BE |
:107F600090E00E9483329093BD048093BC0486E02D |
:107F700090E00E9483329C019093BB048093BA04EA |
:107F80008091BC049091BD048150984018F4215018 |
:107F90003840A0F188E399E09F938F938EE199E1B7 |
:107FA0009F938F93E091C705F091C8050995809143 |
:107FB000D40A9091D50A97FF03C0909581959F4F61 |
:107FC0006CE070E00E94B4AB7093BD046093BC049D |
:107FD0008091E60A9091E70A97FF03C090958195FA |
:107FE0009F4F6CE070E00E94B4AB7093BB04609351 |
:107FF000BA0466240F900F900F900F9012BC11BC22 |
:108000001092980A1092970A1092890A1092880A80 |
:108010001092DC0A1092DB0A88EC90E00E94151D99 |
:1080200080914503909146039C01220F331F220F3C |
:10803000331F280F391F280F391F3093D50A20937B |
:10804000D40A80914703909148038C01000F111FBF |
:10805000000F111F080F191F080F191F1093E70AAF |
:108060000093E60A80918708C82EDD24EE24FF24C1 |
:10807000442737FD4095542FC701B6010E9475ABC8 |
:108080004B015C016093B0047093B1048093B2041F |
:108090009093B3049801442737FD4095542FC701AE |
:1080A000B6010E9475ABDC01CB018093A8049093CC |
:1080B000A904A093AA04B093AB0480929004909278 |
:1080C0009104A0929204B0929304809388049093B8 |
:1080D0008904A0938A04B0938B04109280041092B8 |
:1080E00081041092820410928304009191011091F6 |
:1080F000920110936F0400936E0484E690E09093D5 |
:108100008E0180938D0182E390E09093270380930A |
:1081100026038091AC089927AA27BB27BC01CD0173 |
:1081200024EC39E040E050E00E9475ABDC01CB016B |
:108130008856954CAF4FBF4F8093890190938A0129 |
:10814000A0938B01B0938C018091AD089927AA2749 |
:10815000BB27BC01CD010E9475ABDC01CB01885669 |
:10816000954CAF4FBF4F8093850190938601A093AC |
:108170008701B09388011092480110924701C8010D |
:10818000AA2797FDA095BA2F209143013091440171 |
:108190004091450150914601BC01CD010E9475AB53 |
:1081A000DC01CB018093E20A9093E30AA093E40AF6 |
:1081B000B093E50A10926B0410926A040E94FD7756 |
:1081C000772029F080911D04846080931D048FEF37 |
:1081D0008093620B1092630B80E28093640B84E6C1 |
:1081E0008093560480912403882311F0579A17C076 |
:1081F0008091E408992780FF05C082FF03C080EECC |
:108200009EE202C080E091E190930A01809309010F |
:1082100081E0809311010E94B61D0E94B61D8091DD |
:10822000B0049091B104A091B204B091B304E09075 |
:108230004301F09044010091450110914601BC01B9 |
:10824000CD01A80197010E94E9AB59016A01809113 |
:10825000A8049091A904A091AA04B091AB04BC0118 |
:10826000CD01A80197010E94E9ABB901C5010E94A7 |
:1082700095A98C010E946F7B9C019093A20A809328 |
:10828000A10A8091B6049091B704AA2797FDA09502 |
:10829000BA2F7DE0880F991FAA1FBB1F7A95D1F7CF |
:1082A0008050904FAF43B040442737FD4095542F46 |
:1082B000BC01CD010E94E9ABC90180509E4F909353 |
:1082C000B7048093B604053111050CF066247720BD |
:1082D00081F080911504882361F0C9018C58904089 |
:1082E0008234910530F08091E00580628093E00552 |
:1082F00066248091C6049091C70480569940815CA1 |
:108300009B4228F08091E00581608093E005809198 |
:10831000C4049091C50480569940815C9B4228F02A |
:108320008091E00582608093E0058091C204909185 |
:10833000C3048C5291408957954028F08091E00504 |
:1083400084608093E0058091BC049091BD048C52C0 |
:108350009140835C914028F08091E0058860809393 |
:10836000E0058091BA049091BB048C529140835CEB |
:10837000914028F08091E00580618093E005809134 |
:10838000B6049091B704805092408355914028F0F4 |
:108390008091E00580628093E0058091E005811185 |
:1083A000662486E4809380010E9464A382E00E9498 |
:1083B000CAA480911E0190911F01A0912001B0914B |
:1083C000210180930D0890930E08A0930F08B0939D |
:1083D000100810923D0310923C0310923F0310923C |
:1083E00040031092410310924203109270041092C5 |
:1083F000710410927204109273041092FF0710928D |
:10840000FE070E941E21862D9927EEE0CDB7DEB72C |
:108410000C9424ACA3E1B0E0E0E1F2E40C9404ACF1 |
:108420008091C2049091C3042091490330914A0382 |
:10843000821B930B9093DC0A8093DB0A8091530399 |
:108440009091540397FD07969C0153E0359527952D |
:108450005A95E1F73093980A2093970A8091510337 |
:108460009091520397FD079643E0959587954A951D |
:10847000E1F79093890A8093880A3093A40A2093A5 |
:10848000A30A90939B0A80939A0A8091D40A9091B0 |
:10849000D50AAC01440F551F480F591F20914503C1 |
:1084A00030914603C901880F991F880F991F820FC9 |
:1084B000931F820F931F480F591F57FF02C04D5F34 |
:1084C0005F4F55954795559547955093D50A4093DD |
:1084D000D40A8091E60A9091E70AAC01440F551F37 |
:1084E000480F591F2091470330914803C901880F55 |
:1084F000991F880F991F820F931F820F931F480F98 |
:10850000591F57FF02C04D5F5F4F559547955595D1 |
:1085100047955093E70A4093E60A2091450330912E |
:108520004603C901880F991F880F991F820F931F57 |
:10853000820F931F9C01442737FD4095542F809153 |
:10854000A0049091A104A091A204B091A304820F71 |
:10855000931FA41FB51F8093A0049093A104A09320 |
:10856000A204B093A3042091470330914803C901AA |
:10857000880F991F880F991F820F931F820F931FD7 |
:108580009C01442737FD4095542F80919C04909185 |
:108590009D04A0919E04B0919F04820F931FA41F7D |
:1085A000B51F80939C0490939D04A0939E04B09368 |
:1085B0009F048091AD0A9091AE0A209145033091BD |
:1085C0004603820F931F9093AE0A8093AD0A809169 |
:1085D000DE0A9091DF0A2091470330914803820F11 |
:1085E000931F9093DF0A8093DE0A8091B8049091E4 |
:1085F000B90401969093B9048093B80480910B0854 |
:1086000090910C082091B6043091B704821B930B13 |
:108610009C01442737FD4095542F809198049091F8 |
:108620009904A0919A04B0919B04820F931FA41FF8 |
:10863000B51F8093980490939904A0939A04B093E3 |
:108640009B048FEC80937A0010921801209188048B |
:108650003091890440918A0450918B0429873A878C |
:108660004B875C8729543B46414050402CF028E41E |
:108670003BE641E050E00DC089859A85AB85BC851D |
:10868000885B9449AE4FBF4F4CF428EB34E94EEF72 |
:108690005FEF2D833E834F83588708C089859A8575 |
:1086A000AB85BC858D839E83AF83B8872091900472 |
:1086B0003091910440919204509193042D873E870C |
:1086C0004F87588B29543B46414050402CF028E4BA |
:1086D0003BE641E050E00DC08D859E85AF85B889B1 |
:1086E000885B9449AE4FBF4F4CF428EB34E94EEF12 |
:1086F0005FEF29833A834B835C8308C08D859E8519 |
:10870000AF85B88989839A83AB83BC83A091DB0A48 |
:10871000B091DC0ABB8BAA8BFD01CF01AA2797FD84 |
:10872000A095BA2FA0908004B0908104C0908204DC |
:10873000D0908304A80EB91ECA1EDB1EA09280042E |
:10874000B0928104C0928204D0928304E090E20A45 |
:10875000F090E30A0091E40A1091E50AE80EF91E90 |
:108760000A1F1B1FE092E20AF092E30A0093E40A58 |
:108770001093E50AF0913904F98BFF2309F098C1B1 |
:1087800080913804882309F093C18091D00A86FF34 |
:108790008FC18091880A9091890AAA2797FDA09598 |
:1087A000BA2FBC01CD0129813A814B815C810E94A5 |
:1087B00075AB9B01AC0197FF04C02150384F4F4F60 |
:1087C0005F4F6BE055954795379527956A95D1F79B |
:1087D00080916A01682E772488249924CA01B901FE |
:1087E000A40193010E9475ABDC01CB018093D204FC |
:1087F0009093D304A093D404B093D504B7FF04C0DE |
:108800008150904FAF4FBF4F1C012D013CE055945C |
:108810004794379427943A95D1F72092D204309216 |
:10882000D3044092D4045092D5048091970A909139 |
:10883000980AAA2797FDA095BA2FBC01CD012D81DA |
:108840003E814F8158850E9475AB97FF04C06150EF |
:10885000784F8F4F9F4F2BE095958795779567952C |
:108860002A95D1F7A40193010E9475ABDC01CB01DD |
:108870008093D6049093D704A093D804B093D904DE |
:10888000B7FF04C08150904FAF4FBF4F9C01AD0167 |
:108890008CE055954795379527958A95D1F7209384 |
:1088A000D6043093D7044093D8045093D9048091D0 |
:1088B000D2049091D3049093800A80937F0A809190 |
:1088C000D6049091D7049093840A8093830A221946 |
:1088D0003309440955092093D6043093D7044093B3 |
:1088E000D8045093D904E20EF31E041F151FE09222 |
:1088F000E20AF092E30A0093E40A1093E50A8091F9 |
:1089000069018823B1F457FF04C02F5F3F4F4F4FD9 |
:108910005F4F5595479537952795A21AB30AC40A14 |
:10892000D50AA0928004B0928104C0928204D092B1 |
:1089300083042A893B8979010027F7FC0095102FD1 |
:108940008091D6049091D704A091D804B091D90415 |
:10895000E80EF91E0A1F1B1FC801B70129813A81C1 |
:108960004B815C810E9475AB9B01AC0197FF04C0F9 |
:108970002150384F4F4F5F4FBBE055954795379586 |
:108980002795BA95D1F780916B01A82EBB24CC24F2 |
:10899000DD24CA01B901A60195010E9475ABDC0175 |
:1089A000CB018093CA049093CB04A093CC04B093E2 |
:1089B000CD04B7FF04C08150904FAF4FBF4F3C0173 |
:1089C0004D01ACE09594879477946794AA95D1F77C |
:1089D0006092CA047092CB048092CC049092CD0431 |
:1089E000C801B7012D813E814F8158850E9475AB2A |
:1089F00097FF04C06150784F8F4F9F4FFBE09595D4 |
:108A0000879577956795FA95D1F7A60195010E940C |
:108A100075ABDC01CB018093CE049093CF04A0937F |
:108A2000D004B093D104B7FF04C08150904FAF4F32 |
:108A3000BF4FAC01BD01ECE0759567955795479523 |
:108A4000EA95D1F74093CE045093CF046093D004BD |
:108A50007093D1042A893B8937FF03C03095219553 |
:108A60003F4F21343105E4F1D401C30197FE07C023 |
:108A7000B095A095909581959F4FAF4FBF4F81388E |
:108A80009105A105B10584F4DB01CA0177FF07C098 |
:108A9000B095A095909581959F4FAF4FBF4F81386E |
:108AA0009105A105B105E4F081E080936C0418C044 |
:108AB0001092840A1092830A1092800A10927F0A00 |
:108AC0001092CE041092CF041092D0041092D104D0 |
:108AD0001092CA041092CB041092CC041092CD04D0 |
:108AE0008091CE049091CF04A091D004B091D10494 |
:108AF000BC01CD0124E630E040E050E00E94E9AB4B |
:108B0000E090CA04F090CB04E21AF30AF092960ABD |
:108B1000E092950A8091CA049091CB04A091CC0474 |
:108B2000B091CD04BC01CD0124E630E040E050E03E |
:108B30000E94E9ABDA01C9012091CE043091CF0443 |
:108B40008C01021B130B10938B0A00938A0A8091ED |
:108B5000430190914401A0914501B0914601BC01AF |
:108B6000CD0128E631E040E050E00E9475AB209155 |
:108B7000E20A3091E30A4091E40A5091E50A26178F |
:108B800037074807590764F0261B370B480B590B6A |
:108B90002093E20A3093E30A4093E40A5093E50AF3 |
:108BA0002091E20A3091E30A4091E40A5091E50AEB |
:108BB00057FF0CC0260F371F481F591F2093E20A8A |
:108BC0003093E30A4093E40A5093E50A6091880ADF |
:108BD0007091890A6E0D7F1D9B01442737FD4095DA |
:108BE000542F8091840490918504A0918604B091C3 |
:108BF0008704820F931FA41FB51F80938404909352 |
:108C00008504A0938604B093870480913E049091DC |
:108C10003F04681B790BCB01AA2797FDA095BA2FBB |
:108C200029853A854B855C85820F931FA41FB51F4C |
:108C30008093880490938904A0938A04B0938B0452 |
:108C4000C0908501D0908601E0908701F090880166 |
:108C5000C816D906EA06FB06C4F488EA91E6A0E045 |
:108C6000B0E08C199D09AE09BF09809388049093E8 |
:108C70008904A0938A04B0938B0480938404909316 |
:108C80008504A0938604B093870422273327A90183 |
:108C90002C193D094E095F0980918804909189043F |
:108CA000A0918A04B0918B0482179307A407B5079B |
:108CB000B4F4D701C601885A9146A040B0408093D1 |
:108CC000880490938904A0938A04B0938B048093C2 |
:108CD000840490938504A0938604B09387046091E4 |
:108CE000970A7091980A600F711F9B01442737FD06 |
:108CF0004095542F80918C0490918D04A0918E0406 |
:108D0000B0918F04820F931FA41FB51F80938C0412 |
:108D100090938D04A0938E04B0938F0480913C04B3 |
:108D200090913D04681B790BCB01AA2797FDA09574 |
:108D3000BA2F2D853E854F855889820F931FA41F1A |
:108D4000B51F8093900490939104A0939204B093E4 |
:108D50009304E0908901F0908A0100918B011091B9 |
:108D60008C01E816F9060A071B07C4F488EA91E6A5 |
:108D7000A0E0B0E08E199F09A00BB10B8093900486 |
:108D800090939104A0939204B093930480938C04E5 |
:108D900090938D04A0938E04B0938F0422273327E1 |
:108DA000A9012E193F09400B510B8091900490911D |
:108DB0009104A0919204B091930482179307A407A1 |
:108DC000B507B4F4D801C701885A9146A040B04015 |
:108DD0008093900490939104A0939204B093930491 |
:108DE00080938C0490938D04A0938E04B0938F0491 |
:108DF0008091800490918104A0918204B0918304B9 |
:108E00008093940490939504A0939604B093970450 |
:108E10008091900490919104A0919204B091930458 |
:108E20008093B0049093B104A093B204B093B304C0 |
:108E30008091880490918904A0918A04B0918B0458 |
:108E40008093A8049093A904A093AA04B093AB04C0 |
:108E500080918C0490918D04A0918E04B0918F0428 |
:108E60008093AC049093AD04A093AE04B093AF0490 |
:108E70008091840490918504A0918604B091870428 |
:108E80008093A4049093A504A093A604B093A70490 |
:108E9000809124019091250197FD079633E09595E7 |
:108EA00087953A95E1F79093980A8093970A809175 |
:108EB00022019091230197FD079623E095958795D0 |
:108EC0002A95E1F79093890A8093880A80914D034F |
:108ED00090914E030F9734F488E19CEF9093980A99 |
:108EE0008093970A80914D0390914E03079734F435 |
:108EF00080E398EF9093980A8093970A80914D03AE |
:108F000090914E03815D974034F088EE93E090930A |
:108F1000980A8093970A80914D0390914E03805E4A |
:108F2000974034F080ED97E09093980A8093970AE9 |
:108F300080914B0390914C030F9734F488E19CEFA0 |
:108F40009093890A8093880A80914B0390914C03F7 |
:108F5000079734F480E398EF9093890A8093880A06 |
:108F600080914B0390914C03815D974034F088EEE3 |
:108F700093E09093890A8093880A80914B039091A3 |
:108F80004C03805E974034F080ED97E09093890A1F |
:108F90008093880A60917801662309F4AEC04091FD |
:108FA0002401509125018091DA049091DB04481B43 |
:108FB000590B5093E1044093E00420912401309137 |
:108FC0002501280F391F37FF02C02F5F3F4F35950E |
:108FD00027953093DB042093DA04413851051CF0C7 |
:108FE00080E890E005C040585F4F34F480E89FEF80 |
:108FF0009093E1048093E004409122015091230179 |
:109000008091DC049091DD04481B590B5093DF04E0 |
:109010004093DE042091220130912301280F391F53 |
:1090200037FF02C02F5F3F4F359527953093DD0402 |
:109030002093DC04413851051CF080E890E005C025 |
:1090400040585F4F34F480E89FEF9093DF048093A3 |
:10905000DE04462F55278091E0049091E104849F1F |
:10906000B001859F700D949F700D11249B0177FFB7 |
:1090700002C0215F3F4FB4E035952795BA95E1F7DF |
:109080008091970A9091980A820F931F9093980A63 |
:109090008093970A8091DE049091DF04849F900171 |
:1090A000859F300D949F300D1124A90137FF02C018 |
:1090B000215F3F4FA4E035952795AA95E1F7809170 |
:1090C000880A9091890A820F931F9093890A80934E |
:1090D000880A8091240190912501860F971F909313 |
:1090E0002501809324018091220190912301840F16 |
:1090F000951F909323018093220100919A0A109169 |
:109100009B0A80917F0A9091800A101611065CF5E7 |
:109110009C0197FF04C022273327281B390BC90164 |
:10912000AA2797FDA095BA2F2091690133274427DC |
:109130005527BC01CD010E9475AB9B01AC0197FF87 |
:1091400004C0215C3F4F4F4F5F4FF6E05595479568 |
:1091500037952795FA95D1F78091950A9091960ABF |
:10916000820F931F27C097FF03C0909581959F4F53 |
:10917000AA2797FDA095BA2F20916901332744278C |
:109180005527BC01CD010E9475AB9B01AC0197FF37 |
:1091900004C0215C3F4F4F4F5F4FE6E05595479528 |
:1091A00037952795EA95D1F78091950A9091960A7F |
:1091B000821B930B9093960A8093950AE090A30AE2 |
:1091C000F090A40A8091830A9091840A1E141F04CF |
:1091D0005CF59C0197FF04C022273327281B390B1D |
:1091E000C901AA2797FDA095BA2F209169013327BD |
:1091F00044275527BC01CD010E9475AB9B01AC01F2 |
:1092000097FF04C0215C3F4F4F4F5F4F76E055956D |
:109210004795379527957A95D1F780918A0A90914D |
:109220008B0A820F931F27C097FF03C090958195EB |
:109230009F4FAA2797FDA095BA2F20916901332748 |
:1092400044275527BC01CD010E9475AB9B01AC01A1 |
:1092500097FF04C0215C3F4F4F4F5F4F66E055952D |
:109260004795379527956A95D1F780918A0A90910D |
:109270008B0A821B930B90938B0A80938A0A8091AE |
:10928000D00A87FF44C03989332309F040C0809158 |
:1092900038048823E1F541E0E41641E0F4064CF09F |
:1092A0008091970A9091980A8E0D9F1D8050914051 |
:1092B0000DC050E0E5165FEFF50664F48091970A63 |
:1092C0009091980A8E0D9F1D80509F4F9093980A01 |
:1092D0008093970A81E0013018074CF08091880A4A |
:1092E0009091890A800F911F805091400CC09FEF90 |
:1092F0000030190764F48091880A9091890A800FE0 |
:10930000911F80509F4F9093890A8093880AE2E1D1 |
:10931000CD5E0C9420AC80915504882329F5809172 |
:109320001D048C7F80931D0480911C048F7D80938D |
:109330001C04A5EEB5E0E6E8F9E09BE080910403AB |
:10934000882309F48C938D918183128291503996F0 |
:1093500097FFF4CF80910403882359F08091040390 |
:1093600081508093040305C080911D048160809327 |
:109370001D0480917703882319F0109277030895D4 |
:1093800080937B03809175038E7F8093750385EABC |
:109390008093BC000895882319F480E090E008953C |
:1093A000E82FFF27EE0FFF1FED50F64F80819181D0 |
:1093B00081589F4F8F3F910521F01CF08FEF90E077 |
:1093C00004C097FF02C080E090E099270895CF93F2 |
:1093D000DF93A7E5B4E0C0E7D8E057E08991E82F34 |
:1093E000FF27EE0FFF1FED50F64F0190F081E02DAB |
:1093F000E158FF4FEF3FF10521F01CF0EFEFF0E0F7 |
:1094000004C0F7FF02C0E0E0F0E0893111F4EC9312 |
:109410001BC04C91242F3327E217F307A9F0CF018B |
:10942000821B930B97FD0396959587959595879548 |
:10943000242F280F2C93822F9927E817F90714F46B |
:10944000215001C02F5F2C935150119657FFC6CF6A |
:1094500080917A08883F38F0EFEFF0E0E81BF109DF |
:10946000E95AFB4F808180937D0180917D018823A3 |
:1094700029F0843618F084E680937D0180917C0881 |
:10948000883F38F0EFEFF0E0E81BF109E95AFB4FB5 |
:10949000808180937C0180917C01882329F084362F |
:1094A00018F084E680937C0180918908883F38F029 |
:1094B000EFEFF0E0E81BF109E95AFB4F8081809360 |
:1094C0007701809177018B3010F48AE002C08F3FE2 |
:1094D00011F4809377018091B608883F38F0EFEF60 |
:1094E000F0E0E81BF109E95AFB4F80818093AF0A55 |
:1094F0008091AF0A863010F485E002C08F3F11F4EE |
:109500008093AF0A8091B808883F38F0EFEFF0E021 |
:10951000E81BF109E95AFB4F80818093D70A8091BB |
:10952000D70A863010F485E002C08F3F11F4809393 |
:10953000D70A8091A308873F19F4429905C007C054 |
:10954000863F41F4439B03C08091D80816C08091A8 |
:10955000D90813C0883F38F0EFEFF0E0E81BF109BD |
:10956000E95AFB4F80818093AC0A8091AC0A893123 |
:1095700010F488E102C08F3F11F48093AC0A80910F |
:10958000A408873F19F4429905C007C0863F41F4FB |
:10959000439B03C08091DA0816C08091DB0813C09A |
:1095A000883F38F0EFEFF0E0E81BF109E95AFB4F94 |
:1095B00080818093850A8091850A893110F488E141 |
:1095C00002C08F3F11F48093850A8091A508883FDF |
:1095D00038F0EFEFF0E0E81BF109E95AFB4F80812A |
:1095E0008093B50A8091B50A893110F488E102C0F0 |
:1095F0008F3F11F48093B50A80917B080E94CB497C |
:109600008093330480917E08883F38F0EFEFF0E0DC |
:10961000E81BF109E95AFB4F808180937B0180911F |
:109620008008883F38F0EFEFF0E0E81BF109E95AD5 |
:10963000FB4F80818093790180918808883F38F0C2 |
:10964000EFEFF0E0E81BF109E95AFB4F80818093CE |
:109650007A0180918A08883F38F0EFEFF0E0E81B4C |
:10966000F109E95AFB4F80818093760180918B0844 |
:10967000883F38F0EFEFF0E0E81BF109E95AFB4FC3 |
:1096800080818093780180918C08883F38F0EFEFDB |
:10969000F0E0E81BF109E95AFB4F808180937501E6 |
:1096A00080918D08883F38F0EFEFF0E0E81BF1097A |
:1096B000E95AFB4F80818093740180919308883F21 |
:1096C00038F0EFEFF0E0E81BF109E95AFB4F808139 |
:1096D0008093720180919408883F38F0EFEFF0E0BA |
:1096E000E81BF109E95AFB4F808180933204809195 |
:1096F0009508883F38F0EFEFF0E0E81BF109E95AF0 |
:10970000FB4F80818093310480919608883F38F028 |
:10971000EFEFF0E0E81BF109E95AFB4F80818093FD |
:10972000300480919708883F38F0EFEFF0E0E81BB5 |
:10973000F109E95AFB4F808180932F048091B10891 |
:10974000883F38F0EFEFF0E0E81BF109E95AFB4FF2 |
:10975000808180932E048091B208883F38F0EFEF2B |
:10976000F0E0E81BF109E95AFB4F808180932D045A |
:109770008091B308883F38F0EFEFF0E0E81BF10983 |
:10978000E95AFB4F808180932C048091B408883F74 |
:1097900038F0EFEFF0E0E81BF109E95AFB4F808168 |
:1097A00080932B0480919808883F38F0EFEFF0E029 |
:1097B000E81BF109E95AFB4F808180937001809189 |
:1097C0009C08883F38F0EFEFF0E0E81BF109E95A18 |
:1097D000FB4F808180936F0180919908883F38F01A |
:1097E000EFEFF0E0E81BF109E95AFB4F808180932D |
:1097F0006E0180919D08883F38F0EFEFF0E0E81BA4 |
:10980000F109E95AFB4F808180936D018091A60890 |
:10981000883F38F0EFEFF0E0E81BF109E95AFB4F21 |
:10982000808180936C018091A908883F38F0EFEF28 |
:10983000F0E0E81BF109E95AFB4F808180936B014E |
:109840008091AA08883F38F0EFEFF0E0E81BF109BB |
:10985000E95AFB4F808180936A018091AB08883F71 |
:1098600038F0EFEFF0E0E81BF109E95AFB4F808197 |
:10987000809369018091D408883F38F0EFEFF0E0E1 |
:10988000E81BF109E95AFB4F80818093940A80918B |
:1098900078088093D00A8091E5088093B40A80917B |
:1098A000B008883F38F0EFEFF0E0E81BF109E95A23 |
:1098B000FB4F8081809368018091CD08883F38F00C |
:1098C000EFEFF0E0E81BF109E95AFB4F808180934C |
:1098D000E90A80917201282F33272F5F3F4F8CE3D5 |
:1098E00098E2B9010E94B4AB70937F0160937E014E |
:1098F000809186088093D80A8091850880939C0A7D |
:10990000E091CF08EE2309F449C081E080932A0456 |
:10991000FF27EE0FFF1FED50F64F80819181805C95 |
:109920009F4F14F410922A048091800120912A0400 |
:10993000821721F18330F8F43091B101222351F0E4 |
:109940008CED95E09093270380932603332369F4ED |
:109950008EE209C088EC90E0909327038093260361 |
:10996000332319F487E18093B10185E080934004AB |
:109970002093800103C08150809380018091290B46 |
:1099800090912A0B97FF0FC080912A04882359F0E9 |
:109990008091E00580688093E00505C0E0932A048B |
:1099A0008AE0809380018091290B90912A0B97FF88 |
:1099B0001DC0809155048823C9F080912A04882312 |
:1099C000A9F080910B0190910C018F5F9F4F71F472 |
:1099D00088E99AE3909327038093260380E094EA32 |
:1099E00090930C0180930B0110922A0480912A0419 |
:1099F000882321F080911C04816003C080911C04A5 |
:109A00008E7F80931C04DF91CF910895809181080F |
:109A1000882301F560913A0470913B0477FF02C0FE |
:109A20006D5F7F4F75956795759567954091260198 |
:109A30005091270180910201282F3327649FC00194 |
:109A4000659F900D749F900D1124B9010E94A0ABE9 |
:109A5000CB0101C099279093840180938301809169 |
:109A60008301909184018734910538F486E490E075 |
:109A7000909384018093830108958F3A910530F08B |
:109A80008FEA90E090938401809383010895A8E188 |
:109A9000B0E0EDE4FDE40C9404AC0E940A42809135 |
:109AA0001D04992784719070892B91F58091E608A7 |
:109AB00082FF27C080913A0490913B040097F1F017 |
:109AC00002E088359007D4F49C0197FF02C02D5F17 |
:109AD0003F4F359527953595279580919008992783 |
:109AE000289FA001299F500D389F500D1124CA01B5 |
:109AF00064E670E00E94B4ABCB0106C08DE290E05A |
:109B000003C080919008992790931B0480931A04B6 |
:109B1000209118043091190455E72033350759F482 |
:109B2000109261041092600480919C0A992790938E |
:109B30001B0480931A0460916004709161047A831D |
:109B4000698380919C0A99270A966817790714F40B |
:109B50009A83898380915604843608F062C080918C |
:109B60001C0482FD5EC08091F6049091F70400977A |
:109B700031F001979093F7048093F6040BC0109294 |
:109B8000550490931F0480931E0480911D048D7EC4 |
:109B900080931D04289A80911E0490911F04895E71 |
:109BA0009340E0F180916D0B8536C0F180911A04ED |
:109BB00090911B049A83898380911D048061809316 |
:109BC0001D0480916C08A82FBB27AA0FBB1FFD01A5 |
:109BD000E75CF54F1182108280916D08282F3327A2 |
:109BE000220F331FC901875C954FFC01118210823F |
:109BF000AD50B64F11961C921E922D50364FD90182 |
:109C000011961C921E9280916F08E82FFF27EE0F8D |
:109C1000FF1FED50F64F11821082B4C5109255040B |
:109C2000B1C5809156048D3808F482C59091DC0846 |
:109C3000992309F445C08091DD08882309F440C0C8 |
:109C4000E92FFF27EE0FFF1FED50F64F8081918126 |
:109C5000C397BCF080919501823361F480911C041C |
:109C600085FF08C080911C04806480931C0480E3FD |
:109C70008093B10180911C048F7780931C0486E946 |
:109C800017C0808191818E5C9F4FACF480919501CB |
:109C9000863941F480911C04806880931C048FE213 |
:109CA0008093B10180911C048F7B80931C0482E31C |
:109CB0008093950105C080911C048F7380931C04D0 |
:109CC00080911D048F7E80931D049091910882E302 |
:109CD000989FC00111249093F7048093F604E981C2 |
:109CE000FA81B9978CF080915504882369F08091AE |
:109CF0001E0490911F04FFEF8F3F9F0729F00196EC |
:109D000090931F0480931E0440911E0450911F04E1 |
:109D10004F3F510509F048F51092780410927904EC |
:109D200010927A0410927B041092740410927504BD |
:109D300010927604109277041092E2041092E304D9 |
:109D40001092E4041092E5041092800410928104B1 |
:109D5000109282041092830480911C04806280938C |
:109D60001C0484E68093950135C180911D048260B6 |
:109D700080931D0480911C0485FF98C0809132055A |
:109D800099279C012470307082FD04C080911C04CE |
:109D900086FF2AC0809142018D3331F580911504F0 |
:109DA000882311F180E58093450484EF91E0A0E0E1 |
:109DB000B0E08093460490934704A0934804B09386 |
:109DC000490480934C0490934D04A0934E04B093A7 |
:109DD0004F0488EE93E09093940180939301232B9A |
:109DE00019F08DE08093B10180913203909133039B |
:109DF000A0913403B091350387399105A105B105D0 |
:109E00008CF48091500490915104A0915204B0912F |
:109E10005304825A9E4FAF4FBF4F24F08091D00A17 |
:109E200080FD21C088EE93E090939401809393018C |
:109E300080911C0486FF0FC0109245048CE291E0D3 |
:109E4000A0E0B0E080934C0490934D04A0934E04A6 |
:109E5000B0934F0403C080E38093B10180911C0450 |
:109E60008F7180931C0410927804109279041092E0 |
:109E70007A0410927B04109274041092750410926C |
:109E8000760410927704109280041092810410924C |
:109E9000820410928304495E534008F49BC088EE0C |
:109EA00093E090931F0480931E0494C080911C043F |
:109EB00087FF1AC080914201863711F08D33A1F4DB |
:109EC00080911504882381F08091DD0880934504FA |
:109ED00080EE91EBAFEFBFEF809346049093470481 |
:109EE000A0934804B09349042091930130919401C8 |
:109EF00043E0283E340708F048C02F5F3F4F3093BF |
:109F00009401209393011092780410927904109296 |
:109F10007A0410927B0410927404109275041092CB |
:109F200076041092770410928004109281041092AB |
:109F30008204109283048091320390913303A091A4 |
:109F40003403B09135038C529140A040B0408093CF |
:109F50004C0490934D04A0934E04B0934F04285E9C |
:109F60003340C1F580911C0487FF34C080914201C9 |
:109F70008B3281F180911C048F7780931C04809137 |
:109F80001C04806280931C0425C0809115048823E2 |
:109F900009F180914201863711F08D32D9F4809118 |
:109FA000500490915104A0915204B0915304885EE2 |
:109FB0009340A040B04074F480910B0890910C083D |
:109FC0008D5A93403CF010929401109293018EE0D0 |
:109FD0008093B10180916E08E82FFF27EE0FFF1FDD |
:109FE000ED50F64F80819181813591050CF454C17B |
:109FF00020915504222309F04FC180916F08E82F6A |
:10A00000FF27EE0FFF1FED50F64F808191818C34BA |
:10A0100091050CF411C18091F8048F5F8093F804CE |
:10A02000893C08F439C12093F80410921F0410925F |
:10A030001E0430916C08E32FFF27EE0FFF1FED5039 |
:10A04000F64F8081918187349105B4F480916D0839 |
:10A05000E82FFF27EE0FFF1FED50F64F8081918113 |
:10A060000190F081E02DF7FF03C0F095E195FF4FDF |
:10A07000E734F1050CF478C041E020916D08A22F7F |
:10A08000BB27AA0FBB1FAD50B64F8D919C91119766 |
:10A090008734910544F0E32FFF27EE0FFF1FED50AB |
:10A0A000F64F808191818D919C918734910574F058 |
:10A0B00080916C08E82FFF27EE0FFF1FED50F64F41 |
:10A0C00080819181873491050CF042E0E22FFF27D7 |
:10A0D000EE0FFF1FED50F64F808191818634910580 |
:10A0E00074F480916C08E82FFF27EE0FFF1FED50EE |
:10A0F000F64F80819181873491050CF043E0E22F87 |
:10A10000FF27EE0FFF1FED50F64F808191818A5B94 |
:10A110009F4F74F480916C08E82FFF27EE0FFF1F0C |
:10A12000ED50F64F80819181873491050CF044E029 |
:10A13000E22FFF27EE0FFF1FED50F64F8081918138 |
:10A140008A5B9F4F74F480916C08E82FFF27EE0F15 |
:10A15000FF1FED50F64F80819181863491050CF4FC |
:10A1600045E0842F0E94E23280916D08E82FFF279E |
:10A17000EE0FFF1FED50F64F808191810190F0812D |
:10A18000E02DF7FF03C0F095E195FF4F7E97CCF4EB |
:10A1900080916C08E82FFF27EE0FFF1FED50F64F60 |
:10A1A000808191818A5B9F4F64F481E08093FB05FD |
:10A1B0001092410488EE93E0909327038093260346 |
:10A1C0006BC0809101010E948D3280E00E948A0C58 |
:10A1D000809192080E9492A68091D00A80FF10C0C0 |
:10A1E00080911C0190911D01875B934038F4809110 |
:10A1F0001C0190911D018E5E924010F40E94562128 |
:10A2000081E00E949E3E982F8093410421E020939C |
:10A210002403579A8091E005882311F087E006C057 |
:10A22000992319F42093B10103C088E18093B1010F |
:10A2300085E08093630527C080819181855B9F4F76 |
:10A240004CF58091F8048F5F8093F804893C20F1ED |
:10A25000209355042093F80410921F0410921E04BA |
:10A2600082E00E949E3E982F809341048091E005F9 |
:10A27000882311F087E005C0992311F481E001C023 |
:10A2800088E18093B10168E770E0809101010E944C |
:10A29000E93D02C02093F80480916E08E82FFF2763 |
:10A2A000EE0FFF1FED50F64F808191818C599F4F2B |
:10A2B0000CF037C22091D008E22FFF27EF77F07023 |
:10A2C000EE0FFF1FE75CF54F80819181069714F038 |
:10A2D00084E606C0808191818B5F9F4F1CF48CE9DE |
:10A2E0008093FB0480915504E0916F08882309F066 |
:10A2F00063C1FF27EE0FFF1FED50F64F8081918164 |
:10A300008C599F4F9CF48091E60883FD0BC0E22F8F |
:10A31000FF27EE0FFF1FED50F64F80819181855B87 |
:10A320009F4FDCF08091D0088823B9F08091E60837 |
:10A3300083FF3FC18091D008E82FFF27EE0FFF1F5A |
:10A34000ED50F64F80819181875F9F4F0CF431C1B2 |
:10A350008091FB04843609F02CC18091410488234C |
:10A3600029F080911D04886080931D0480911E0156 |
:10A3700090911F01A0912001B091210180930D08BF |
:10A3800090930E08A0930F08B09310081092320318 |
:10A39000109233031092340310923503109250043C |
:10A3A00010925104109252041092530410923F03E1 |
:10A3B00010924003109241031092420380916C0866 |
:10A3C000E82FFF27EE0FFF1FED50F64F80819181A0 |
:10A3D0008D599F4FACF480916D08E82FFF27EE0F49 |
:10A3E000FF1FED50F64F808191810190F081E02DAB |
:10A3F000F7FF03C0F095E195FF4FE436F10534F423 |
:10A400008091D008882311F48093F9048091F90495 |
:10A410008F5F8093F9048E3F08F466C18091DB0A58 |
:10A420009091DC0A97FF03C0909581959F4F81978B |
:10A43000B4F48091970A9091980A97FF03C0909581 |
:10A4400081959F4F45975CF48091880A9091890A85 |
:10A4500097FF03C0909581959F4F459714F01092F8 |
:10A4600041041092F9048091E005882309F094C01A |
:10A4700080914104882309F48FC080913605882398 |
:10A4800009F08AC081E090E090931F0480931E043D |
:10A4900081E0809355041092E2041092E30410923C |
:10A4A000E4041092E504109280041092810410924A |
:10A4B00082041092830410927C0410927D04109206 |
:10A4C0007E0410927F0480918708E82EFF240027E5 |
:10A4D00011278091D40A9091D50A9C01442737FD19 |
:10A4E0004095542FC801B7010E9475ABDC01CB0128 |
:10A4F0008093900490939104A0939204B09393045A |
:10A500008091E60A9091E70A9C01442737FD409527 |
:10A51000542FC801B7010E9475ABDC01CB018093B9 |
:10A52000880490938904A0938A04B0938B0480914B |
:10A53000B0049091B104A091B204B091B30480939F |
:10A540008C0490938D04A0938E04B0938F0480911B |
:10A55000A8049091A904A091AA04B091AB0480939F |
:10A56000840490938504A0938604B093870410928A |
:10A5700078041092790410927A0410927B0410925D |
:10A58000740410927504109276041092770484E695 |
:10A590008093400484E39AC08CED95E09093270368 |
:10A5A0008093260380914104882309F09DC081E0B7 |
:10A5B0008DC01092F90498C0FF27EE0FFF1FED50D9 |
:10A5C000F64F80819181853691059CF08091E60857 |
:10A5D00083FD0BC0E22FFF27EE0FFF1FED50F64F5C |
:10A5E00080819181855B9F4FDCF08091D00888232A |
:10A5F000B9F08091E60883FF75C08091D008E82FFC |
:10A60000FF27EE0FFF1FED50F64F808191818E5C8A |
:10A610009F4F0CF067C08091FB048C3909F062C039 |
:10A6200080916C08E82FFF27EE0FFF1FED50F64FCB |
:10A63000808191818D599F4FACF480916D08E82FF6 |
:10A64000FF27EE0FFF1FED50F64F808191810190A3 |
:10A65000F081E02DF7FF03C0F095E195FF4FE43660 |
:10A66000F1053CF48091D008882319F48093FA0412 |
:10A6700018C0109278041092790410927A04109203 |
:10A680007B04109274041092750410927604109258 |
:10A690007704109267041092660410926504109279 |
:10A6A00064048091FA048F5F8093FA048B3F88F0F2 |
:10A6B000109255041092FA0410921F0410921E0476 |
:10A6C00080911C048F7180931C0486E28093B101F9 |
:10A6D0000BC0843649F48CEA9DE090932703809365 |
:10A6E000260302C01092FA04209118043091190434 |
:10A6F000F3E0283E3F0708F045C080913C0390916D |
:10A700003D038B569F4F1CF02F5F3F4F05C0211517 |
:10A710003105C1F1215030403093190420931804C1 |
:10A7200031C01092FB0410921904109218042AC030 |
:10A730002E5E324038F18091F10A9091F20A8059F0 |
:10A74000914000F58091500490915104A0915204E1 |
:10A75000B09153048C5D9540A040B0409CF480E3E0 |
:10A7600095E7909319048093180480911E049091AA |
:10A770001F048A5E934030F089EE93E090931F04AB |
:10A7800080931E048091410181508093410180910A |
:10A7900041018F3F21F080911D0484FFDFC30E949F |
:10A7A000E749B090820880910405909105059C01CD |
:10A7B000220F331F280F391FC0906C08AC2DBB2708 |
:10A7C000AA0FBB1FFD01ED50F64F4B2D5527808181 |
:10A7D0009181849FB001859F700D949F700D11240D |
:10A7E000260F371F37FF02C02D5F3F4FB901759508 |
:10A7F000679575956795A75CB54F80918308082F7D |
:10A8000011278D919C91809FD001819FB00D909FC9 |
:10A81000B00D11246A0F7B1F70930505609304052A |
:10A8200080910605909107059C01220F331F280F88 |
:10A83000391FD0906D08AD2DBB27AA0FBB1FFD019E |
:10A84000ED50F64F80819181849FF001859FF00D3E |
:10A85000949FF00D11242E0F3F1F37FF02C02D5F74 |
:10A860003F4FA9015595479555954795A75CB54F1D |
:10A870008D919C91809F7001819FF00C909FF00CB6 |
:10A8800011244E0D5F1D50930705409306058091DE |
:10A890002A04882309F448C0CB0177FD0396DC0124 |
:10A8A000B595A795B595A795CA0157FD0396FC01E7 |
:10A8B000F595E795F595E7958091A601682F77279F |
:10A8C00067FD70956A9F90016B9F300D7A9F300DE8 |
:10A8D000112480913805482F552747FD50954E9FEC |
:10A8E000C0014F9F900D5E9F900D1124280F391FBE |
:10A8F00037FF02C0295F3F4F03E0359527950A9542 |
:10A90000E1F730936704209366046E9F90016F9F78 |
:10A91000300D7E9F300D11244A9FC0014B9F900D3A |
:10A920005A9F900D11243FC08091CE08E82FFF2739 |
:10A93000E75BFE4F86818093A60190819093380556 |
:10A94000A82FBB27A7FDB095A69F9001A79F300D0C |
:10A95000B69F300D1124E92FFF27E7FDF095E49F06 |
:10A96000C001E59F900DF49F900D1124280F391F11 |
:10A9700037FF02C0295F3F4F13E0359527951A95A1 |
:10A98000E1F73093670420936604A49F9001A59F8C |
:10A99000300DB49F300D1124E69FC001E79F900D4C |
:10A9A000F69F900D1124281B390B37FF02C0295F39 |
:10A9B0003F4F43E0359527954A95E1F7309365047D |
:10A9C0002093640480916F08E82FFF27EE0FFF1F8C |
:10A9D000ED50F64F80819181909581959F4F909396 |
:10A9E0006304809362048530910514F0049705C0D8 |
:10A9F0000FEF8C3F900734F4049690936304809398 |
:10AA0000620404C0109263041092620480911804DE |
:10AA1000909119048150924078F180916604909150 |
:10AA2000670497FD079623E0959587952A95E1F7AA |
:10AA30009093670480936604809164049091650408 |
:10AA400097FD079603E0959587950A95E1F7909312 |
:10AA50006504809364041092780410927904109233 |
:10AA60007A0410927B041092740410927504109270 |
:10AA700076041092770443C080912505882309F459 |
:10AA80003EC0282F3327809166049091670497FD7C |
:10AA9000079613E0959587951A95E1F7289FA001F1 |
:10AAA000299F500D389F500D1124CA0157FD0F9654 |
:10AAB000B4E095958795BA95E1F7909367048093F4 |
:10AAC0006604809164049091650497FD0796A3E065 |
:10AAD00095958795AA95E1F7289FB001299F700D5C |
:10AAE000389F700D1124CB0177FD0F96F4E09595FA |
:10AAF0008795FA95E1F790936504809364048090BC |
:10AB00006604909067048091280590912905881A21 |
:10AB1000990A9092670480926604009164041091EF |
:10AB200065048091260590912705081B190B109349 |
:10AB300065040093640480916E08E82FFF27EE0FF0 |
:10AB4000FF1FED50F64FE080F1808FE790E0E80EB8 |
:10AB5000F91EF0926104E0926004809177019927D8 |
:10AB6000AA2797FDA095BA2FBC01CD010E94E9AAA2 |
:10AB7000DC01CB0120E030E040E251E4BC01CD013A |
:10AB80000E9457AADC01CB01BC01CD010E94BBAAE7 |
:10AB9000DC01CB018093E00A809176018093B60AB4 |
:10ABA000809175019927AA2797FDA095BA2FBC011E |
:10ABB000CD010E94E9AADC01CB0120E030E040E2B7 |
:10ABC00051E4BC01CD010E9457AADC01CB01BC01BC |
:10ABD000CD010E94BBAADC01CB0180938F0A80913A |
:10ABE00074018093A50A8091070680FF59C0809167 |
:10ABF000E90A813808F454C080910006992787FD3E |
:10AC000090952B2D3327829FD001839FB00D929F6B |
:10AC1000B00D11248A0E9B1E9092670480926604E8 |
:10AC200080910106992787FD9095829FF001839F6F |
:10AC3000F00D929FF00D11240E0F1F1F109365044D |
:10AC40000093640480910206282F332727FD309556 |
:10AC50008091620490916304820F931F9093630428 |
:10AC60008093620480910406282F332727FD3095B6 |
:10AC700080917D089927289F8001299F100D389F7A |
:10AC8000100D112410934801009347018091030691 |
:10AC900099278E159F0524F4909361048093600496 |
:10ACA000809160049091610497FF04C01092610448 |
:10ACB000109260048091D00A82FF02C01092B60AFE |
:10ACC0004091660450916704CA0157FD03969C01A8 |
:10ACD000359527953595279537FF03C030952195F4 |
:10ACE0003F4F809122049091230482179307B4F47C |
:10ACF000CA0157FF03C0909581959F4F97FD03961A |
:10AD00009595879595958795909323048093220434 |
:10AD10008536910544F084E690E001C00197909358 |
:10AD20002304809322044091640450916504CA0175 |
:10AD300057FD03969C01359527953595279537FF47 |
:10AD400003C0309521953F4F8091200490912104BC |
:10AD500082179307B4F4CA0157FF03C090958195F9 |
:10AD60009F4F97FD03969595879595958795909319 |
:10AD70002104809320048536910544F084E690E018 |
:10AD800001C00197909321048093200480911D04B9 |
:10AD900084FF08C010922304109222041092210410 |
:10ADA00010922004ED2DFF27EE0FFF1FED50F64F00 |
:10ADB0004091A708242F33278081918128173907D4 |
:10ADC00044F48091E30882FF04C081E0809337045B |
:10ADD00013C0ED2DFF27EE0FFF1FED50F64F842F10 |
:10ADE00099272091A808821B910920813181281779 |
:10ADF000390714F41092370440916D08E42FFF27AF |
:10AE0000EE0FFF1FED50F64F5091A708852F9927A1 |
:10AE100022273327281B390B8081918182179307C2 |
:10AE200044F48091E30883FF04C081E080933604FA |
:10AE300016C080913604882391F0E42FFF27EE0F8F |
:10AE4000FF1FED50F64F8091A8089927851B9109A7 |
:10AE5000208131818217930714F410923604EC2D6F |
:10AE6000FF27EE0FFF1FED50F64F4091A708242F4C |
:10AE70003327808191812817390744F48091E308B2 |
:10AE800080FF04C081E08093340417C080913404B3 |
:10AE9000882399F0EC2DFF27EE0FFF1FED50F64FA2 |
:10AEA000842F99272091A808821B91092081318144 |
:10AEB0002817390714F41092340440916C08E42FD9 |
:10AEC000FF27EE0FFF1FED50F64F5091A708852F7B |
:10AED000992722273327281B390B808191818217DC |
:10AEE000930744F48091E30881FF04C081E08093DC |
:10AEF000350416C080913504882391F0E42FFF2794 |
:10AF0000EE0FFF1FED50F64F8091A8089927851B83 |
:10AF10009109208131818217930714F4109235042E |
:10AF200080913704882319F480913604811181E0DF |
:10AF30008093380480913404882321F4809135046F |
:10AF4000882351F081E080933904109238041092E4 |
:10AF500037041092360402C080933904809138047B |
:10AF6000882321F480913904882369F08091A60810 |
:10AF7000992729813A818217930714F49A83898348 |
:10AF800081E080936C0480911C0499279C012470BB |
:10AF9000307082FF31C080912805909129059095ED |
:10AFA00081959F4F90936704809366048091260556 |
:10AFB00090912705909581959F4F9093650480937C |
:10AFC0006404809183019091840190936104809343 |
:10AFD000600410926304109262048091D00A8B770F |
:10AFE0008B668093D00A8091B40A8C7B8093B40ADC |
:10AFF00088EC809333041EC080911D0484FF1AC026 |
:10B0000030936304209362043093670420936604B2 |
:10B0100030936504209364049AE59093E00A88E7EE |
:10B020008093B60A90938F0A8093A50A10923804F1 |
:10B03000109239048091A80A9091A90AA091AA0AB5 |
:10B04000B091AB0A2091B0043091B1044091B204A8 |
:10B050005091B304820F931FA41FB51F8093A80AB9 |
:10B060009093A90AA093AA0AB093AB0A8091B00A60 |
:10B070009091B10AA091B20AB091B30AE090A804ED |
:10B08000F090A9040091AA041091AB04EB82FC8219 |
:10B090000D831E838E0D9F1DA01FB11F8093B00ACC |
:10B0A0009093B10AA093B20AB093B30A80919D0A1B |
:10B0B00090919E0AA0919F0AB091A00AE090AC04E2 |
:10B0C000F090AD040091AE041091AF04EF82F886C9 |
:10B0D00009871A878E0D9F1DA01FB11F80939D0A9F |
:10B0E00090939E0AA0939F0AB093A00A8091900A21 |
:10B0F0009091910AA091920AB091930AE090A404D1 |
:10B10000F090A5040091A6041091A704EB86FC869C |
:10B110000D871E878E0D9F1DA01FB11F8093900A63 |
:10B120009093910AA093920AB093930AF0903904F5 |
:10B13000FF86FF2029F480913804882309F460C039 |
:10B140001092A0041092A1041092A2041092A304E1 |
:10B1500010929C0410929D0410929E0410929F04E1 |
:10B160001092A80A1092A90A1092AA0A1092AB0A89 |
:10B170001092B00A1092B10A1092B20A1092B30A59 |
:10B1800010929D0A10929E0A10929F0A1092A00A95 |
:10B190001092900A1092910A1092920A1092930AB9 |
:10B1A0008091900490919104A0919204B0919304A5 |
:10B1B00080938C0490938D04A0938E04B0938F049D |
:10B1C0008091880490918904A0918A04B0918B04A5 |
:10B1D0008093840490938504A0938604B09387049D |
:10B1E00010923B0310923A0310923D0410923C04DB |
:10B1F00010923F0410923E040F85002309F0D0C145 |
:10B2000080913804882309F0CBC180910B0890917C |
:10B210000C08815092402CF480915504882309F445 |
:10B22000BFC19090620BA09087082090D40A309004 |
:10B23000D50A4090E60A5090E70A19140CF0BBC0FA |
:10B24000BB24CC24DD24CA01B901A60195010E94CA |
:10B25000E9AB79018A0180912B0B90912C0B281A74 |
:10B26000390AC101AA2797FDA095BA2FE81AF90A51 |
:10B270000A0B1B0B6B817C818D819E81A601950140 |
:10B280000E94E9AB59016A0180912D0B90912E0B20 |
:10B29000481A590AC201AA2797FDA095BA2FA81AE1 |
:10B2A000B90ACA0ADB0A292C332427FC3094432C20 |
:10B2B000532CC801B701A20191010E9475AB97FF01 |
:10B2C00004C061507E4F8F4F9F4F3B014C0109E0FE |
:10B2D00095948794779467940A95D1F7C601B50140 |
:10B2E000A20191010E9475AB97FF04C061507E4F8F |
:10B2F0008F4F9F4F5B016C0119E0D594C794B794B1 |
:10B30000A7941A95D1F78091220490912304813457 |
:10B3100091053CF4809120049091210481349105A1 |
:10B32000D4F0D401C30197FE03C00196A11DB11D45 |
:10B330003C014D019594879477946794D601C5019B |
:10B34000D7FE03C00196A11DB11D5C016D01D5940E |
:10B35000C794B794A7948091640B282F332727FDB7 |
:10B360003095432F532F261537054805590514F4FA |
:10B3700039014A01992787FD9095909581959F4FB6 |
:10B38000AA2797FDA095BA2F681679068A069B060C |
:10B3900014F43C014D012A153B054C055D0514F4E0 |
:10B3A00059016A01A816B906CA06DB060CF0D0C01E |
:10B3B0005C016D01CDC0EA2CFF2400271127CA01D2 |
:10B3C000B901A80197010E94E9AB39014A01C10105 |
:10B3D000AA2797FDA095BA2F681A790A8A0A9B0AAC |
:10B3E0006B817C818D819E81A80197010E94E9ABD0 |
:10B3F00059016A01C201AA2797FDA095BA2FA81A80 |
:10B40000B90ACA0ADB0AD401C30197FE03C00F962A |
:10B41000A11DB11D3C014D01F4E0959487947794F2 |
:10B420006794FA95D1F7D601C501D7FE03C00F96F0 |
:10B43000A11DB11D5C016D01E4E0D594C794B794E2 |
:10B44000A794EA95D1F78091220490912304813446 |
:10B4500091053CF480912004909121048134910560 |
:10B46000A4F0C401B30123E030E040E050E00E94CA |
:10B47000E9AB39014A01C601B50123E030E040E003 |
:10B4800050E00E94E9AB59016A0180916F08E82FF2 |
:10B49000FF27EE0FFF1FED50F64F80819181019045 |
:10B4A000F081E02DF7FF03C0F095E195FF4F7A970B |
:10B4B000A4F0C401B30123E030E040E050E00E947A |
:10B4C000E9AB39014A01C601B50123E030E040E0B3 |
:10B4D00050E00E94E9AB59016A0189E180938F0134 |
:10B4E00021E262167104810491042CF070E2672E4F |
:10B4F000712C812C912C30EE63163FEF73063FEFD9 |
:10B5000083063FEF930644F460EE662E6FEF762ECF |
:10B510006FEF862E6FEF962E41E2A416B104C104A0 |
:10B52000D1042CF050E2A52EB12CC12CD12C50EE20 |
:10B53000A5165FEFB5065FEFC5065FEFD50644F4CD |
:10B5400040EEA42E4FEFB42E4FEFC42E4FEFD42E6B |
:10B550008091900490919104A0919204B0919304F1 |
:10B5600086199709A809B9098093900490939104CA |
:10B57000A0939204B09393048091880490918904DD |
:10B58000A0918A04B0918B048A199B09AC09BD096A |
:10B590008093880490938904A0938A04B0938B04C9 |
:10B5A00080913A0390913B038F3F910509F008F495 |
:10B5B000C4C56F85662309F04EC580913804882381 |
:10B5C00009F049C580916C04882309F044C5709145 |
:10B5D000AF08788B772309F43EC58091A80A909133 |
:10B5E000A90AA091AA0AB091AB0AB7FF04C0815082 |
:10B5F0009F4FAF4FBF4FE92EFA2E0B2F112707FD9C |
:10B600001A95E092A80AF092A90A0093AA0A109348 |
:10B61000AB0A8091B00A9091B10AA091B20AB091A0 |
:10B62000B30AB7FF04C081509F4FAF4FBF4F892F60 |
:10B630009A2FAB2FBB27A7FDBA95898B9A8BAB8B23 |
:10B64000BC8B8093B00A9093B10AA093B20AB093D6 |
:10B65000B30A80918708A82EBB24CC24DD24209136 |
:10B66000A0043091A1044091A2045091A304C6010A |
:10B67000B5010E9475AB97FF04C061507F4F8F4F9B |
:10B680009F4F672E782E892E992487FC9A9460927A |
:10B69000A0047092A1048092A2049092A30420912D |
:10B6A0009C0430919D0440919E0450919F04C601DA |
:10B6B000B5010E9475AB97FF04C061507F4F8F4F5B |
:10B6C0009F4F272E382E492E552447FC5A942092FE |
:10B6D0009C0430929D0440929E0450929F0480915D |
:10B6E000980490919904A0919A04B0919B04B7FF9B |
:10B6F00004C081509F4FAF4FBF4F892F9A2FAB2F60 |
:10B70000BB27A7FDBA958093980490939904A093C2 |
:10B710009A04B0939B04D801C70186199709A80918 |
:10B72000B9098093EE049093EF04A093F004B093D2 |
:10B73000F1042091AE08E22EFF2400271127BC015E |
:10B74000CD01A80197010E94E9AB59016A0120933C |
:10B75000FC043093FD044093FE045093FF04898958 |
:10B760009A89AB89BC8982199309A409B509809388 |
:10B77000F2049093F304A093F404B093F504BC0195 |
:10B78000CD01A80197010E94E9AB209300053093F9 |
:10B7900001054093020550930305D601C501D7FE6C |
:10B7A00004C081509F4FAF4FBF4F892F9A2FAB2FAF |
:10B7B000BB27A7FDBA9590933D0480933C0457FFA7 |
:10B7C00004C021503F4F4F4F5F4FBB2757FDBA95E5 |
:10B7D000A52F942F832F90933F0480933E04809154 |
:10B7E00022049091230481349105DCF4809120049B |
:10B7F0009091210481349105A4F480916F08E82F81 |
:10B80000FF27EE0FFF1FED50F64F808191810190D1 |
:10B81000F081E02DF7FF03C0F095E195FF4F7A9797 |
:10B82000E4F08091620B8F3FC1F480913C049091D1 |
:10B830003D0497FD01969595879590933D048093DF |
:10B840003C0480913E0490913F0497FD01969595AC |
:10B85000879590933F0480933E0480919D0A909138 |
:10B860009E0AA0919F0AB091A00AB7FF04C0815020 |
:10B870009F4FAF4FBF4F892F9A2FAB2FBB27A7FDED |
:10B88000BA9580939D0A90939E0AA0939F0AB093C5 |
:10B89000A00A8091900A9091910AA091920AB09189 |
:10B8A000930AB7FF04C081509F4FAF4FBF4F892FFE |
:10B8B0009A2FAB2FBB27A7FDBA958093900A909340 |
:10B8C000910AA093920AB093930A8091B004909148 |
:10B8D000B104A091B204B091B3042F813885498599 |
:10B8E0005A85281B390B4A0B5B0B2093E6043093D7 |
:10B8F000E7044093E8045093E9048091A8049091F0 |
:10B90000A904A091AA04B091AB04EB84FC840D853A |
:10B910001E85E81AF90A0A0B1B0BE092EA04F09262 |
:10B92000EB040093EC041093ED042093EE043093A9 |
:10B93000EF044093F0045093F104E092F204F0928B |
:10B94000F3040093F4041093F50480918C04909117 |
:10B950008D04A0918E04B0918F04821B930BA40BD5 |
:10B96000B50B80938C0490938D04A0938E04B093B8 |
:10B970008F048091840490918504A0918604B091F5 |
:10B9800087048E199F09A00BB10B809384049093B8 |
:10B990008504A0938604B093870488898823E1F006 |
:10B9A00020916A0430916B04213831054CF080916C |
:10B9B000C2049091C30401969093C3048093C2047F |
:10B9C00020583F4F4CF48091C2049091C3040197DA |
:10B9D0009093C3048093C20410926B0410926A0483 |
:10B9E00081E090E09093090580930805E090EE04D3 |
:10B9F000F090EF040091F0041091F104D801C70118 |
:10BA000017FF07C088279927DC018E199F09A00B13 |
:10BA1000B10B81509240A040B04034F084E090E0FF |
:10BA2000909309058093080580910E0590910F056C |
:10BA3000A0911005B09111052091A80A3091A90A92 |
:10BA40004091AA0A5091AB0A821B930BA40BB50B31 |
:10BA5000815E914BAF4FBF4F8F539C49A040B04088 |
:10BA600028F08091630B89310CF4FFC021E0E216CD |
:10BA700020E1F20620E0020720E012070CF473C078 |
:10BA800080910A05882309F46AC0D801C70117FF0D |
:10BA900007C088279927DC018E199F09A00BB10BDD |
:10BAA0009C01AD01B7FF04C021503E4F4F4F5F4F87 |
:10BAB000F9E05595479537952795FA95D1F78091F7 |
:10BAC000080590910905820F931F909309058093B3 |
:10BAD0000805D801C70117FF03C00796A11DB11DB6 |
:10BAE000E3E0B595A79597958795EA95D1F780936B |
:10BAF000FC049093FD04A093FE04B093FF048958C6 |
:10BB00009341A040B04064F088E893E1A0E0B0E049 |
:10BB10008093FC049093FD04A093FE04B093FF0473 |
:10BB20002091FC043091FD044091FE045091FF04EB |
:10BB300057FF04C021503F4F4F4F5F4F232F342FEB |
:10BB4000452F552747FD5A9580913C0490913D041F |
:10BB5000820F931F90933D0480933C0406C081E0C4 |
:10BB600080930A0502C010920A0540E0E41640EFF7 |
:10BB7000F4064FEF04074FEF14070CF073C08091E9 |
:10BB80000B05882309F46AC0D801C70117FF07C055 |
:10BB900088279927DC018E199F09A00BB10B9C0106 |
:10BBA000AD01B7FF04C021503E4F4F4F5F4F69E0DA |
:10BBB00055954795379527956A95D1F78091080552 |
:10BBC00090910905820F931F9093090580930805B2 |
:10BBD000D801C70117FF03C00796A11DB11D23E0BF |
:10BBE000B595A795979587952A95D1F78093FC04ED |
:10BBF0009093FD04A093FE04B093FF0488579C4EDD |
:10BC0000AF4FBF4F64F488E79CEEAFEFBFEF809378 |
:10BC1000FC049093FD04A093FE04B093FF042091D4 |
:10BC2000FC043091FD044091FE045091FF0457FF45 |
:10BC300004C021503F4F4F4F5F4F232F342F452FCC |
:10BC4000552747FD5A9580913C0490913D04820F01 |
:10BC5000931F90933D0480933C0411C081E0809336 |
:10BC60000B050DC010920B050AC010920905109229 |
:10BC7000080584E690E090938E0180938D01688999 |
:10BC8000262F332780910805909109052817390739 |
:10BC900024F430930905209308051091630B1123B8 |
:10BCA00079F0212F332727FD309580910805909159 |
:10BCB00009052817390724F430930905209308054E |
:10BCC0004091EE045091EF046091F0047091F10402 |
:10BCD000413851056105710574F08091C604909159 |
:10BCE000C7042091080530910905820F931F909396 |
:10BCF000C7048093C60440585F4F6F4F7F4F74F462 |
:10BD00008091C6049091C7042091080530910905DF |
:10BD1000821B930B9093C7048093C60481E090E04C |
:10BD20009093090580930805C090F204D090F30425 |
:10BD3000E090F404F090F504D701C601F7FE07C0C7 |
:10BD400088279927DC018C199D09AE09BF0981500C |
:10BD50009240A040B04034F084E090E09093090518 |
:10BD6000809308058091120590911305A091140508 |
:10BD7000B09115052091B00A3091B10A4091B20AF4 |
:10BD80005091B30A821B930BA40BB50B815E914BB0 |
:10BD9000AF4FBF4F8F539C49A040B04018F01931AE |
:10BDA0000CF4FFC001E0C01600E1D00600E0E006A0 |
:10BDB00000E0F0060CF473C080910C05882309F4B0 |
:10BDC0006AC0D701C601F7FE07C088279927DC01A2 |
:10BDD0008C199D09AE09BF099C01AD01B7FF04C0D4 |
:10BDE00021503E4F4F4F5F4F09E05595479537958E |
:10BDF00027950A95D1F78091080590910905820F42 |
:10BE0000931F9093090580930805D701C601F7FE9B |
:10BE100003C00796A11DB11D13E0B595A795979591 |
:10BE200087951A95D1F78093000590930105A0930B |
:10BE30000205B093030589589341A040B04064F0D7 |
:10BE400088E893E1A0E0B0E08093000590930105BD |
:10BE5000A0930205B09303052091000530910105E0 |
:10BE6000409102055091030557FF04C021503F4FF8 |
:10BE70004F4F5F4F232F342F452F552747FD5A959E |
:10BE800080913E0490913F04820F931F90933F0452 |
:10BE900080933E0406C081E080930C0502C010929E |
:10BEA0000C0520E0C21620EFD2062FEFE2062FEF9E |
:10BEB000F2060CF073C080910D05882309F46AC066 |
:10BEC000D701C601F7FE07C088279927DC018C1926 |
:10BED0009D09AE09BF099C01AD01B7FF04C0215007 |
:10BEE0003E4F4F4F5F4FE9E0559547953795279562 |
:10BEF000EA95D1F78091080590910905820F931F6B |
:10BF00009093090580930805D701C601F7FE03C089 |
:10BF10000796A11DB11D73E0B595A79597958795D7 |
:10BF20007A95D1F78093000590930105A0930205BF |
:10BF3000B093030588579C4EAF4FBF4F64F488E71A |
:10BF40009CEEAFEFBFEF8093000590930105A093A7 |
:10BF50000205B09303052091000530910105409141 |
:10BF600002055091030557FF04C021503F4F4F4F2A |
:10BF70005F4F232F342F452F552747FD5A9580912A |
:10BF80003E0490913F04820F931F90933F0480934F |
:10BF90003E0411C081E080930D050DC010920D0587 |
:10BFA0000AC0109209051092080584E690E090936B |
:10BFB0008E0180938D014889242F332780910805B5 |
:10BFC000909109052817390724F430930905209327 |
:10BFD00008058091630B882379F0282F332727FDEC |
:10BFE000309580910805909109052817390724F4A8 |
:10BFF00030930905209308054091F2045091F30411 |
:10C000006091F4047091F5044138510561057105A2 |
:10C0100074F08091C4049091C5042091080530917A |
:10C020000905820F931F9093C5048093C404405860 |
:10C030005F4F6F4F7F4FCCF48091C4049091C50443 |
:10C040002091080530910905821B930B9093C5043C |
:10C050008093C4040AC010923F0410923E041092D0 |
:10C060003D0410923C0410926C048091B60A88231F |
:10C0700041F410923F0410923E0410923D0410923D |
:10C080003C048091A80A9091A90AA091AA0AB091B3 |
:10C09000AB0A80930E0590930F05A0931005B09303 |
:10C0A00011058091B00A9091B10AA091B20AB091A5 |
:10C0B000B30A8093120590931305A0931405B093CF |
:10C0C00015051092A0041092A1041092A2041092DF |
:10C0D000A30410929C0410929D0410929E0410924E |
:10C0E0009F04109298041092990410929A0410924E |
:10C0F0009B041092A80A1092A90A1092AA0A109200 |
:10C10000AB0A1092B00A1092B10A1092B20A1092C1 |
:10C11000B30A10929D0A10929E0A10929F0A1092E2 |
:10C12000A00A1092900A1092910A1092920A10920C |
:10C13000930A10923B0310923A03E0906204F0904D |
:10C140006304C701F7FE04C0882799278E199F0949 |
:10C1500004973CF08091D00A84FD03C082E3809371 |
:10C16000400410918408A12EBB24CC24DD24B70107 |
:10C17000882777FD8095982F9701F7FE04C0222726 |
:10C1800033272E193F09442737FD4095542F0E942D |
:10C1900075AB9B01AC01C601B5010E9475AB97FF61 |
:10C1A00004C061507E4F8F4F9F4F59E09595879502 |
:10C1B000779567955A95D1F79B01812F99278E9D89 |
:10C1C000D0018F9DB00D9E9DB00D1124CD01B7FD06 |
:10C1D00003969595879595958795280F391F80919A |
:10C1E0001804909119048150924010F020E030E042 |
:10C1F0008091420490914304280F391F442737FD52 |
:10C200004095542F2093E2043093E3044093E404D8 |
:10C210005093E5048091800490918104A091820460 |
:10C22000B0918304821B930BA40BB50B8093800405 |
:10C2300090938104A0938204B09383048155934C1E |
:10C24000A040B04064F080E593ECA0E0B0E08093C3 |
:10C25000800490938104A0938204B093830480911E |
:10C26000800490918104A0918204B0918304805B4A |
:10C270009C43AF4FBF4F64F480EB9CE3AFEFBFEF45 |
:10C280008093800490938104A0938204B0938304EC |
:10C29000809091019090920197FCFBC08091D00A10 |
:10C2A00083FFF7C080919001815080939001882393 |
:10C2B00009F0F3C08DE0809390018091B0049091DB |
:10C2C000B104A091B204B091B304B7FF04C081508F |
:10C2D0009E4FAF4FBF4F39E0B595A795979587957E |
:10C2E0003A95D1F78C0197FF03C0109501951F4F28 |
:10C2F0008091A8049091A904A091AA04B091AB04E4 |
:10C30000B7FF04C081509E4FAF4FBF4F29E0B59596 |
:10C31000A795979587952A95D1F79C0197FF03C01C |
:10C32000309521953F4F021713070CF48901B8018E |
:10C3300017FF02C0695F7F4F3B0193E075946794DC |
:10C340009A95E1F782E0E82EF12C6E0C7F1CA0900C |
:10C35000E20AB090E30AC090E40AD090E50A209186 |
:10C360004301309144014091450150914601C6017D |
:10C37000B5010E94E9AB19012A0130938E0A20937E |
:10C380008D0A821A930AC401845E9D4F68E671E0AB |
:10C390000E94B4ABAC01445B504020914004222386 |
:10C3A00021F030926F0420926E0480918D01909163 |
:10C3B0008E01009731F0019790938E0180938D014B |
:10C3C00012C0093111057CF480916A0490916B04CC |
:10C3D000840F951F90936B0480936A04222319F0B5 |
:10C3E00021502093400480918D0190918E01892BE2 |
:10C3F000F9F480918F019927489F8001499F100D82 |
:10C40000589F100D1124C801B3010E94B4ABCB0199 |
:10C41000AA2797FDA095BA2FA80EB91ECA1EDB1E2B |
:10C42000A092E20AB092E30AC092E40AD092E50A2E |
:10C4300080914004882369F580916E0490916F0487 |
:10C4400020918D0A30918E0A821B930B845E9D4F42 |
:10C4500068E671E00E94B4AB9C01245B304080919F |
:10C460007A0186959927289FA001299F500D389F12 |
:10C47000500D11249A0157FF02C0215F3F4F04E085 |
:10C48000359527950A95E1F73093430420934204AC |
:10C4900004C0109243041092420480916C048823DB |
:10C4A00081F0109274041092750410927604109228 |
:10C4B0007704109278041092790410927A04109202 |
:10C4C0007B04809139048823F1F48091B60A282FE7 |
:10C4D0003327442755278091B0049091B104A0914F |
:10C4E000B204B091B304BC01CD010E9475ABDC0174 |
:10C4F000CB01BC01CD0128EF3AE240E050E00E94C0 |
:10C50000E9AB290102C044245524809138048823D2 |
:10C51000F1F48091B60A282F3327442755278091BC |
:10C52000A8049091A904A091AA04B091AB04BC0105 |
:10C53000CD010E9475ABDC01CB01BC01CD0128EF20 |
:10C540003AE240E050E00E94E9AB190102C0222427 |
:10C55000332480918A0A90918B0A893C91051CF0C2 |
:10C5600088EC90E005C088539F4F34F488E39FEF38 |
:10C5700090938B0A80938A0A8091950A9091960AEB |
:10C58000893C91051CF088EC90E005C088539F4FD2 |
:10C5900034F488E39FEF9093960A8093950A8091F4 |
:10C5A000970A9091980AAA2797FDA095BA2F2091F3 |
:10C5B000E00AA22EBB24CC24DD24BC01CD01A601BF |
:10C5C00095010E9475AB9B01AC0180918A0A909104 |
:10C5D0008B0AAA2797FDA095BA2F17E0880F991FFD |
:10C5E000AA1FBB1F1A95D1F7280F391F4A1F5B1FBF |
:10C5F00057FF04C0215C3F4F4F4F5F4FA6E055955A |
:10C60000479537952795AA95D1F78201020F131FF9 |
:10C610001093980A0093970A8091880A9091890A4A |
:10C62000AA2797FDA095BA2FBC01CD01A6019501BF |
:10C630000E9475AB9B01AC018091950A9091960A7E |
:10C64000AA2797FDA095BA2FF7E0880F991FAA1F78 |
:10C65000BB1FFA95D1F7280F391F4A1F5B1F57FFE1 |
:10C6600004C0215C3F4F4F4F5F4FE6E05595479523 |
:10C6700037952795EA95D1F77101E20EF31EF092F6 |
:10C68000890AE092880A8091DB0A9091DC0A880F7F |
:10C69000991FAA2797FDA095BA2F20918F0A3327BB |
:10C6A00044275527BC01CD010E9475AB5B016C018D |
:10C6B00097FF08C08FE390E0A0E0B0E0A80EB91E9D |
:10C6C000CA1EDB1E76E0D594C794B794A7947A95DA |
:10C6D000D1F78091A50A282F332744275527809129 |
:10C6E000940490919504A0919604B0919704BC0194 |
:10C6F000CD010E9475ABDC01CB01BC01CD0120EF67 |
:10C7000035E540E050E00E94E9ABB501620F731FD0 |
:10C710007093DC0A6093DB0A0150104134F080E032 |
:10C7200090E19093980A8093970A8091970A90914C |
:10C73000980A8050904F34F480E090EF9093980ADC |
:10C740008093970AB1E0EB16B0E1FB0634F080E08D |
:10C7500090E19093890A8093880A8091880A909149 |
:10C76000890A8050904F34F480E090EF9093890ACA |
:10C770008093880A6150704134F080E090E190939A |
:10C78000DC0A8093DB0A8091DB0A9091DC0A8050FE |
:10C79000904F34F480E090EF9093DC0A8093DB0AB2 |
:10C7A00080911D0485FD16C080910201992720917A |
:10C7B00026013091270169817A81689FA001699FD4 |
:10C7C000500D789F500D1124CA01B9010E94A0ABF1 |
:10C7D0007A836983809116058150809316058F3F77 |
:10C7E00009F05EC08091170590911805892B41F4DE |
:10C7F0008091260190912701909318058093170549 |
:10C8000080912601909127012091170530911805FC |
:10C810002817390718F42F5F3F4F09C08091260170 |
:10C82000909127018217930730F4215030403093C4 |
:10C8300018052093170584E6809316058091F80269 |
:10C84000282F332740911705509118054217530799 |
:10C8500010F48AE00CC080910001280F311D2417CC |
:10C86000350738F480911404882319F0815080939F |
:10C8700014048091F702282F33274217530710F42E |
:10C8800089E10CC080910001280F311D2417350764 |
:10C8900038F480911304882319F081508093130495 |
:10C8A000809114048823D1F080914604909147042C |
:10C8B000A0914804B0914904B7FD10C08091DD08F3 |
:10C8C0008093450480EE91EBAFEFBFEF8093460479 |
:10C8D00090934704A0934804B093490480912503A2 |
:10C8E000882311F40E94B57289819A81880F991F5B |
:10C8F000880F991F9A8389838091D00A80FD02C096 |
:10C900000C948D6E80913804882311F00C948D6EF8 |
:10C9100020913904222311F00C948D6E8091E00552 |
:10C9200099278F779070009711F00C948D6E3C01D1 |
:10C930008091C8049091C904892B09F044C080916A |
:10C940001C0190911D018959934058F087B58A3F89 |
:10C9500020F480913E03815011C081E08093240532 |
:10C960005EC080911C0190911D018436910530F5C7 |
:10C9700087B58630F8F080913E038F5F80933E0349 |
:10C9800095E089029001112480911708821B87BDD0 |
:10C9900087B5809588BD8CE291E0909327038093C2 |
:10C9A00026038EE591E09093C9048093C8040E9409 |
:10C9B0001E2135C081E08093230531C020932305DB |
:10C9C000209324052CC070923D0360923C0380911B |
:10C9D0001504882321F081E00E94CAA417C0809129 |
:10C9E000500490915104A0915204B091530454E02A |
:10C9F000880F991FAA1FBB1F5A95D1F780933F0339 |
:10CA000090934003A0934103B09342038091C804E4 |
:10CA10009091C90401979093C9048093C8048091B0 |
:10CA2000D00A2091330481FF3CC0223348F5809125 |
:10CA300096018150809396018F3F09F052C08091FA |
:10CA4000B101882339F480916D04882319F088E2BC |
:10CA50008093B10110926D04809150049091510423 |
:10CA6000A0915204B091530480934C0490934D04D0 |
:10CA7000A0934E04B0934F0481E08093960131C09F |
:10CA8000273478F18091B101882339F480916D04C5 |
:10CA9000882319F487E28093B10188EC8093960192 |
:10CAA0001DC08091470190914801820F911D2091F6 |
:10CAB0007D083327829FF001839FF00D929FF00D38 |
:10CAC0001124CF01AA2797FDA095BA2F80934C047B |
:10CAD00090934D04A0934E04B0934F0481E0809353 |
:10CAE0006D048091B0049091B104A091B204B09112 |
:10CAF000B304E0904301F09044010091450110918E |
:10CB00004601BC01CD01A80197010E94E9AB590182 |
:10CB10006A018091A8049091A904A091AA04B091FF |
:10CB2000AB04BC01CD01A80197010E94E9ABB9019A |
:10CB3000C5010E9495A99093A20A8093A10ACC975F |
:10CB400034F08CE390E09093A20A8093A10A809144 |
:10CB5000A10A9091A20A0E946F7B9093A20A8093EF |
:10CB6000A10A80E28093420110924B0410924A0481 |
:10CB700080916D04882309F46EC780911D04992764 |
:10CB80009C012071307084FD66C780911C04826016 |
:10CB900080931C047091B40A872F992741E0842E5A |
:10CBA000912C8822992280FD04C08091D00A81FDB9 |
:10CBB00010C0E980FA8030931A052093190530934C |
:10CBC0004B0420934A0480911D04806C80931D04C3 |
:10CBD000DDC280911D0481FFACC2009183011091E0 |
:10CBE0008401C8010F96E0906004F0906104F88E13 |
:10CBF000EF8A8E159F0508F09AC08091230588233F |
:10CC000009F095C080911D0487FF15C080911D0417 |
:10CC10008F7780931D048091320390913303A0910C |
:10CC20003403B091350380934C0490934D04A0934A |
:10CC30004E04B0934F04E090940AEE20D9F1809115 |
:10CC40004C0490914D04A0914E04B0914F04BC014E |
:10CC5000CD0124E630E040E050E00E94E9ABAE2C8C |
:10CC6000BB24CC24DD24A216B306C406D50614F5D5 |
:10CC700090924B0480924A048091B1018823C1F4C0 |
:10CC80008091500490915104A0915204B0915304AA |
:10CC9000BC01CD012FE530E040E050E00E94E9AB5F |
:10CCA000A216B306C406D5061CF48AE18093B1012E |
:10CCB0008DE338C080911B0590911C05459784F049 |
:10CCC0008091320390913303A0913403B0913503E6 |
:10CCD00080934C0490934D04A0934E04B0934F0462 |
:10CCE00080911D04806480931D042F89388D201B42 |
:10CCF000310B2F50304037FF03C0309521953F4F07 |
:10CD000030934B0420934A0480911404882349F003 |
:10CD1000C90163E070E00E94B4AB70934B04609370 |
:10CD20004A048BE2809342011092440437C1C80147 |
:10CD30000F972F89388D28173907C8F520912405BA |
:10CD40002223A9F580911D0486FF15C080911D0442 |
:10CD50008F7B80931D048091320390913303A091C7 |
:10CD60003403B091350380934C0490934D04A09309 |
:10CD70004E04B0934F0480911D04806880931D047D |
:10CD80008F89988D801B910B0F9697FF03C090950C |
:10CD900081959F4F909581959F4F90934B048093E1 |
:10CDA0004A048DE28093420120934404F7C08DE34E |
:10CDB0008093420160914504662371F120914604FD |
:10CDC00030914704409148045091490480914C04AB |
:10CDD00090914D04A0914E04B0914F048217930797 |
:10CDE000A407B507CCF480911D04806480931D04D2 |
:10CDF000862F992790934B0480934A048AE080936E |
:10CE000044048EE58093420180911D0487FFC6C0D3 |
:10CE100080911D048F7733C0662309F443C02091AD |
:10CE20004604309147044091480450914904809150 |
:10CE30004C0490914D04A0914E04B0914F042817DA |
:10CE400039074A075B0774F580911D048068809359 |
:10CE50001D04862F9927909581959F4F90934B04A1 |
:10CE600080934A0486EF8093440486E780934201CE |
:10CE700080911D0486FF92C080911D048F7B80935A |
:10CE80001D048091320390913303A0913403B0913B |
:10CE9000350380934C0490934D04A0934E04B093BB |
:10CEA0004F047CC080911D04807C09F477C0809180 |
:10CEB0004404882309F04CC08091320390913303DD |
:10CEC000A0913403B0913503885C9040A040B040FD |
:10CED00020914C0430914D0440914E0450914F04E8 |
:10CEE00082179307A407B5076CF0809132039091E5 |
:10CEF0003303A0913403B0913503885C9040A04087 |
:10CF0000B0401DC08091320390913303A09134034F |
:10CF1000B091350388539F4FAF4FBF4F2817390744 |
:10CF20004A075B07BCF08091320390913303A091D4 |
:10CF30003403B091350388539F4FAF4FBF4F809359 |
:10CF40004C0490934D04A0934E04B0934F0402C040 |
:10CF50001092440480911D048F7380931D041092DD |
:10CF60001A051092190571FF06C084EF91E09093A5 |
:10CF700027038093260380915404882379F48091B9 |
:10CF8000500490915104A0915204B0915304C3975E |
:10CF9000A105B1051CF081E080935404609119054E |
:10CFA00070911A0580914A0490914B04680F791F83 |
:10CFB00070931A0560931905CB0177FF04C0882789 |
:10CFC0009927861B970B855F91400CF49BC040917D |
:10CFD0004404442389F180914604909147042091B0 |
:10CFE0004C0430914D04821B930B0996439748F4EF |
:10CFF0008091460490914704A0914804B09149045F |
:10D0000012C0242F332727FD3095432F532F8091B3 |
:10D010004C0490914D04A0914E04B0914F04820FA6 |
:10D02000931FA41FB51F80934C0490934D04A093AD |
:10D030004E04B0934F0424C020914C0430914D0411 |
:10D0400040914E0450914F0480917D0816161706AA |
:10D0500044F463E00E9494AB280F311D411D511D23 |
:10D0600007C063E00E9494AB281B310941095109B4 |
:10D0700020934C0430934D0440934E0450934F043E |
:10D0800010921A0510921905E0905004F090510486 |
:10D090000091520410915304D801C701805094406C |
:10D0A000A040B04020914C0430914D0440914E047A |
:10D0B00050914F0482179307A407B5075CF4D80179 |
:10D0C000C70180509C4FAF4FBF4F281739074A0701 |
:10D0D0005B0744F080934C0490934D04A0934E045E |
:10D0E000B0934F048091B40A81FF06C084E690E0BB |
:10D0F000909327038093260380914504882311F49D |
:10D100000E94064D8091C8049091C904892BD1F1E9 |
:10D110008091320390913303A0913403B091350391 |
:10D1200080934C0490934D04A0934E04B0934F040D |
:10D1300029C08091500490915104A0915204B09163 |
:10D14000530480599140A040B04080934C04909388 |
:10D150004D04A0934E04B0934F048091810888231E |
:10D1600011F0992702C08FE790E09093840180939B |
:10D17000830149815A8150933B0440933A048EE2E3 |
:10D1800080934201E0903A04F0903B048091320396 |
:10D1900090913303A0913403B091350320914C0456 |
:10D1A00030914D0440914E0450914F042817390797 |
:10D1B0004A075B0724F08091B40A80FD5EC4809129 |
:10D1C00015046091C8047091C904882309F07CC2D9 |
:10D1D000672B49F0E0903A04F0903B0410921C0554 |
:10D1E00010921B05E1C08091320390913303A0910E |
:10D1F0003403B0913503821B930BA40BB50B8093C2 |
:10D20000E6049093E704A093E804B093E904823025 |
:10D2100050E895075FEFA5075FEFB5072CF481E0B5 |
:10D2200090E8AFEFBFEF09C08F5F9F47A040B040CD |
:10D2300064F08FEF9FE7A0E0B0E08093E604909366 |
:10D24000E704A093E804B093E9048091E604909188 |
:10D25000E70490931C0580931B0580917C01282F87 |
:10D260003327442755278091E6049091E704A09145 |
:10D27000E804B091E904BC01CD010E9475AB97FFB1 |
:10D2800004C0615E7F4F8F4F9F4F25E09595879536 |
:10D29000779567952A95D1F76093E6047093E70434 |
:10D2A0008093E8049093E9046530AEEF7A07AFEF1E |
:10D2B0008A07AFEF9A072CF484E09EEFAFEFBFEF41 |
:10D2C00009C0605074408040904064F080E094E079 |
:10D2D000A0E0B0E08093E6049093E704A093E80414 |
:10D2E000B093E9046090E6047090E70420913C0359 |
:10D2F00030913D0337FF02C0295F3F4F03E0359572 |
:10D3000027950A95E1F7EFEF22383E071CF421E854 |
:10D310003FEF05C02038310514F020E830E0C901A6 |
:10D32000AA2797FDA095BA2F20917D013327442786 |
:10D330005527BC01CD010E9475AB97FF04C06D5FFE |
:10D340007F4F8F4F9F4F12E0959587957795679503 |
:10D350001A95D1F79B01FFEF61307F071CF420E0A5 |
:10D360003FEF06C06F3F710519F014F020E031E087 |
:10D3700080911D04807C49F0C90137FD03969C0112 |
:10D3800035952795359527950DC08091B40A80FF76 |
:10D3900009C0C90137FD07969C01A3E03595279583 |
:10D3A000AA95E1F7620E731E20917B01222309F4F6 |
:10D3B00054C06091700470917104809172049091D6 |
:10D3C000730497FF04C061587F4F8F4F9F4FF7E062 |
:10D3D0009595879577956795FA95D1F733274427E3 |
:10D3E00055270E9475AB97FF04C0615E7F4F8F4F3A |
:10D3F0009F4FE5E09595879577956795EA95D1F7E5 |
:10D400006093E6047093E7048093E8049093E90442 |
:10D4100061380FEF70070FEF80070FEF90072CF4C4 |
:10D4200080E89FEFAFEFBFEF0AC06F3F7105810546 |
:10D43000910569F064F080E091E0A0E0B0E08093B5 |
:10D44000E6049093E704A093E804B093E904809184 |
:10D45000E6049091E704680E791E80917901282FE7 |
:10D4600033278091660B992787FD9095289FA0010F |
:10D47000299F500D389F500D11249A0157FF02C06B |
:10D4800021583F4F220F232F221F330B5FEF2138EC |
:10D4900035071CF420E83FEF06C02F3F310519F097 |
:10D4A00014F020E031E0260D371DC901AA2797FDB1 |
:10D4B000A095BA2F00913A0410913B04980144279B |
:10D4C00037FD4095542FBC01CD010E9475AB97FFED |
:10D4D00004C061507E4F8F4F9F4F59E095958795BF |
:10D4E000779567955A95D1F7E61AF70A80914A041D |
:10D4F00090914B04892B09F064C0101611060CF0B2 |
:10D5000060C020911B0530911C05C90137FF03C085 |
:10D51000309521953F4F2D33310540F480916804BB |
:10D52000909169048E159F0574F526C02C533040E8 |
:10D5300045E0369527954A95E1F72031310510F001 |
:10D540002FE030E0409168045091690418161906E4 |
:10D55000E4F480E190E0821B930B489F9001499F87 |
:10D56000300D589F300D1124B4E036952795BA95AB |
:10D57000E1F72E153F0520F5809181019091820100 |
:10D58000E816F906F4F07C011CC0205F3F4F809143 |
:10D59000810190918201829FB001839F700D929FC3 |
:10D5A000700D11249B01A4E036952795AA95E1F70B |
:10D5B0004E155F0514F07A0104C0E216F30608F078 |
:10D5C0007901C701AA2797FDA095BA2FFDE0880F22 |
:10D5D000991FAA1FBB1FFA95D1F72091A10A30917C |
:10D5E000A20A442737FD4095542FBC01CD010E946B |
:10D5F000E9AB2093EA043093EB044093EC0450939E |
:10D60000ED04E090EA04F090EB0480911D05909108 |
:10D610001E059C01220F331F280F391F2E0D3F1DA1 |
:10D6200037FF02C02D5F3F4FA9015595479555958E |
:10D63000479550931E0540931D0580917908282F2A |
:10D640003327220F331F220F331F241735076CF4A3 |
:10D650008091D80A282F3327220F331F220F331F20 |
:10D66000205530404217530724F030931E05209375 |
:10D670001D058091B40A80FF14C080911D05909112 |
:10D680001E05A981BA818A179B0724F0B0931E0555 |
:10D69000A0931D05E0911D05F0911E05FA83E98315 |
:10D6A000ECC129813A81201B310B37FF02C02D5F6D |
:10D6B0003F4F3595279535952795E0901D05F090BE |
:10D6C0001E05E20EF31EC1C1672B49F0E0903A043B |
:10D6D000F0903B0410921C0510921B0538C18091FC |
:10D6E000320390913303A0913403B0913503821B30 |
:10D6F000930BA40BB50B8093E6049093E704A093DF |
:10D70000E804B093E904823000E890070FEFA00727 |
:10D710000FEFB0072CF481E090E8AFEFBFEF09C046 |
:10D720008F5F9F47A040B04064F08FEF9FE7A0E07D |
:10D73000B0E08093E6049093E704A093E804B093EC |
:10D74000E9048091E6049091E70490931C0580938E |
:10D750001B0580917C01282F332744275527809172 |
:10D76000E6049091E704A091E804B091E904BC01BB |
:10D77000CD010E9475AB97FF04C0615E7F4F8F4F54 |
:10D780009F4F05E095958795779567950A95D1F711 |
:10D790006093E6047093E7048093E8049093E904AF |
:10D7A000653028EF72072FEF82072FEF92072CF4D6 |
:10D7B00084E098EFAFEFBFEF09C060507840804041 |
:10D7C000904064F080E098E0A0E0B0E08093E60450 |
:10D7D0009093E704A093E804B093E9046090E60412 |
:10D7E0007090E70480917B01282F332780914303B9 |
:10D7F00090914403829FA001839F500D929F500DF2 |
:10D8000011249A0157FF02C021503F4F232F330F9D |
:10D81000330B80913C0390913D03820F931FAA2705 |
:10D8200097FDA095BA2F8093E6049093E704A09308 |
:10D83000E804B093E9048091440420914A043091B3 |
:10D840004B04882331F0B3E0220F331FBA95E1F780 |
:10D850001BC080917D089927289FB001299F700DDA |
:10D86000389F700D11249B01A3E0220F331FAA954E |
:10D87000E1F7260F371F37FF02C0215E3F4FF5E06B |
:10D8800035952795FA95E1F7309317042093160400 |
:10D8900080911604909117049C01442737FD409510 |
:10D8A000542F8091E6049091E704A091E804B09190 |
:10D8B000E904821B930BA40BB50B8093E6049093B1 |
:10D8C000E704A093E804B093E90420917D01332795 |
:10D8D00044275527BC01CD010E9475AB97FF04C0BA |
:10D8E000615E7F4F8F4F9F4FE5E0959587957795C8 |
:10D8F0006795EA95D1F76093E6047093E704809307 |
:10D90000E8049093E9046530A8EF7A07AFEF8A073F |
:10D91000AFEF9A072CF484E098EFAFEFBFEF09C0A8 |
:10D92000605078408040904064F080E098E0A0E053 |
:10D93000B0E08093E6049093E704A093E804B093EA |
:10D94000E9048091E6049091E704680E791EE618D8 |
:10D95000F70880916804909169048E159F053CF446 |
:10D960008091810190918201E816F9060CF07C010A |
:10D97000C701AA2797FDA095BA2F5DE0880F991FD0 |
:10D98000AA1FBB1F5A95D1F72091A10A3091A20A74 |
:10D99000442737FD4095542FBC01CD010E94E9ABCF |
:10D9A0002093EA043093EB044093EC045093ED048D |
:10D9B000E090EA04F090EB0480911D0590911E0523 |
:10D9C0009C01220F331F280F391F2E0D3F1D37FFDB |
:10D9D00002C02D5F3F4FA901559547955595479535 |
:10D9E00050931E0540931D0580917908282F3327F9 |
:10D9F000220F331F220F331F241735076CF4809139 |
:10DA0000D80A282F3327220F331F220F331F205508 |
:10DA100030404217530724F030931E0520931D0514 |
:10DA20008091B40A20911D0530911E0580FF10C021 |
:10DA3000E981FA812E173F0724F0F0931E05E09349 |
:10DA40001D05E0901D05F0901E05FA82E98215C0C3 |
:10DA50003A83298312C00E94064D09811A811093CE |
:10DA60001E0500931D0580911D04806C80931D048C |
:10DA700080911C048D7F80931C0480911D04992744 |
:10DA80009C012270307081FF39C180911F059091F7 |
:10DA90002005A0912105B09122050097A105B105AF |
:10DAA00021F0809154048130B9F480913A0490912E |
:10DAB0003B04AA2797FDA095BA2F1EE0880F991F57 |
:10DAC000AA1FBB1F1A95D1F780931F0590932005BD |
:10DAD000A0932105B093220580915404813019F45C |
:10DAE00082E08093540429813A8179010027F7FC70 |
:10DAF0000095102F8091A10A9091A20A9C014427C1 |
:10DB000037FD4095542FC801B7010E9475ABDC0169 |
:10DB1000CB018093EA049093EB04A093EC04B093C0 |
:10DB2000ED04B7FF04C08150904EAF4FBF4F7C0152 |
:10DB30008D01FDE015950795F794E794FA95D1F7D7 |
:10DB4000E092EA04F092EB040093EC041093ED04ED |
:10DB500060911E0470911F043FE0603A730750F516 |
:10DB600080911F0590912005A0912105B09122057B |
:10DB70009C01AD01EAE05695479537952795EA95C2 |
:10DB8000D1F7821B930BA40BB50BA8019701F4E00E |
:10DB9000220F331F441F551FFA95D1F7820F931F91 |
:10DBA000A41FB51F80931F0590932005A093210506 |
:10DBB000B093220560547F4118F580911F05909124 |
:10DBC0002005A0912105B09122059C01AD01ECE05A |
:10DBD0005695479537952795EA95D1F7821B930B74 |
:10DBE000A40BB50BA801970172E0220F331F441F4D |
:10DBF000551F7A95D1F7820F931FA41FB51F41C0FF |
:10DC000080913C0390913D0380913C0390913D03B2 |
:10DC100097FF03C0909581959F4F84369105CCF571 |
:10DC20008091320390913303A0913403B091350376 |
:10DC30009C0180914C0490914D04281B390B37FFB7 |
:10DC400003C0309521953F4F2F3F310509F00CF56A |
:10DC500080911F0590912005A0912105B09122058A |
:10DC60009C01AD016EE056954795379527956A95CD |
:10DC7000D1F7821B930BA40BB50B8E0D9F1DA01F1C |
:10DC8000B11F80931F0590932005A0932105B093A9 |
:10DC9000220580911F0590912005A0912105B0914A |
:10DCA00022051EE0B695A795979587951A95D1F709 |
:10DCB00090933B0480933A0440917F08442399F069 |
:10DCC00055279C01BA010E94B4ABC901861B970B72 |
:10DCD0009093690480936804260F371F3093820164 |
:10DCE000209381011FC010926904109268048FEF85 |
:10DCF00093E0909382018093810114C010925404A8 |
:10DD000010921F05109220051092210510922205F5 |
:10DD100030933B0420933A0405C080911D04806C2D |
:10DD200080931D048091320581FF37C089819A81DB |
:10DD300097FD0396959587959595879520911A045B |
:10DD400030911B042817390760F480913A049091B0 |
:10DD50003B04892B31F0220F331F220F331F3A83EC |
:10DD600029838091320390913303A0913403B091C1 |
:10DD7000350380934C0490934D04A0934E04B093CC |
:10DD80004F0488E99AE3909327038093260380E069 |
:10DD90009EE090930C0180930B0120919C0A822FAE |
:10DDA0009927880F991F880F991F889669817A8112 |
:10DDB0008617970714F09A8389838091D80A992748 |
:10DDC000880F991F880F991F80559040A981BA81AB |
:10DDD0008A179B0714F49A8389838091760388239A |
:10DDE00041F480916D0B8E3F20F0809136058823A1 |
:10DDF00021F180911E0490911F040297C097E8F4CE |
:10DE0000E981FA811E161F06C4F481E090E0909328 |
:10DE10001F0480931E04E22EFF24EE0CFF1CEE0C68 |
:10DE2000FF1C8701085D1F4F1A83098380916D0BCA |
:10DE3000883218F489E08093B1018091250388230A |
:10DE400011F40E94B57229813A813093D50720934D |
:10DE5000D4078091E2049091E304A091E404B0918E |
:10DE6000E50442E0880F991FAA1FBB1F4A95D1F70E |
:10DE70000091DB0A1091DC0A081B190B213A3105CD |
:10DE80008CF0C90137FD019695958795801791070C |
:10DE90000CF48C01909581959F4F081719076CF42D |
:10DEA0008C010BC00135110514F000E510E03FEFC7 |
:10DEB000003B130714F400EB1FEF8091D80A282FC2 |
:10DEC0003327220F331F220F331FC90149815A8183 |
:10DED000841B950B801791070CF48C0169817A8162 |
:10DEE000621B730B061717070CF48B018091970ABE |
:10DEF0009091980A6091660470916704861B970B55 |
:10DF00009093A70A8093A60AD090B60A209178042D |
:10DF10003091790440917A0450917B04DD2041F0E6 |
:10DF2000461A570AC201AA2797FDA095BA2F04C026 |
:10DF3000AA2797FDA095BA2F280F391F4A1F5B1FEC |
:10DF4000209378043093790440937A0450937B04AF |
:10DF50008091780490917904A0917A04B0917B0427 |
:10DF600081509A4FA040B04064F080E09AEFA0E06A |
:10DF7000B0E08093780490937904A0937A04B093EE |
:10DF80007B048091780490917904A0917A04B091F7 |
:10DF90007B0480509640AF4FBF4F64F480E096E022 |
:10DFA000AFEFBFEF8093780490937904A0937A0445 |
:10DFB000B0937B04C0908E082091A60A3091A70AE6 |
:10DFC000F8E0FC1598F08C2D9927829F7001839FB3 |
:10DFD000F00C929FF00C1124C701F7FC07967C010E |
:10DFE000B3E0F594E794BA95E1F712C08C2D8695CD |
:10DFF0009927829FA001839F500D929F500D11245D |
:10E00000CA0157FD03967C01F594E794F594E794D3 |
:10E01000A0907E01B0907F019501442737FD409587 |
:10E02000542F8091780490917904A0917A04B09152 |
:10E030007B04BC01CD010E94E9ABE20EF31E90907F |
:10E040006801692D772788279927980117FF04C051 |
:10E0500022273327201B310B37FF02C02F5F3F4F92 |
:10E0600035952795A981BA812A0F3B1F442737FD93 |
:10E070004095542F0E9475AB97FF04C0615C7F4FA1 |
:10E080008F4F9F4FE6E09595879577956795EA9531 |
:10E09000D1F79B016E157F050CF47B01309521951E |
:10E0A0003F4FE216F3060CF479018091880A9091B3 |
:10E0B000890A6091640470916504861B970B9093A4 |
:10E0C000870A8093860A20917404309175044091E8 |
:10E0D000760450917704DD2041F0261A370AC101F9 |
:10E0E000AA2797FDA095BA2F04C0AA2797FDA0954F |
:10E0F000BA2F280F391F4A1F5B1F209374043093D7 |
:10E100007504409376045093770480917404909141 |
:10E110007504A0917604B091770481509A4FA04085 |
:10E12000B04064F080E09AEFA0E0B0E08093740427 |
:10E1300090937504A0937604B0937704809174044F |
:10E1400090917504A0917604B09177048050964028 |
:10E15000AF4FBF4F64F480E096E0AFEFBFEF809326 |
:10E16000740490937504A0937604B093770420917F |
:10E17000860A3091870A48E04C1598F08C2D992733 |
:10E18000829FB001839F700D929F700D1124CB016F |
:10E1900077FD07966C0163E0D594C7946A95E1F723 |
:10E1A00012C0C6948C2D9927829FD001839FB00DF9 |
:10E1B000929FB00D1124CD01B7FD03966C01D5944B |
:10E1C000C794D594C7949501442737FD4095542FA3 |
:10E1D0008091740490917504A0917604B0917704B5 |
:10E1E000BC01CD010E94E9ABC20ED31E692D772779 |
:10E1F00088279927980117FF04C022273327201B5F |
:10E20000310B37FF02C02F5F3F4F35952795E981CE |
:10E21000FA812E0F3F1F442737FD4095542F0E944F |
:10E2200075AB97FF04C0615C7F4F8F4F9F4F36E007 |
:10E2300095958795779567953A95D1F79B016C15DC |
:10E240007D050CF46B01309521953F4FC216D30626 |
:10E250000CF4690180912503882311F40E94B572A2 |
:10E2600080919C0A282F33273E8B2D8B8091D80AD2 |
:10E27000282E33245090D10826E8A22E29E0B22E71 |
:10E2800091E0892E99E0992E8BE0482EB7EB6B2E0A |
:10E29000BAE07B2ED4012C9112160CF02FC1203441 |
:10E2A00029F4E981FA81F88FEF8B1FC049815A81E7 |
:10E2B000CA01AA2797FDA095BA2F332727FD3095CD |
:10E2C000432F532FBC01CD010E9475AB97FF04C0B3 |
:10E2D000615C7F4F8F4F9F4FA6E09595879577950F |
:10E2E0006795AA95D1F7788F6F8BF401218120343F |
:10E2F00039F42F89388D2E0D3F1D388F2F8B2AC072 |
:10E30000203C39F44F89588D4E195F09588F4F8B37 |
:10E3100021C0C701AA2797FDA095BA2F332727FD53 |
:10E320003095432F532FBC01CD010E9475AB97FF51 |
:10E3300004C0615C7F4F8F4F9F4FF6E095958795A6 |
:10E3400077956795FA95D1F7AF89B88DA60FB71F66 |
:10E35000B88FAF8BF4012281203439F42F89388DA6 |
:10E360002C0D3D1D388F2F8B2AC0203C39F44F894E |
:10E37000588D4C195D09588F4F8B21C0C601AA27B3 |
:10E3800097FDA095BA2F332727FD3095432F532FA4 |
:10E39000BC01CD010E9475AB97FF04C0615C7F4F4B |
:10E3A0008F4F9F4FE6E09595879577956795EA950E |
:10E3B000D1F7AF89B88DA60FB71FB88FAF8BF40117 |
:10E3C0002381203439F42F89388D200F311F388F65 |
:10E3D0002F8B2AC0203C39F44F89588D401B510B9C |
:10E3E000588F4F8B21C0C801AA2797FDA095BA2F3F |
:10E3F000332727FD3095432F532FBC01CD010E94B9 |
:10E4000075AB97FF04C0615C7F4F8F4F9F4F56E005 |
:10E4100095958795779567955A95D1F7AF89B88D7A |
:10E42000A60FB71FB88FAF8BF501808181FD08C0A3 |
:10E43000D3018D919C91EF89F88D8E179F0774F40D |
:10E44000D3018D919C91EF89F88D8E0F9F1F97FDC1 |
:10E45000019695958795988F8F8B1EC0552049F40E |
:10E460002F89388D220F331F281B390B388F2F8BA4 |
:10E4700013C031E0351580F4252D33274F89588D91 |
:10E48000841B950BB9010E94B4ABCB016F89788DC9 |
:10E49000680F791F788F6F8B8D899E89880F991FE0 |
:10E4A000880F991FAF89B88D8A179B0754F4C10153 |
:10E4B000880F991F880F991FEF89F88DE817F907C2 |
:10E4C00014F0988F8F8B8F89988D97FD0396959573 |
:10E4D000879595958795F5018183880F991F880FFA |
:10E4E000991F2F89388D281B390BC901880F82830A |
:10E4F000EF89F88DD301ED93FC9303C0F5011182F0 |
:10E5000012824A9422E030E0620E731E44E050E032 |
:10E51000840E951E69E070E0A60EB71E47FEBACEC7 |
:10E52000E2E1C85E0C9420AC84B1806A84B93D9A63 |
:10E5300082E58CBD1DBC459A81E08093EC0A8AEA95 |
:10E540008093FD0A83E88093FE0A8AE08093FF0AA5 |
:10E550001092010B1092000B1092030B1092020B01 |
:10E560001092650B1092210B08953091EC0A332321 |
:10E5700009F070C00DB407FE6DC085E080932503DF |
:10E58000459A2EB58091390599278130910589F0FA |
:10E59000823091051CF4892B21F03EC00297B9F01E |
:10E5A0003BC03093200B20933A052138A9F581E038 |
:10E5B00008C0253549F480913A05820F80933A05C9 |
:10E5C00082E08093390528C03093390525C08091B9 |
:10E5D000200BE82FFF27EE5BF44F20838F5F8093A3 |
:10E5E000200B90913A058032A0F0291769F480E25F |
:10E5F000A2E4BBE0E2E2FBE00D9001928A95E1F734 |
:10E6000081E08093210B02C03093210B10923905D9 |
:10E6100003C0920F90933A052091FC0A2232A0F495 |
:10E6200045980000000000000000E091F50AF0911C |
:10E63000F60AE20FF11D80818EBD80911E0B908144 |
:10E64000890F80931E0B03C081E08093EC0A2F5F3B |
:10E650002093FC0A0895EF92FF920F931F938091ED |
:10E6600087089927880F991F880F991F7C01002719 |
:10E67000F7FC0095102F8091B0049091B104A09107 |
:10E68000B204B091B304BC01CD01A80197010E946E |
:10E69000E9AB3093010B2093000B8091A80490917B |
:10E6A000A904A091AA04B091AB04BC01CD01A801BA |
:10E6B00097010E94E9AB3093030B2093020B20914A |
:10E6C000E20A3091E30A4091E40A5091E50ADA0146 |
:10E6D000C90173E0880F991FAA1FBB1F7A95D1F754 |
:10E6E000820F931FA41FB51F820F931FA41FB51F76 |
:10E6F00020914301309144014091450150914601E0 |
:10E70000BC01CD010E94E9AB3093090B2093080BAB |
:10E710008091C2049091C3042091490330914A032F |
:10E72000821B930B90930F0B80930E0BE091B80418 |
:10E73000F091B9048091AD0A9091AE0ABF010E9498 |
:10E74000B4ABCB019B01220F331F220F331F280FC5 |
:10E75000391F280F391F37FF02C02D5F3F4F3595F6 |
:10E760002795359527953093050B2093040B8091C1 |
:10E77000DE0A9091DF0ABF010E94B4AB9B01220F19 |
:10E78000331F220F331F260F371F260F371F37FF68 |
:10E7900002C02D5F3F4F35952795359527953093CE |
:10E7A000070B2093060B1092B9041092B804109234 |
:10E7B000AE0A1092AD0A1092DF0A1092DE0A809122 |
:10E7C000FF0A9927AA27BB27FC013A97E830F105F1 |
:10E7D00008F053C2E559FF4F0C943BAC80913204D2 |
:10E7E0008093120B809131048093130B809130043D |
:10E7F0008093140B80912F048093150B80912E042D |
:10E800008093160B80912D048093170B80912C041C |
:10E810008093180B80912B048093190B80911D0419 |
:10E8200080931A0B80911D04837F80931D04809137 |
:10E83000010180931B0B8091260190912701809309 |
:10E840001C0B80911C0480931D0B429916C2809171 |
:10E850001C04877F80931C0410C28091670B9091E9 |
:10E86000680B9093130B8093120B80913B05809360 |
:10E87000140B80916D0B8093150B8091BC080E9446 |
:10E88000CB498093160B809142018093170B209106 |
:10E890003B05822F9927FC0113E0EE0FFF1F1A950D |
:10E8A000E1F7E80FF91FEA57F64F80858093180BC0 |
:10E8B00080818093190B868180931A0B83818093CA |
:10E8C0001B0B878180931C0B858180931D0B2F5F11 |
:10E8D00020933B05E22FFF27EE0FFF1FEE0FFF1FD8 |
:10E8E000EC50F74F858518160CF4C7C1222309F4A4 |
:10E8F000C4C1822F992701966DE070E00E94B4ABED |
:10E90000AC01282FE82FFF27EE0FFF1FEE0FFF1F90 |
:10E91000EC50F74F8585181614F0442351F74093B7 |
:10E920003B05ABC1809102018093120B8091BD0821 |
:10E930008093130B8091BE088093140B8091BF08C5 |
:10E940008093150B8091C0088093160B8091C408AA |
:10E950008093170B8091C5088093180B8091C6088F |
:10E960008093190B8091C90880931A0B8091C70876 |
:10E9700080931B0B8091C80880931C0B8091CA0860 |
:10E9800051C18091BB088093120B80919208863010 |
:10E9900081F08091EF02823451F00E945184E82F7F |
:10E9A000FF27E95CF94E84918093EF0202C00E9438 |
:10E9B0005184809164058093130B8091DD088093CE |
:10E9C000140B8091D2088093150B809113048093CF |
:10E9D000160B80916D058093170B80916B058093CA |
:10E9E000180B80916A058093190B10926D05109297 |
:10E9F0006B0510926A0580916E0490916F0490935C |
:10EA00001B0B80931A0B8091E10880931C0B809163 |
:10EA1000E20808C1F89480916E08E82FFF27EE0FF6 |
:10EA2000FF1FED50F64F0190F081E02DE038F10529 |
:10EA30001CF0EFE7F0E006C02FEFE138F20714F426 |
:10EA4000E1E8FFEFE093120B80916F08E82FFF27BA |
:10EA5000EE0FFF1FED50F64F0190F081E02DE038F2 |
:10EA6000F1051CF0EFE7F0E006C07FEFE138F707B3 |
:10EA700014F4E1E8FFEFE093130B80916D08E82FA9 |
:10EA8000FF27EE0FFF1FED50F64F0190F081E02DB4 |
:10EA9000E038F1051CF0EFE7F0E006C08FEFE13859 |
:10EAA000F80714F4E1E8FFEFE093140B80916C0891 |
:10EAB000E82FFF27EE0FFF1FED50F64F0190F0817A |
:10EAC000E02DE038F1051CF0EFE7F0E006C02FEF95 |
:10EAD000E138F20714F4E1E8FFEF7894E093150BC6 |
:10EAE000809157048093160B809158048093170BE4 |
:10EAF000809159048093180B80915A048093190BCC |
:10EB000080915B0480931A0B80915C0480931B0BB3 |
:10EB100080915D0480931C0B80915E0483C0809182 |
:10EB2000FB05853018F01092FB0585E08093120BF1 |
:10EB30008091CB088093130B8091500490915104E5 |
:10EB4000A0915204B0915304BC01CD0125E030E006 |
:10EB500040E050E00E94E9AB3093150B2093140B7A |
:10EB600080914C0490914D04A0914E04B0914F04BB |
:10EB7000BC01CD0125E030E040E050E00E94E9AB6F |
:10EB80003093170B2093160B8091C1088093180BBC |
:10EB90008091C2088093190B8091C30880931A0B4F |
:10EBA0008091560480931B0B80913C0580931C0B35 |
:10EBB0008091D4079091D50797FD039695958795F9 |
:10EBC000959587952FC082E08093120B86E0809305 |
:10EBD000130B1092140B84E48093150B80910301A6 |
:10EBE0008093160B8091E0058093170B9091E105BF |
:10EBF0009093180B8F778093E00590719093E105C7 |
:10EC00008091DE088093190B8091D00A80931A0BB3 |
:10EC10008091B40A80931B0B8091CE0880931C0BCB |
:10EC20008091E60880931D0B28C080916B0B90911A |
:10EC30006C0B9093130B8093120B80917001809357 |
:10EC4000140B80916F018093150B8091FE078093C8 |
:10EC5000160B8091EE028093170B8091CC08809365 |
:10EC6000180B8091940A8093190B8091F302909174 |
:10EC7000F40290931B0B80931A0B8091210B882335 |
:10EC800009F481C16091220B8091A701681719F0E6 |
:10EC90008AEF8093A5016093A70181E080939001A2 |
:10ECA0004091230B5091240BCA0181509E4F8F5FDE |
:10ECB0009340B0F42091250B3091260BC90181506F |
:10ECC0009E4F8F5F934060F48091780885FF08C065 |
:10ECD0005093290540932805309327052093260556 |
:10ECE0008091290B90912A0B21E08936920724F418 |
:10ECF00090939201809391012091330B3091340BCA |
:10ED000080912603909127038217930740F4809106 |
:10ED1000F902882321F43093270320932603862FBA |
:10ED200099278936910509F4A1C08A36910544F4E2 |
:10ED30008736910571F08836910509F462C02BC1C0 |
:10ED40008A36910509F41CC18B36910509F4DEC0A1 |
:10ED500022C18091350B8093620B8091360B80939A |
:10ED6000640B8091370B8093630B8091380B8093F9 |
:10ED70008F018091390B8093660B80913A0B8093C1 |
:10ED8000A60180913B0B8093380580913C0B8093CA |
:10ED9000250580912A048823F9F020913D0B3091BC |
:10EDA0003E0B37FD19C030936F0420936E04909191 |
:10EDB000A208992389F08FE0989FC0011124281B95 |
:10EDC000390BC90188599E4F68E671E00E94B4ABC7 |
:10EDD00090936F0480936E0420913005309131053B |
:10EDE00080913F0B9091400B280F391F37FF02C0D5 |
:10EDF0002F5F3F4F35952795309331052093300590 |
:10EE0000CAC08091350B8093F70A8091360B8093AE |
:10EE1000F80A8091370B8093F90A8091380B809320 |
:10EE2000FA0A8091390B8093FB0A8091C407909174 |
:10EE30003A0B892B8093C4079091C50793708091FA |
:10EE40003B0B8C70982B9093C50780913C0B809363 |
:10EE5000360580913D0B8093970180913E0B809306 |
:10EE6000650B80913F0B8093320595C08091350BE7 |
:10EE70008093ED0A8091360B8093EE0A8091370BD8 |
:10EE80008093EF0A8091380B8093F00A8091390BC0 |
:10EE900090913A0B9093F20A8093F10A80913B0B88 |
:10EEA00090913C0B9093F40A8093F30A80913D0B70 |
:10EEB000992787FD909590932E0A80932D0A809133 |
:10EEC0003E0B8093450480913F0B9091400B9C0139 |
:10EED000442737FD4095542FDA01C90163E0880FBC |
:10EEE000991FAA1FBB1F6A95D1F7820F931FA41FFA |
:10EEF000B51F820F931FA41FB51F809346049093E4 |
:10EF00004704A0934804B093490445C08091350B51 |
:10EF1000809335058091360B809334058091370BB3 |
:10EF2000809333059091380B992349F08091B1017A |
:10EF3000882319F08151833010F49093B1018091AE |
:10EF40003B0B90913C0B90936905809368058091F1 |
:10EF5000390B8093700580913A0B80936F058091F7 |
:10EF60003D0B80936E0580913E0B80936C058091E4 |
:10EF70003F0B9091400B9093DA0A8093D90A0BC013 |
:10EF80000E94BE8408C01092290510922805109294 |
:10EF90002705109226051F910F91FF90EF9008957D |
:10EFA0008091EC0A882319F480E090E00895459858 |
:10EFB0008DEF9AE09093F60A8093F50A90913705C9 |
:10EFC000E92FFF27E856FE4F9F5F9093370580811A |
:10EFD0008093FF0A9D3010F0109237051092EC0AD2 |
:10EFE0000E942B7381E08093FC0A8091FD0A80933C |
:10EFF0001E0B8EBD81E090E0089587B18C6087B9CB |
:10F000004298439810923E0580E88093A90110929F |
:10F010003D058093A801089580912D0A90912E0AB4 |
:10F0200081589F4F39F080912D0A90912E0A815876 |
:10F0300080934805809143058150809343058F3F1D |
:10F0400009F052C18091B508809344058091B708BA |
:10F050008093450589E08093430580911D0499279D |
:10F0600080739070892B21F48091E10580FF1DC091 |
:10F070008091B908882351F080914605882319F4BE |
:10F0800084E080933E0581E0809346058091BA0834 |
:10F09000882379F080914705882319F484E08093D0 |
:10F0A0003D0581E08093470504C01092460510920B |
:10F0B000470580914605882309F082C08091E308C6 |
:10F0C000282F332724FF07C080915504882319F483 |
:10F0D00025FD8FC090C09091B608983F48F0809170 |
:10F0E000AF0A8D3D28F08091440588236CF00AC05A |
:10F0F000983F78F08091AF0A853059F480914405AB |
:10F1000087FF02C0429A01C0429881E08093A90122 |
:10F1100054C080913E05815080933E058F3F09F099 |
:10F120006BC08091E60885FF2FC090914805892F1C |
:10F13000869580933E05992361F490933C058091D8 |
:10F14000440587FF02C0429A01C042981092A9016B |
:10F1500053C081E080933C058091A90190914405C2 |
:10F16000882349F48093480580E48093A90199237A |
:10F170000CF43FC040C0982311F0429A01C042985D |
:10F1800086958093A90138C08091AF0A86958093B7 |
:10F190003E058091A901813021F41092480580E458 |
:10F1A00001C086958093A9018091A90190914405A1 |
:10F1B000892311F0429A01C0429810923C051CC06C |
:10F1C00080913E05815080933E058F3FA9F489E0F0 |
:10F1D00080933E058091A901813011F480E801C03F |
:10F1E00086958093A9018091A9019091B9088923FE |
:10F1F00011F0429A01C0429880914705882309F096 |
:10F2000043C09091E30897FF07C08091550488237D |
:10F2100019F496FD52C053C09091B808983F48F039 |
:10F220008091D70A8D3D28F08091450588236CF0A8 |
:10F230000AC0983F78F08091D70A853059F48091C0 |
:10F24000450587FF02C0439A01C0439881E080933F |
:10F25000A80136C080913D05815080933D058F3FC8 |
:10F2600079F58091D70A869580933D058091A80114 |
:10F27000813011F480E401C086958093A8018091CB |
:10F28000A8019091450517C080913D05815080935C |
:10F290003D058F3FA9F489E080933D058091A80149 |
:10F2A000813011F480E801C086958093A801809197 |
:10F2B000A8019091BA08892311F0439A01C043989C |
:10F2C000429B05C080911C04886080931C04439B72 |
:10F2D00006C080911C04806180931C040895809175 |
:10F2E0001C048F7E80931C0408954FB724E130E006 |
:10F2F000F8948091C9008F778093C9008091C900EC |
:10F300008F7B8093C9008091C9008F7D8093C90055 |
:10F31000832F99278093CD002093CC008091C80043 |
:10F3200082608093C80080E18093C9008091CA0008 |
:10F330008F778093CA008091CA008F7B8093CA0028 |
:10F340008091CA008F7D8093CA008091CA008F7E11 |
:10F350008093CA008091CA00877F8093CA00809101 |
:10F36000C9008B7F8093C9008091CA00846080931C |
:10F37000CA008091CA0082608093CA008091C80050 |
:10F3800087FF03C08091CE00F9CF8091C9008068CB |
:10F390008093C9004FBF0895EF92FF920F931F9380 |
:10F3A000CF93DF93482F00E010E08091AA018130D5 |
:10F3B00061F41092AA0184E48093490510924B05F0 |
:10F3C00010924A0510924C0539C180914905882355 |
:10F3D00019F421E030E001C0980190914A05992389 |
:10F3E00071F4232B11F081E010C084E4809349056F |
:10F3F00090934B0590934A0590934C0508C191302A |
:10F4000069F4232B09F0F9C082E080934A058091CA |
:10F410004B058F5F80934B0583E0F7C09230D1F4AA |
:10F42000232B09F0EAC083E08093490540934C0503 |
:10F4300090914B05923039F410924D0547FF03C06F |
:10F4400081E080934D0583E080934A059F5F909310 |
:10F450004B05DDC0933009F0D0C0232B09F0CDC09F |
:10F460009093490582E080934A0580914B058F5F18 |
:10F4700080934B0520914C05822F9927782F662782 |
:10F48000842F9927682B792B80919208813049F439 |
:10F490007370CB018050924063E070E00E94B4AB87 |
:10F4A00017C0823061F47770CB018050944066E0E1 |
:10F4B00070E00E94B4AB2695269526950BC073701C |
:10F4C00068567140CB0177FD0196BC017595679533 |
:10F4D00026952695022F11270F7010700F5F1F4F72 |
:10F4E0000D30110508F082C07801E00EF11EF70121 |
:10F4F000ED50F64F808191819B01281B390BC9018A |
:10F5000037FF03C0909581959F4F069704F5E091D2 |
:10F51000D508EE2351F0FF27EE0FFF1FED50F64FF9 |
:10F52000808191818436910594F480915604883CC1 |
:10F5300030F480915604865F8093560408C088ECAE |
:10F540008093560480916F008F7D80936F00F70148 |
:10F55000ED50F64F808191819C01220F331F280FBF |
:10F56000391F260F371F37FF02C02D5F3F4FE901BC |
:10F57000D595C795D595C795CB0101968C179D0755 |
:10F5800014F4219706C061507040C617D7070CF4D9 |
:10F59000219680915604843BD0F0F701ED50F64F50 |
:10F5A00080819181FE01E81BF90BCF0163E070E0DF |
:10F5B0000E94B4ABCB01880F991F860F971F29E3D8 |
:10F5C0003AE0E20EF31EF7019183808307C029E33E |
:10F5D0003AE0E20EF31EF70111821082000F111FB4 |
:10F5E0000D50164FF801D183C08311C002311105AF |
:10F5F00070F081E08093AA010AC081E08093AA01A3 |
:10F6000010924B0510924D0584E48093490580913A |
:10F610004B05803198F080914D05882331F480911D |
:10F62000AA01882311F48093410110924B05109296 |
:10F630004D0510924A0584E480934905E6E0CDB774 |
:10F64000DEB70C942CACCF93FC0197FF05C0CFEF35 |
:10F65000F095E195FF4F01C0C1E028E631E0CF0110 |
:10F66000B9010E94B4ABFC018B35910554F08B5568 |
:10F6700090408A35910538F484EB90E08E1B9F0B07 |
:10F68000FC0141E00DC0CF01855B90408A359105BA |
:10F6900018F4E45BF04003C02E1B3F0BF9014FEF61 |
:10F6A000EE0FFF1FE05BF64F259134918C2F9927C9 |
:10F6B00087FD9095289FB001299F700D389F700D90 |
:10F6C0001124842F992787FD9095689FA001699F39 |
:10F6D000500D789F500D1124CA01CF9108952AE54D |
:10F6E00030E0281B390BC9010E94237B0895CF937A |
:10F6F000DF9380E00E94939D8091260190912701E5 |
:10F700006AE070E00E94B4AB9F938F9380912601D2 |
:10F71000909127016AE070E00E94B4AB7F936F93F1 |
:10F7200084E59AE09F938F93C6E8DDE9DF93CF935A |
:10F73000E091C705F091C80509952DB73EB7285F40 |
:10F740003F4F2DBF8091A501882361F186E00E9483 |
:10F75000939D8091970199279F938F938091F10AB0 |
:10F760009091F20A6AE070E00E94A0AB7F936F93E1 |
:10F770008FED90E09F938F938091D90A9091DA0A50 |
:10F780009F938F938DE59AE09F938F93DF93CF9311 |
:10F79000E091C705F091C80509958DB79EB70C9605 |
:10F7A0008DBF12C086E00E94939D8BE69AE09F93E6 |
:10F7B0008F93DF93CF93E091C705F091C80509952A |
:10F7C0000F900F900F900F9080913605882309F4C9 |
:10F7D00052C080914E0590914F050E94FC1C8823D9 |
:10F7E00091F08091AB01882319F01092AB0103C016 |
:10F7F00081E08093AB018CED95E00E94F31C909327 |
:10F800004F0580934E058091AB018823E1F080E0A5 |
:10F810000E94939D1F921F929091360581E1989FBF |
:10F82000C00111248D5F924F9F938F93DF93CF93ED |
:10F83000E091C705F091C80509952DB73EB72A5F3D |
:10F840003F4F2DBF3BC086E00E94939D80913605BF |
:10F8500099279F938F9382E79AE09F938F93DF93EB |
:10F86000CF93E091C705F091C80509958DB79EB774 |
:10F8700006968DBF23C0809163058823F9F00E940E |
:10F88000999D80E10E94939D87EE98E09F938F93CE |
:10F890008091010199279F938F938EE79AE09F9320 |
:10F8A0008F93DF93CF93E091C705F091C805099539 |
:10F8B0002DB73EB7285F3F4F2DBF72C080E10E9439 |
:10F8C000939D8091F1029091F2026CE370E00E94AE |
:10F8D000A0AB9F938F938091F1029091F2026CE321 |
:10F8E00070E00E94A0AB7F936F9380916B0B90911F |
:10F8F0006C0B9F938F9389E89AE09F938F93C6E850 |
:10F90000DDE9DF93CF93E091C705F091C805099534 |
:10F910008091D00A2DB73EB7265F3F4F2DBF80FFA5 |
:10F9200029C08AE10E94939D8091420199279F936B |
:10F930008F938091500490915104A0915204B09102 |
:10F940005304BC01CD0124E630E040E050E00E94C9 |
:10F95000E9AB3F932F9386E99AE09F938F93DF93D0 |
:10F96000CF93E091C705F091C80509958DB79EB773 |
:10F9700008968DBF8091EE02882391F08AE10E9463 |
:10F98000939D8DE99AE09F938F93DF93CF93E091BE |
:10F99000C705F091C80509950F900F900F900F9033 |
:10F9A000DF91CF910895CF93DF9380E00E94939DE4 |
:10F9B0008091A809992787FD90959F938F938091B7 |
:10F9C0009F09992787FD90959F938F938091960922 |
:10F9D000992787FD90959F938F9380918D09992703 |
:10F9E00087FD90959F938F938FE99AE09F938F93D4 |
:10F9F000C6E8DDE9DF93CF93E091C705F091C80534 |
:10FA0000099580E10E94939D2DB73EB7245F3F4F3B |
:10FA10002DBF8091CC09992787FD90959F938F9357 |
:10FA20008091C309992787FD90959F938F9380912B |
:10FA3000BA09992787FD90959F938F938091B1097B |
:10FA4000992787FD90959F938F938FEA9AE09F93D4 |
:10FA50008F93DF93CF93E091C705F091C805099587 |
:10FA600080916A082DB73EB7245F3F4F2DBF853088 |
:10FA700098F480E10E94939D8FEB9AE09F938F937F |
:10FA8000DF93CF93E091C705F091C80509950F90DA |
:10FA90000F900F900F9018C08730B0F488E10E944B |
:10FAA000939D8FED90E09F938F9380ED9AE09F93CD |
:10FAB0008F93DF93CF93E091C705F091C805099527 |
:10FAC0008DB79EB706968DBFDF91CF9108950F93A6 |
:10FAD0001F9380E00E94939D2AE030E08091670BA5 |
:10FAE0009091680BB9010E94A0AB9F938F93809176 |
:10FAF000670B9091680BB9010E94A0AB7F936F9345 |
:10FB00008091260190912701B9010E94B4AB9F9387 |
:10FB10008F938091260190912701B9010E94B4AB87 |
:10FB20007F936F9389ED9AE09F938F9306E81DE989 |
:10FB30001F930F93E091C705F091C805099580E1E7 |
:10FB40000E94939D8DB79EB70C968DBF80916B0BD5 |
:10FB500090916C0B9F938F938091690B90916A0B9E |
:10FB60009F938F938BEE9AE09F938F931F930F93A6 |
:10FB7000E091C705F091C80509958DB79EB7089625 |
:10FB80008DBF1F910F910895EF92FF920F931F93D6 |
:10FB900080E00E94939D8FEDE82EF12CFF92EF9272 |
:10FBA00080919101909192019F938F93809135055F |
:10FBB00099279F938F9387EF9AE09F938F9306E8FF |
:10FBC0001DE91F930F93E091C705F091C8050995B2 |
:10FBD00080E10E94939D8DB79EB70A968DBF80915C |
:10FBE000330599279F938F93FF92EF92809134056D |
:10FBF00099279F938F938AE09BE09F938F931F9306 |
:10FC00000F93E091C705F091C80509958DB79EB790 |
:10FC10000A968DBF1F910F91FF90EF9008950F935B |
:10FC20001F9380E00E94939D8DE19BE09F938F93B3 |
:10FC300006E81DE91F930F93E091C705F091C805F1 |
:10FC4000099580E10E94939D0F900F900F900F9067 |
:10FC50008CE29BE09F938F931F930F93E091C705D6 |
:10FC6000F091C80509950F900F900F900F901F917C |
:10FC70000F9108950F931F9380E00E94939D8AE354 |
:10FC80009BE09F938F9306E81DE91F930F93E091EC |
:10FC9000C705F091C805099580E10E94939D0F90DA |
:10FCA0000F900F900F9089E49BE09F938F931F9389 |
:10FCB0000F93E091C705F091C80509950F900F903B |
:10FCC0000F900F901F910F91089580E00E94939DD7 |
:10FCD00087E59BE09F938F9386E89DE99F938F93A1 |
:10FCE000E091C705F091C80509950F900F900F900E |
:10FCF0000F90089580E00E94939D88E69BE09F937B |
:10FD00008F9386E89DE99F938F93E091C705F091CB |
:10FD1000C80509950F900F900F900F9008951F93AD |
:10FD2000CF93DF93182F80E00E94939D89E79BE09B |
:10FD30009F938F93C6E8DDE9DF93CF93E091C705EA |
:10FD4000F091C80509950F900F900F900F9080913A |
:10FD50006C05882331F480E10E94939D85E89BE047 |
:10FD600009C08091EF0A833099F080E10E94939D51 |
:10FD700080E99BE09F938F93DF93CF93E091C7053A |
:10FD8000F091C80509950F900F900F900F9080C0CB |
:10FD90008BE00E94939D8091AC0199279F938F9354 |
:10FDA0008BE99BE09F938F93DF93CF93E091C705FF |
:10FDB000F091C805099580E10E94939D8DB79EB78B |
:10FDC00006968DBF8091500490915104A0915204E9 |
:10FDD000B0915304BC01CD0124E630E040E050E096 |
:10FDE0000E94E9AB3F932F938091D90A9091DA0A50 |
:10FDF0009F938F938FE99BE09F938F93DF93CF9394 |
:10FE0000E091C705F091C80509958DB79EB7089692 |
:10FE10008DBF80915005882331F08EE00E94939D24 |
:10FE200080EB9BE005C08EE00E94939D83EB9BE0FE |
:10FE30009F938F93DF93CF93E091C705F091C8050F |
:10FE400009950F900F900F900F901F3251F49091E1 |
:10FE5000AC0180916C059817D8F49F5F9093AC012A |
:10FE600009C01F3459F48091AC01823088F0815070 |
:10FE70008093AC0181E0809350050AC01F3141F4AA |
:10FE80008091AC01882321F080936A05109250057F |
:10FE9000DF91CF911F9108951F93CF93DF93182F78 |
:10FEA00080E00E94939D86EB9BE09F938F93C6E832 |
:10FEB000DDE9DF93CF93E091C705F091C80509957F |
:10FEC0000F900F900F900F9080916C05882399F4FC |
:10FED00080E10E94939D81EC9BE09F938F93DF9341 |
:10FEE000CF93E091C705F091C80509950F900F9049 |
:10FEF0000F900F9097C08BE00E94939D8091AD0171 |
:10FF000099279F938F938CEC9BE09F938F93DF9324 |
:10FF1000CF93E091C705F091C80509958DB79EB7BD |
:10FF200006968DBF80916F05882359F180E10E946C |
:10FF3000939D8091460490914704A0914804B0910C |
:10FF40004904BC01CD0124E630E040E050E00E94CD |
:10FF5000E9AB3F932F9380916805909169059F933A |
:10FF60008F9380ED9BE09F938F93DF93CF93E091EE |
:10FF7000C705F091C80509958DB79EB708968DBF46 |
:10FF800012C088E10E94939D82EE9BE09F938F9325 |
:10FF9000DF93CF93E091C705F091C80509950F90C5 |
:10FFA0000F900F900F9080915105882331F08EE0D3 |
:10FFB0000E94939D83EF9BE005C08EE00E94939D7D |
:10FFC00086EF9BE09F938F93DF93CF93E091C705DC |
:10FFD000F091C80509950F900F900F900F901F3268 |
:10FFE00051F49091AD0180916C059817D8F49F5F02 |
:10FFF0009093AD0109C01F3459F48091AD01823056 |
:020000021000EC |
:1000000088F081508093AD0181E0809351050AC052 |
:100010001F3141F48091AD01882321F080936B055D |
:1000200010925105DF91CF911F9108951F93CF93A7 |
:10003000DF93182F8091C60BC6E8DDE9882391F481 |
:100040000E94939D89EF9BE09F938F93DF93CF93C3 |
:10005000E091C705F091C80509950F900F900F909A |
:100060000F9016C080E00E94939D86EC9BE09F93CA |
:100070008F9387E09CE09F938F93DF93CF93E091E2 |
:10008000C705F091C80509958DB79EB706968DBF37 |
:1000900080916C05C6E8DDE9882399F480E10E942F |
:1000A000939D8EE09CE09F938F93DF93CF93E0919D |
:1000B000C705F091C80509950F900F900F900F900C |
:1000C00089C080E10E94939D8091AE0199279F9302 |
:1000D0008F9389E19CE09F938F93DF93CF93E0917F |
:1000E000C705F091C80509958DB79EB706968DBFD7 |
:1000F00080916F058823E9F088E10E94939D8091AB |
:100100006F0599279F938F938091700599279F93EF |
:100110008F9382E29CE09F938F93DF93CF93E09144 |
:10012000C705F091C80509958DB79EB708968DBF94 |
:1001300012C088E10E94939D8AE29CE09F938F9376 |
:10014000DF93CF93E091C705F091C80509950F9013 |
:100150000F900F900F9080915205882331F08EE11F |
:100160000E94939D80E39CE005C08EE10E94939DD8 |
:1001700083E39CE09F938F93DF93CF93E091C70538 |
:10018000F091C80509950F900F900F900F901F32B6 |
:1001900051F49091AE0180916C059817D8F49F5F4F |
:1001A0009093AE0109C01F3459F48091AE018230A2 |
:1001B00088F081508093AE0181E0809352050AC09F |
:1001C0001F3141F48091AE01882321F080936D05A9 |
:1001D00010925205DF91CF911F9108951F93CF93F5 |
:1001E000DF93182F8091C60BC6E8DDE9882391F4D0 |
:1001F0000E94939D86E39CE09F938F93DF93CF9320 |
:10020000E091C705F091C80509950F900F900F90E8 |
:100210000F9016C080E00E94939D86EC9BE09F9318 |
:100220008F9384E49CE09F938F93DF93CF93E0912F |
:10023000C705F091C80509958DB79EB706968DBF85 |
:1002400080916C05882361F480E10E94939D8BE48A |
:100250009CE09F938F9386E89DE99F938F930FC0B7 |
:100260008091EF0AC6E8DDE9833099F080E10E94D1 |
:10027000939D86E59CE09F938F93DF93CF93E091CE |
:10028000C705F091C80509950F900F900F900F903A |
:100290008AC080E10E94939D8091AF0199279F932E |
:1002A0008F9381E69CE09F938F93DF93CF93E091B0 |
:1002B000C705F091C80509958DB79EB706968DBF05 |
:1002C00080916F058823E9F088E10E94939D8091D9 |
:1002D0006F0599279F938F938091700599279F931E |
:1002E0008F938BE69CE09F938F93DF93CF93E09166 |
:1002F000C705F091C80509958DB79EB708968DBFC3 |
:1003000012C088E10E94939D83E79CE09F938F93A6 |
:10031000DF93CF93E091C705F091C80509950F9041 |
:100320000F900F900F9080915305882331F08EE14C |
:100330000E94939D89E79CE005C08EE10E94939DF9 |
:100340008CE79CE09F938F93DF93CF93E091C70559 |
:10035000F091C80509950F900F900F900F901F32E4 |
:1003600051F49091AF0180916C059817E0F49F5F74 |
:100370009093AF0109C01F3459F48091AF018230CE |
:1003800090F081508093AF0181E0809353050BC0C2 |
:100390001F3149F48091AF01882329F08068809350 |
:1003A0006D0510925305DF91CF911F9108950F9322 |
:1003B0001F93CF93DF938091A501C6E8DDE98823E1 |
:1003C00009F47DC080E00E94939D8091EE0A9927F8 |
:1003D0009F938F938091F00A99279F938F938FE734 |
:1003E0009CE09F938F938E01DF93CF93E091C7059D |
:1003F000F091C80509958DB79EB708968DBF80917D |
:10040000EF0A833031F48CE00E94939D8EE89CE0EB |
:1004100005C08CE00E94939D83E99CE09F938F939D |
:10042000DF93CF93E091C705F091C80509950F9030 |
:100430000F900F900F908091ED0A81FF12C08CE019 |
:100440000E94939D88E99CE09F938F931F930F9345 |
:10045000E091C705F091C80509950F900F900F9096 |
:100460000F9080E10E94939D8091970199279F931F |
:100470008F938FED90E09F938F938091F30A9091EB |
:10048000F40A9F938F938091F10A9091F20A6AE0A7 |
:1004900070E00E94A0AB7F936F938DE99CE09F93E7 |
:1004A0008F9386E89DE99F938F93E091C705F09124 |
:1004B000C80509958DB79EB70C968DBF12C082E016 |
:1004C0000E94939D80EB9CE09F938F93DF93CF934B |
:1004D000E091C705F091C80509950F900F900F9016 |
:1004E0000F90DF91CF911F910F910895CF93C82F57 |
:1004F000209154052093550599278F329105E1F0FD |
:10050000803391051CF44F9779F027C08F34910503 |
:10051000D9F08F38910509F586E0289FF001112464 |
:10052000EA5FF54F849117C086E0289FF0011124FF |
:10053000E95FF54F84910FC086E0289FF0011124F8 |
:10054000E85FF54F849107C086E0289FF0011124F1 |
:10055000E75FF54F84918093540590915405809105 |
:1005600055059813C0E08091B001282F33278F5F85 |
:100570008093B00120FD02C0CF3089F0C0935605B2 |
:100580000E94999D9091540586E0989FF001112456 |
:10059000E65FF54F259134918C2FF901099580E0A4 |
:1005A00090E0CF9108951092680B1092670B109213 |
:1005B0006C0B10926B0B10926A0B1092690B1092DD |
:1005C0006D0B82E390E00E94F31C9093580580939A |
:1005D000570508959927FC0123E0EE0FFF1F2A9588 |
:1005E000E1F7E80FF91FEA57F64F95819F3F19F49D |
:1005F00080E090E00895993C18F4892F9927089598 |
:10060000808182FF07C08AE0989FC0011124885032 |
:1006100097400895892F99270895A0E0B0E0E3E17D |
:10062000F3E80C940DAC80915705909158050E9409 |
:10063000FC1C882309F4CFC0809157059091580580 |
:10064000C2969093580580935705C0E0D0E07E0194 |
:10065000BB247FEFC72E80916D0B8E3F21F481E08C |
:100660008093EE0204C08F3F11F4B092EE02DD24BD |
:1006700006E819E0F801838187FF17C0B3948581EC |
:10068000893C30F08D2D0E94EA82C80FD91F02C02C |
:10069000C80FD11DF8018181E80EF11C8681C816B2 |
:1006A00010F0C82E02C01092EE02D394075F1F4FC5 |
:1006B000FBE0FD15F8F6C0926D0BEF2841F5209197 |
:1006C0005D0530915E0540915F0550916005BB2747 |
:1006D000A52F942F832F90935C0580935B05AA2709 |
:1006E000BB27281B390B4A0B5B0BCE01AA27BB2764 |
:1006F000280F391F4A1F5B1F20935D0530935E054D |
:1007000040935F0550936005C5E0D0E013C0809131 |
:100710005B0590915C058C179D0718F4C81BD90BDD |
:1007200002C0C0E0D0E08B2D9927880F991FC80F19 |
:10073000D91F2596D093680BC093670BCF3FD10587 |
:1007400078F480912601909127018C9F90018D9FD4 |
:10075000300D9C9F300D1124C90164E670E013C078 |
:10076000CE01969587959695879520912601309193 |
:100770002701289FA001299F500D389F500D11245B |
:10078000CA0169E170E00E94A0AB70936A0B6093AC |
:10079000690B8091590590915A058C0F9D1F90937C |
:1007A0005A058093590552E0813D9507A0F02091AC |
:1007B0006B0B30916C0B2F5F3F4F805D9240E2E0FE |
:1007C000813D9E07C0F790935A0580935905309359 |
:1007D0006C0B20936B0BE9E0CDB7DEB70C9429AC22 |
:1007E00030917105832F9927FC0123E0EE0FFF1F45 |
:1007F0002A95E1F7E80FF91FEA57F64F2781422FB4 |
:10080000552747FD509580917205992784179507C4 |
:100810002CF420937205309374050AC0222341F012 |
:100820008091730599274817590714F4209373058D |
:10083000832F8F5F809371058C30D0F010927105FB |
:10084000809173058F3F19F08093660502C0109266 |
:100850006605809172058093670580917405809389 |
:1008600065058FEF809373051092720510927405E1 |
:10087000089595E1899F802D11240E945FA38FE93F |
:100880009FE09F938F9381E393EA9F938F93E091EF |
:10089000C705F091C80509950F900F900F900F9024 |
:1008A0000895CF93C0E09091B10190936405809139 |
:1008B0001D0485FF13C080911404882331F08091BA |
:1008C0009208863011F4CEE001C0C0E1992301F115 |
:1008D000809175058031E1F4C92F1AC090913605D9 |
:1008E000892F81508232B0F480915504882349F4D5 |
:1008F000E92FFF27EE0FFF1FE254F34F8491882367 |
:1009000049F4E92FFF27EE0FFF1FE354F34FC49183 |
:10091000CC2351F48091E60886FD03C01092B1010A |
:1009200005C0C091B10102C0C093640580917505F6 |
:100930008C1771F480917605909177050E94FC1CCC |
:10094000882319F480E090E017C080EA9FE002C09D |
:1009500080ED97E00E94F31C9093770580937605D5 |
:10096000CC2331F08091B101C81711F41092B1017C |
:10097000C09375058C2F9927CF91089520E030E022 |
:1009800050E08091400B992789389105E9F08A3829 |
:10099000910564F48230910539F1833091051CF49E |
:1009A0000197F9F028C0039719F125C08D389105FA |
:1009B000A1F08E38910524F48A38910541F01BC0CE |
:1009C0008E38910539F017C020ED3BE008C028EAC9 |
:1009D0003CE005C02EE63BE002C02AE93BE05CE2D9 |
:1009E0000AC02CEC32E002C02FED32E054E003C02C |
:1009F00026EC3BE059E09091350B40E08091360BBE |
:100A0000481770F4951760F4D901A90FB11DE42FB0 |
:100A1000FF27EE5DF44F85898C939F5F4F5FEECF8C |
:100A2000089520E335E7809142018B3211F08D3239 |
:100A3000F9F480917D08282F332780914A04909102 |
:100A40004B04829FA001839F500D929F500D112453 |
:100A5000CA0163E070E00E94B4ABCB019B01205D52 |
:100A60003A48C196C19708F03FC02EEF34E73CC02A |
:100A7000803229F580911D0481FF36C020916105E7 |
:100A800030916205205D3A4855E72133350748F03B |
:100A900085E72439380718F420E335E702C02456E7 |
:100AA000304045E720333407F8F454E72D3C350750 |
:100AB00018F020E335E718C02C593F4F15C08E358C |
:100AC00049F4909145048AE0989F90011124205D9B |
:100AD0003A480AC0863741F4909145048AE0989FCD |
:100AE000C0011124281B390BC90108951F939927B0 |
:100AF0008A38910509F4ABC18B38910524F4893803 |
:100B0000910551F064C38D38910509F497C28E3870 |
:100B1000910509F4F0C15BC30E945184182F8093A2 |
:100B2000AA0C8091500490915104A0915204B0916C |
:100B30005304BC01CD0124E630E040E050E00E94C7 |
:100B4000E9ABDA01C9018C509E4F9093D60B80938C |
:100B5000D50B112319F40E94118502C080E395E79B |
:100B60009093DC0B8093DB0B8091DB0B9091DC0B83 |
:100B70009093DE0B8093DD0B9093E00B8093DF0B63 |
:100B80002091D50B3091D60B8091D90B9091DA0B37 |
:100B90002817390724F43093DA0B2093D90B80916E |
:100BA000D70B9091D80B8217930724F43093D80B6E |
:100BB0002093D70B1092D20B80ED9BE090938F0582 |
:100BC00080938E05809142018093F60B80911C04E6 |
:100BD00080FF02C083E401C080E28093F70B209184 |
:100BE0003605222309F1822F6AE00E9494AB805DD2 |
:100BF0008093E10B822F0E9494AB892F805D8093BC |
:100C0000E20B8AE38093E30B81E1289FF00111243A |
:100C1000A4EEBBE0ED5FF24F9FE084918D93915085 |
:100C2000319697FFFACFDEC080911404882361F0DB |
:100C3000A1EEBBE0EDE5FFE094E184918D9391504E |
:100C4000319697FFFACFC0C280911D0485FF0CC07A |
:100C5000A1EEBBE0E3E7FFE094E184918D93915036 |
:100C6000319697FFFACFB0C280916305882301F1D6 |
:100C7000A1EEBBE0E6E5FFE096E084918D93915014 |
:100C8000319697FFFACF80910101805D8093E50B4B |
:100C9000A8EEBBE0E7EEF8E09BE081918D939150E8 |
:100CA00097FFFBCF80E28093F30B8093F40BB8C0E7 |
:100CB00030916F05332309F497C087E58093E10BEA |
:100CC00080E58093E20B40E24093E30B20917005B6 |
:100CD000822F6AE00E9494AB805D8093E40B822FA8 |
:100CE0000E9494AB892F805D8093E50B8FE2809307 |
:100CF000E60B832F0E9494AB805D8093E70B832FDC |
:100D00000E9494AB892F805D8093E80B4093E90BA0 |
:100D1000209168053091690583E0293E380780F00D |
:100D2000C90168EE73E00E94A0ABCB01805D8093A7 |
:100D3000EA0BC90168EE73E00E94A0AB9C0102C0FF |
:100D40004093EA0B2536310580F0C90164E670E076 |
:100D50000E94A0ABCB01805D8093EB0BC90164E6E0 |
:100D600070E00E94A0AB9C0103C080E28093EB0B7B |
:100D7000C9016AE070E00E94A0ABCB01805D809366 |
:100D8000EC0BC9016AE070E00E94A0AB805D80932B |
:100D9000ED0B8DE68093EE0B80E28093EF0B2091BC |
:100DA0006E05253660F0822F64E60E9494AB805D6C |
:100DB0008093F00B822F0E9494AB292F02C0809366 |
:100DC000F00B822F6AE00E9494AB805D8093F10B60 |
:100DD000822F0E9494AB892F805D8093F20B83E772 |
:100DE0008093F30B80E261CF809141048823D9F492 |
:100DF000A1EEBBE0EBE8FFE090E184918D93915090 |
:100E0000319697FFFACF82E38093F10B8EE28093C5 |
:100E1000F20B80E38093F30B86E38093F40B81E67F |
:100E20008093F50BD1C1A1EEBBE0E9E8FFE094E1CE |
:100E300084918D939150319697FFFACF8091EE0275 |
:100E4000882309F4C1C182E58093E10BBDC1809183 |
:100E5000500490915104A0915204B0915304BC01EC |
:100E6000CD0124E630E040E050E00E94E9ABDA0139 |
:100E7000C9018C509E4F9093BE0C8093BD0C809105 |
:100E8000AA0C882319F40E94118502C080E395E71B |
:100E90009093C00C8093BF0C88E78093C10C809125 |
:100EA000EE0A8093C20C8091ED0A81FF02C084E4B7 |
:100EB00007C08091EF0A833011F480E201C081E223 |
:100EC0008093C30C88EA9CE090938F0580938E05F5 |
:100ED000809197018093CF0C8091C30C8093D10CAB |
:100EE0008091F30A9091F40A97FD01969595879564 |
:100EF0008093C40C69C10E94F0838091500490914A |
:100F00005104A0915204B0915304BC01CD0124E6D8 |
:100F100030E040E050E00E94E9ABDA01C9018C50BA |
:100F20009E4F9093890B8093880B8091260190911E |
:100F300027019093830B8093820B809126019091DF |
:100F400027019093850B8093840B8091D90A90910F |
:100F5000DA0A97FD0196959587958093740B809397 |
:100F60007B0B2091F30A3091F40A37FF02C02F5F08 |
:100F70003F4F359527952093790B8091F10A9091F9 |
:100F8000F20A64E170E00E94A0AB60937A0B2093B8 |
:100F9000800B6093810B8091AA0C882319F40E9426 |
:100FA000118502C080E395E79093910B8093900B9D |
:100FB00088E78093920B809126019091270190936E |
:100FC0008D0B80938C0B809166058C5E8093860BD5 |
:100FD000809167058C5E8093870B80916B0B90915D |
:100FE0006C0B6AE070E00E94A0AB70938F0B609373 |
:100FF0008E0B8091AA0C8093700B8091670B90915F |
:10100000680B90938B0B80938A0B8EE69BE09093FA |
:101010008F0580938E052091F1023091F202C90173 |
:101020006CE370E00E94A0AB6093950BC9016CE388 |
:1010300070E00E94A0AB8093960BC6C00E94F08324 |
:101040008091F10A9091F20A64E670E00E94A0ABF0 |
:101050007093B00B6093AF0B8091D90A9091DA0A2C |
:1010600097FD0196959587958093A00B80919101AE |
:101070009091920197FD0196959587958093A10B8C |
:101080008091FE078093A40B8091F30A9091F40A5B |
:1010900097FD0196959587958093A50B8091020108 |
:1010A000482F55279A012E5F3F4F8091260190913E |
:1010B00027012817390784F4809126019091270190 |
:1010C000841B950B9C01220F331F280F391F822F81 |
:1010D00086508093AC0B02C01092AC0B8091AC0B8D |
:1010E000853618F084E68093AC0B809136059927FD |
:1010F0009093AE0B8093AD0B80915004909151046E |
:10110000A0915204B0915304BC01CD0124E630E01B |
:1011100040E050E00E94E9ABDA01C9018C509E4FDB |
:101120009093B20B8093B10B80912601909127018F |
:101130009093A70B8093A60B809126019091270195 |
:101140009093A90B8093A80B8091AA0C882319F483 |
:101150000E94118502C080E395E79093B40B8093C1 |
:10116000B30B8091AA0C88588093B50B809126010F |
:10117000909127019093B90B8093B80B80916605ED |
:101180008C5E8093AA0B809167058C5E8093AB0B7D |
:1011900080916B0B90916C0B6AE070E00E94A0ABA9 |
:1011A0007093BB0B6093BA0B10929C0B8091670BF2 |
:1011B0009091680B9093B70B8093B60B8AE99BE0F4 |
:1011C00090938F0580938E052CE230E002C020E0E2 |
:1011D00030E0C9011F910895EF92FF920F931F9382 |
:1011E000CF93DF9380916105909162059C0173E03C |
:1011F000220F331F7A95E1F7281B390B80913C03AE |
:1012000090913D03280F391F37FF02C0295F3F4FE0 |
:1012100063E0359527956A95E1F730936205209351 |
:1012200061058091790599278330910511F40C941B |
:10123000E8928430910564F48130910509F43DC34E |
:10124000823091050CF04EC7892B91F00C94449993 |
:101250008530910511F40C949C958530910514F41A |
:101260000C945C94069711F40C9426970C94449972 |
:1012700080917805282F3327442755278F5F809347 |
:101280007805F9012131310510F00C944199ED58A0 |
:10129000FF4F0C943BAC80911D0485FF2AC080E079 |
:1012A0000E945FA380912601909127016AE070E07F |
:1012B0000E94B4AB9F938F93809126019091270158 |
:1012C0006AE070E00E94B4AB7F936F9385EB9FE080 |
:1012D0009F938F9382E593EA9F938F93E091C70545 |
:1012E000F091C80509952DB73EB7285F3F4F2DBF38 |
:1012F00028C080E00E945FA3809126019091270181 |
:101300006AE070E00E94B4AB9F938F9380912601B6 |
:10131000909127016AE070E00E94B4AB7F936F93D5 |
:1013200082EC9FE09F938F9381E393EA9F938F9347 |
:10133000E091C705F091C80509958DB79EB708964D |
:101340008DBF8091D00A80FF40C080916D048823BA |
:10135000E9F08AE00E945FA38091420199279F9360 |
:101360008F938091500490915104A0915204B091B8 |
:101370005304BC01CD0124E630E040E050E00E947F |
:10138000E9AB3F932F938FEC9FE0CDC68AE00E949C |
:101390005FA38091500490915104A0915204B091A8 |
:1013A0005304BC01CD0124E630E040E050E00E944F |
:1013B000E9AB3F932F938BED9FE09F938F9381E356 |
:1013C00093EA9F938F930C945C988AE00E945FA3AA |
:1013D00086EE9FE00C94459780911D0485FF2AC0FE |
:1013E00085E10E945FA38091F1029091F2026CE38B |
:1013F00070E00E94A0AB9F938F938091F102909137 |
:10140000F2026CE370E00E94A0AB7F936F9380EFD9 |
:101410009FE09F938F9382E593EA9F938F93E09150 |
:10142000C705F091C80509952DB73EB7285F3F4F16 |
:101430002DBF28C085E10E945FA38091F1029091A9 |
:10144000F2026CE370E00E94A0AB9F938F938091B7 |
:10145000F1029091F2026CE370E00E94A0AB7F93E6 |
:101460006F938DEF9FE09F938F9381E393EA9F9318 |
:101470008F93E091C705F091C80509958DB79EB788 |
:1014800008968DBF8FE10E945FA380E690E09F9356 |
:101490008F938091D90A9091DA0A9F938F938AE073 |
:1014A00090E19F938F93C1E3D3EADF93CF93E091D1 |
:1014B000C705F091C805099580911C042DB73EB76A |
:1014C000285F3F4F2DBF80FF06C089E20E945FA3C7 |
:1014D00085E190E170C389E20E945FA387E190E11A |
:1014E000DCC680911D0485FF1BC08AE20E945FA3B9 |
:1014F00080916B0B90916C0B9F938F9389E190E19E |
:101500009F938F9382E593EA9F938F93E091C70512 |
:10151000F091C80509958DB79EB706968DBF1BC083 |
:101520008AE20E945FA380916B0B90916C0B9F935A |
:101530008F9381E290E19F938F9381E393EA9F934E |
:101540008F93E091C705F091C80509952DB73EB777 |
:101550002A5F3F4F2DBF86E30E945FA38091670BF8 |
:101560009091680B6AE070E00E94A0AB9F938F930C |
:101570008091670B9091680B6AE070E00E94A0ABCD |
:101580007F936F9389E290E19F938F9381E393EA36 |
:101590009F938F930C94379389E00E945FA385E318 |
:1015A00090E19F938F9301E313EA1F930F93E091D0 |
:1015B000C705F091C80509958EE10E945FA30F90C1 |
:1015C0000F900F900F9087E390E19F938F931F935D |
:1015D0000F93E091C705F091C805099583E30E9438 |
:1015E0005FA30F900F900F900F9089E390E19F936E |
:1015F0008F931F930F93E091C705F091C80509954C |
:101600008FE30E945FA30F900F900F900F908BE3DA |
:1016100090E19F938F931F930F93E091C705F091F3 |
:10162000C80509958EE70E945FA30F900F900F9059 |
:101630000F9081E590E10C948F948091A50188230F |
:1016400009F462C08DE50E945FA387E690E19F9355 |
:101650008F93C1E3D3EADF93CF93E091C705F09175 |
:10166000C805099584E50E945FA30F900F900F9025 |
:101670000F908091EE0A99279F938F9389E690E1CE |
:101680009F938F93DF93CF93E091C705F091C805A7 |
:1016900009958EE50E945FA32DB73EB72A5F3F4FA5 |
:1016A0002DBF8091F10A9091F20A6AE070E00E94E9 |
:1016B000A0AB7F936F9382E790E19F938F93DF932B |
:1016C000CF93E091C705F091C80509958DB79EB7F6 |
:1016D00006968DBF8091EF0A833081F48091ED0AE8 |
:1016E00081FF06C08BE50E945FA38CE790E1D5C522 |
:1016F0008BE50E945FA38FE790E1CFC58BE50E9449 |
:101700005FA382E890E13CC784E00C94C897809185 |
:10171000A501882311F40C94C79780917B0551E3B0 |
:10172000E52E53EAF52E882309F44BC089E60E9482 |
:101730005FA38091350599279F938F9385E890E16A |
:101740009F938F93FF92EF92E091C705F091C805A8 |
:10175000099585E70E945FA32DB73EB72A5F3F4FEB |
:101760002DBF8091970199279F938F9300E610E0FA |
:101770001F930F938091F30A9091F40A9F938F9394 |
:1017800080E990E19F938F93FF92EF92E091C705DC |
:10179000F091C805099582E70E945FA38DB79EB7B7 |
:1017A0000A968DBF8091330599279F938F931F933E |
:1017B0000F938091340599279F938F938CE990E143 |
:1017C0008AC689E60E945FA38091970199279F931B |
:1017D0008F9380E690E09F938F938091F30A90918E |
:1017E000F40A9F938F938091F00A99279F938F9388 |
:1017F0008CEA90E19F938F93FF92EF92E091C7055F |
:10180000F091C80509958DB79EB70C960C94649815 |
:10181000909136059923D1F080918B05882381F032 |
:10182000933270F487E00E94398483E90E945FA3B9 |
:101830008091360599279F938F9385EC90E1E6C3BD |
:1018400083E90E945FA380ED90E1F5C380911D04C0 |
:1018500041E3E42E43EAF42E85FF07C084E90E94A9 |
:101860005FA386ED90E10C94B19483E90E945FA39D |
:1018700089EE90E10C94B19480910D0D823029F4A1 |
:101880000E9464A385E00C943A99863069F48091B3 |
:101890007B05882321F010927B050C943E9981E012 |
:1018A00080937B050C943E99883011F00C943E99FE |
:1018B0000E9464A381E00C943A9980917805282FC6 |
:1018C0003327442755278F5F80937805F90121310D |
:1018D000310510F00C944199EC57FF4F0C943BAC40 |
:1018E00080911D0485FF44C080E00E945FA3809129 |
:1018F0006B0B90916C0B9F938F938091260190912D |
:1019000027016AE070E00E94B4AB9F938F938091AF |
:101910002601909127016AE070E00E94B4AB7F93AA |
:101920006F938091F1029091F2026CE370E00E945B |
:10193000A0AB9F938F938091F1029091F2026CE3A0 |
:1019400070E00E94A0AB7F936F938FEF90E19F9325 |
:101950008F9382E593EA9F938F93E091C705F0916F |
:10196000C80509952DB73EB7225F3F4F0C940A96E4 |
:1019700080E00E945FA380916B0B90916C0B9F9312 |
:101980008F9380912601909127016AE070E00E9478 |
:10199000B4AB9F938F9380912601909127016AE0C9 |
:1019A00070E00E94B4AB7F936F938091F1029091AD |
:1019B000F2026CE370E00E94A0AB9F938F93809142 |
:1019C000F1029091F2026CE370E00E94A0AB7F9371 |
:1019D0006F938AE191E1FBC285E10E945FA380E6FB |
:1019E00090E09F938F938091D90A9091DA0A9F9308 |
:1019F0008F9385E391E19F938F93C1E3D3EADF93C4 |
:101A0000CF93E091C705F091C80509958091D00A60 |
:101A10002DB73EB7285F3F4F2DBF80FF51C080914B |
:101A20006D04882339F18FE10E945FA380915004F7 |
:101A300090915104A0915204B0915304BC01CD0186 |
:101A400024E630E040E050E00E94E9AB3F932F9362 |
:101A50008FE391E19F938F9381E493EA9F938F9318 |
:101A6000E091C705F091C80509958DB79EB7069618 |
:101A70008DBF38C08FE10E945FA380915004909188 |
:101A80005104A0915204B0915304BC01CD0124E64D |
:101A900030E040E050E00E94E9AB3F932F9388E4B0 |
:101AA00091E19F938F93DF93CF93E091C705F091DE |
:101AB000C80509952DB73EB72A5F3F4F2DBF12C00D |
:101AC0008FE10E945FA381E591E19F938F93DF9364 |
:101AD000CF93E091C705F091C80509950F900F903D |
:101AE0000F900F9089E20E945FA380914201992795 |
:101AF0009F938F938BE591E12BC48091A50188235F |
:101B0000F9F08BE20E945FA38091970199279F9340 |
:101B10008F938091F10A9091F20A6AE070E00E943E |
:101B2000A0AB7F936F9380E690E09F938F9380911B |
:101B3000F30A9091F40A9F938F938EE591E16DC122 |
:101B400082E00C94C8978FE30E945FA38091690B99 |
:101B500090916A0B9F938F938091670B9091680B84 |
:101B60006AE070E00E94A0AB9F938F938091670B17 |
:101B70009091680B6AE070E00E94A0AB7F936F9336 |
:101B800085E791E19F938F93C1E3D3EADF93CF93EE |
:101B9000E091C705F091C805099580911C042DB707 |
:101BA0003EB7265F3F4F2DBF80FF0BC082E50E94EE |
:101BB0005FA389E891E19F938F9381E493EA0C946A |
:101BC000499782E50E945FA38CE891E166C380910A |
:101BD000A50131E3E32E33EAF32E882309F44BC049 |
:101BE00084E50E945FA38091EE0A99279F938F93CB |
:101BF0008091F00A99279F938F938FE891E19F93AB |
:101C00008F93E701FF92EF92E091C705F091C8052D |
:101C100009958DB79EB708968DBF8091EF0A8330E6 |
:101C200051F484E60E945FA382EA91E19F938F932F |
:101C3000FF92EF920BC084E60E945FA388EA91E1D5 |
:101C40009F938F9382E593EA9F938F93E091C705CB |
:101C5000F091C80509950F900F900F900F9080910B |
:101C6000ED0A81FD02C00C94469984E60E945FA3B0 |
:101C70008EEA91E112C384E50E945FA384EB91E1B7 |
:101C800070C680917A0521E3E22E23EAF22E8823A2 |
:101C900009F45BC089E60E945FA383E00E94EA82A8 |
:101CA0006AE070E00E94A0AB9F938F9383E00E9454 |
:101CB000EA826AE070E00E94A0AB7F936F9382E0BB |
:101CC0000E94EA826AE070E00E94A0AB9F938F932B |
:101CD00082E00E94EA826AE070E00E94A0AB7F93FB |
:101CE0006F9381E00E94EA826AE070E00E94A0ABFC |
:101CF0009F938F9381E00E94EA826AE070E00E94E5 |
:101D0000A0AB7F936F9380E00E94EA826AE070E06C |
:101D10000E94A0AB9F938F9380E00E94EA826AE0CA |
:101D200070E00E94A0AB7F936F938AEC91E19F9348 |
:101D30008F93FF92EF92E091C705F091C805099546 |
:101D40002DB73EB72C5E3F4F65C789E60E945FA363 |
:101D500080E690E09F938F938091A809992787FD53 |
:101D600090959F938F9380919F09992787FD9095D8 |
:101D70009F938F9380919609992787FD90959F93C4 |
:101D80008F9380918D09992787FD90959F938F93CD |
:101D900087EE91E19F938F93FF92EF92E091C705B9 |
:101DA000F091C80509958DB79EB70E960C9464986E |
:101DB00080917A0590916A08882309F4B1C0943023 |
:101DC00009F4B0C09630C9F58EE70E945FA385E0A4 |
:101DD0000E94EA826AE070E00E94A0AB9F938F931A |
:101DE00085E00E94EA826AE070E00E94A0AB7F93E7 |
:101DF0006F9384E00E94EA826AE070E00E94A0ABE8 |
:101E00009F938F9384E00E94EA826AE070E00E94D0 |
:101E1000A0AB7F936F938AEF91E19F938F9381E3C0 |
:101E200093EA9F938F93E091C705F091C8050995B8 |
:101E30002DB73EB7245F3F4FEDC6973010F40C949A |
:101E400046998EE70E945FA388E00E94EA826AE0DA |
:101E500070E00E94A0AB9F938F9388E00E94EA827B |
:101E60006AE070E00E94A0AB7F936F9387E00E94CE |
:101E7000EA826AE070E00E94A0AB9F938F9387E0B4 |
:101E80000E94EA826AE070E00E94A0AB7F936F93A9 |
:101E900086E00E94EA826AE070E00E94A0AB9F9315 |
:101EA0008F9386E00E94EA826AE070E00E94A0AB15 |
:101EB0007F936F9385E00E94EA826AE070E00E945F |
:101EC000A0AB9F938F9385E00E94EA826AE070E066 |
:101ED0000E94A0AB7F936F9384E00E94EA826AE045 |
:101EE00070E00E94A0AB9F938F9384E00E94EA82EF |
:101EF0006AE070E00E94A0AB7F936F9389E092E16B |
:101F00009F938F9381E393EA9F938F93E091C7050B |
:101F1000F091C80509958DB79EB748960C946498C2 |
:101F2000943019F486E00C94C897963039F58EE712 |
:101F30000E945FA380E690E09F938F938091BA09FF |
:101F4000992787FD90959F938F938091B109992749 |
:101F500087FD90959F938F9386E292E19F938F9355 |
:101F600081E393EA9F938F93E091C705F091C805B1 |
:101F700009952DB73EB7265F3F4F4CC6973010F4FA |
:101F80000C9446998EE70E945FA380E690E09F93B1 |
:101F90008F938091CC09992787FD90959F938F937C |
:101FA0008091C309992787FD90959F938F93809186 |
:101FB000BA09992787FD90959F938F938091B109D6 |
:101FC000992787FD90959F938F9389E392E19F9343 |
:101FD0008F9381E393EA9F938F93E0CE90913605A0 |
:101FE000992309F44BC080918B058823F9F0933233 |
:101FF000E8F487E00E94398483E90E945FA380911E |
:10200000360599279F938F938CE492E19F938F934A |
:1020100081E493EA9F938F93E091C705F091C805FF |
:1020200009952DB73EB72A5F3F4FF4C583E90E945B |
:102030005FA387E592E19F938F9301E313EA1F93D8 |
:102040000F93E091C705F091C80509951F921F9263 |
:102050009091360581E1989FC00111248D5F924FC8 |
:102060009F938F931F930F93E091C705F091C8053D |
:1020700009958DB79EB70A960C94649880911D04BB |
:1020800091E3E92E93EAF92E85FF06C084E90E94C8 |
:102090005FA38DE592E165C483E90E945FA380E7B9 |
:1020A00092E15FC480910D0D863079F480917A05BC |
:1020B000882319F010927A0503C081E080937A0595 |
:1020C00085E00E94398486E072C2883009F4F0C34A |
:1020D000813011F00C943E990E9464A3109279050E |
:1020E0000C943C9980917805282F33274427552755 |
:1020F0008F5F80937805F9012131310510F00C9440 |
:102100004199EB56FF4F0C943BAC80E00E945FA3DB |
:1021100087EE98E09F938F938091010199279F9379 |
:102120008F9386E892E19F938F9381E493EA9F9344 |
:102130008F9367C585E10E945FA385EF98E09F9329 |
:102140008F93809102016AE00E9494AB892F9927B6 |
:102150009F938F93809102010E9494AB99279F9344 |
:102160008F9385E992E19F938F9381E393EA9F9305 |
:102170008F9307C78AE20E945FA386EA92E19F934A |
:102180008F93C1E3D3EADF93CF93E091C705F0913A |
:10219000C80509958091D00A0F900F900F900F906D |
:1021A00080FF41C0809178089091330481FD0BC07D |
:1021B000892F99279F938F938BEA92E19F938F9317 |
:1021C000DF93CF9329CFE091C705F091C8059333F2 |
:1021D00018F085EB92E102C08CEB92E19F938F9314 |
:1021E000DF93CF9309950F900F900F900F908091F0 |
:1021F000B40AE091C705F091C8059091330480FFBF |
:102200000BC0892F99279F938F9383EC92E19F9323 |
:102210008F93DF93CF9354C7892F99279F938F93E1 |
:1022200089EC92E1BBC08FEC92E137C08FE30E9452 |
:102230005FA388ED92E19F938F93C1E3D3EADF938D |
:10224000CF93E091C705F091C80509950F900F90C5 |
:102250000F900F908091CF08882319F48CED92E1B4 |
:102260001CC080912A04E091C705F091C80588231D |
:1022700019F085EE92E102C08CEE92E19F938F936C |
:10228000DF93CF9309950F900F900F900F9080914F |
:10229000E50886FFFBC783EF92E19F938F93DF935F |
:1022A000CF93F9C584E50E945FA38AEF92E19F93E3 |
:1022B0008F93C1E3D3EADF93CF93E091C705F09109 |
:1022C000C80509958091D00A0F900F900F900F903C |
:1022D00085FD03C08FEF92E108C08091BC080E9489 |
:1022E000CB49823358F488E093E19F938F93DF9337 |
:1022F000CF93E091C705F091C80516C0843B18F054 |
:102300008FE093E1F2CF8091E508E091C705F0916D |
:10231000C80585FF03C086E193E102C08DE193E12A |
:102320009F938F93DF93CF9309950F900F900F900A |
:102330000F908091D308882309F4A8C78EE50E94E6 |
:102340005FA38091D30899279F938F9384E293E1B1 |
:102350009F938F93DF93CF93AFC689E60E945FA3CD |
:102360008FE293E19F938F93C1E3D3EADF93CF93FF |
:10237000E091C705F091C80509950F900F900F9057 |
:102380000F908091D208E091C705F091C80588238D |
:1023900051F099279F938F9389E393E19F938F93B4 |
:1023A000DF93CF933DCE8DE393E19F938F93DF93A4 |
:1023B000CF9375C580917C0501E3E02E03EAF02EF2 |
:1023C000882309F053C08EE70E945FA380917001BB |
:1023D00099279F938F9380916D08E82FFF27EE0F29 |
:1023E000FF1FED50F64F808191819F938F938091D5 |
:1023F0006C08E82FFF27EE0FFF1FED50F64F80818E |
:1024000091819F938F9383E493E19F938F93FF92A6 |
:10241000EF92E091C705F091C805099583E90E9404 |
:102420005FA38DB79EB70A968DBF80916F08E82F86 |
:10243000FF27EE0FFF1FED50F64F808191819F9394 |
:102440008F9380916E08E82FFF27EE0FFF1FED504E |
:10245000F64F8081918181589F4F9F938F9387E59D |
:1024600093E19F938F93FF92EF92CBC38EE70E94ED |
:102470005FA38091590499279F938F93809158046B |
:1024800099279F938F938091570499279F938F93B8 |
:1024900086E693E19F938F93FF92EF92E091C705B9 |
:1024A000F091C805099583E90E945FA38DB79EB797 |
:1024B0000A968DBF80915C0499279F938F9380919A |
:1024C0005B0499279F938F9380915A0499279F9338 |
:1024D0008F938AE793E19F938F93FF92EF9244CD7E |
:1024E00080918B05882309F4D1C68EE70E945FA3F3 |
:1024F0008091D00A86FD11C08EE893E19F938F935F |
:1025000082E593EA9F938F93E091C705F091C80508 |
:1025100009950F900F900F900F908091E3089927E5 |
:102520008F709070892B89F08DE993E19F938F9341 |
:1025300082E593EA9F938F93E091C705F091C805D8 |
:1025400009950F900F900F900F908091D00A82FF05 |
:1025500011C087EA93E19F938F9382E593EA9F935B |
:102560008F93E091C705F091C80509950F900F90E2 |
:102570000F900F908091D00A83FD88C68CEA93E17A |
:102580009F938F9382E593EA84C400910D0D0630EA |
:1025900089F480917C05882319F010927C0503C092 |
:1025A00081E080937C0586E00E94398487E00E9468 |
:1025B000398464C6083021F40E9464A383E05AC6BB |
:1025C000013009F05BC60E9464A30093790554C6EC |
:1025D00080917805282F33278F5F809378052230EC |
:1025E000310509F453C0233031053CF42115310580 |
:1025F00049F02130310501F144C6263031050CF097 |
:1026000040C683C080E00E945FA38AEB93E19F9362 |
:102610008F9301E313EA1F930F93E091C705F091A5 |
:10262000C805099585E10E945FA30F900F900F9058 |
:102630000F9089EC93E173C180916F0511E3E12E56 |
:1026400013EAF12E8823E1F08EE70E945FA38091C8 |
:102650006F0599279F938F938091700599279F937A |
:102660008F938EED93E19F938F93FF92EF92E09182 |
:10267000C705F091C80509958DB79EB7089624C582 |
:102680008EE70E945FA380EF93E16BC183E90E9414 |
:102690005FA380912601909127016AE070E00E947B |
:1026A000B4AB9F938F9380912601909127016AE0AC |
:1026B00070E00E94B4AB7F936F9383E094E19F93AB |
:1026C0008F9301E313EA1F930F93E091C705F091F5 |
:1026D000C80509958EE90E945FA32DB73EB7285F14 |
:1026E0003F4F2DBF86EC9BE09F938F938DE094E14D |
:1026F0009F938F931F930F93E091C705F091C805A7 |
:1027000009958DB79EB706968DBF8091B20188233B |
:10271000E9F180917D058823C9F080918B0588239C |
:10272000A9F089E40E945FA380E194E19F938F93D5 |
:1027300081E393EA9F938F93E091C705F091C805D9 |
:1027400009950F900F900F900F901AC089E40E9486 |
:102750005FA38091B20199279F938F9384E194E1C5 |
:102760009F938F9381E393EA9F938F93E091C705A3 |
:10277000F091C80509952DB73EB72A5F3F4F2DBF91 |
:102780008FE30E945FA38BE194E105C08FE30E9479 |
:102790005FA386E294E19F938F9381E393EA9F93F3 |
:1027A0008F93E091C705F091C80509950F900F90A0 |
:1027B0000F900F9080916C05882331F484E50E947E |
:1027C0005FA385E394E139C08091EF0A833081F5FE |
:1027D00080917D05882351F08091B201882331F0EA |
:1027E00084E50E945FA383E494E105C084E50E9430 |
:1027F0005FA381E594E19F938F9381E393EA9F9395 |
:102800008F93E091C705F091C80509950F900F903F |
:102810000F900F9080910D0D8630F1F48091B201F0 |
:10282000882319F0806880936D0510927D0514C08F |
:1028300084E50E945FA38FE594E19F938F9381E3EA |
:1028400093EA9F938F93E091C705F091C80509958E |
:102850000F900F900F900F9080910D0D843059F4D0 |
:102860009091B20180916C059817E8F481E0809313 |
:102870007D05980F0AC0823069F49091B2019230C0 |
:1028800090F081E080937D0591509093B201109279 |
:102890008B0509C0883039F40E9464A384E08093DA |
:1028A00079051092780580910D0D813009F0E6C40C |
:1028B0000E9464A382E0DEC480917805282F33272C |
:1028C0008F5F809378052230310509F44FC02330A3 |
:1028D00031053CF42115310549F02130310521F154 |
:1028E000D0C4263031050CF0CCC47FC080E00E94FB |
:1028F0005FA38DE694E19F938F9301E313EA1F9307 |
:102900000F93E091C705F091C805099585E10E94F4 |
:102910005FA30F900F900F900F908CE794E19F931F |
:102920008F931F930F93B7C280916F05C1E3EC2E75 |
:10293000C3EAFC2E882381F08EE70E945FA380917A |
:102940006F0599279F938F938091700599279F9387 |
:102950008F938EE894E187CE8EE70E945FA380EA92 |
:1029600094E19F938F93FF92EF9295C283E90E9427 |
:102970005FA380912601909127016AE070E00E9498 |
:10298000B4AB9F938F9380912601909127016AE0C9 |
:1029900070E00E94B4AB7F936F9382EB94E19F93BE |
:1029A0008F9301E313EA1F930F93E091C705F09112 |
:1029B000C80509958EE90E945FA32DB73EB7285F31 |
:1029C0003F4F2DBF86EC9BE09F938F938CEB94E160 |
:1029D0009F938F931F930F93E091C705F091C805C4 |
:1029E00009958DB79EB706968DBF8FE30E945FA3B2 |
:1029F0008FEB94E19F938F93C1E3D3EADF93CF935F |
:102A0000E091C705F091C80509950F900F900F90C0 |
:102A10000F908091B301882339F180917E0588233E |
:102A200051F080918B05882331F089E40E945FA3E7 |
:102A30008AEC94E11EC089E40E945FA38091B301F7 |
:102A400099279F938F938EEC94E19F938F93DF93BD |
:102A5000CF93E091C705F091C80509952DB73EB712 |
:102A60002A5F3F4F2DBF12C089E40E945FA388ED0B |
:102A700094E19F938F93DF93CF93E091C705F091FB |
:102A8000C80509950F900F900F900F9080916C05DD |
:102A9000882331F484E50E945FA38CED94E113C098 |
:102AA00080917E05882351F08091B301882331F015 |
:102AB00084E50E945FA38AEE94E105C084E50E944C |
:102AC0005FA388EF94E19F938F9381E393EA9F93B1 |
:102AD0008F93E091C705F091C80509950F900F906D |
:102AE0000F900F9080910D0D843061F49091B3019F |
:102AF00080916C05981708F0A6C181E080937E054F |
:102B0000980F0BC0823061F49091B301923008F4B9 |
:102B10009AC181E080937E0591509093B30185C165 |
:102B2000863009F085C18091B301882311F080932C |
:102B30006D0510927E0587C180917805282F332777 |
:102B40008F5F809378052230310509F465C023300A |
:102B500031053CF42115310549F02130310561F092 |
:102B600090C3263031050CF08CC3A4C080E00E94D5 |
:102B70005FA386E095E189C18AE20E945FA380910C |
:102B80002601909127016AE070E00E94B4AB9F9308 |
:102B90008F9380912601909127016AE070E00E9456 |
:102BA000B4AB7F936F938CE195E19F938F9301E397 |
:102BB00013EA1F930F93E091C705F091C80509959B |
:102BC0008FE30E945FA38DB79EB708968DBF80915B |
:102BD000F1029091F2026CE370E00E94A0AB9F932F |
:102BE0008F938091F1029091F2026CE370E00E9469 |
:102BF000A0AB7F936F9387E295E19F938F931F9391 |
:102C00000F93E091C705F091C80509952DB73EB720 |
:102C1000285F3F4F2DBF3AC385E30E945FA3809199 |
:102C2000500490915104A0915204B0915304BC01FE |
:102C3000CD0124E630E040E050E00E94E9AB3F9354 |
:102C40002F9382E395E19F938F9301E313EA1F9300 |
:102C50000F93E091C705F091C80509958AE40E9499 |
:102C60005FA38DB79EB706968DBF80E690E09F93D9 |
:102C70008F938091D90A9091DA0A9F938F938BE377 |
:102C800095E19F938F931F930F93E091C705F09168 |
:102C9000C80509958FE50E945FA32DB73EB7285F51 |
:102CA0003F4F2DBF8091700199279F938F9386E4AA |
:102CB00095E1FEC18EE70E945FA38FE495E19F93AB |
:102CC0008F93C1E3D3EADF93CF93E091C705F091EF |
:102CD000C80509950F900F900F900F9080917F0578 |
:102CE000882339F180918005882351F080918B05EC |
:102CF000882331F08BE80E945FA38CE595E11EC02C |
:102D00008BE80E945FA380917F0599279F938F9303 |
:102D100080E695E19F938F93DF93CF93E091C70572 |
:102D2000F091C80509952DB73EB72A5F3F4F2DBFDB |
:102D300012C08BE80E945FA385E695E19F938F9375 |
:102D4000DF93CF93E091C705F091C80509950F90E7 |
:102D50000F900F900F908091EF0A8330B9F580911A |
:102D60006C05882331F483E90E945FA388E695E12E |
:102D70000DC0809180058823C9F080917F0588234C |
:102D8000A9F083E90E945FA386E795E19F938F9363 |
:102D900081E393EA9F938F93E091C705F091C80573 |
:102DA00009950F900F900F900F9003C087E00E943D |
:102DB000398480910D0D8630E9F480917F05882358 |
:102DC00011F080936A051092800514C083E90E9477 |
:102DD0005FA385E895E19F938F9381E393EA9F93A7 |
:102DE0008F93E091C705F091C80509950F900F905A |
:102DF0000F900F9080910D0D843059F490917F05C4 |
:102E000080916C059817F8F481E080938005980F05 |
:102E10000AC0823069F490917F059230A0F081E081 |
:102E200080938005915090937F0510928B050BC085 |
:102E3000883049F40E9464A3809179058F5F809364 |
:102E400079051092780580910D0D0DC2809178055D |
:102E5000282F33278F5F809378052230310509F4BE |
:102E60009AC0233031053CF42115310549F0213059 |
:102E70003105D9F006C2263031050CF002C226C158 |
:102E800080E00E945FA383E995E19F938F9381E3A4 |
:102E900093EA9F938F93E091C705F091C805099538 |
:102EA0000F900F900F900F90F1C18AE20E945FA3E4 |
:102EB00080912601909127016AE070E00E94B4ABF6 |
:102EC0009F938F9380912601909127016AE070E093 |
:102ED0000E94B4AB7F936F9388EA95E19F938F93A1 |
:102EE000C1E3D3EADF93CF93E091C705F091C80522 |
:102EF00009958FE30E945FA38DB79EB708968DBF9B |
:102F00008091F1029091F2026CE370E00E94A0AB1C |
:102F10009F938F938091F1029091F2026CE370E0A5 |
:102F20000E94A0AB7F936F9383EB95E19F938F9368 |
:102F3000DF93CF93E091C705F091C80509952DB7B0 |
:102F40003EB7285F3F4F2DBF80916F058823F9F072 |
:102F500089E60E945FA380916805909169059F931F |
:102F60008F9380916F0599279F938F938091700520 |
:102F700099279F938F938EEB95E19F938F93DF9388 |
:102F8000CF93E091C705F091C805099572C885E017 |
:102F90000E9439847BC180914504B1E3EB2EB3EAF2 |
:102FA000FB2E8823C1F182E30E945FA38091460437 |
:102FB00090914704A0914804B0914904BC01CD010F |
:102FC00024E630E040E050E00E94E9AB3F932F93CD |
:102FD0008091500490915104A0915204B0915304F7 |
:102FE000BC01CD0124E630E040E050E00E94E9ABB6 |
:102FF0003F932F9383ED95E19F938F93FF92EF92F1 |
:10300000E091C705F091C80509952DB73EB7285F37 |
:103010003F4F2DBF24C082E30E945FA380915004E4 |
:1030200090915104A0915204B0915304BC01CD0180 |
:1030300024E630E040E050E00E94E9AB3F932F935C |
:1030400080EE95E19F938F93FF92EF92E091C705F9 |
:10305000F091C80509958DB79EB706968DBF87E498 |
:103060000E945FA380E690E09F938F938091D90A9E |
:103070009091DA0A9F938F938DEE95E19F938F93B2 |
:1030800001E313EA1F930F93E091C705F091C80580 |
:1030900009958CE50E945FA32DB73EB7285F3F4F8F |
:1030A0002DBF8091700199279F938F9388EF95E1B1 |
:1030B0009F938F931F930F93E091C705F091C805DD |
:1030C00009958DB79EB706968DBFE0C080910D0D16 |
:1030D000882349F08091E8079091E9070196909341 |
:1030E000E9078093E8078EE70E945FA381E096E1FD |
:1030F0009F938F93C1E3D3EADF93CF93E091C7050A |
:10310000F091C80509950F900F900F900F90809146 |
:103110008105882339F180918205882351F08091BF |
:103120008B05882331F089E80E945FA38DE096E14A |
:103130001EC089E80E945FA38091810599279F9313 |
:103140008F9381E196E19F938F93DF93CF93E091EB |
:10315000C705F091C80509952DB73EB72A5F3F4FC7 |
:103160002DBF12C089E80E945FA385E196E19F937D |
:103170008F93DF93CF93E091C705F091C805099530 |
:103180000F900F900F900F9080916C05882331F471 |
:1031900083E90E945FA388E196E10DC080918205DA |
:1031A0008823C9F0809181058823A9F083E90E94D2 |
:1031B0005FA386E296E19F938F9381E393EA9F93C7 |
:1031C0008F93E091C705F091C80509950F900F9076 |
:1031D0000F900F901FC087E00E94398480916F0587 |
:1031E0008823C1F083E90E945FA386EC9BE09F9354 |
:1031F0008F9384E396E19F938F9381E393EA9F9368 |
:103200008F93E091C705F091C80509958DB79EB7DA |
:1032100006968DBF80910D0D843059F490918105F3 |
:1032200080916C05981750F581E080938205980F86 |
:103230000AC0823069F4909181059230F8F081E003 |
:103240008093820591509093810510928B0516C052 |
:10325000863049F480918105882311F080936B05B5 |
:10326000109282050BC0813049F40E9464A38091C2 |
:1032700079058150809379051092780510920D0D93 |
:1032800005C01092780502C010927905E6E0CDB72E |
:10329000DEB70C942CAC4FB728E130E0F894809165 |
:1032A000C9008F778093C9008091C9008F7B80937C |
:1032B000C9008091C9008F7D8093C900832F992711 |
:1032C0008093CD002093CC008091C80082608093D1 |
:1032D000C80080E18093C9008091CA008F778093F5 |
:1032E000CA008091CA008F7B8093CA008091CA0077 |
:1032F0008091CA008F7E8093CA008091CA00886046 |
:103300008093CA008091C9008B7F8093C90080910F |
:10331000CA0084608093CA008091CA008260809352 |
:10332000CA008091C80087FF03C08091CE00F9CF0A |
:103330008091C90080688093C9008091EB0C846003 |
:103340008093EB0C4FBF089590914905992341F468 |
:103350008F3031F49093840580E58093490508957A |
:10336000E0918405EF5FE0938405E83121F481E08A |
:10337000809383050895E93120F089E180938405E5 |
:103380000895FF27EC52F34F80830895A0E0B0E04A |
:10339000ECECF9E90C940CAC91E0D92E82E0A82E6B |
:1033A000BD2CE12C01E0F02E8091EB0C82FDB5C02C |
:1033B00080916F008F7D80936F00E091D508EE23A0 |
:1033C00051F0FF27EE0FFF1FED50F64F80819181E6 |
:1033D000843691055CF480915604883C20F48091F9 |
:1033E00056048C5E01C088EC809356048091D50C05 |
:1033F000682F7727809185058150809385058F3FC1 |
:1034000031F418EAC12E82E08093850502C0C4E23F |
:10341000CC2E40E04C1508F07EC0EA2DFF27EC5280 |
:10342000F34F80818D2111F06E297F298D2D9927F1 |
:10343000880F991FD82E882319F4B1E0DB2EAD0C2C |
:10344000EE0CFF1C20E0E21628E0F20609F061C055 |
:10345000A1E0EA2EF12CCB018050944065E070E0B1 |
:103460000E94B4ABAB2DBB27FD01EA0FFB1FED5053 |
:10347000F64F808191819C01220F331F280F391F45 |
:10348000260F371F37FF02C02D5F3F4FE901D5954B |
:10349000C795D595C795CB0101968C179D0714F458 |
:1034A000219706C061507040C617D7070CF42196CB |
:1034B00080915604833CD8F08D010A0F1B1FF80140 |
:1034C000ED50F64F80819181FE01E81BF90BCF0191 |
:1034D00063E070E00E94B4ABCB01880F991F860FA8 |
:1034E000971F075C154FF8019183808307C0AA0FCF |
:1034F000BB1FA75CB54F11961C921E92EB2DFF27A8 |
:10350000EE0FFF1FED50F64FD183C08360E070E0F7 |
:10351000B3944F5F7FCF1092410110928305EAE090 |
:10352000CDB7DEB70C9428AC0895089540E050E084 |
:1035300080918605909187059C01220F331F280FEB |
:10354000391F80913C0390913D03280F391F37FFAD |
:1035500002C02D5F3F4F35952795359527953093C0 |
:10356000870520938605809142018B32D9F48091A2 |
:103570007D08282F332780914A0490914B04829F25 |
:10358000A001839F500D929F500D1124CA0157FD39 |
:103590004F96AC0125E0559547952A95E1F74B5F8D |
:1035A0005F4F3DC08D32D9F480917D08282F33279D |
:1035B00080914A0490914B04829FA001839F500DFB |
:1035C000929F500D1124CA0157FD4F96AC0195E012 |
:1035D000559547959A95E1F74550504020C0803267 |
:1035E00071F480911D0481FF1AC0C90137FD4F9607 |
:1035F000AC0185E0559547958A95E1F710C08E3569 |
:1036000029F480914504482F552709C0863739F49D |
:1036100080914504992744275527481B590BCA0117 |
:10362000AA2797FDA095BA2F8093A6029093A70290 |
:10363000A093A802B093A90208950F931F930E942C |
:10364000F0838091260190912701AA2797FDA095EC |
:10365000BA2F8093D5019093D601A093D701B09350 |
:10366000D8018091670B9091680BAA27BB278093A4 |
:10367000E8019093E901A093EA01B093EB010AE01D |
:1036800010E080916B0B90916C0BB8010E94A0AB85 |
:10369000CB01AA27BB278093FB019093FC01A09349 |
:1036A000FD01B093FE018091500490915104A091CE |
:1036B0005204B0915304BC01CD0124E630E040E057 |
:1036C00050E00E94E9AB20930E0230930F0240932A |
:1036D0001002509311028091910190919201AA27BA |
:1036E00097FDA095BA2F8093210290932202A09378 |
:1036F0002302B09324028091EE0A9927AA27BB27C0 |
:103700008093340290933502A0933602B09337022F |
:103710008091F00A9927AA27BB27809347029093AC |
:103720004802A0934902B0934A028091F10A909115 |
:10373000F20AB8010E94A0ABCB01AA27BB27809355 |
:103740005A0290935B02A0935C02B0935D02809159 |
:10375000F30A9091F40AAA2797FDA095BA2F8093B7 |
:103760006D0290936E02A0936F02B09370028091ED |
:1037700067059927AA27BB2780938002909381022F |
:10378000A0938202B0938302809135059927AA27DE |
:10379000BB278093930290939402A0939502B093D9 |
:1037A0009602809136059927AA27BB278093B902F4 |
:1037B0009093BA02A093BB02B093BC021F910F91E9 |
:1037C00008954FB720E430E0F8948091C9008F77D6 |
:1037D0008093C9008091C9008F7B8093C90080913C |
:1037E000C9008F7D8093C900832F99278093CD00D6 |
:1037F0002093CC008091C80082608093C80088E14B |
:103800008093C9008091CA008F778093CA0080910D |
:10381000CA008F7B8093CA008091CA008F7D8093FD |
:10382000CA008091CA008F7E8093CA008091CA002E |
:10383000877F8093CA008091C9008B7F8093C900E5 |
:103840008091CA0084608093CA008091CA0082601F |
:103850008093CA008091C80087FF03C08091CE008A |
:10386000F9CF8091C90080688093C9004FBF089547 |
:103870000F931F93CF93DF93482F4F5F893108F049 |
:103880008BC08091F209841720F44F5F4093F209B6 |
:103890004150CB0183539B4268E170E00E94B4AB7E |
:1038A000A42FBB27FD01EA0FFB1FED50F64F8081CF |
:1038B00091819B01281B390BC90137FF03C09095EB |
:1038C00081959F4F069794F480915604883C30F47C |
:1038D00080915604865F8093560408C088EC8093DC |
:1038E000560480916F008F7D80936F00FD01EA0F79 |
:1038F000FB1FED50F64F808191819C01220F331FF9 |
:10390000280F391F260F371F37FF02C02D5F3F4F8B |
:10391000E901D595C795D595C795CB0101968C172B |
:103920009D0714F4219706C061507040C617D70751 |
:103930000CF4219680915604843BD8F08D010A0F37 |
:103940001B1FF801ED50F64F80819181FE01E81BAD |
:10395000F90BCF0163E070E00E94B4ABCB01880F9C |
:10396000991F860F971F075C154FF801918380837D |
:1039700007C0AA0FBB1FA75CB54F11961C921E92E1 |
:10398000E42FFF27EE0FFF1FED50F64FD183C083CA |
:10399000443011F410924101DF91CF911F910F91AA |
:1039A0000895CF93DF9320910E0D822F9927807F6A |
:1039B0009070409709F066C02F3109F040C08091A7 |
:1039C0000F0D809392059091110D90939405809125 |
:1039D000120D80939305992309F054C080916C08CF |
:1039E000282F3327220F331FF901E75CF54F11828F |
:1039F000108280916D08A82FBB27AA0FBB1FFD0165 |
:103A0000E75CF54F1182108280916F08E82FFF2745 |
:103A1000EE0FFF1FCF01875C954FEC0119821882D2 |
:103A20002D50364FE90119821882AD50B64F1196CC |
:103A30001C921E92ED50F64F1182108223C0C22FAD |
:103A4000CF70CA30F8F480910F0D80933A0D8091B9 |
:103A5000100D8093390D8091110D80933C0D809154 |
:103A6000120D80933B0D6091390D70913A0D8C2FA2 |
:103A70000E94389C60913B0D70913C0D8C2F8F5FA4 |
:103A80000E94389CDF91CF910895CF93C82F8F3F2C |
:103A900049F4809195058F3F29F410929705109273 |
:103AA000960532C020919705222339F4CF3111F4C5 |
:103AB00085E001C084E080939805809198059091FD |
:103AC00096058217A0F4892F8095809396058F3FE5 |
:103AD00019F48EEF8093960580919605C81711F41E |
:103AE0000E94D19C10929705109296050BC0E22F70 |
:103AF000FF27E25FF24FC0832F5F209397059C0F53 |
:103B000090939605C0939505CF9108959091910556 |
:103B1000933240F4E92FFF27EA5EF24F80839F5FE4 |
:103B2000909391050895833218F48D5F80939105E9 |
:103B3000089590E2E9E1FDE08FE19193815087FFE4 |
:103B4000FCCF0895CF93CFB723E031E0F894809174 |
:103B5000C9008F778093C9008091C9008F7B8093C3 |
:103B6000C9008091C9008F7D8093C900832F992758 |
:103B70008093CD002093CC008091C8008260809318 |
:103B8000C80088E18093C9008091CA008F77809334 |
:103B9000CA008091CA008F7B8093CA008091CA00BE |
:103BA00080628093CA008091CA0080618093CA00BD |
:103BB0008091CA0088608093CA008091C9008460A7 |
:103BC0008093C9008091CA0084608093CA0080916C |
:103BD000CA0082608093CA008091C80087FF03C03A |
:103BE0008091CE00F9CF8091C90080688093C90090 |
:103BF0008091C90080648093C9000E94999DCFBFC5 |
:103C0000CF910895282F99278F709070892B31F4C8 |
:103C1000209580919005822B8093900508951F92A6 |
:103C20000F920FB60F9211248F93EF93FF93809111 |
:103C3000EA02882309F068C0E0919A05EE2389F42E |
:103C400080919905882369F48091160D882321F0CD |
:103C500081E080939B0505C08091C90081608093BD |
:103C6000C90080919B05882379F4EF5FE0939A0562 |
:103C70008091ED0C8E1720F481E080939B051CC091 |
:103C8000FF27E351F34F3CC080919905882361F4ED |
:103C90008091160D882311F483E003C0813999F4D3 |
:103CA00081E0809399050FC0833099F48091160DBF |
:103CB000882349F01092160D8091C9008E7F809361 |
:103CC000C9008EEF1EC08091C90081608093C90039 |
:103CD0000EC0833261F48091C9008E7F8093C90049 |
:103CE0008FEF8093CE0081E08093EA0218C080912C |
:103CF0009905E82FFF27EA5EF24F8F5F80939905C1 |
:103D000080818093CE000BC01092990510929A0585 |
:103D100010929B058091C90080618093C900FF913A |
:103D2000EF918F910F900FBE0F901F9018956827FD |
:103D300027E0322F67FF06C0862F9927880F991F2B |
:103D4000832702C0862F880F682F215027FFF2CFCC |
:103D5000992708950F931F93CF93DF93062F60E069 |
:103D6000162F601740F4EC0189910E94979E682FEE |
:103D70001F5F1017C8F3862F9927DF91CF911F91EE |
:103D80000F910895DC0190E0961758F48C918032E1 |
:103D900041F09F5F961728F4FD01E90FF11D808126 |
:103DA000F6CF892F99270895A0E0B0E0EAEDFEE96B |
:103DB0000C940DAC8FE98093EE0C80E18093F00CB5 |
:103DC00084EA8093F10C85E58093F20C8DE5809375 |
:103DD000F30C1092F40C80919D05882309F06AC0C1 |
:103DE00080919C0513E1819FC001112463E08254FE |
:103DF0009E4F0E94C29E082F80919C05819FC0010A |
:103E000011246AE08C549E4F0E94C29E982F800F0E |
:103E1000865F8093ED0C2EEFB22EB80EB092EF0CB1 |
:103E200020919C052093F50CE92EFF24C70113E097 |
:103E3000880F991F1A95E1F7802B8093F60C822F3B |
:103E40009927C3E1CC2ED12C8C9D90018D9D300DF6 |
:103E50009C9D300D1124C9018C549E4FA701BC01BB |
:103E600087EF9CE00E94D5A9112780919C05992796 |
:103E70008C9DE0018D9DD00D9C9DD00D1124CE0117 |
:103E800082549E4FA801BC01C7018950934F0E94E4 |
:103E9000D5A90351134F0E0D1F1D6B2D8FEE9CE006 |
:103EA0000E94AA9EF801828780919D058F5F809372 |
:103EB0009D0593C0C090F40C1C2D0E941D9B309159 |
:103EC000EB02303108F058C0B3E1EB2EF12C632F38 |
:103ED000812F9927FC01EE0FFF1FE80FF91FEC0D52 |
:103EE000F11DE351F34F832F99278E9DD0018F9DB4 |
:103EF000B00D9E9DB00D1124AC54BE4FED012D852B |
:103F000074E0880F991F7A95E1F7282B20873E30BF |
:103F100088F42E853F853F798A899927982F8827AD |
:103F20009295990F907E282B392B2187832F9927E3 |
:103F3000828716C0ED012E853F85488959892187E2 |
:103F4000BB27A52F942F832F8287CA01AA27BB27BF |
:103F50008387852F9927AA27BB278487E2E0CE0E87 |
:103F6000862F8F5F682F1F5F163020F4382F803127 |
:103F700008F4AECF8093EB0283E0189FC0011124B8 |
:103F80002C2D280F285F2093ED0C225C2093EF0C42 |
:103F9000812F99278C01000F111F080F191F0C0D7D |
:103FA000111D0351134F2054622F8FEE9CE00E948D |
:103FB000AA9EE80188878091EB02803170F081E051 |
:103FC0008093EB0210929D0580919C058F5F8093FA |
:103FD0009C05803110F010929C05E9E0CDB7DEB76A |
:103FE0000C9429AC8091EA02882309F447C080919F |
:103FF0001D0485FD04C08091EF02882381F082E9D1 |
:104000008093160D83E28093170D8091EF02882331 |
:1040100009F485E58093180D1092EF0202C0809399 |
:10402000160D8091EC028F3071F4809190050E9402 |
:104030007682882341F081E98093160D8093170DD5 |
:1040400081E38093180D1092EA028091C80085FFE9 |
:10405000FCCF8091C9008F7E8093C9008091C900F8 |
:104060008E7F8093C9000E94D49E8EE78093CE00FD |
:10407000809190058093EC02109290050895EF9244 |
:10408000FF920F931F93CF93DF937C018B01EA0183 |
:10409000452B39F0F80181918F01F701099521979E |
:1040A000C9F7E6E0CDB7DEB70C942CACEF92FF92E7 |
:1040B0000F931F93CF93DF937C018B01EA01452B74 |
:1040C00041F0F8010F5F1F4F8491F7010995219787 |
:1040D000C1F7E6E0CDB7DEB70C942CAC0F931F937D |
:1040E000CF938C01C62F161634F480E2F80109959F |
:1040F000C1501C16D4F3CF911F910F9108950F93C7 |
:104100001F93CF938C01C62F161634F480E3F80169 |
:104110000995C1501C16D4F3CF911F910F910895AA |
:10412000A5E3B0E0E6E9F0EA0C9404AC2E96EEAD1F |
:10413000FFAD2E9788249924540180918A05882305 |
:1041400021F42C961FAE1EAE2C97AEE44A2E512CB5 |
:104150004C0E5D1E6F01B60105C0153239F0089492 |
:10416000C11CD11CF60114911123B9F7A601461BFD |
:10417000570B31F02C968EAD9FAD2C970E9456A018 |
:10418000112309F46AC20894C11CD11CFF24FDA6A6 |
:10419000FCA6EFEFEE2EF9A6F6010894C11CD11C87 |
:1041A0001491153721F0812F80628837B1F4F0FE29 |
:1041B0000AC0F20124E030E0420E531E808091805C |
:1041C000A280B3800AC0F20142E050E0440E551EC6 |
:1041D000808191814C01AA24BB24103221F489A54D |
:1041E0008823D1F61DC0133219F458E0F52AD4CF34 |
:1041F0001A3211F01D3291F41A3259F4F20182E0B0 |
:1042000090E0480E591EE081ECA7EE232CF6E195D4 |
:10421000ECA790E1F92AAFEDFA22BECF1B3211F4E0 |
:1042200019A7BACF1E32C1F5F6010894C11CD11CE2 |
:1042300014911A3279F4F20122E030E0420E531E5A |
:10424000408151813FEF4F3F530714F44FEF5FEF31 |
:10425000E42EA2CF40E050E0812F80538A30A0F4BA |
:10426000CA0173E0880F991F7A95E1F7840F951FB3 |
:10427000480F591F410F511D40535040F6010894FB |
:10428000C11CD11C1491E8CF8FEF4F3F580714F495 |
:104290004FEF5FEFE42E85CF103329F4F4FC7CCF91 |
:1042A00090E2F92A79CF812F81538930D8F440E008 |
:1042B00050E0CA0163E0880F991F6A95E1F7840F07 |
:1042C000951F480F591F410F511D40535040F60193 |
:1042D0000894C11CD11C1491812F80538A3048F35B |
:1042E0004CA75FCF183619F4A4E0FA2A55CF1C3634 |
:1042F00019F4B1E0FB2A50CF133661F43E01089463 |
:10430000611C711CF20122E030E0420E531E8081DC |
:1043100089833CC1143421F0143611F0193651F55B |
:10432000143411F431E0F32AF0FE0AC0F20144E043 |
:1043300050E0440E551E80809180A280B3800CC056 |
:10434000F20182E090E0480E591E808191814C017B |
:10435000AA2497FCA094BA2CB7FE0AC0B094A094EB |
:1043600090948094811C911CA11CB11C8DE289A7A2 |
:104370000AE06FC01F3411F01F3631F41F3411F4FE |
:1043800091E0F92A08E064C0103779F4F201A2E064 |
:10439000B0E04A0E5B1E808191814C01AA24BB24AF |
:1043A00000E1B0E4FB2A18E753C01337C1F5F2016E |
:1043B00022E030E0420E531E60807180611471046F |
:1043C00089F43E010894611C711C88E289838EE6A1 |
:1043D000F301818385E78B838CE68C838D8389E26F |
:1043E0008E831F82E7FC13C08E2D992787FD909541 |
:1043F000AC0160E070E0C3010E94C8A9009729F0F9 |
:10440000382E3618E3140CF0C3C03E2CC1C0F301A3 |
:1044100001900020E9F731973E2E3618B9C01535C6 |
:1044200011F0153731F4153511F4F1E0FF2A0AE0E7 |
:104430000FC0183519F0183709F0A0C000E1F3FEDD |
:1044400007C081149104A104B10411F020E4F22A00 |
:1044500019A6EDA6E7FC02C03FEDF32249E2642E67 |
:10446000712C6C0E7D1E81149104A104B10421F401 |
:104470004DA5442309F47BC0802F9927AA27BB2789 |
:104480008EA79FA7A8ABB9AB202E332490E0891646 |
:1044900090E0990691E0A90690E0B90648F0C501C0 |
:1044A000B4012EA53FA548A959A90E94C7AB17C0C2 |
:1044B000AFEF8A169104A104B10449F040F0C401A1 |
:1044C000B1010E94A0AB9B014427552708C0882D4D |
:1044D000602F0E9494AB282F3327442755272AABFF |
:1044E0003BAB4CAB5DAB0A3059F48AA9880F880FFF |
:1044F000880F9AA9990F890F382D381B832F10C068 |
:10450000003139F48AA98295807F482D481B842F79 |
:1045100007C08AA9880F880F880F582D581B852F30 |
:1045200090E02EA53FA548A959A982169306A40696 |
:10453000B50608F091E08AA89BA8ACA8BDA88A306F |
:1045400010F4805D04C0895A183509F48F7DD301B9 |
:104550008E933D01992309F099CF083041F4F3FE81 |
:1045600006C0803321F080E3FD0182933F01CE013C |
:104570000196382E3618F8E23F0E0BC0112309F4CD |
:104580006CC03E010894611C711C198331E0332E0C |
:1045900019A6032D2DA4231827FC222489A58823DE |
:1045A00011F00F5F02C0F6FC0E5F020DEF2CFF242E |
:1045B000C70180739070892B49F48CA5801B682FEC |
:1045C0002C968EAD9FAD2C970E946EA089A5882356 |
:1045D00031F041E050E0BE01675D7F4F0AC0E6FE6A |
:1045E0000EC080E38AA71BA742E050E0BE01665DD3 |
:1045F0007F4F2C968EAD9FAD2C970E943FA0C70198 |
:1046000080739070809749F48CA5801B682F2C963E |
:104610008EAD9FAD2C970E947FA0622D2C968EAD03 |
:104620009FAD2C970E947FA0832D992787FD9095A1 |
:10463000AC01B3012C968EAD9FAD2C970E943FA08C |
:10464000E4FE89CD2CA5201B2CA7622F2C968EADC5 |
:104650009FAD2C970E946EA07ECDE2E1CB5C0C94C6 |
:1046600020AC982F8091150D883A50F48091150D4B |
:10467000E82FFF27E450F44F93838F5F8093150D4D |
:104680000895982F8091150D883A58F48091150D52 |
:10469000E82FFF27E450F44F906893838F5F809357 |
:1046A000150D0895982F80918B05882321F0892F6F |
:1046B0000E9441A30895892F0E9431A30895883A4A |
:1046C00010F48093150D089580E090E2EFEFFBE089 |
:1046D00091938F5F883AE0F308954FB721E830E077 |
:1046E000F8948091C9008F778093C9008091C900A8 |
:1046F0008F7B8093C9008091C9008F7D8093C90012 |
:10470000832F99278093CD002093CC008091C800FF |
:1047100082608093C80088E18093C9008091CA00BC |
:104720008F778093CA008091CA008F7B8093CA00E4 |
:104730008091CA008F7D8093CA008091CA008F7ECD |
:104740008093CA008091CA00877F8093CA008091BD |
:10475000C90084608093C9008091CA0084608093FE |
:10476000CA008091CA0082608093CA008091C9000B |
:1047700081608093C9008091C80087FF03C0809149 |
:10478000CE00F9CF8091C90080688093C9004FBFE7 |
:104790003CE730936E0B2DE72093990B8EE88093C6 |
:1047A0006F0B10928B0B10928A0B1092740B80EE91 |
:1047B0008093710B3093D00B2093FB0B1092DC0B8A |
:1047C0001092DB0B1092DE0B1092DD0B1092E00BBF |
:1047D0001092DF0B84EF91E09093DA0B8093D90B6A |
:1047E0009093D80B8093D70B9093D60B8093D50BD7 |
:1047F0001092D20B89E88093D10B1092F90B109292 |
:10480000FA0B80E98093D30B3093A80C2093D30C40 |
:104810001092AA0C8AE88093A90C1092B00C109206 |
:10482000AF0C1092AE0C1092B20C1092B30C10920E |
:10483000B40C1092B50C1092B70C1092B80C1092E8 |
:10484000B90C1092BA0C1092BE0C1092BD0C1092C2 |
:10485000BC0C1092BB0C80EA8093AB0C30939A0B8B |
:104860002093C50B10929C0B8DE880939B0B1092AC |
:10487000C40B80ED80939D0B8BE78093FC0B80E84D |
:104880008093FD0B1092FE0B8091740B90E2EFEF82 |
:10489000FBE091938F5F883AE0F38DE78093A70C5C |
:1048A0000895CF93C82F80919E05803879F48C2F7E |
:1048B0000E94768580938D0580918D05882331F146 |
:1048C000C093140D80918D058F5F16C08F37F1F462 |
:1048D00080910D0D882329F48C2F80958F70809303 |
:1048E0000D0D0E9451848093FE0B8CEF9BE0909302 |
:1048F0008F0580938E058DEA80938D058091C90088 |
:104900008F7E8093C90082E080938C05C0939E05C2 |
:10491000CF91089530918C05332331F080918C052F |
:10492000815080938C05089580918D05882361F1D5 |
:1049300040918D0590919F05413069F4292F309366 |
:104940009F0580918B05882319F030938B0510C04B |
:1049500040938B050DC0E0918E05F0918F058191FC |
:10496000F0938F05E0938E05282F980F90939F0565 |
:104970008091C80085FFFCCF2093CE0080918D05EB |
:10498000815080938D0508958091C9008061809346 |
:10499000C90008956F927F928F929F92AF92BF92BB |
:1049A000CF92DF92EF92FF920F931F93882361F1D2 |
:1049B000823041F41092A8051092A9051092AA0520 |
:1049C0001092AB0520915004309151044091520453 |
:1049D00050915304DA01C90119E0880F991FAA1FE9 |
:1049E000BB1F1A95D1F780933F0390934003A09388 |
:1049F0004103B09342032093A0053093A105409357 |
:104A0000A2055093A30526C1A0905004B090510474 |
:104A1000C0905204D09053048091A0059091A105BC |
:104A2000A091A205B091A30535014601681A790A43 |
:104A30008A0A9B0A6092A4057092A5058092A60539 |
:104A40009092A705809143039091440384559F4F12 |
:104A50007C010027F7FC0095102F8091A10A90910E |
:104A6000A20A9C01442737FD4095542FC801B70185 |
:104A70000E9475AB97FF04C06150704E8F4F9F4FDF |
:104A8000AB01BC01FDE07595679557954795FA9583 |
:104A9000D1F74C5A5040604070404093AC05509361 |
:104AA000AD056093AE057093AF052091020B309178 |
:104AB000030B37FF02C0215F3F4FE4E03595279598 |
:104AC000EA95E1F78091470390914803829FD001D6 |
:104AD000839FB00D929FB00D1124CD01B7FF02C08E |
:104AE00081509F4FE92FFF27E7FDFA952091000B9A |
:104AF0003091010B37FF02C0215F3F4F84E03595B5 |
:104B000027958A95E1F78091450390914603829F0E |
:104B1000D001839FB00D929FB00D1124CD01B7FF3E |
:104B200002C081509F4F892F990F990BE80FF91FF1 |
:104B3000CF01AA2797FDA095BA2F840F951FA61F16 |
:104B4000B71F8093AC059093AD05A093AE05B093CD |
:104B5000AF05BC01CD012DE030E040E050E00E9407 |
:104B600075AB7B018C01C401B30124EF31E040E05F |
:104B700050E00E9475ABDC01CB01E80EF91E0A1F64 |
:104B80001B1F8091A8059091A905A091AA05B0913D |
:104B9000AB052091B0053091B1054091B20550911F |
:104BA000B305821B930BA40BB50BE80EF91E0A1F6D |
:104BB0001B1FE092A805F092A9050093AA05109387 |
:104BC000AB05D801C70180509E4FAF4FBF4FB7FF15 |
:104BD00006C0D801C70181509A4FAF4FBF4F1AE0AE |
:104BE000B595A795979587951A95D1F78093B005B8 |
:104BF0009093B105A093B205B093B305A092A00520 |
:104C0000B092A105C092A205D092A30520913F03C6 |
:104C1000309140034091410350914203E0903203B0 |
:104C2000F090330300913403109135032E193F099E |
:104C3000400B510B280F391F4A1F5B1F2A0D3B1DCC |
:104C40004C1D5D1D20933F0330934003409341036F |
:104C5000509342038091B0059091B10590933D032C |
:104C600080933C0380913F0390914003A0914103C6 |
:104C7000B0914203BC01CD011F910F91FF90EF90C5 |
:104C8000DF90CF90BF90AF909F908F907F906F906C |
:104C900008952FB740E0F894E0E0F0E081E28093DF |
:104CA00057009491E2E0F0E0809357003491E4E003 |
:104CB000F0E08093570084912FBF9E3199F43639EC |
:104CC00041F4893011F441E00DC08A3059F442E0DA |
:104CD00009C0373939F4863011F443E003C0853018 |
:104CE00009F444E0842F992708959FB7F8948091A0 |
:104CF000C900877F8093C9008091C9008F7E80930F |
:104D0000C9008091C9008F778093C9008091C90044 |
:104D10008F7B8093C9008091C9008F7D8093C900EB |
:104D20009FBF08951F93CF93DF93182F80918A051B |
:104D3000882309F4A7C08091E902181709F4A2C0DA |
:104D400080918905882321F40E9449A680938905D2 |
:104D500082ED91E09093400180933F018BE097E1D9 |
:104D60009F938F93CEE1D9E1DF93CF93E091C70575 |
:104D7000F091C80509950F900F900F900F90812F1B |
:104D80009927AA27BB27FC01099778F5EA55FF4F19 |
:104D90002091C7053091C8050C943BAC87E097E1A2 |
:104DA00002C08EEF96E19F938F93DF93CF93F9012B |
:104DB000099527C089EF96E1F6CF81EF96E1F3CF11 |
:104DC00089EE96E19F938F93DF93CF93F901099535 |
:104DD00088ED91E09093400180933F0112C084EEF2 |
:104DE00096E1E1CF88E197E1DECF8EE197E19F93F5 |
:104DF0008F93DF93CF93E091C705F091C805099594 |
:104E000010E00F900F900F900F90809189058430E3 |
:104E100011F0823011F50E9475A6812F81508330E8 |
:104E200018F40E9475792CC0143019F40E94A29DC8 |
:104E300027C0183019F40E94949A22C0153019F432 |
:104E40000E94E19B1DC0163019F40E946DA318C08A |
:104E50001730B1F40E944B9913C0112389F084E3F9 |
:104E600097E19F938F938EE199E19F938F93E091C8 |
:104E7000C705F091C80509950F900F900F900F90FE |
:104E80001093E902DF91CF911F9108950F931F9323 |
:104E9000082F81E080938A054091E802E4E9F6E179 |
:104EA00020E030E05FE4849199272F5F3F4F829F9D |
:104EB000B001839F700D929F700D112446275150B1 |
:104EC000319657FFF0CF4093E802ECE6F6E120E0A0 |
:104ED00030E057E2849199272F5F3F4F829FB001C6 |
:104EE000839F700D929F700D11244627515031966B |
:104EF00057FFF0CF4093E80280918905882321F481 |
:104F00000E9449A68093890580E990EA9093C8059C |
:104F10008093C7058091E802833459F088E190E0DE |
:104F200029E20FB6F894A895809360000FBE2093F5 |
:104F30006000063091F08FE497E19F938F938EE1AC |
:104F400099E19F938F93E091C705F091C80509956A |
:104F50000F900F900F900F90EECF80910301893149 |
:104F600058F1809188058823A9F48CE697E19F93F6 |
:104F70008F938EE199E19F938F93E091C705F09114 |
:104F8000C805099587E1809303010F900F900F905A |
:104F90000F9012C015BC873119F48093030106C02D |
:104FA00087E08093140186E080931301E091E6028C |
:104FB000F091E7028DEF09950E944A0C81E690E09E |
:104FC0009F938F9386E090E09F938F9382E090E091 |
:104FD0009F938F93809103016AE00E9494AB892F85 |
:104FE00099279F938F93809103010E9494AB9927F7 |
:104FF0009F938F9386EA97E19F938F930EE119E138 |
:105000001F930F93E091C705F091C805099584E9B6 |
:1050100096E19F938F931F930F93E091C705F091B3 |
:10502000C80509958CE696E19F938F931F930F9384 |
:10503000E091C705F091C80509950E944A0C83ECE0 |
:105040008093810080916F00806280936F008DB7A4 |
:105050009EB746968DBF1F910F9108958091D308FA |
:105060008D3338F08091ED0A87FD03C08CE3809387 |
:10507000D30880918108882331F08055853618F057 |
:105080008FE780938108089580918A05882309F429 |
:1050900087C08091C40581508093C405882309F09E |
:1050A00069C089E18093C4058091D3088E3338F0BC |
:1050B0008091ED0A87FD03C08DE38093D308809132 |
:1050C00056048238A0F580911E0490911F04805DE3 |
:1050D000974020F080916D0B843620F41092C60525 |
:1050E0001092C5052091C5053091C60521153105E1 |
:1050F000B1F1C90101979093C6058093C505419709 |
:1051000098F18091ED0A84FF2FC080911C04846087 |
:1051100080931C048091FB0A87FF26C08091700554 |
:10512000882311F13093C6052093C5051DC08091D9 |
:105130005604853BC8F09091D30884E1989FC00144 |
:10514000112440962091C5053091C60528173907CE |
:1051500030F42F5F3F4F3093C6052093C5058091F3 |
:105160001C048B7F80931C048091E802833411F02F |
:1051700010928A059091E902963019F40E948AA44F |
:1051800008958091ED02882321F081508093ED02F3 |
:1051900008958BE48093ED02943011F40E94F29F05 |
:1051A00008951F920F920FB60F9211242F933F93E1 |
:1051B0004F935F936F937F938F939F93AF93BF931F |
:1051C000EF93FF939091CE008091FB028823B9F07A |
:1051D0009093C6008091FB02823009F03FC09F3F50 |
:1051E000E9F58FEF94E3ACE0B0E0C297A109B10913 |
:1051F000B7FFFBCF80910A068093CE002FC020918D |
:10520000E902822F8150833020F4892F0E94CC79CB |
:1052100025C0243021F4892F0E94029E1FC028300F |
:1052200021F4892F0E94959A19C080910301893138 |
:1052300020F080918805882389F0253021F4892F7A |
:105240000E94459D0BC0263021F4892F0E9451A455 |
:1052500005C0273019F4892F0E94A499FF91EF917E |
:10526000BF91AF919F918F917F916F915F914F917E |
:105270003F912F910F900FBE0F901F901895002413 |
:1052800022273327442751E0BB27EE27FF27A0E141 |
:10529000660F771F881F991F001C221F331F441F92 |
:1052A000660F771F881F991F001C221F331F441F82 |
:1052B0002AF4050E2B1F3E1F4F1F04C0051A2B0B8F |
:1052C0003E0B4F0B550FBB1FEE1F587F556047FD20 |
:1052D0005250AA95E9F6E695B7955795E695B79594 |
:1052E0005795852F9B2F08952227332741E0552777 |
:1052F00068E0880F991F221F331F880F991F221FF4 |
:10530000331F1AF4240F351F02C0241B350B440F22 |
:10531000551F487F456037FD42506A9551F75695B5 |
:10532000479556954795842F0895AA2797FF04C05F |
:10533000809590958A1F9A1F77FF04C0609570959D |
:105340006A1F7A1F669F9001779FA001679F300DAB |
:10535000411D5A1F300D411D5A1F889FF001999F12 |
:105360002E0F3F1F401D511D899F300D411D5A1F9B |
:10537000300D411D5A1FCA01B901112480CFFB0114 |
:10538000DC0102C005900D9241505040D8F70895BD |
:10539000FC014150504030F001900616D1F7319792 |
:1053A000CF010895882799270895FB01DC0102C0E9 |
:1053B00001900D9241505040D8F70895A0E0B0E020 |
:1053C000E4EEF9EA0C940CAC6C017B01EA015901A2 |
:1053D00021978FEFCF3FD80789F086010894C11C31 |
:1053E000D11CC7010894E11CF11CF5010995F801D5 |
:1053F00080832197FFEFCF3FDF0779F7EAE0CDB752 |
:10540000DEB70C9428ACCF92DF92EF92FF920F930D |
:105410001F937C016B01FB010995082FC7010196C1 |
:10542000F6010995182FC8011F910F91FF90EF9079 |
:10543000DF90CF900895A0E0B0E0E1E2FAEA0C94AA |
:105440000EAC8C017B01EA01690121978FEFCF3F00 |
:10545000D80771F0F70121917F01C8010F5F1F4F3D |
:10546000622FF60109952197FFEFCF3FDF0791F7F4 |
:10547000E8E0CDB7DEB70C942AACCF92DF92EF9282 |
:10548000FF920F931F936C018B017A01FA0109952A |
:10549000812F9927682FC6010196F70109951F9161 |
:1054A0000F91FF90EF90DF90CF9008955058BB2759 |
:1054B000AA270ED0E0C0D1D030F0D6D020F031F401 |
:1054C0009F3F11F41EF4C6C00EF4E095E7FBBCC08C |
:1054D000E92FE2D080F3BA176207730784079507B4 |
:1054E00018F071F49EF5FAC00EF4E0950B2EBA2F69 |
:1054F000A02D0B01B90190010C01CA01A0011124DA |
:10550000FF27591B99F0593F50F4503E68F11A1685 |
:10551000F040A22F232F342F4427585FF3CF469516 |
:1055200037952795A795F0405395C9F77EF41F1638 |
:10553000BA0B620B730B840BBAF09150A1F0FF0F02 |
:10554000BB1F661F771F881FC2F70EC0BA0F621FEE |
:10555000731F841F48F4879577956795B795F795DE |
:105560009E3F08F0B3CF9395880F08F09927EE0F70 |
:1055700097958795089598D088F09F5790F0B92F08 |
:105580009927B751A0F0D1F0660F771F881F991F98 |
:105590001AF0BA95C9F712C0B13081F09FD0B1E0CE |
:1055A00008959CC0672F782F8827B85F39F0B93FDE |
:1055B000CCF3869577956795B395D9F73EF490959A |
:1055C0008095709561957F4F8F4F9F4F0895E89418 |
:1055D00009C097FB3EF490958095709561957F4F3B |
:1055E0008F4F9F4F9923A9F0F92F96E9BB279395E9 |
:1055F000F695879577956795B795F111F8CFFAF4F9 |
:10560000BB0F11F460FF1BC06F5F7F4F8F4F9F4F29 |
:1056100016C0882311F096E911C0772321F09EE887 |
:10562000872F762F05C0662371F096E8862F70E0ED |
:1056300060E02AF09A95660F771F881FDAF7880FC7 |
:105640009695879597F9089597F99F6780E870E098 |
:1056500060E008959FEF80EC089500240A941616E8 |
:10566000170618060906089500240A941216130650 |
:10567000140605060895092E0394000C11F48823DE |
:1056800052F0BB0F40F4BF2B11F460FF04C06F5FFA |
:105690007F4F8F4F9F4F089557FD9058440F551FD0 |
:1056A00059F05F3F71F04795880F97FB991F61F0A4 |
:1056B0009F3F79F087950895121613061406551F1B |
:1056C000F2CF4695F1DF08C0161617061806991F87 |
:1056D000F1CF86957105610508940895E894BB277C |
:1056E00066277727CB0197F90895629FD001739FB2 |
:1056F000F001829FE00DF11D649FE00DF11D929F6E |
:10570000F00D839FF00D749FF00D659FF00D9927AC |
:10571000729FB00DE11DF91F639FB00DE11DF91FD0 |
:10572000BD01CF0111240895991B79E004C0991F90 |
:10573000961708F0961B881F7A95C9F780950895EB |
:10574000AA1BBB1B51E107C0AA1FBB1FA617B707A7 |
:1057500010F0A61BB70B881F991F5A95A9F78095C3 |
:105760009095BC01CD01089597FB092E07260AD01C |
:1057700077FD04D0E5DF06D000201AF4709561951E |
:105780007F4F0895F6F7909581959F4F0895A1E278 |
:105790001A2EAA1BBB1BFD010DC0AA1FBB1FEE1FAB |
:1057A000FF1FA217B307E407F50720F0A21BB30BF6 |
:1057B000E40BF50B661F771F881F991F1A9469F772 |
:1057C00060957095809590959B01AC01BD01CF01CE |
:1057D000089597FB092E05260ED057FD04D0D7DF7C |
:1057E0000AD0001C38F450954095309521953F4FD4 |
:1057F0004F4F5F4F0895F6F790958095709561959E |
:105800007F4F8F4F9F4F08952F923F924F925F92FD |
:105810006F927F928F929F92AF92BF92CF92DF92C0 |
:10582000EF92FF920F931F93CF93DF93CDB7DEB725 |
:10583000CA1BDB0B0FB6F894DEBF0FBECDBF0994B9 |
:105840002A88398848885F846E847D848C849B8410 |
:10585000AA84B984C884DF80EE80FD800C811B811E |
:10586000AA81B981CE0FD11D0FB6F894DEBF0FBE4D |
:10587000CDBFED010895EE0FFF1F0590F491E02DCF |
:045880000994FFCFB9 |
:1058840004035E0A010164FF010020FFFFC01FC082 |
:105894001F0101070610F40101737373FF03007DF8 |
:1058A4000000C409C4099600124167696C6500517F |
:1058B400756164726F0000000000000064000CD287 |
:1058C4000101200B050000ECFF0002040607080894 |
:1058D400080706040200FEFCFAF9F8F8F8F9FAFCE5 |
:1058E400FE000204060708086440415A4655326423 |
:1058F40064640A02969696960840403A103038013D |
:1059040032FF037F0090D0030090D00300320020C8 |
:1059140064FFFFE8036464200B0A0D0B0E100B0AEE |
:105924000C0F0B1110FA20680101010101010101A2 |
:10593400011501014D4B2020202020202020202073 |
:1059440020010000000000566F6C74616765202020 |
:105954002056202001000000000143757272656E1C |
:1059640074202020412020010000000001436170C8 |
:1059740061636974792020416820010000000002FD |
:10598400416C74697475646520206D2020010000E9 |
:10599400000000436F6D70617373202020B02020DD |
:1059A4000100000000005361747320202020202097 |
:1059B4002020200100000000005370656564202051 |
:1059C4002020206D2F7301000000000044697374CF |
:1059D400616E636520206D202001000000000048F6 |
:1059E4006F6D652D4469722020B0202001000000F5 |
:1059F40000006D61782E54656D702E20B043200137 |
:105A040000000000004D61676E2E6669656C6425B8 |
:105A14002020010000000000566172696F202020E0 |
:105A240020202020200100000000004572726F72C7 |
:105A3400436F6465202020200100000000004C61B9 |
:105A4400746974756465202020202009000000001A |
:105A5400004C6F6E6769747564652020202009000E |
:0E5A640000000000F7FFFCFF70FF01010F645F |
:00000001FF |
/tags/V2.06a/Hex-Files/Flight-Ctrl_MEGA644_V2_06a.hex |
---|
0,0 → 1,3949 |
:100000000C94A9050C94EF050C94EF050C94EF05E6 |
:100010000C94EF050C94EF050C94EF050C94EF0590 |
:100020000C94EF050C944F190C94EF050C94EF050C |
:100030000C94712F0C94EF050C94EF050C94EF05C4 |
:100040000C94EF050C94EF050C9472150C94EF05CD |
:100050000C94090C0C94EF050C94D30B0C94EF0545 |
:100060000C941F1B0C94EF050C94662A0C94EF055E |
:100070000C94AD770C94EF050C940C72441B491B47 |
:100080004E1B571B6E1B851B951BA51BE91BD41D07 |
:10009000851BBF1CD01CE41C021D1F1D6A1DB61D44 |
:1000A000C71F942007218021B8215B221A237723C0 |
:1000B000F22323249924C724F42468636E64F36430 |
:1000C0000C6447657965A7633B640A0D3D3D3D3D82 |
:1000D0003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D50 |
:1000E0003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D007D |
:1000F0000A0D426174743A002025642043656C6CDB |
:10010000732000204C6F77207761726E696E673ABA |
:100110002025642E2564560020204175746F2D43E0 |
:10012000483A2025642E2564560020204175746FBE |
:100130006C616E64696E673A2025642E25645600F2 |
:100140000A0D4F6C642046432048617264776172E7 |
:1001500065206E6F7420737570706F7274656420A3 |
:1001600062792074686973204672696D776172657F |
:1001700021000A0D466F756E6420424C2D43747247 |
:100180006C3A20002564000A0D0A0D2121204D49FA |
:100190005353494E4720424C2D4354524C3A20254C |
:1001A00064202121000A0D43616C696272617469E7 |
:1001B0006E672070726573737572652073656E73F8 |
:1001C0006F722E2E004F4B0A0D000A0D466C6967A8 |
:1001D00068742D74696D65202575206D696E2054D5 |
:1001E0006F74616C3A2575206D696E00416E676CA5 |
:1001F000654E69636B20202020202020416E676CB3 |
:1002000065526F6C6C202020202020204163634EBB |
:1002100069636B202020202020202020416363522E |
:100220006F6C6C20202020202020202059617747EF |
:1002300079726F202020202020202020416C7469BA |
:1002400074756465205B302E316D5D204163635AA7 |
:1002500020202020202020202020202047617320E3 |
:10026000202020202020202020202020436F6D707F |
:100270006173732056616C7565202020566F6C7415 |
:10028000616765205B302E31565D202052656365C5 |
:1002900069766572204C6576656C20204779726FAF |
:1002A00020436F6D70617373202020204D6F746F39 |
:1002B0007220312020202020202020204D6F746FBC |
:1002C0007220322020202020202020204D6F746FAB |
:1002D0007220332020202020202020204D6F746F9A |
:1002E0007220342020202020202020203136202081 |
:1002F00020202020202020202020202031372020D6 |
:1003000020202020202020202020202031382020C4 |
:1003100020202020202020202020202031392020B3 |
:1003200020202020202020202020202053657276AD |
:100330006F2020202020202020202020486F76655C |
:100340007267617320202020202020204375727264 |
:10035000656E74205B302E31415D202043617061F9 |
:1003600063697479205B6D41685D20204865696729 |
:10037000687420536574706F696E74203235202064 |
:100380002020202020202020202020203236202045 |
:100390002020202020202020202020203237202034 |
:1003A0002020202020202020202020204932432DE2 |
:1003B0004572726F7220202020202020424C204C59 |
:1003C000696D697420202020202020204750535F31 |
:1003D0004E69636B20202020202020204750535F4F |
:1003E000526F6C6C202020202020202021212120F1 |
:1003F000494E434F4D50415449424C452021212103 |
:10040000002E005B25695D005B25695D002B204D9A |
:10041000696B726F4B6F70746572202B0048573A8E |
:100420005625642E25642053573A25642E253032F4 |
:10043000642563200053657474696E673A256420EF |
:100440002573004D69786572204572726F722100C4 |
:100450004861726477617265204572726F722031F3 |
:100460003A2564202121004D697373696E6720422B |
:100470004C2D4374726C3A25642021210021204EBA |
:10048000432D4552523A2025326420212000493222 |
:1004900043204552524F5221212100424C2D536599 |
:1004A0006C6674657374204572723A253264004834 |
:1004B00065696768743A2020253569005365747052 |
:1004C0006F696E743A253569005072657373757281 |
:1004D000653A253569004F66667365743A202025B4 |
:1004E0003569006163742E2062656172696E670010 |
:1004F0004E69636B3A202020202020253569005268 |
:100500006F6C6C3A20202020202025356900436F35 |
:100510006D706173733A202020253569004B256981 |
:100520003A25346920204B25693A25346920004E4C |
:10053000693A2534692020526F3A253469200047F2 |
:10054000733A253469202047693A253469200050E0 |
:10055000313A253469202050323A25346920005040 |
:10056000333A253469202050343A25346920004735 |
:1005700079726F202D2053656E736F72004E696320 |
:100580006B2025346920282533692E2578290052CF |
:100590006F6C6C2025346920282533692E25782935 |
:1005A00000596177202025346920282533692900E6 |
:1005B000414343202D2053656E736F72004E696373 |
:1005C0006B2025346920282533692900526F6C6C13 |
:1005D00020253469202825336929005A202020202D |
:1005E00025346920282533692900566F6C746167AA |
:1005F000653A2020202533692E2531695600437540 |
:100600007272656E743A2020202533692E25316977 |
:100610004100506F7765723A2020202020253469F0 |
:1006200057004469736368617267653A20253569CC |
:100630006D41680052656365697665720052432DAD |
:100640005175616C6974793A202534690052432DE3 |
:100650004368616E6E656C733A25346900556E644B |
:100660006572766F6C7461676573202000576172E4 |
:100670006E3A202532642E25645600486F6D653A27 |
:10068000202532642E256456004C616E643A202584 |
:1006900032642E25645600506F746925693A202013 |
:1006A00025336900506F746925693A202025336924 |
:1006B00000466C696768742D54696D65202000548C |
:1006C0006F74616C3A2535756D696E004163743ADB |
:1006D00020202535756D696E002872657365742953 |
:1006E000000A0D47656E65726174696E6720646506 |
:1006F0006661756C7420506172616D6574657220FD |
:10070000536574202564000A0D5573696E67205087 |
:100710006172616D65746572205365742025640093 |
:100720000A0D47656E65726174696E67206465665F |
:1007300061756C74204D69786572205461626C65D6 |
:10074000000A0D4D697865722D436F6E6669673AD0 |
:10075000202725732720282575204D6F746F72730D |
:1007600029000A0D414343206E6F742063616C6958 |
:10077000627261746564210D0A0000008F001E0121 |
:10078000AD013B02CA025803E603740402058F055B |
:100790001B06A7063307BE074808D2085B09E30912 |
:1007A0006B0AF20A780BFD0B810C040D860D070E07 |
:1007B000870E060F840F00107B10F5106E11E511E7 |
:1007C0005B12CF124213B31323149214FE146A1552 |
:1007D000D3153B16A11605176717C81727188318D6 |
:1007E000DE1837198E19E319361A871AD61A231B01 |
:1007F0006E1BB61BFD1B411C831CC31C001D3C1D36 |
:10080000751DAB1DE01D121E421E6F1E9A1EC31EDB |
:10081000E91E0D1F2E1F4D1F691F841F9B1FB01F38 |
:10082000C31FD31FE11FEC1FF51FFB1FFF1F00207D |
:1008300006010000BF6A00020101C46B010302024D |
:10084000586C02040303176F03050707006D0406C5 |
:1008500008082B6D05000606B56C04070707566DE2 |
:10086000050808082E6E2532692E253169560025A7 |
:100870003364256320253033646D25630053746130 |
:10088000747573004552524F523A2025326420004D |
:10089000253469202532693A2530326900253469CA |
:1008A0006D256300520025336920253369202533E7 |
:1008B00069202533690025336920253369202533D4 |
:1008C00069202533690054656D70657261747572B5 |
:1008D0006573202020200025634320202020200055 |
:1008E0002532692E25316956202533692E25316937 |
:1008F000410025346957202536696D4168004D61F6 |
:10090000676E65743A25336925252025336925638B |
:1009100000496E636C692E3A2533692563202825CA |
:10092000692920004C6F616420576179706F696E8E |
:1009300074730028466978656429202020202020CF |
:10094000004C6F616420576179706F696E74730039 |
:100950002852656C6174697665292020200046491B |
:100960005820576179706F696E7473004649583A20 |
:100970002573006E6F2053442D436172640023255C |
:1009800032642057503A002532642F256420002D10 |
:100990002D2F2D2D002D3E0020200052656C6174FE |
:1009A00069766520575073200052656C3A257300B4 |
:1009B0006E6F2053442D43617264006E6F20475068 |
:1009C000532D4669780023253264205750733A002E |
:1009D0002532642F256420002D2D2F2D2D002D3E36 |
:1009E000002020002532756D2F73205361743A2545 |
:1009F00064200020203344004E6F46780044475066 |
:100A00005300486F6D653A2533646D2025336425A6 |
:100A100063202563004E6F204E6176694374726CCB |
:100A200021000A0D7777772E4D696B726F4B6F70CF |
:100A30007465722E64652028632920486953797390 |
:100A400074656D7320476D6248000A0D74686520F7 |
:100A5000757365206F66207468697320736F6674A0 |
:100A600077617265206973206F6E6C792070657292 |
:100A70006D6974746564200A0D6F6E206F7269670A |
:100A8000696E616C204D696B726F4B6F707465722B |
:100A90002D48617264776172650055736572004814 |
:100AA0006F5454205634004143542044534C004A60 |
:100AB000657469005370656B7472756D0050504DAC |
:100AC000000A0D52656365697665723A2000756E9D |
:100AD0006B6E6F776E2E205573696E672050504D88 |
:100AE0002E2E2E006E6F7420737570706F72746589 |
:100AF0006420627920686172647761726521000AFE |
:100B00000D202D204C4942204E4F5420434F4D5034 |
:100B1000415449424C452021212121000A0D466CB7 |
:100B200069676874436F6E74726F6C0A0D48617206 |
:100B300064776172653A25642E25640A0D536F66E9 |
:100B400074776172653A5625642E253032642563C8 |
:100B5000200011241FBECFEFD0E1DEBFCDBF11E0DA |
:100B6000A0E0B1E0E4EFF5EF02C005900D92A23BEA |
:100B7000B107D9F719E0A2EBB1E001C01D92AA3884 |
:100B8000B107E1F74AEAE2E0F0E081E28093570042 |
:100B9000549120EF37EFA3EAB3E09FE0F9012F5F14 |
:100BA0003F4F84918D93915097FFF8CF573911F4AF |
:100BB0000000FECFE3EAF3E09EE0819148274095F4 |
:100BC000915097FFFACF8091B203481721F057391F |
:100BD00011F40000FECF0E9424070C94F97A0C94C3 |
:100BE00000008AEC90E09F938F9385E892E19F93B9 |
:100BF0008F93E091B603F091B70309950F900F9092 |
:100C00000F900F90089580915B06E82FFF27EE0F5D |
:100C1000FF1FEE51F84F808191818D5E9F4F14F040 |
:100C200010920401808191818A5B9F4FCCF4809166 |
:100C300004018823A9F481E0809304018091EA03F0 |
:100C40008F5F8093EA03853038F088EE93E09093CD |
:100C5000EB018093EA01089566E970E00E94493152 |
:100C60000895CF93DF93C82F882311F180EF90E090 |
:100C70009F938F9385E892E19F938F93E091B603C2 |
:100C8000F091B703099580912301909124016BE2C3 |
:100C900070E00E946C7ACB018F5F809300010F900F |
:100CA0000F900F900F90873018F086E0809300012E |
:100CB00080917E06823328F590910001989F802DC7 |
:100CC000112480930201CC23F1F068EC70E0892FAD |
:100CD0000E9449318091000199279F938F9388EF5B |
:100CE00090E09F938F9385E892E19F938F93E0919B |
:100CF000B603F091B70309958DB79EB706968DBFE1 |
:100D000002C0809302019091CE06923340F480910C |
:100D10000001899F802D11248093BC0102C0909313 |
:100D2000BC013091CF06323340F480910001839FA3 |
:100D3000802D11248093BB0102C03093BB018091B0 |
:100D4000BC0190910201981720F491509093BC013E |
:100D50009F5F8091BB01891720F091509093BB0158 |
:100D60009F5F8091BC012091BB01821728F0332343 |
:100D700019F021502093BC01CC2309F462C0892FC3 |
:100D80006AE00E944C7A892F99279F938F938091D4 |
:100D900002010E944C7A99279F938F9383E091E000 |
:100DA0009F938F93C5E8D2E1DF93CF93E091B60391 |
:100DB000F091B70309958DB79EB708968DBF8091C6 |
:100DC000BB018823E9F06AE00E944C7A892F9927B9 |
:100DD0009F938F938091BB010E944C7A99279F9398 |
:100DE0008F9388E191E09F938F93DF93CF93E0916E |
:100DF000B603F091B70309958DB79EB708968DBFDE |
:100E00008091BC018823E9F06AE00E944C7A892F26 |
:100E100099279F938F938091BC010E944C7A9927C8 |
:100E20009F938F938AE291E09F938F93DF93CF9369 |
:100E3000E091B603F091B70309958DB79EB7089678 |
:100E40008DBFDF91CF910895CFEFD0E1DEBFCDBF51 |
:100E500088249924C1E07C2E14B815B88AE08AB998 |
:100E60008FE58BB9B7EEEB2EB3E0FB2E2EEC3FEF08 |
:100E7000E20EF31EF7FEFACF189B06C0199B02C0C4 |
:100E80008DE005C08BE003C0199B04C084E1809312 |
:100E9000030107C08AE0809303018EE38AB987E4E7 |
:100EA0008BB981E887B93E9A8FEF88B98BE184B915 |
:100EB00081E085B9469A84B7877F84BF80916000BE |
:100EC0008861809360001092600084EC99E09093B8 |
:100ED000EB018093EA0110929B0210929A02109209 |
:100EE000E7071092E60710929D0210929C02109262 |
:100EF0009F0210929E0220910301243128F084EC7D |
:100F000094E0A0E0B0E004C08BE095E0A0E0B0E0A9 |
:100F10008093400190934101A0934201B09343011B |
:100F20002898293111F4299A01C029980E94C316E2 |
:100F30000E9494160E948D120E94382F0E947F1AE0 |
:100F400081E00E94192A0E940E620E94137086E0BE |
:100F50000E94567680910301893111F4299A01C0CB |
:100F6000299878940E943A29809103018431E8F409 |
:100F700088E190E02CE00FB6F894A895809360008B |
:100F80000FBE2093600080E491E09F938F9385E8EB |
:100F900092E19F938F93E091B603F091B703099587 |
:100FA0000F900F900F900F90EECF809139028260DA |
:100FB0008093390210923C020E94863C84EF91E0BB |
:100FC0000E945A167C018091390280FD05C0C7013C |
:100FD0000E9463168823B9F382E791E09F938F9371 |
:100FE000A5E8AA2EA2E1BA2EBF92AF92E091B60375 |
:100FF000F091B703099580EA9FE00E945A167C01A0 |
:10100000C0E0D0E00F900F900F900F9008E717E02E |
:10101000F0EFCF2EF6E0DF2E0E94863C8091390261 |
:1010200080FD05C0C7010E9463168823B9F3F6014D |
:1010300080811816ACF40BC00E94863C8091390266 |
:1010400080FD05C0C7010E9463168823B9F3C7015C |
:101050000E946316882321F4F8018081882364F7B5 |
:10106000F801808187FF19C02196DF93CF932197E4 |
:1010700084E891E09F938F93BF92AF92E091B60383 |
:10108000F091B70309958091B4018F5F8093B4010B |
:101090002DB73EB72A5F3F4F2DBF219684E090E0E9 |
:1010A000C80ED91E075F1F4FCC30D10508F4B4CF4E |
:1010B000C0E0D0E005E717E0E0EFEE2EE6E0FE2E20 |
:1010C000F801838187FD1DC0F70180811816CCF4DB |
:1010D0002196DF93CF93219787E891E09F938F9399 |
:1010E00085E892E19F938F93E091B603F091B70367 |
:1010F000099582E08093E8012DB73EB72A5F3F4F04 |
:101100002DBFF801838180788383219624E030E02D |
:10111000E20EF31E075F1F4FCC30D10588F20E940C |
:10112000F105909159068091B401981728F48091A7 |
:10113000D00380618093D003993020F088E08093C1 |
:101140003B0102C090933B0185EA91E09F938F930E |
:10115000C5E8D2E1DF93CF93E091B603F091B703F6 |
:10116000099588EE93E00E945A167C010E94BD1AF0 |
:101170000F900F900F900F90C7010E946316882365 |
:10118000D9F385EC91E09F938F93DF93CF93E09118 |
:10119000B603F091B703099580E00E94FE312898CC |
:1011A00080ED97E09093EB018093EA0185E58093D1 |
:1011B000EC038EE090E00E945E279927182F00270D |
:1011C0008FE090E00E945E27080F111D1093BA0176 |
:1011D0000093B9018AE090E00E945E279927182FBA |
:1011E00000278BE090E00E945E27080F111D1093EE |
:1011F000B8010093B7010F900F900F900F900F5F01 |
:101200001F4F39F08091B9019091BA018F5F9F4FC4 |
:1012100041F41092BA011092B9011092B8011092E3 |
:10122000B7018091B7019091B8019F938F938091FE |
:10123000B9019091BA019F938F938AEC91E09F93AB |
:101240008F93DF93CF93E091B603F091B7030995A5 |
:101250000E94411F88E893E190933A0180933901FD |
:10126000C1E0C093EB038C2F0E9431068091810670 |
:101270000E94A9750E94F10580ED97E00E945A1620 |
:101280007C018AEF90E00E945A1683E08093B305B8 |
:101290001092B3018091D4062DB73EB7285F3F4F1F |
:1012A0002DBF84FF02C0C093BD0112BC11BC809150 |
:1012B000BF01882311F04798FECF8091EE0188236B |
:1012C00009F460C280911501882309F45BC2F89487 |
:1012D0008091EE0181508093EE0178948091EA0331 |
:1012E000882319F00E94030602C00E9433400E9426 |
:1012F000863C289880918E02882331F080918E025E |
:10130000815080938E020EC080916F008062809326 |
:101310006F001092E3071092E2078091D00388607B |
:101320008093D0038091390190913A010197909375 |
:101330003A01809339018091390190913A01892BCA |
:1013400021F080913A028823C9F18091390190916E |
:101350003A01892BD9F40E94442A85E090E09093C9 |
:101360003A01809339018091ED059091EE05019647 |
:101370009093EE058093ED058091D003816080937A |
:10138000D0038091B40582608093B40580910B01F5 |
:1013900090910C018F5F9F4F91F480918D02882373 |
:1013A00071F088EA91E69093EB018093EA0180E87E |
:1013B00090E090930C0180930B0101C028980E944B |
:1013C00025778091EE01882309F0DAC18091E90147 |
:1013D000882311F40E942F6280911101882311F05B |
:1013E0000E941D170E94D7120E945E0EC7010E9424 |
:1013F0006316882309F4C0C184E190E0E80EF91E69 |
:101400000E94DB1680913A02882329F480915C09BE |
:101410008E3150F405C08091D00382608093D00358 |
:101420008091B40582600FC08091EA019091EB0138 |
:10143000892B59F48091390190913A01079728F04E |
:101440008091B4058D7F8093B4058091BD01882380 |
:1014500061F080918E02873940F01092BD0188E8DA |
:1014600093E19093EB018093EA0180910601882338 |
:1014700021F08150809306012EC08093F6031092D4 |
:1014800061021092600210925F0210925E0210924E |
:101490005D0210925C0280918E028823E1F48091BB |
:1014A0000B0190910C018F5F9F4FA9F42091BD011A |
:1014B000223089F088E99AE39093EB018093EA0166 |
:1014C00080E09CE090930C0180930B01222319F0A3 |
:1014D00082E08093BD0180919F01893C70F0815032 |
:1014E00080939F018091D0038B7F8093D003809164 |
:1014F000D30381608093D30351C08091E90888238E |
:10150000F9F08091D00384608093D00389E08093C8 |
:101510006E0380910B0190910C018F5F9F4F81F4BE |
:1015200080918D02882361F088E99AE39093EB0122 |
:101530008093EA0180E098EA90930C0180930B017C |
:10154000109261031092600310925F0310925E0389 |
:1015500010925D031092DC088FEF80935109109276 |
:101560001B0910921A0910921D0910921C098FEF85 |
:101570009FEF909319098093180910927D021092A1 |
:101580007E0210927F02109280021092810280915E |
:10159000D3038E7F8093D30310929F016091020149 |
:1015A000262F332780912301909124012817390792 |
:1015B000F4F08091550280628093550280910B0176 |
:1015C00090910C018F5F9F4F91F480912301909136 |
:1015D00024010B9764F080E797E19093EB018093EF |
:1015E000EA0180E093E090930C0180930B018091DD |
:1015F000BE018F5F8093BE01813309F074C01092E9 |
:10160000BE018091550281FF0AC08091B501909181 |
:10161000B60101969093B6018093B50104C05AEAD1 |
:10162000852E55E0952E809156029091570280505C |
:10163000944008F049C02091FC053091FD0540918F |
:10164000FE055091FF0580911B0190911C01A09116 |
:101650001D01B0911E01281739074A075B0764F482 |
:101660008091FC059091FD05A091FE05B091FF05CC |
:101670000596A11DB11D20C02091FC053091FD05EE |
:101680004091FE055091FF0580911B0190911C0136 |
:10169000A0911D01B0911E0182179307A407B50701 |
:1016A0009CF48091FC059091FD05A091FE05B09100 |
:1016B000FF050597A109B1098093FC059093FD05ED |
:1016C000A093FE05B093FF05862F992701962091E0 |
:1016D000230130912401821793072CF48091550245 |
:1016E0008F7D809355020894811C911C82E7881697 |
:1016F0008BE0980609F040C0882499242091B90114 |
:101700003091BA012F5F3F4F3093BA012093B90156 |
:101710008091B7019091B80101969093B8018093A0 |
:10172000B701832F9927682F8EE090E00E946627EB |
:101730008091B9019091BA019070682F8FE090E08C |
:101740000E9466278091B7019091B801892F99274F |
:10175000682F8AE090E00E9466278091B7019091FF |
:10176000B8019070682F8BE090E00E94662784E1BA |
:1017700090E00E945A167C010E9454670E944D70AE |
:1017800071107A94772039F40E941867882319F031 |
:101790008CE0782E8ACD8091E901882309F085CDEF |
:1017A0000E942F6282CD1F920F920FB60F921124CA |
:1017B0008F939F93EF93FF93809108018823E1F427 |
:1017C0008091D9019091DA0101969093DA0180938A |
:1017D000D901FC01E952FB4FE081ED3019F08C3D5D |
:1017E000910539F41092DA011092D90181E08093C9 |
:1017F0000801E093C60004C01092DA011092D901EA |
:10180000FF91EF919F918F910F900FBE0F901F90BE |
:1018100018951F920F920FB60F9211242F933F939A |
:101820004F935F936F937F938F939F93AF93BF93E8 |
:10183000CF93EF93FF9390E08091BF01813029F423 |
:101840008091C6008093CE00D1C08091BF018230CC |
:1018500029F48091C6008093F903C8C08091C60026 |
:101860008093D1015091DF015C3D10F09093E00135 |
:101870008091D1018D3009F06AC08091E001823001 |
:1018800009F065C09093E001852F992787509C4F00 |
:10189000FC01329740812091DB013091DC01241B57 |
:1018A0003109DC0111978C91281B3109C9019F7006 |
:1018B0009093DC018093DB0146E0969587954A95ED |
:1018C000E1F7982F935C9093DD012F733070235CC8 |
:1018D0002093DE018081981729F48C91281711F448 |
:1018E00091E006C090E08091CE018F5F8093CE01A1 |
:1018F0008091D001882309F079C0992309F476C03A |
:1019000081E08093D001580F5093CD015150E52FC5 |
:10191000FF27E750FC4F8DE080838091FB038235E9 |
:1019200009F064C0C0918D02CC2309F05FC00E9411 |
:10193000411F88E190E02CE00FB6F894A8958093C1 |
:1019400060000FBE20936000C093E8014FC020915B |
:10195000E001822F992781309105F9F082309105BD |
:101960001CF4892B21F040C0029711F13DC08091F9 |
:10197000D101833239F48091D001882319F481E0B8 |
:101980008093E0018091D1018093F90381E08093FD |
:10199000DF018091D101992722C02F5F2093E001C0 |
:1019A000E52FFF27E750FC4F8091D101808309C0CC |
:1019B000E52FFF27E750FC4F8091D10180835C3DEC |
:1019C00020F45F5F5093DF0102C01092E00120918C |
:1019D000D1018091DB019091DC01820F911D9093E8 |
:1019E000DC018093DB0102C01092E001FF91EF91D6 |
:1019F000CF91BF91AF919F918F917F916F915F91A7 |
:101A00004F913F912F910F900FBE0F901F901895FF |
:101A1000AC01A0E0B0E09D01A817B90748F4E7EDDC |
:101A2000F4E08191280F311D1196A417B507C8F372 |
:101A30003F70FD01E952FB4FC90156E0969587952D |
:101A40005A95E1F7835C80831196FD01E952FB4FC3 |
:101A50002F733070822F835C8083A852BB4F8DE040 |
:101A60008C93109208018091D7048093C60008954A |
:101A7000A0E0B0E0EEE3FDE00C94C57A2C859D85F6 |
:101A80000E85BB2483E28093D7049F599093D8049A |
:101A90002093D90433E0E32EF12C002309F49EC0F7 |
:101AA000CF84D888BE016D5E7F4FA989BA89015065 |
:101AB000109709F493C01097B9F0F601EB0DF11DE2 |
:101AC000B3949081119791F4002349F1FB016E5F6B |
:101AD0007F4FDB01C080D1806E5F7F4F0D90BC9146 |
:101AE000A02DBB24015002C090E019C01097B9F09E |
:101AF000F601EB0DF11DB3944081119791F4002391 |
:101B000041F1FB016E5F7F4FDB01C080D1806E5FD2 |
:101B10007F4F0D90BC91A02DBB24015002C040E02E |
:101B200018C01097B1F0F601EB0DF11DB3941081C0 |
:101B3000119781F4002371F0FB013296DB01CD9007 |
:101B4000DC90BF016E5F7F4FA081B181BB2401504B |
:101B500001C010E0F701E952FB4F892F8695869569 |
:101B6000835C80830894E11CF11CF701E952FB4F70 |
:101B7000892F99278370907024E0880F991F2A95E8 |
:101B8000E1F755279A0194E0369527959A95E1F764 |
:101B9000822B835C80830894E11CF11CF701E952DD |
:101BA000FB4F4F705070440F551F440F551F812F2E |
:101BB000992726E0969587952A95E1F7842B835CF3 |
:101BC00080830894E11CF11CF701E952FB4F1F735D |
:101BD000135C10830894E11CF11C6ACFC7010E94BA |
:101BE000080DE9E00C94E17AA3E07A2F4091CD0151 |
:101BF0004650442309F458C0E72FFF27E750FC4F15 |
:101C000080818D537F5FE72FFF27E750FC4F2081B6 |
:101C10002D537F5FE72FFF27E750FC4F30813D5367 |
:101C20007F5FE72FFF27E750FC4F60816D537F5F99 |
:101C30009927880F991F880F991F522F52955F700F |
:101C4000582B822F99278F709070F4E0880F991F7E |
:101C5000FA95E1F7232F26952695282B832F992790 |
:101C600083709070E6E0880F991FEA95E1F7682B82 |
:101C700041504F3FC9F0EA2FFF27E750FC4F5083F8 |
:101C8000AF5F41504F3F81F0EA2FFF27E750FC4FF5 |
:101C90002083AF5F41504F3F39F0EA2FFF27E750D5 |
:101CA000FC4F6083AF5FA5CF8CEF93E09093CC01A6 |
:101CB0008093CB01A350A093CA010895A2E0B0E0A5 |
:101CC000E4E6FEE00C94CB7A8091D001882309F4FD |
:101CD00018C40E94F40D8091FA03823609F0E4C220 |
:101CE0008091FB0399278037910509F4AFC08137B4 |
:101CF0009105C4F48A36910509F441C28B369105E9 |
:101D000044F48B34910571F18636910509F46AC16A |
:101D1000CBC28D36910509F469C08E36910509F460 |
:101D20004DC0C2C28437910541F1853791054CF40D |
:101D30008137910509F491C08337910509F4EAC010 |
:101D4000B3C28737910509F4DCC1883791052CF4BB |
:101D50008537910509F498C1A7C28937910509F41F |
:101D60007DC1A2C2E091CB01F091CC018081918133 |
:101D700090938F0180938E0197C28091CD01A091A5 |
:101D8000CB01B091CC01853140F080E1E4EDF3E08E |
:101D90000D9001928A95E1F70DC08D919D910D9066 |
:101DA000BC91A02D8093D4039093D503A093D60328 |
:101DB000B093D70380EF8093C8014BC08091080196 |
:101DC0008823E1F38DE490E09F938F9383EE96E078 |
:101DD0009F938F9381E08F938F938EE48F930E94D4 |
:101DE000380D8DB79EB707968DBF5EC2A091CB010F |
:101DF000B091CC011C91113081F48DE4E3EEF6E05A |
:101E00000D9001928A95E1F70E94752819838091BF |
:101E1000D0038F7E8093D00301C019828091080186 |
:101E20008823E1F381E090E09F938F93CE010196A8 |
:101E30009F938F9381E08F938F938DE48F930E9474 |
:101E4000380DADB7BEB71796ADBF2EC281E08093F7 |
:101E5000D3018FEF8093060127C280918D028823E2 |
:101E6000E1F5E091CB01F091CC01E0818E2F8A5019 |
:101E70008A3058F48983882311F481E003C08630C6 |
:101E800010F085E0898361E00EC08E2F84518A3086 |
:101E900070F48983882311F481E003C0863010F048 |
:101EA00085E0898360E089810E94F72812C0E98378 |
:101EB000EF3F19F40E94D82889838981882311F47F |
:101EC00081E003C0863010F085E0898389810E941B |
:101ED0007C2780E00E94310603C00E94D8288983B5 |
:101EE000809108018823E1F388E890E09F938F9325 |
:101EF0008AE596E09F938F9381E090E09F938F9384 |
:101F0000CE0101969F938F9382E08F9381E08F9310 |
:101F100081E52DC12091CB013091CC01D9018C916B |
:101F20008150853008F045C0F9018181863609F07D |
:101F300040C080918D028823E1F52F5F3F4F88E8F4 |
:101F4000EAE5F6E0D9010D9001928A95E1F7F901F1 |
:101F500082910E94E72780919B069927AA27BB2799 |
:101F6000BC01CD0124EC39E040E050E00E942D7A24 |
:101F7000DC01CB018093860190938701A0938801B7 |
:101F8000B093890180919C069927AA27BB27BC01A1 |
:101F9000CD010E942D7ADC01CB01809382019093C8 |
:101FA0008301A0938401B09385010E94D82889837E |
:101FB00001C01982809108018823E1F381E090E05B |
:101FC0009F938F93CE0101969F938F9381E08F9380 |
:101FD0008F9383E58F930E94380D8DB79EB7079638 |
:101FE0008DBF2BC080918D02882309F05DC1E091E7 |
:101FF000CB01F091CC01E0818E2F8150853018F417 |
:102000008E2F0E947C270E94D82889838091080106 |
:102010008823E1F381E090E09F938F93CE010196B6 |
:102020009F938F9381E08F938F9386E48F930E9489 |
:10203000380DADB7BEB71796ADBF10918D02112305 |
:1020400041F46EE670E089810E944931812F0E943F |
:102050003106809181060E94A97526C119822981C5 |
:10206000A091CB01B091CC01E2EEF7E08D919927E0 |
:1020700087FD909593A382A3822F8F5F8983282F5A |
:1020800032968C3098F310C1E091CB01F091CC01E5 |
:1020900080810E948C2E8A83882319F481E08983B1 |
:1020A00001C01982809108018823E1F388E090E063 |
:1020B0009F938F938DE697E09F938F9321E030E07D |
:1020C0003F932F938091CB019091CC019F938F935D |
:1020D0003F932F93CE0102969F938F933F932F931D |
:1020E000CE01820F931F9F938F9384E08F9381E0A3 |
:1020F0008F9385E58F930E94380DEDB7FEB77396E9 |
:102100003CC08091CA01893008F4CEC02091CB0137 |
:102110003091CC012F5F3F4F88E0ADE6B7E0F90189 |
:1021200001900D928A95E1F7D9018E910E94DC2DE4 |
:102130008A83882319F481E0898301C01982809100 |
:1021400008018823E1F321E030E03F932F93CE0193 |
:1021500002969F938F933F932F93CE01820F931FED |
:102160009F938F9382E08F9381E08F9387E58F9386 |
:102170000E94380DEDB7FEB73B96EDBF95C080913C |
:102180008D02882309F090C00E9460758983823097 |
:1021900019F0843009F088C020E430E0F894809190 |
:1021A000C1008F738093C1008091C9008F738093A9 |
:1021B000C9008091C100877E8093C1008091C900D1 |
:1021C000877E8093C9008091C80087FF03C08091FB |
:1021D000CE00F9CF8091C00087FF03C08091C60078 |
:1021E000F9CFE091CB01F091CC01E081E13021F415 |
:1021F00082E08093BF012EC0E43611F421E830E084 |
:1022000081E08093BF01832F99278093CD00209395 |
:10221000CC008091CD008093C5008091CC0080934C |
:10222000C4008091CA008F7D8093CA008091CA004B |
:102230008F7E8093CA008091C9008B7F8093C900F4 |
:102240008091CA0084608093CA008091CA00826035 |
:102250008093CA008091CA00877F8093CA008091D2 |
:10226000C200877F8093C2008091C9008E7F8093D7 |
:10227000C9008091C10088618093C1008091C9002C |
:1022800088618093C9008091C10080688093C100FB |
:102290008091C90080688093C90010926E001092EE |
:1022A0006F001092700078948091FB039927843618 |
:1022B000910509F4BBC085369105ACF481369105D2 |
:1022C00009F46FC0823691052CF48B34910509F422 |
:1022D0005DC00FC18236910509F470C08336910547 |
:1022E00009F47FC006C18C36910509F4EDC08D3626 |
:1022F00091054CF48736910509F4F8C088369105AC |
:1023000009F4B2C0F6C08437910529F086379105EB |
:1023100009F4E8C0EEC08091CD01A091CB01B0914D |
:10232000CC01803140F080E1E4EDF3E00D900192CA |
:102330008A95E1F70DC08D919D910D90BC91A02DD6 |
:102340008093D4039093D503A093D603B093D7037F |
:10235000809108018823E1F31F92809105018F93FA |
:1023600084E58F930E94380D8AEF8093C8018FEF28 |
:102370008093060180EA9FE00E945A169093C10163 |
:102380008093C0010F900F900F90B3C0E091CB01EC |
:10239000F091CC018081918190938F0180938E0187 |
:1023A000A8C0E091CB01F091CC018081809307011E |
:1023B000803298F08FE1809307010FC0A091CB018C |
:1023C000B091CC018BE0ECEEF3E00D9001928A9598 |
:1023D000E1F78091F5038093F5058FEF8093060177 |
:1023E00088C08091C4019091C501892B89F4E09146 |
:1023F000CB01F091CC01E081EE2351F08AE0E89F1F |
:10240000C00111240E945A169093C7038093C603FB |
:10241000E091CB01F091CC0190818AE0989FC001BE |
:1024200011249093C5018093C40115C08FEF809350 |
:102430000601E091CB01F091CC0190818AE0989F58 |
:10244000C00111249093C7018093C601892B19F014 |
:1024500081E08093D50180EA9FE00E945A16909314 |
:10246000C1018093C00145C08FEF80930601E091C8 |
:10247000CB01F091CC01908197FD08C082E0809360 |
:10248000D2011092C3011092C2011AC0909580919E |
:102490003202892B8093320291818AE0989FC00199 |
:1024A00011249093C3018093C20184E08093D201F0 |
:1024B00080EA9FE00E945A169093C1018093C00168 |
:1024C00081E08093D60115C08FEF80930601E091E3 |
:1024D000CB01F091CC0180818093330281E0809325 |
:1024E000D70107C081E08093D40103C081E08093CD |
:1024F000D8011092D0011092CC011092CB01109211 |
:10250000CA01E3E0CE5F0C94E77A982F8091C00077 |
:1025100085FFFCCF9093C60008950F931F9388E129 |
:102520008093C1008091C00082608093C000809140 |
:10253000C10080688093C1008091C1008064809355 |
:10254000C10000E010E00093C5008AE290E08093B3 |
:10255000C4008091C6019091C7010E945A169093C1 |
:10256000C9038093C8038CED90E00E945A169093A3 |
:10257000F8038093F70382E08093CA0386E0809398 |
:10258000CB031092CE038BE08093CC031092CD034B |
:102590001092D203809103018093D1031093CC0158 |
:1025A0000093CB011092CA011F910F910895A0E1F1 |
:1025B000B0E0EDEDF2E10C94CA7A80910801882335 |
:1025C00009F48CC28091C0019091C1010E946316F0 |
:1025D000882361F01092C3011092C2011092C701CA |
:1025E0001092C6011092C5011092C4018091C201DF |
:1025F0009091C301892B41F08091D5049091D6042C |
:102600000E946316882329F48091D601882309F457 |
:1026100060C080910801882309F45BC08091D201D9 |
:1026200009E016E08430A8F00E94571F80E590E092 |
:102630009F938F931F930F9381E08F938F9388E4E1 |
:102640008F930E94380D2DB73EB7295F3F4F2DBFA6 |
:1026500034C0109234028CEE93E09F938F938AE4FF |
:102660009FE19F938F93E091B603F091B703099593 |
:1026700084E190E09F938F931F930F9381E090E00C |
:102680009F938F9382ED91E09F938F9382E08F933E |
:1026900081E08F9388E48F930E94380D8091D2015E |
:1026A000982F8F5F8093D2012DB73EB7215F3F4FA8 |
:1026B0002DBF943010F01092D2018091C201909100 |
:1026C000C3010E945A169093D6048093D5041092A9 |
:1026D000D6018091D701882351F180910801882388 |
:1026E00031F10E94571F80E590E09F938F9389E01E |
:1026F00096E09F938F9321E030E03F932F9385E204 |
:1027000091E09F938F933F932F9383E392E09F9366 |
:102710008F9383E08F9381E08F938CE48F930E945B |
:10272000380D1092D7018DB79EB70F968DBF80914F |
:10273000D4018823D1F0809108018823B1F08AE088 |
:1027400090E09F938F938AEC93E09F938F9381E027 |
:102750008F938F9386E58F930E94380D1092D4014A |
:102760002DB73EB7295F3F4F2DBF8091D8018823F9 |
:10277000D9F0809108018823B9F08BE090E09F9315 |
:102780008F938CEE93E09F938F9381E08F93809152 |
:1027900005018F9387E48F930E94380D1092D80122 |
:1027A0008DB79EB707968DBF8091C6019091C701E6 |
:1027B000892B41F08091C8039091C9030E94631650 |
:1027C000882321F48091D501882341F1809108016B |
:1027D000882321F10E945B3082E490E09F938F93E5 |
:1027E00083EB95E09F938F9381E08F938F9384E4A5 |
:1027F0008F930E94380D1092D5012DB73EB7295FF7 |
:102800003F4F2DBF8091C6019091C701009731F0D5 |
:102810000E945A169093C9038093C8038091C40103 |
:102820009091C501892B09F497C08091C6039091BE |
:10283000C7030E946316882309F48EC080910801A3 |
:10284000882309F489C08091EF089091F008909353 |
:10285000B9038093B8038091F1089091F2089093A6 |
:10286000BB038093BA032091D1083091D2084091E4 |
:10287000D3085091D408DA01C90163E0880F991F89 |
:10288000AA1FBB1F6A95D1F7820F931FA41FB51F04 |
:10289000820F931FA41FB51F209140013091410169 |
:1028A0004091420150914301BC01CD010E94A17AA7 |
:1028B0003093BD032093BC038091B0029091B1028C |
:1028C000A091B202B091B30249E0B595A795979552 |
:1028D00087954A95D1F78093BE038091AC02909181 |
:1028E000AD02A091AE02B091AF0239E0B595A795C7 |
:1028F000979587953A95D1F78093BF038091B80259 |
:102900009091B902A091BA02B091BB0229E0B595AD |
:10291000A795979587952A95D1F78093C0038EE068 |
:1029200090E09F938F9388EB93E09F938F9381E048 |
:102930008F938F9383E48F930E94380D8091C4010D |
:102940009091C5010E945A169093C7038093C603C5 |
:102950008DB79EB707968DBF809107018F3F79F1A4 |
:10296000992704E0880F991F0A95E1F784519E4F3B |
:1029700040E150E0BC01CE0101960E94807880E1E8 |
:1029800090E09F938F93CE0101969F938F9381E068 |
:1029900090E09F938F9387E091E09F938F9382E0E5 |
:1029A0008F9381E08F9381E48F930E94380D8FEF96 |
:1029B000809307012DB73EB7255F3F4F2DBF809114 |
:1029C000F5058823C9F0809108018823A9F081E0EA |
:1029D00090E09F938F9385EF95E09F938F9381E095 |
:1029E0008F938F9382E48F930E94380D1092F50598 |
:1029F0008DB79EB707968DBF8091D3018823D1F004 |
:102A0000809108018823B1F086E490E09F938F9332 |
:102A100082EE97E09F938F9381E08F938F9380E571 |
:102A20008F930E94380D1092D3012DB73EB7295FC6 |
:102A30003F4F2DBF8091F7039091F8030E946316DA |
:102A4000882309F44BC080910801882309F446C00B |
:102A500080919F01882361F58091EF089091F008A3 |
:102A60009093E5038093E4038091F1089091F2083C |
:102A70009093E7038093E60380916A028093E803D2 |
:102A8000809169028093E90388E090E09F938F939F |
:102A900084EE93E09F938F9381E08F9383E08F93F5 |
:102AA0008BE68F930E94380D8DB79EB707968DBF2A |
:102AB0008091EA03853018F086E08093EA038091E4 |
:102AC000E701882319F083E690E002C087EE93E0E7 |
:102AD0000E945A169093F8038093F703E4E0C05FD6 |
:102AE0000C94E67A1F920F920FB60F9211242F9337 |
:102AF0003F935F936F937F938F939F93AF93BF9316 |
:102B0000EF93FF938091E901882329F08091E901F7 |
:102B100081508093E90180918103882319F08150CD |
:102B2000809381038091F10181508093F1018F3F67 |
:102B300009F051C089E08093F1018091EF019091FB |
:102B4000F00101969093F0018093EF0180911201C2 |
:102B50008F5F817080931201882349F48091EE0188 |
:102B6000843028F48091EE018F5F8093EE013499D8 |
:102B700003C081E08093E7018091EA019091EB012D |
:102B8000892B11F18091EA019091EB010B9750F0A4 |
:102B90008091EA019091EB010A979093EB01809369 |
:102BA000EA0104C01092EB011092EA018091EA015F |
:102BB0009091EB0120910B0130910C018223932322 |
:102BC000892B41F0479A07C08FEF9FEF90930C013C |
:102BD00080930B0147988091E701882309F45AC03C |
:102BE00020919F01222309F055C08091BF0883FFE7 |
:102BF00051C086B19927FC01E071F07084FF13C0C9 |
:102C00008091EC019091ED0101969093ED018093FC |
:102C1000EC018091EC019091ED01895E9340D0F13F |
:102C20002093E70137C08091EC019091ED01892B51 |
:102C300069F18091EC019091ED018A56914030F557 |
:102C40008091EC019091ED0169E270E00E94587A68 |
:102C50008091EC019091ED01860F971F9093ED010B |
:102C60008093EC018091EC019091ED010B9750F075 |
:102C70008091EC019091ED010A9790938F018093E0 |
:102C80008E0104C0F0938F01E0938E011092ED014C |
:102C90001092EC01FF91EF91BF91AF919F918F91B5 |
:102CA0007F916F915F913F912F910F900FBE0F9089 |
:102CB0001F9018952091EF013091F001280F391FD6 |
:102CC000C901019608952091EF013091F001821B16 |
:102CD000930B892F99278695807490700895CF93D0 |
:102CE000DF930E945A16EC01CE010E9463168823DE |
:102CF000D9F3DF91CF910895CF93DF930E945A16B5 |
:102D0000EC0109C080911501882329F090931501E9 |
:102D10008FEC80937A00CE010E946316982F88234F |
:102D200089F3DF91CF9108959FB7F8945F983E9A09 |
:102D3000469A8091B0008F708093B0008091B0006F |
:102D400083608093B0008091B1008B738093B10059 |
:102D50008091B1008B608093B1001092B2008FEF30 |
:102D60008093B3008091B00080688093B000809120 |
:102D700070008A7F809370008091700082608093E1 |
:102D800070009FBF08958AE090E00E945A169093C9 |
:102D9000F7058093F60582E085BD83EB84BD8FEF58 |
:102DA00088BD84EB87BD86E086BD80916E00816022 |
:102DB00080936E0008958091D30620916D0182FF6B |
:102DC00030C090918A068CE3989FB00111249091B5 |
:102DD000890680E5989FA0011124922F905897FDB5 |
:102DE0009D5F9595959586E09802C00111242091EC |
:102DF000090130910A01281B390B30930A012093F5 |
:102E00000901421753072CF050930A01409309011E |
:102E100008952617370784F070930A01609309011B |
:102E20000895822F992736E0880F991F3A95E1F788 |
:102E300090930A01809309010895EF92FF920F93F6 |
:102E40001F93CF93DF9380919106E82FFF27EA5BD2 |
:102E5000FE4F9681C08180911101813009F021C11E |
:102E60008091D50687FF05C0C0E0D0E0E0E0F0E04B |
:102E700046C0892F992787FD9095A92FB92F2091BA |
:102E8000E8023091E9024091EA025091EB02BC0164 |
:102E9000CD010E942D7A97FF04C061587F4F8F4F5C |
:102EA0009F4F7B018C0187E015950795F794E79478 |
:102EB0008A95D1F78C2F992787FD9095A92FB92F47 |
:102EC0002091E0023091E1024091E2025091E30250 |
:102ED000BC01CD010E942D7A97FF04C061587F4F3D |
:102EE0008F4F9F4FB7E09595879577956795BA95E2 |
:102EF000D1F7F801E701C61BD70BE80BF90B2091BE |
:102F0000680330916903C901A3E0880F991FAA954E |
:102F1000E1F7821B930BAA2797FDA095BA2FC81B38 |
:102F2000D90BEA0BFB0B80916B019927AA27BB27D2 |
:102F3000BC01CD019E01AF010E942D7A97FF04C014 |
:102F400061507E4F8F4F9F4FFC01EB0179E0F5956B |
:102F5000E795D795C7957A95D1F71091D3066091EB |
:102F6000090170910A0112FF05C07093100160936E |
:102F70000F0118C040910F015091100180919006EF |
:102F8000282F3327CB01841B950BB9010E946C7A43 |
:102F900080910F0190911001860F971F909310015F |
:102FA00080930F0110FF14C080910F0190911001C8 |
:102FB00097FD0F9664E0959587956A95E1F7AA27A6 |
:102FC00097FDA095BA2FC80FD91FEA1FFB1F15C088 |
:102FD00080910F019091100197FD0F9654E0959507 |
:102FE00087955A95E1F7AA2797FDA095BA2F8C1BD4 |
:102FF0009D0BAE0BBF0BFD01EC012091C5062223FA |
:1030000021F133278091E3019091E401829FA00197 |
:10301000839F500D929F500D1124CA01AA2797FD3E |
:10302000A095BA2F8C0F9D1FAE1FBF1F2F5F3F4F64 |
:10303000442737FD4095542FBC01CD010E94A17A51 |
:103040003093E4012093E30104C0D093E401C093E2 |
:10305000E30180918906282F3327220F331F220F87 |
:10306000331F8091E3019091E401821793077CF074 |
:1030700080918A06282F3327220F331F220F331FF8 |
:103080008091E3019091E4012817390724F43093EB |
:10309000E4012093E301809111018F5F809311017E |
:1030A000F9C0892F992787FD9095A92FB92F2091D5 |
:1030B000E0023091E1024091E2025091E302BC0152 |
:1030C000CD010E942D7A97FF04C061587F4F8F4F2A |
:1030D0009F4F7B018C0187E015950795F794E79446 |
:1030E0008A95D1F78C2F992787FD9095A92FB92F15 |
:1030F0002091E8023091E9024091EA025091EB02FE |
:10310000BC01CD010E942D7A9B01AC0197FF04C048 |
:1031100021583F4F4F4F5F4FC7E055954795379523 |
:103120002795CA95D1F72E0D3F1D401F511F809145 |
:103130006A019927AA27BB27BC01CD010E942D7ADD |
:1031400097FF04C061507E4F8F4F9F4FFC01EB01F2 |
:10315000B9E0F595E795D795C795BA95D1F78091E0 |
:103160006C019927A6E0880F991FAA95E1F7409175 |
:103170000D0150910E01209190063327841B950B71 |
:10318000B9010E946C7A80910D0190910E01860F19 |
:10319000971F90930E0180930D018091D30681FFBC |
:1031A00014C080910D0190910E0197FD0F9674E06F |
:1031B000959587957A95E1F7AA2797FDA095BA2F5F |
:1031C000C80FD91FEA1FFB1F15C080910D019091F8 |
:1031D0000E0197FD0F9664E0959587956A95E1F746 |
:1031E000AA2797FDA095BA2F8C1B9D0BAE0BBF0B8A |
:1031F000FD01EC012091C606222321F133278091A5 |
:10320000E1019091E201829FA001839F500D929F66 |
:10321000500D1124CA01AA2797FDA095BA2F8C0F33 |
:103220009D1FAE1FBF1F2F5F3F4F442737FD4095A7 |
:10323000542FBC01CD010E94A17A3093E20120936A |
:10324000E10104C0D093E201C093E10180918D06B9 |
:10325000282F3327220F331F220F331F8091E101C4 |
:103260009091E201821793077CF080918E06282FBF |
:103270003327220F331F220F331F8091E1019091DA |
:10328000E2012817390724F43093E2012093E10189 |
:1032900010921101E6E0CDB7DEB70C94E47A1F92EC |
:1032A0000F920FB60F9211242F933F934F935F937A |
:1032B0008F939F93EF93FF938091F201882309F0FE |
:1032C000DDC08091B00086FF9FC08091B0008F7BF1 |
:1032D0008093B000E091F50120918F06EE23D9F4A0 |
:1032E00033278DED96E0289FA001299F500D389F30 |
:1032F000500D1124CA012091F3013091F401821B79 |
:10330000930B9093E6018093E5011092F4011092E3 |
:10331000F301469AB0C02E1738F48AE090E09093FB |
:10332000E6018093E501A7C089EA93E09093E60166 |
:103330008093E5018E2F992783309105D9F0843051 |
:10334000910534F48130910549F0029761F020C075 |
:103350008430910591F0059799F01AC08091E301AE |
:103360009091E40104C08091E1019091E2018755C0 |
:103370009E4F1DC080919B0805C08091740802C0BB |
:103380008091A4089927880F991F880F991FEFCF64 |
:10339000FF27EE0FFF1FEE51F84F20813181220FE2 |
:1033A000331F8091E5019091E601820F931F909366 |
:1033B000E6018093E5018091E5019091E60155E0F9 |
:1033C0008D3D950718F08CED95E005C0875791402D |
:1033D00030F487E791E09093E6018093E501209136 |
:1033E000E5013091E6012C5B30403093E6012093FB |
:1033F000E5018091F3019091F401820F931F909366 |
:10340000F4018093F30137C08091B0008064809311 |
:10341000B0008CEB90E09093E6018093E501809101 |
:10342000F3019091F40184549F4F9093F4018093A1 |
:10343000F3018091E801882321F080918E02882396 |
:1034400021F48091E801823011F4469801C0469A37 |
:103450008091F5018F5F8093F501282F33278091AC |
:103460008F0699270196821793072CF481E08093A9 |
:1034700011011092F50181E08093F2012091E501A4 |
:103480003091E60141E02F37340730F08FEF809321 |
:10349000B3002F5F30400FC02F3F3105C9F0C0F09F |
:1034A000A9014F5F50404F37510550F480E8809399 |
:1034B000B300205830403093E6012093E50112C05C |
:1034C0008FEF8093B3005093E6014093E5010AC06B |
:1034D0008091E5018093B3001092E6011092E5011E |
:1034E0001092F201FF91EF919F918F915F914F9117 |
:1034F0003F912F910F900FBE0F901F901895109233 |
:103500007C008FEC80937A00089580914D02609149 |
:1035100013017091140120910202882379F0CB01EC |
:10352000AA27BB27332727FD3095432F532FBC01F4 |
:10353000CD010E942D7ADC01CB0116C084E0660F1C |
:10354000771F8A95E1F7CB01AA27BB27332727FDF1 |
:103550003095432F532FBC01CD010E942D7ADC0101 |
:10356000CB010497A109B1098093FA019093FB0163 |
:10357000A093FC01B093FD010895CF93DF931092C7 |
:1035800002020E94851A83E090E00E945E27C82F05 |
:10359000DD27C03FD10508F42A96C7BD8C2F809542 |
:1035A00088BD86E990E00E947C1680911901909177 |
:1035B0001A018152934010F0C0EFD0E0C630D1051F |
:1035C00010F1C7BD8C2F809588BD84E690E00E94E5 |
:1035D0007C1681E094E09F938F9385E892E19F931E |
:1035E0008F93E091B603F091B7030995809119018B |
:1035F00090911A010F900F900F900F90815293406D |
:1036000010F42197DBCFC09306066C2F83E090E087 |
:103610000E9466278091670680FF0AC08091060697 |
:103620008A508C3D28F08091CF0380648093CF0333 |
:103630008CE291E00E947C16DF91CF9108951F9259 |
:103640000F920FB60F9211242F933F934F935F93D6 |
:103650006F937F938F939F93AF93BF93CF93DF939A |
:10366000EF93FF9380911A02282F33274427552781 |
:103670008F5F80931A02F9012231310508F0DEC311 |
:10368000E25CFF4F0C94F37A80917800909179007E |
:1036900046C080917800909179007BC1809178003C |
:1036A0009091790090931E0280931D028BC18091AE |
:1036B000F2029091F3022091780030917900821B00 |
:1036C000930B9093F9058093F8058091F8059091FC |
:1036D000F905909328028093270292C18091780087 |
:1036E000909179002091F4023091F502821B930BA6 |
:1036F0009093050680930406809104069091050638 |
:1037000090932A02809329029BC380912102909179 |
:1037100022022091780030917900820F931F9093BC |
:1037200022028093210281E08CC380911F0290913C |
:1037300020022091780030917900820F931F90939E |
:10374000200280931F0284E07CC38091300290911C |
:103750003102892B91F42091780030917900C901D0 |
:10376000E3E0880F991FEA95E1F7820F931F820F1C |
:10377000931F909331028093300220917800309112 |
:103780007900C90173E0880F991F7A95E1F7820FDC |
:10379000931F820F931F20913002309131028217C4 |
:1037A000930718F02E5F3F4F02C0225030403093F5 |
:1037B00031022093300280913002909131026FE10A |
:1037C00070E00E94587A709324016093230185E091 |
:1037D00038C380917800909179009093FB05809395 |
:1037E000FA058091FA059091FB054091EE02509107 |
:1037F000EF02841B950B2091ED02332727FD3095B6 |
:10380000821B930B909308028093070280914D02D4 |
:10381000882309F06DC080910702909108020297F9 |
:103820007CF122E04E3E52070CF062C020911B0258 |
:1038300030911C022B5F3F4F30931C0220931B02E0 |
:10384000255030408091560290915702845F9140FC |
:1038500030F4215F3F4F30931C0220931B02809174 |
:103860001B0290911C02853691050CF441C04F5FFC |
:103870005F4F5093EF024093EE028456904034C065 |
:1038800080910702909108028F5F9F4F8CF562E054 |
:10389000473256076CF120911B0230911C022550D3 |
:1038A000304030931C0220931B022B5F3F4F8091CE |
:1038B000560290915702845F914030F42F5030406F |
:1038C00030931C0220931B0280911B0290911C02DA |
:1038D0002FEF8C39920764F4415050405093EF021F |
:1038E0004093EE028C599F4F90931C0280931B02D1 |
:1038F00080910702909108029C01442737FD409572 |
:10390000542F8091A8029091A902A091AA02B0918F |
:10391000AB02820F931FA41FB51F8093A802909340 |
:10392000A902A093AA02B093AB022091A802309101 |
:10393000A9024091AA025091AB0257FF04C0215046 |
:103940003C4F4F4F5F4F6AE0559547953795279508 |
:103950006A95D1F78091A8029091A902A091AA023C |
:10396000B091AB02821B930BA40BB50B8093A80202 |
:103970009093A902A093AA02B093AB02F5C08091E4 |
:103980001F02909120022091780030917900820FDF |
:10399000931F9093200280931F021092190253C22A |
:1039A000209178003091790080911D0290911E0243 |
:1039B000280F391F8FEF97E0821B930B90930E0215 |
:1039C00080930D0286E03DC28091F2029091F30255 |
:1039D0002091780030917900821B930B9093F90528 |
:1039E0008093F8058091F8059091F90520912702C0 |
:1039F00030912802820F931F90930C0280930B0248 |
:103A000087E01FC280917800909179002091F402A4 |
:103A10003091F502821B930B909305068093040668 |
:103A200080910406909105062091290230912A0286 |
:103A3000820F931F90930A028093090201C2209182 |
:103A40002102309122028091780090917900280F14 |
:103A5000391F220F331F220F331F3093220220936E |
:103A60002102C90137FD079643E0959587954A9550 |
:103A7000E1F79093120280931102809123029091BA |
:103A80002402820F931F97FD019695958795909339 |
:103A90002402809323022091FE023091FF02821BB8 |
:103AA000930B909322018093210120911702309172 |
:103AB00018028091210190912201280F391F37FFB0 |
:103AC00002C02F5F3F4F3595279530931802209302 |
:103AD000170229CE20911F02309120028091780098 |
:103AE00090917900280F391F220F331F220F331FA7 |
:103AF0003093200220931F02C90137FD0796F3E09F |
:103B000095958795FA95E1F79093100280930F02AF |
:103B10008091250290912602820F931F97FD0196B6 |
:103B20009595879590932602809325022091FC021B |
:103B30003091FD02821B930B9093200180931F0113 |
:103B4000209115023091160280911F019091200161 |
:103B5000280F391F37FF02C02F5F3F4F359527953C |
:103B6000309316022093150283E06BC18091880286 |
:103B700090918902A0918A02B0918B028093F60104 |
:103B80009093F701A093F801B093F90110921A02F3 |
:103B900081E0809315018091FE019091FF010196D3 |
:103BA0009093FF018093FE018091780090917900BD |
:103BB00090931A01809319018091190190911A0133 |
:103BC000AA27BB27C0912B02D0912C02E0912D0295 |
:103BD000F0912E02C80FD91FEA1FFB1FC0932B02C2 |
:103BE000D0932C02E0932D02F0932E0280912F02AD |
:103BF0008F5F80932F02803108F422C180911B01D6 |
:103C000090911C01A0911D01B0911E019C01AD017C |
:103C100063E0220F331F441F551F6A95D1F7281BFD |
:103C2000390B4A0B5B0B2C0F3D1F4E1F5F1F809102 |
:103C3000FA019091FB01A091FC01B091FD01281BBC |
:103C4000390B4A0B5B0B57FF04C0295F3F4F4F4FA7 |
:103C50005F4F93E055954795379527959A95D1F7FE |
:103C600020931B0130931C0140931D0150931E01B2 |
:103C7000C091FC05D091FD05E091FE05F091FF0596 |
:103C800080911B0190911C01A0911D01B0911E011A |
:103C9000C81BD90BEA0BFB0BC0938802D093890297 |
:103CA000E0938A02F0938B02209103023091040288 |
:103CB000409105025091060257FF04C0215F3F4F1B |
:103CC0004F4F5F4F84E055954795379527958A95D7 |
:103CD000D1F78091030290910402A0910502B09166 |
:103CE0000602821B930BA40BB50B809303029093E7 |
:103CF0000402A0930502B093060280910302909102 |
:103D00000402A0910502B09106028C0F9D1FAE1F08 |
:103D1000BF1F8093030290930402A0930502B09307 |
:103D200006028091030290910402A0910502B091D5 |
:103D30000602B7FF03C00F96A11DB11DC4E0B595E3 |
:103D4000A79597958795CA95D1F7209188023091CC |
:103D50008902281B390B64E0213036071CF020E073 |
:103D600034E006C08CEF2030380714F420E03CEF3C |
:103D700080910002909101028091000290910102D5 |
:103D800097FF03C0909581959F4FA901F3E0440FE1 |
:103D9000551FFA95E1F78D5B9240C4F080910002C7 |
:103DA000909101029C01E4E0220F331FEA95E1F7B4 |
:103DB000281B390B240F351F37FF02C0215F3F4FEF |
:103DC00074E0359527957A95E1F717C08091000248 |
:103DD000909101029C0165E0220F331F6A95E1F783 |
:103DE000281B390B240F351F37FF02C0215E3F4FC0 |
:103DF00045E0359527954A95E1F7309301022093E8 |
:103E0000000280912B0290912C02A0912D02B09182 |
:103E10002E02B7FF03C00196A11DB11DB595A79550 |
:103E20009795879580932B0290932C02A0932D0257 |
:103E3000B0932E0288E080932F0202C010921A02E3 |
:103E400082E0809319028091190280937C00809116 |
:103E50001A02882319F08FEC80937A00FF91EF917A |
:103E6000DF91CF91BF91AF919F918F917F916F9192 |
:103E70005F914F913F912F910F900FBE0F901F9028 |
:103E8000189590E2E9E0F6E08FE49193815087FF86 |
:103E9000FCCF089590913402903540F4E92FFF272C |
:103EA000E75FF94F80839F5F909334020895A0E00D |
:103EB000B0E0EDE5FFE10C94C67A2091320220FFDC |
:103EC0000AC080913302882311F0815002C0809192 |
:103ED00025018093330221FF0CC090913302809121 |
:103EE0002501981719F41092330203C09F5F909335 |
:103EF0003302822F992780FF04C081FF02C01092F5 |
:103F000033020E94411F80913302282F33270AE495 |
:103F10001FE1C091B603D091B7038A3098F481E1D4 |
:103F2000809334023F932F9383E094E09F938F9389 |
:103F30001F930F93FE0109952DB73EB72A5F3F4FA0 |
:103F40002DBF11C080E1809334023F932F9388E00E |
:103F500094E09F938F931F930F93FE0109958DB764 |
:103F60009EB706968DBF20913302822F9927AA27EC |
:103F7000BB27FC010D9708F096C5E05BFF4F0AE4F4 |
:103F80001FE1C091B603D091B7030C94F37A10925D |
:103F900034028DE094E09F938F935AE4E52E5FE125 |
:103FA000F52E1F930F93FE01099584E1809334024F |
:103FB0000F900F900F900F9081E690E09F938F935A |
:103FC00086E090E09F938F9382E090E09F938F93A1 |
:103FD000809103016AE00E944C7A892F99279F9370 |
:103FE0008F93809103010E944C7A99279F938F931E |
:103FF0008DE194E09F938F931F930F93E091B6030D |
:10400000F091B703099588E280933402EDB7FEB7CB |
:104010003E96EDBF84EE96E09F938F9380910101D1 |
:1040200099279F938F9385E394E09F938F931F939A |
:104030000F93E091B603F091B70309958091D003F7 |
:104040002DB73EB7285F3F4F2DBF84FF0AC08CE3DA |
:104050008093340283E494E09F938F931F930F9394 |
:104060003DC09091CF03992351F08CE380933402AB |
:10407000892F99279F938F9380E594E047C0909173 |
:104080003A02992351F08CE380933402892F9927C7 |
:104090009F938F9387E694E02EC190916E039923AE |
:1040A00071F08CE380933402892F99279F938F932B |
:1040B0008DE794E09F938F93FF92EF9288C3809156 |
:1040C000390190913A01069798F48CE38093340279 |
:1040D0008EE894E09F938F93FF92EF92E091B60366 |
:1040E000F091B70309950F900F900F900F90E4C4D3 |
:1040F00090915C099E3108F0DFC48CE38093340218 |
:10410000892F99279F938F938BE994E09F938F93A7 |
:10411000FF92EF92E091B603F091B70309958DB746 |
:104120009EB706968DBFC8C4109234028091880253 |
:1041300090918902A0918A02B0918B02BC01CD01BD |
:1041400025E030E040E050E00E94A17A3F932F93B9 |
:104150008FEA94E09F938F931F930F93FE0109952D |
:1041600084E180933402EDB7FEB73696EDBF8091BF |
:10417000840290918502A0918602B0918702BC01D1 |
:10418000CD0125E030E040E050E00E94A17A3F936D |
:104190002F938CEB94E09F938F931F930F93E09159 |
:1041A000B603F091B703099588E2809334022DB7E6 |
:1041B0003EB72A5F3F4F2DBF8091190190911A01A0 |
:1041C0009F938F9389EC94E09F938F931F930F930A |
:1041D000E091B603F091B70309958CE38093340224 |
:1041E0008DB79EB706968DBF87B599279F938F93FE |
:1041F00086ED94E09F938F931F930F93E091B60306 |
:10420000F091B7030995EDB7FEB7369690C31092BB |
:10421000340283EE94E09F938F934AE4E42E4FE1BF |
:10422000F42E1F930F93FE01099584E180933402CD |
:104230000F900F900F900F908091E8029091E902FB |
:10424000A091EA02B091EB02B7FF04C081509C4FED |
:10425000AF4FBF4F3AE0B595A795979587953A959B |
:10426000D1F7BF93AF939F938F9380EF94E09F9389 |
:104270008F93FF92EF92E091B603F091B703099507 |
:1042800088E2809334022DB73EB7285F3F4F2DBFA1 |
:104290008091E0029091E102A091E202B091E302EC |
:1042A000B7FF04C081509C4FAF4FBF4F2AE0B59578 |
:1042B000A795979587952A95D1F7BF93AF939F932D |
:1042C0008F938FEF94E09F938F93FF92EF92E09103 |
:1042D000B603F091B70309958CE3809334028DB750 |
:1042E0009EB708968DBF8091C8089091C9089F938A |
:1042F0008F938EE095E09F938F93FF92EF927ECF06 |
:1043000091E0F92EC1E0D0E004EE17E09F2D9695E4 |
:1043100084E1989FC001112480933402F8018281C6 |
:1043200093819F938F932196DF93CF9321978081E1 |
:1043300091819F938F93DF93CF938DE195E09F932E |
:104340008F938AE49FE19F938F93E091B603F0915E |
:10435000B70309952DB73EB7245F3F4F2DBF32E01D |
:10436000F30E22960C5F1F4F88E08F1578F6A4C3DA |
:104370001092340280915C06E82FFF27EE0FFF1F9A |
:10438000EE51F84F808191819F938F9380915B06CE |
:10439000E82FFF27EE0FFF1FEE51F84F808191812C |
:1043A0009F938F938FE295E09F938F931F930F932B |
:1043B000FE01099584E180933402EDB7FEB738968B |
:1043C000EDBF80915E06E82FFF27EE0FFF1FEE5135 |
:1043D000F84F808191819F938F9380915D06E82FA4 |
:1043E000FF27EE0FFF1FEE51F84F8081918181581A |
:1043F0009F4F9F938F938FE395E09F938F931F938E |
:104400000F93E091B603F091B703099588E280938A |
:1044100034022DB73EB7285F3F4F2DBF8091600615 |
:10442000E82FFF27EE0FFF1FEE51F84F808191819B |
:1044300081589F4F9F938F9380915F06E82FFF27AE |
:10444000EE0FFF1FEE51F84F8081918181589F4FF1 |
:104450009F938F938FE495E09F938F931F930F9378 |
:10446000E091B603F091B70309958CE38093340291 |
:104470008DB79EB708968DBF80916206E82FFF2703 |
:10448000EE0FFF1FEE51F84F8081918181589F4FB1 |
:104490009F938F9380916106E82FFF27EE0FFF1FF8 |
:1044A000EE51F84F8081918181589F4F9F938F9358 |
:1044B0008FE595E030C2109234028FE695E09F932D |
:1044C0008F938AE4E82E8FE1F82E1F930F93FE015D |
:1044D000099584E1809334020F900F900F900F9014 |
:1044E0008091FE029091FF029C0197FF02C0215F24 |
:1044F0003F4F207F821B930B97FD019695958795E3 |
:104500009F938F938091FE029091FF0297FD0F96EB |
:10451000B4E095958795BA95E1F79F938F93209195 |
:10452000FE023091FF0237FF02C0295F3F4FA3E038 |
:1045300035952795AA95E1F7809111029091120285 |
:10454000821B930B9F938F938DE795E09F938F939F |
:10455000FF92EF92E091B603F091B703099588E2DC |
:10456000809334022DB73EB7265F3F4F2DBF809119 |
:10457000FC029091FD029C0197FF02C0215F3F4F1A |
:10458000207F821B930B97FD0196959587959F93AE |
:104590008F938091FC029091FD0297FD0F96E4E0CD |
:1045A00095958795EA95E1F79F938F932091FC026B |
:1045B0003091FD0237FF02C0295F3F4F73E0359510 |
:1045C00027957A95E1F780910F0290911002821B56 |
:1045D000930B9F938F938FE895E09F938F93FF9218 |
:1045E000EF92E091B603F091B70309958CE38093C5 |
:1045F00034028DB79EB70A968DBF8091FA029091D2 |
:10460000FB0297FD0196959587959F938F938091D7 |
:10461000FA029091FB0220910D0230910E02821B52 |
:10462000930B9F938F9381EA95E09F938F93FF92D3 |
:10463000EF9275C11092340280EB95E09F938F93B7 |
:104640001F930F93FE01099584E1809334020F902C |
:104650000F900F900F908091F4029091F5029F932C |
:104660008F938091090290910A029F938F938DEB13 |
:1046700095E09F938F931F930F93E091B603F09172 |
:10468000B703099588E2809334022DB73EB7285FBF |
:104690003F4F2DBF8091F2029091F3029F938F9331 |
:1046A00080910B0290910C029F938F938CEC95E07C |
:1046B0009F938F931F930F93E091B603F091B703ED |
:1046C00009958CE3809334028DB79EB708968DBF11 |
:1046D0008091EE029091EF029F938F938091070259 |
:1046E000909108029F938F938BED95E014C11092E7 |
:1046F000340280912301909124016AE070E00E94CD |
:104700006C7A9F938F9380912301909124016AE0AA |
:1047100070E00E946C7A7F936F938AEE95E09F938E |
:104720008F931F930F93FE01099584E180933402C8 |
:104730002DB73EB7285F3F4F2DBF8091560990910E |
:1047400057096AE070E00E94587A9F938F93809196 |
:104750005609909157096AE070E00E94587A7F9359 |
:104760006F938EEF95E09F938F931F930F93E0913C |
:10477000B603F091B703099588E2809334028DB7B0 |
:104780009EB708968DBF80915809909159099F93C3 |
:104790008F9382E196E09F938F931F930F93E09105 |
:1047A000B603F091B70309958CE380933402EDB71B |
:1047B000FEB73696EDBF80915A0990915B099F93A1 |
:1047C0008F9382E296E09F938F931F930F93E091D4 |
:1047D000B603F091B70309952DB73EB72A5F3F4F57 |
:1047E0002DBF6AC11092340284E396E09F938F93A9 |
:1047F0001F930F93FE01099588E2809334020F9076 |
:104800000F900F900F9080918E0299279F938F9316 |
:104810008DE396E09F938F931F930F93E091B603E0 |
:10482000F091B70309958CE3809334028DB79EB75E |
:1048300006968DBF8091E107992701979F938F93EB |
:104840008DE496E0D7CC109234028DE596E09F93EC |
:104850008F931F930F93FE01099584E18093340297 |
:104860000F900F900F900F90809102016AE00E94CC |
:104870004C7A892F99279F938F93809102010E94F0 |
:104880004C7A99279F938F938DE696E09F938F9311 |
:104890001F930F93E091B603F091B703099588E257 |
:1048A000809334022DB73EB7285F3F4F2DBF8091D4 |
:1048B000BB016AE00E944C7A892F99279F938F93BE |
:1048C0008091BB010E944C7A99279F938F938BE72D |
:1048D00096E09F938F931F930F93E091B603F0910F |
:1048E000B70309958CE3809334028DB79EB7089681 |
:1048F0008DBF8091BC016AE00E944C7A892F992774 |
:104900009F938F938091BC010E944C7A99279F932B |
:104910008F9389E896E09F938F931F930F93E09175 |
:10492000B603F091B7030995EDB7FEB73896EDBF22 |
:10493000C3C05FE8C52E52E0D52E20E030E0E9018B |
:1049400043E0F42EC0933402F60181916F01992760 |
:104950009F938F9389010F5F1F4F1F930F9387E9D9 |
:1049600096E09F938F938AE49FE19F938F93E091CA |
:10497000B603F091B70309952DB73EB7285F3F4FB7 |
:104980002DBFFA9464969801F7FEDCCF95C093E9A9 |
:10499000C92E92E0D92EC0E0D0E08E0183E0F82E3F |
:1049A00000933402F60181916F0199279F938F93B1 |
:1049B0002596DF93CF9384EA96E09F938F938AE4C2 |
:1049C0009FE19F938F93E091B603F091B703099510 |
:1049D0002DB73EB7285F3F4F2DBFFA940C5E1F4F97 |
:1049E0002497F7FEDDCF68C01092340281EB96E089 |
:1049F0009F938F931F930F93FE01099584E18093FA |
:104A000034020F900F900F900F908091B70190910A |
:104A1000B8019F938F938FEB96E09F938F931F9393 |
:104A20000F93E091B603F091B703099588E2809364 |
:104A300034028DB79EB706968DBF8091B9019091D3 |
:104A4000BA019F938F938CEC96E09F938F931F9363 |
:104A50000F93E091B603F091B703099589E4809331 |
:104A60003402EDB7FEB73696EDBF89ED96E09F9321 |
:104A70008F931F930F93E091B603F091B7030995BD |
:104A8000809132020F900F900F900F9083FF14C00F |
:104A90001092BA011092B90160E070E08EE090E0EF |
:104AA0000E94772709C080912501281719F4215009 |
:104AB000209325011092330210923202E8E0CDB724 |
:104AC000DEB70C94E27AF999FECF92BD81BDF89AD7 |
:104AD00080B599270895F999FECF1FBA92BD81BD7F |
:104AE00060BD0FB6F894FA9AF99A0FBE08954AEA93 |
:104AF00020E030E02617370740F4FC018191480F91 |
:104B00002F5F3F4F26173707C8F3842F9927089543 |
:104B1000EAEA40E050E04617570778F49C01F9991B |
:104B2000FECF32BD21BDF89A80B5E80F4F5F5F4FD1 |
:104B30002F5F3F4F4617570790F38E2F9927089501 |
:104B400081E080935D0682E080935C0683E0809341 |
:104B50005B0684E080935E0685E080935F0686E0D6 |
:104B60008093600687E08093610688E08093620608 |
:104B700089E0809363068AE0809364068BE08093EB |
:104B800065068CE080936606089586E680935A0653 |
:104B90003CE0E6EDF6E0832F11928A95E9F78AE092 |
:104BA00080937A0610929E068BE1809376068EE4BF |
:104BB00080939B0680939C06B0E2B0939D06109272 |
:104BC000D2068AE68093670682E78093D40680E562 |
:104BD0008093D50684E0809381061092BF061092E0 |
:104BE000BC0678E07093740626EE2093750680E488 |
:104BF0008093770685E080936A06FEE1F09368066D |
:104C00009FE090936B06F093690610926D06709387 |
:104C10006E0684E180936F06109270061092C206B1 |
:104C200090936C061092CB063093CC0610928306BC |
:104C30001092840610928506109286061092A006A5 |
:104C40001092A1061092A2061092A30690E89093EB |
:104C5000870642E340938806A2E0A093D30688E14A |
:104C60008093890620938A0683E080938F065DE710 |
:104C700050939206509393065093940690938B060C |
:104C8000E5E5E0938C0666E460938D068CED8093F9 |
:104C90008E068CE380939006109291069AEA909388 |
:104CA000A4068CEC8093A6061092A8069093A90601 |
:104CB00098E29093A5069093A7061092AA061092E8 |
:104CC000D0064093D106409395062AE52093960698 |
:104CD0004093970636E03093AB0684E68093AC06AB |
:104CE0008093AD062093AE0688E78093AF0690933D |
:104CF000B3068BE48093B006E093B1068093B206CE |
:104D00003093B4067093B5064093B6068AE280935A |
:104D1000B7061092B8061092BB069CE89093B906AD |
:104D2000A093BA061092BD061092BE0681E480934D |
:104D30007F06209380061092C0061092C10686E975 |
:104D40008093C3065093980684E38093990610924B |
:104D5000C4061092C5061092C6069093C7066093CB |
:104D6000C8069093C9066093CA061092CD06B09308 |
:104D70007E068FE18093CF06F093CE0608950E94C1 |
:104D8000C5258AE08093710680E18093720626E053 |
:104D9000209373069AE59093780688E780937906C6 |
:104DA00090937B0680937C0620937D0680E280931F |
:104DB00082068CE380939A068BE480939F0686E4B8 |
:104DC00091E6A3E7B4E78093D6069093D706A09325 |
:104DD000D806B093D90668E870E08AE596E00E94AC |
:104DE00077258093E2060895CF93DF930E94C5252F |
:104DF00088E08093710630E13093720626E02093BC |
:104E0000730694E69093780688E7809379069093EA |
:104E10007B0680937C0620937D063093820686E491 |
:104E200080939A0680939F06A6EDB6E085E0E6E2C1 |
:104E3000F1E0ED01019009928A95E1F768E870E0F0 |
:104E4000CD018C5790400E9477258093E206DF9138 |
:104E5000CF9108950E94C52526E0209371068AE02F |
:104E60008093720684E08093730694E690937806AC |
:104E700088E78093790690937B0680937C06209345 |
:104E80007D0680E18093820686E480939A06809373 |
:104E90009F0685E491E6A3E7B9E78093D606909351 |
:104EA000D706A093D806B093D90668E870E08AE5E3 |
:104EB00096E00E9477258093E2060895F999FECF47 |
:104EC00092BD81BDF89A80B599270895F999FECFD2 |
:104ED0001FBA92BD81BD60BD0FB6F894FA9AF99AD7 |
:104EE0000FBE089563E675E20E94BB7808954BE615 |
:104EF00055E20E94F5780895EF92FF920F931F9369 |
:104F0000CF93C82F8150853008F0C3E089E8C89F4F |
:104F1000800111248BEDE82E8FEFF82EE00EF11EAC |
:104F200068E870E0C7010E948825682F98012D5914 |
:104F30003F4F8FB39927AC014270507081FDF9CF7C |
:104F400032BD21BDF89A80B5861711F0CA0121C083 |
:104F50008FB399279C012270307081FDF9CFF2BC8C |
:104F6000E1BCF89A80B5863611F0C90112C089E813 |
:104F7000C89FC0011124859723E635E249E850E037 |
:104F8000BC018AE596E00E9496780E94456781E020 |
:104F900090E0CF911F910F91FF90EF900895282FEF |
:104FA000863010F025E003C0882309F421E0209327 |
:104FB0000101F999FECF1FBA82E090E092BD81BD58 |
:104FC00020BD0FB6F894FA9AF99A0FBE0895CF93C0 |
:104FD000C82F80915A06863609F04FC0C63010F0AF |
:104FE000C5E003C0CC2309F448C00E940F7780912C |
:104FF000D50682FF07C080917F06843618F080E5D1 |
:1050000080937F0668E870E08AE596E00E94772545 |
:105010008093E20689E8C89FC00111242BE635E29F |
:1050200049E850E06AE576E085970E94D3782BE660 |
:1050300035E24CE050E06BE576E080E590E00E94E0 |
:10504000D3786CE070E08BE596E00E947725282FFE |
:10505000F999FECF1FBA8CE590E092BD81BD20BDCD |
:105060000FB6F894FA9AF99A0FBE8C2F0E94CF27A8 |
:105070000E94456781E090E002C080E090E0CF911F |
:1050800008956DE470E088EE93E00E948825482F33 |
:105090008FB399279C012270307081FDF9CF85E391 |
:1050A00094E092BD81BDF89A80B5841779F48FB3EE |
:1050B00099279C012270307081FDF9CF88EE93E032 |
:1050C00092BD81BDF89A80B5813011F0C901089573 |
:1050D00023E635E24EE450E068EE73E083EE96E0BE |
:1050E0000E94967881E090E008958091E3068130F7 |
:1050F000A9F46DE470E083EE96E00E94772580933A |
:1051000030072BE635E24EE450E063EE76E088EEC1 |
:1051100093E00E94D37881E090E0089580E090E0F1 |
:105120000895CF93DF9381E08093E306E3EEF6E00A |
:105130008FE0158616861786108A8150349687FF71 |
:10514000F8CF80E48093F0068093F1061092F20687 |
:105150008093F3068093F40690EC9093F5061092FA |
:10516000F6068093F7068093F8061092F90690935E |
:10517000FA069093FB068093FC061092FD0680933E |
:10518000FE069093FF06A4EEB6E08CE0ECE2F1E0C0 |
:10519000ED01019009928A95E1F76DE470E0CD018F |
:1051A00001970E94772580933007DF91CF91089572 |
:1051B000F999FECF82E090E092BD81BDF89A80B56A |
:1051C000282F863078F023E0322FF999FECF1FBACE |
:1051D00082E090E092BD81BD30BD0FB6F894FA9A9E |
:1051E000F99A0FBE20930101822F992708951F93EA |
:1051F000CF93C82F162F863010F0C5E003C0882348 |
:1052000009F4C1E08C2F99278230910541F0833059 |
:10521000910544F4019731F40E94BF2605C00E9415 |
:10522000F42602C00E942A271123E1F06CE070E00E |
:1052300080E590E00E948825282FF999FECF8CE523 |
:1052400090E092BD81BDF89A80B5821759F423E6AB |
:1052500035E24CE050E060E570E08BE596E00E94BE |
:10526000967802C00E94A0258C2F0E94E727CF913C |
:105270001F910895DF92EF92FF920F931F93CF93A8 |
:10528000FF24DF2CEF2C81E090E00E945E27863621 |
:1052900011F031E0E32E6CE070E080E590E00E94D8 |
:1052A0008825C82FF999FECF8CE590E092BD81BD8D |
:1052B000F89A80B58C1711F421E0D22EC1E001E0FC |
:1052C00010E0EE2029F48C2F0E947C278823B9F56A |
:1052D00091E0F92E1F930F9381EE96E09F938F93A9 |
:1052E00085E892E19F938F93E091B603F091B70325 |
:1052F00009952DB73EB72A5F3F4F2DBF01301105ED |
:1053000021F00230110521F006C00E94BF2605C021 |
:105310000E94F42602C00E942A27DD2059F023E6CD |
:1053200035E24CE050E060E570E08BE596E00E94ED |
:10533000967802C00E94A0258C2F0E94E727CF5F9D |
:105340000F5F1F4FC63008F4BCCFFF2019F083E079 |
:105350000E94CF270E94D828C82F0E947C278C2F1C |
:1053600099279F938F9387E097E09F938F9305E80A |
:1053700012E11F930F93E091B603F091B7030995E3 |
:1053800081E090E00E945E272DB73EB72A5F3F4F35 |
:105390002DBF8F3F21F00E944128882399F480E29D |
:1053A00097E09F938F931F930F93E091B603F09133 |
:1053B000B70309950E9491280E9475280F900F90BD |
:1053C0000F900F90EE2029F066E681E090E00E94B9 |
:1053D00066271092590690E0E0EFF6E0CFE080817A |
:1053E000349618160CF49F5FC150C7FFF8CF909306 |
:1053F0005906892F99279F938F9384EE96E09F9368 |
:105400008F9381E497E09F938F931F930F93E09185 |
:10541000B603F091B70309950E94F1058DB79EB7C9 |
:1054200008968DBFCF911F910F91FF90EF90DF9065 |
:105430000895982F2FB7F8943998389A88B18360D7 |
:1054400088B98091B9008C7F8093B9008AE28093FB |
:10545000B80010923F0210923D0210923C02992334 |
:1054600081F0E5E7F7E08BE010821182128213826F |
:10547000148215821682178210868150399687FF12 |
:10548000F3CF78942FBF089510923F0284E9809360 |
:10549000BC0080E88093BC001092BD001092BA005E |
:1054A0001092BB001092B9001092B80010923B020B |
:1054B00080E00E94192A1092BB0085E88093BC000E |
:1054C0008091390282608093390208951F920F9271 |
:1054D0000FB60F9211242F933F936F937F938F9367 |
:1054E0009F93EF93FF9380913F02282F33278F5F85 |
:1054F00080933F022330310509F41CC1243031056B |
:105500005CF42130310509F454C0223031050CF02F |
:1055100099C0232B71F02DC32530310509F470C1DA |
:10552000253031050CF41EC12630310509F433C293 |
:1055300020C381E080933B0209C080913D028C3002 |
:1055400090F480913D028F5F80933D0280913D02F7 |
:10555000E82FFF27EE0FFF1FEE0FFF1FED51F94F52 |
:105560008585181654F780913D026CE00E944C7AB4 |
:1055700090933D02809145028F5F80934502909108 |
:105580003B01981770F41092450210923802109265 |
:10559000370285E080933F0280913C02880F8D5A4C |
:1055A00004C080913D02880F8E5A8093BB0085E82D |
:1055B00024C180913D029927FC0123E0EE0FFF1FDB |
:1055C0002A95E1F7E80FF91FEB58F84F8181809396 |
:1055D000BB0085E88093BC0080913D029927FC01C7 |
:1055E000EE0FFF1FEE0FFF1FEE0FFF1FE80FF91F5B |
:1055F000EB58F84F808180FF9BC080913D02992736 |
:10560000FC01EE0FFF1FEE0FFF1FEE0FFF1FE80F55 |
:10561000F91FEB58F84F8281882329F080915906B1 |
:10562000873008F4BCC28091370290913802892BF0 |
:1056300009F0B5C28091350290913602892B09F0AC |
:10564000AEC276C080913D0221E030E002C0220F60 |
:10565000331F8A95E2F78091350290913602282314 |
:105660003923232B81F080913D029927FC0173E0BF |
:10567000EE0FFF1F7A95E1F7E80FF91FEB58F84F8F |
:1056800080E184830EC080913D029927FC0163E094 |
:10569000EE0FFF1F6A95E1F7E80FF91FEB58F84F7F |
:1056A000148280913D029927FC01EE0FFF1FEE0F3F |
:1056B000FF1FEE0FFF1FE80FF91FEB58F84F848113 |
:1056C000282F3327220F331F220F331F220F331FA0 |
:1056D00080913D029927FC0133E0EE0FFF1F3A95C0 |
:1056E000E1F7E80FF91FEB58F84F82818770822BA2 |
:1056F0008093BB0085E88093BC0020913D0281E04F |
:1057000090E002C0880F991F2A95E2F72091370296 |
:105710003091380282239323892B51F08DE697E054 |
:10572000909343028093420288E08093440237C200 |
:1057300084E01CC2E0914202F09143028191809387 |
:10574000BB0085E88093BC00F0934302E0934202E3 |
:1057500080914402815080934402882309F41FC23F |
:1057600083E004C28091B900803379F580914002D2 |
:10577000882329F480913D028F5F809340028091BD |
:105780003D029927FC01EE0FFF1FEE0FFF1FEE0FEA |
:10579000FF1FE80FF91FEB58F84F838199278F7788 |
:1057A00090708F3791058CF480913D029927FC0110 |
:1057B000EE0FFF1FEE0FFF1FEE0FFF1FE80FF91F89 |
:1057C000EB58F84F83818F5F838310923F0284E907 |
:1057D0008093BC008AE090E090933A018093390175 |
:1057E00080913D028F5F80933D0210923F02809135 |
:1057F00039028E7F8093390285EA8093BC00CFC145 |
:105800008091B9008034D1F180913C029927FC014C |
:1058100073E0EE0FFF1F7A95E1F7E80FF91FEB58E1 |
:10582000F84F83818F77838380913C028F5F8093D1 |
:105830003C0280913C028C30A0F010923C0210920D |
:10584000360210923502809141028F5F80934102AF |
:105850008C3038F010924102809139028D7F809314 |
:1058600039028091390281608093390210923F029F |
:1058700084E98093BC0010923B0286C080913C0278 |
:105880009927FC0163E0EE0FFF1F6A95E1F7E80F2F |
:10589000F91FEB58F84F83818068838380913C0225 |
:1058A0009927FC01EE0FFF1FEE0FFF1FEE0FFF1FEA |
:1058B000E80FF91FEB58F84F808180FF41C08091BD |
:1058C0003C029927FC01EE0FFF1FEE0FFF1FEE0FAA |
:1058D000FF1FE80FF91FEB58F84F848199270097B5 |
:1058E000D9F0409709F047C08DE697E090934302C6 |
:1058F0008093420288E08093440280913C02992781 |
:10590000FC0133E0EE0FFF1F3A95E1F7E80FF91FB6 |
:10591000EB58F84F14822FC090913C0289E0989F79 |
:10592000C00111248658984F9093430280934202FD |
:1059300090913C02809141029817D1F483E019C004 |
:1059400090913C0289E0989FC00111248658984F9D |
:1059500090934302809342028091390281FD06C0F8 |
:1059600090913C0280914102981711F482E001C0AD |
:1059700081E08093440280914402813011F485E8F3 |
:1059800001C085EC8093BC008091400280933A0274 |
:105990001092400204C1E0914202F09143028091D2 |
:1059A000BB008083809142029091430201969093C4 |
:1059B00043028093420280914402815080934402CA |
:1059C000823010F085ECCFC0813011F485E8CBC077 |
:1059D0008091390281FF7BC08091550280FD77C0A4 |
:1059E00080913C029927FC0123E0EE0FFF1F2A95CE |
:1059F000E1F7E80FF91FEB58F84F868199278C7F64 |
:105A00009070883F910591F480913C029927FC01A8 |
:105A1000EE0FFF1FEE0FFF1FEE0FFF1FE80FF91F26 |
:105A2000EB58F84F8081816080830FC080913C02E9 |
:105A30009927FC01EE0FFF1FEE0FFF1FEE0FFF1F58 |
:105A4000E80FF91FEB58F84F108280913C0299271C |
:105A5000FC0173E0EE0FFF1F7A95E1F7E80FF91FE5 |
:105A6000EB58F84F8681883F81F480913C0299275A |
:105A7000FC0163E0EE0FFF1F6A95E1F7E80FF91FE5 |
:105A8000EB58F84F8081866021C080913C029927B5 |
:105A9000FC01EE0FFF1FEE0FFF1FEE0FFF1FE80FC1 |
:105AA000F91FEB58F84F8681893F89F480913C02B9 |
:105AB0009927FC01EE0FFF1FEE0FFF1FEE0FFF1FD8 |
:105AC000E80FF91FEB58F84F808184608083809144 |
:105AD000550281FF20C080913C029927FC0133E0F0 |
:105AE000EE0FFF1F3A95E1F7E80FF91FEB58F84F5B |
:105AF00086818E3F80F480913C029927FC0123E04F |
:105B0000EE0FFF1F2A95E1F7E80FF91FEB58F84F4A |
:105B100080858F5F808780913C028F5F80933C02FD |
:105B200080913C028C30A0F010923C021092360220 |
:105B300010923502809141028F5F809341028C3038 |
:105B400038F010924102809139028D7F80933902A2 |
:105B500010923F0284E98093BC00809139028160F9 |
:105B6000809339021AC08093BC0086E080933F0284 |
:105B700016C010923F0284E98093BC0080913902E4 |
:105B80008160809339028AE090E090933A0180939B |
:105B9000390110923D0210923C0210923B02FF919B |
:105BA000EF919F918F917F916F913F912F910F90E6 |
:105BB0000FBE0F901F9018951F93CF93DF93182F50 |
:105BC00080918D02882321F48091C801882319F0E7 |
:105BD00081E090E09DC01D3008F098C01123C9F00D |
:105BE000812F9927FC0143E0EE0FFF1F4A95E1F753 |
:105BF000E80FF91FEB58F84F3697808136968823C7 |
:105C00000CF084C03997808180FD03C083E090E070 |
:105C10007FC080916D0799278B709070029719F063 |
:105C200084E090E075C067E070E08DE697E00E9448 |
:105C3000772590917407891719F085E090E068C086 |
:105C400080ED97E00E945A16EC018091390280FDA8 |
:105C500005C0CE010E9463168823B9F3112319F4FD |
:105C60008FEF90E00BC0212F33272150304081E08F |
:105C700090E002C0880F991F2A95E2F790933802AE |
:105C800080933702A1E0B0E0E5E7F7E040E050E0C4 |
:105C90006BE0CD01042E02C0880F991F0A94E2F731 |
:105CA000209137023091380282239323892B11F0FF |
:105CB0001182128261504F5F5F4F399667FFE9CFC3 |
:105CC00010923D0210923F02809139028E7F8093A4 |
:105CD000390285EA8093BC008091390280FD05C0BD |
:105CE000CE010E9463168823B9F380913702909108 |
:105CF0003802892B29F0CE010E946316882311F304 |
:105D00008091370290913802009711F082E090E084 |
:105D1000DF91CF911F9108950F931F93CF93DF933E |
:105D2000982F80918D02882321F48091C8018823C7 |
:105D300019F081E090E097C09D30B0F4992319F4F8 |
:105D400086E090E090C0C92FDD27FE0153E0EE0F02 |
:105D5000FF1F5A95E1F7EC0FFD1FEB58F84F3697F0 |
:105D60008081369687FD03C082E090E07CC0399741 |
:105D7000808180FD03C083E090E075C080ED97E0F6 |
:105D80000E945A168C018091390280FD05C0C8011D |
:105D90000E9463168823B9F3219721E030E0C901FE |
:105DA00002C0880F991FCA95E2F79093360280933C |
:105DB0003502D901E5E7F7E040E050E06BE0CD01C6 |
:105DC000042E02C0880F991F0A94E2F72091350231 |
:105DD0003091360282239323892B11F01182128293 |
:105DE00061504F5F5F4F399667FFE9CF10923C02D9 |
:105DF00010926D071092740710923F028091390241 |
:105E00008E7F8093390285EA8093BC0080913902AD |
:105E100080FD05C0C8010E9463168823B9F38091F4 |
:105E2000350290913602892B29F0C8010E94631631 |
:105E3000882311F380916D0799278B7090700297DA |
:105E400019F084E090E00FC067E070E08DE697E025 |
:105E50000E94772590917407891719F085E090E0EA |
:105E600002C080E090E0DF91CF911F910F910895E3 |
:105E7000CF93DF9380E021E83FEFC8E2D8E0E2EE85 |
:105E8000F7E0DF01853020F411961C921E9202C0CB |
:105E9000318320831982188222968F5F1296329660 |
:105EA000833280F38FE790E090932108809320085D |
:105EB00081E89FEF90931F0880931E08109223089B |
:105EC000109222081092FB021092FA021092FD0228 |
:105ED0001092FC021092FF021092FE02DF91CF910D |
:105EE00008951F920F920FB60F9211240F931F93D4 |
:105EF0002F933F934F935F936F937F938F939F93D2 |
:105F0000AF93BF93CF93DF93EF93FF9340918600BE |
:105F1000509187008091470290914802481B590B8D |
:105F20008091860090918700909348028093470269 |
:105F3000CA018D549440A0914902B0914A02835FF6 |
:105F40009A4158F4809149028093E107149714F024 |
:105F500010923E0181E090E095C0A131B1050CF0B6 |
:105F600095C0CA018B5F9040845B914008F085C06A |
:105F700080913C0190913D01481B590BE091C40672 |
:105F8000EE2351F0FF27EE0FFF1FEE51F84F8081F7 |
:105F9000918184369105ECF4FD01EA0FFB1FEE516F |
:105FA000F84F80819181FA01E81BF90BCF01F7FFCF |
:105FB00003C0909581959F4F06975CF480918E0267 |
:105FC000883C20F480918E02865F01C088EC80932B |
:105FD0008E02FD01EA0FFB1FEE51F84F8081918187 |
:105FE0009C01220F331F280F391F240F351F37FF45 |
:105FF00002C02D5F3F4FE901D595C795D595C7954F |
:10600000CA0101968C179D0714F4219706C04150D0 |
:106010005040C417D5070CF4219680918E02833C22 |
:10602000D8F08D010A0F1B1FF801EE51F84F808147 |
:1060300091819E01281B390BC90163E070E00E9429 |
:106040006C7ACB01880F991F860F971F085D174F39 |
:10605000F8019183808307C0AA0FBB1FA85DB74FCB |
:1060600011961C921E92E0914902F0914A02EE0FA5 |
:10607000FF1FEE51F84FD183C08380914902909168 |
:106080004A02019690934A0280934902FF91EF9150 |
:10609000DF91CF91BF91AF919F918F917F916F9140 |
:1060A0005F914F913F912F911F910F910F900FBED4 |
:1060B0000F901F9018958091EF089091F0089093A1 |
:1060C000B6058093B5058091F1089091F208909300 |
:1060D000B8058093B7058091C3089091C40897FDD7 |
:1060E000039695958795959587959093BA05809396 |
:1060F000B9058091D5089091D60897FD039695959E |
:106100008795959587959093BC058093BB05809165 |
:10611000FA029091FB0220910D0230910E02821B37 |
:10612000930B9093BE058093BD058091880290915A |
:106130008902A0918A02B0918B02BC01CD012AE0B4 |
:1061400030E040E050E00E94A17A3093C0052093F7 |
:10615000BF058091FA059091FB059093C20580934D |
:10616000C10580918E0190918F019093C605809317 |
:10617000C50580912301909124019093C8058093D7 |
:10618000C70580918E0299279093CA058093C9050F |
:1061900080917C0890917D089093CC058093CB05ED |
:1061A0008091760799279093CE058093CD058091B5 |
:1061B0007F0799279093D0058093CF05809188071A |
:1061C00099279093D2058093D105809191079927C3 |
:1061D0009093D4058093D3058091E3019091E401DD |
:1061E0009093DE058093DD05809172029091730299 |
:1061F0009093E0058093DF058091560990915709AF |
:106200009093E2058093E10580915A0990915B0992 |
:106210009093E4058093E305809184029091850238 |
:10622000A0918602B0918702BC01CD012AE030E046 |
:1062300040E050E00E94A17A3093E6052093E50506 |
:1062400080915C0999279093F0058093EF058091E8 |
:106250006003909161039093F2058093F105809122 |
:106260005E0390915F039093F4058093F305809112 |
:10627000CF03882321F48091D003882321F08091DB |
:10628000B405816003C08091B4058E7F8093B4050E |
:106290000895EF92FF921F93CF93DF93182F7B0106 |
:1062A00080918D02882371F580910301893111F469 |
:1062B000299801C0299A11501F3FE9F0F092EB0193 |
:1062C000E092EA01E7018091EA019091EB01892BCC |
:1062D00011F4209781F38091EE018823A1F31092AD |
:1062E000EE018091EA019091EB01892B09F421974D |
:1062F0000E942577E8CF80910301893111F4299A12 |
:1063000001C02998DF91CF911F91FF90EF900895E0 |
:10631000EF92FF920F931F9310927A0080911102D7 |
:1063200090911202909387088093860880910F02C3 |
:1063300090911002909378088093770880910D02D5 |
:1063400090910E029093CB088093CA082091090285 |
:1063500030910A02C901880F991F880F991F820F77 |
:10636000931F820F931F9093C4088093C3082091BA |
:106370000B0230910C02C901880F991F880F991FD9 |
:10638000820F931F820F931F9093D6088093D50896 |
:106390008FEC80937A0080919B069927AA27BB27D0 |
:1063A00044ECE42E49E0F42E012D112DBC01CD0169 |
:1063B000A80197010E942D7ADC01CB018093860110 |
:1063C00090938701A0938801B093890180919C06E6 |
:1063D0009927AA27BB27BC01CD010E942D7ADC0199 |
:1063E000CB018093820190938301A0938401B093A9 |
:1063F00085011F910F91FF90EF900895A0E0B0E00C |
:10640000E4E0F2E30C94C07A682E91E0792EEE2459 |
:10641000FF2457014701E7011092CF03F092F502E4 |
:10642000E092F402F092F302E092F202F092EF02B4 |
:10643000E092EE021092ED02F092FF02E092FE0274 |
:10644000F092FD02E092FC02F092FB02E092FA026E |
:106450001092680110926701109202020E94883126 |
:1064600084E690E00E947C160E948831F092D60566 |
:10647000E092D505F092D805E092D70580916706A5 |
:1064800080FF14C08091190190911A01875B93409D |
:1064900058F48091190190911A018E5E924020F07B |
:1064A00080910202882311F00E94BD1A0091190107 |
:1064B00010911A0187B5865F87BD87B5809588BD25 |
:1064C0008FE1C82E8AE090E00E947C1680910D0238 |
:1064D00090910E02E80EF91E809111029091120225 |
:1064E000A80EB91E80910F0290911002880E991E7D |
:1064F0008091FA059091FB05C80FD91FCA94C7FE79 |
:10650000E1CF8091190190911A01825F934080F44C |
:106510008091190190911A01459750F080911901CD |
:1065200090911A01081B190B109314010093130189 |
:1065300087B58A5087BD87B5809588BD9501205F56 |
:106540003F4F36952795369527953093FF02209338 |
:10655000FE02C401409696958795969587959093EF |
:10656000FD028093FC0240E150E0E40EF51EA5E040 |
:10657000F694E794AA95E1F7F092FB02E092FA0212 |
:10658000C40FD51FF5E0D695C795FA95E1F7D093DE |
:10659000EF02C093EE029093F9028093F8023093D9 |
:1065A000F7022093F60252E06516C9F58091C30800 |
:1065B0009091C40897FF03C0909581959F4F6CE020 |
:1065C00070E00E946C7A9B017093F5026093F40274 |
:1065D0008091D5089091D60897FF03C0909581953A |
:1065E0009F4F6CE070E00E946C7A7093F3026093AE |
:1065F000F202B90184E090E00E9477276091F202F4 |
:106600007091F30286E090E00E9477276091EE029D |
:106610007091EF0288E090E00E9477274FC084E0FD |
:1066200090E00E9472279093F5028093F40286E036 |
:1066300090E00E9472279C019093F3028093F202F3 |
:106640008091F4029091F5028150984018F4215005 |
:106650003840A0F182E697E09F938F9385E892E11E |
:106660009F938F93E091B603F091B70309958091C2 |
:10667000C3089091C40897FF03C0909581959F4FE0 |
:106680006CE070E00E946C7A7093F5026093F40203 |
:106690008091D5089091D60897FF03C09095819579 |
:1066A0009F4F6CE070E00E946C7A7093F3026093ED |
:1066B000F20277240F900F900F900F9012BC11BC34 |
:1066C0001092870810928608109278081092770826 |
:1066D0001092CB081092CA0888EC90E00E947C16B9 |
:1066E0008091090290910A029C01220F331F220F10 |
:1066F000331F280F391F280F391F3093C4082093E8 |
:10670000C30880910B0290910C028C01000F111FA5 |
:10671000000F111F080F191F080F191F1093D6081B |
:106720000093D50880917606C82EDD24EE24FF2440 |
:10673000442737FD4095542FC701B6010E942D7A9A |
:106740004B015C016093E8027093E9028093EA02D6 |
:106750009093EB029801442737FD4095542FC701D1 |
:10676000B6010E942D7ADC01CB018093E002909368 |
:10677000E102A093E202B093E3028092C8029092F9 |
:10678000C902A092CA02B092CB028093C002909339 |
:10679000C102A093C202B093C3021092B802109239 |
:1067A000B9021092BA021092BB0200918E011091B0 |
:1067B0008F011093A7020093A60284E690E09093C5 |
:1067C0008B0180938A0182E390E09093EB018093A8 |
:1067D000EA0180919B069927AA27BB27BC01CD011E |
:1067E00024EC39E040E050E00E942D7ADC01CB013E |
:1067F0008856954CAF4FBF4F809386019093870189 |
:10680000A0938801B093890180919C069927AA27BB |
:10681000BB27BC01CD010E942D7ADC01CB0188563B |
:10682000954CAF4FBF4F8093820190938301A0930B |
:106830008401B09385011092450110924401C80172 |
:10684000AA2797FDA095BA2F2091400130914101D0 |
:106850004091420150914301BC01CD010E942D7A2B |
:10686000DC01CB018093D1089093D208A093D30888 |
:10687000B093D4081092A3021092A2020E9445671E |
:10688000662029F0809155028460809355028FEF35 |
:10689000809351091092520980E28093530984E653 |
:1068A00080938E028091E801882311F0579A17C0D7 |
:1068B0008091D306992780FF05C082FF03C080EE38 |
:1068C0009EE202C080E091E190930A018093090169 |
:1068D00081E0809311010E941D170E941D1788E01E |
:1068E00090E00E9472279093EF028093EE0212BC18 |
:1068F00011BC8091FE029091FF0280569940815C0C |
:106900009B4228F08091CF0381608093CF038091D8 |
:10691000FC029091FD0280569940815C9B4228F0D8 |
:106920008091CF0382608093CF038091FA0290918F |
:10693000FB028C5291408957954028F08091CF03FB |
:1069400084608093CF038091F4029091F5028C5281 |
:106950009140835C914028F08091CF0388608093C0 |
:10696000CF038091F2029091F3028C529140835CAC |
:10697000914028F08091CF0380618093CF03809174 |
:10698000EE029091EF02805092408355914028F0A2 |
:106990008091CF0380628093CF038091CF038111D8 |
:1069A000772486E480937D0180911B0190911C01E6 |
:1069B000A0911D01B0911E018093FC059093FD05EF |
:1069C000A093FE05B093FF05109201021092000201 |
:1069D0001092030210920402109205021092060215 |
:1069E0001092A8021092A9021092AA021092AB0271 |
:1069F0001092EE051092ED050E94851A872D9927B9 |
:106A0000EEE0CDB7DEB70C94DC7AA3E1B0E0EBE0CA |
:106A1000F5E30C94BC7A8091FA029091FB022091EC |
:106A20000D0230910E02821B930B9093CB08809342 |
:106A3000CA08809117029091180297FD07969C0151 |
:106A400053E0359527955A95E1F7309387082093C1 |
:106A50008608809115029091160297FD079643E0F3 |
:106A6000959587954A95E1F79093780880937708F4 |
:106A7000309393082093920890938A088093890812 |
:106A80008091C3089091C408AC01440F551F480F72 |
:106A9000591F2091090230910A02C901880F991FDC |
:106AA000880F991F820F931F820F931F480F591F42 |
:106AB00057FF02C04D5F5F4F5595479555954795D8 |
:106AC0005093C4084093C3088091D5089091D6088C |
:106AD000AC01440F551F480F591F20910B023091F4 |
:106AE0000C02C901880F991F880F991F820F931FED |
:106AF000820F931F480F591F57FF02C04D5F5F4F12 |
:106B000055954795559547955093D6084093D50888 |
:106B10002091090230910A02C901880F991F880F3C |
:106B2000991F820F931F820F931F9C01442737FDEB |
:106B30004095542F8091D8029091D902A091DA0209 |
:106B4000B091DB02820F931FA41FB51F8093D80260 |
:106B50009093D902A093DA02B093DB0220910B024A |
:106B600030910C02C901880F991F880F991F820F5D |
:106B7000931F820F931F9C01442737FD4095542F8C |
:106B80008091D4029091D502A091D602B091D70203 |
:106B9000820F931FA41FB51F8093D4029093D50238 |
:106BA000A093D602B093D70280919C0890919D0843 |
:106BB0002091090230910A02820F931F90939D0841 |
:106BC00080939C088091CD089091CE0820910B0273 |
:106BD00030910C02820F931F9093CE088093CD08C2 |
:106BE0008091F0029091F10201969093F1028093CE |
:106BF000F0028091FA059091FB052091EE02309110 |
:106C0000EF02821B930B9C01442737FD4095542FC4 |
:106C10008091D0029091D102A091D202B091D30282 |
:106C2000820F931FA41FB51F8093D0029093D102AF |
:106C3000A093D202B093D3028FEC80937A0010928B |
:106C400015012091C0023091C1024091C2025091C1 |
:106C5000C30229873A874B875C8729543B464140CA |
:106C600050402CF028E43BE641E050E00DC089851F |
:106C70009A85AB85BC85885B9449AE4FBF4F4CF479 |
:106C800028EB34E94EEF5FEF2D833E834F83588727 |
:106C900008C089859A85AB85BC858D839E83AF832B |
:106CA000B8872091C8023091C9024091CA02509120 |
:106CB000CB022D873E874F87588B29543B46414056 |
:106CC00050402CF028E43BE641E050E00DC08D85BB |
:106CD0009E85AF85B889885B9449AE4FBF4F4CF411 |
:106CE00028EB34E94EEF5FEF29833A834B835C83D3 |
:106CF00008C08D859E85AF85B88989839A83AB83CB |
:106D0000BC83A091CA08B091CB08BB8BAA8BFD01B4 |
:106D1000CF01AA2797FDA095BA2FA090B802B090F6 |
:106D2000B902C090BA02D090BB02A80EB91ECA1E0A |
:106D3000DB1EA092B802B092B902C092BA02D09201 |
:106D4000BB02E090D108F090D2080091D3081091D6 |
:106D5000D408E80EF91E0A1F1B1FE092D108F0921A |
:106D6000D2080093D3081093D408F0917102F98BE4 |
:106D7000FF2309F098C180917002882309F093C124 |
:106D80008091BF0886FF8FC1809177089091780825 |
:106D9000AA2797FDA095BA2FBC01CD0129813A8180 |
:106DA0004B815C810E942D7A9B01AC0197FF04C04E |
:106DB0002150384F4F4F5F4F6BE0559547953795B2 |
:106DC00027956A95D1F780916701682E77248824EA |
:106DD0009924CA01B901A40193010E942D7ADC0112 |
:106DE000CB0180930A0390930B03A0930C03B09301 |
:106DF0000D03B7FF04C08150904FAF4FBF4F1C0130 |
:106E00002D013CE055944794379427943A95D1F757 |
:106E100020920A0330920B0340920C0350920D0310 |
:106E20008091860890918708AA2797FDA095BA2F90 |
:106E3000BC01CD012D813E814F8158850E942D7A64 |
:106E400097FF04C06150784F8F4F9F4F2BE095956F |
:106E50008795779567952A95D1F7A40193010E94AC |
:106E60002D7ADC01CB0180930E0390930F03A09346 |
:106E70001003B0931103B7FF04C08150904FAF4F80 |
:106E8000BF4F9C01AD018CE05595479537952795EF |
:106E90008A95D1F720930E0330930F03409310038C |
:106EA0005093110380910A0390910B0390936F0804 |
:106EB00080936E0880910E0390910F039093730856 |
:106EC00080937208221933094409550920930E034F |
:106ED00030930F034093100350931103E20EF31EFF |
:106EE000041F151FE092D108F092D2080093D30836 |
:106EF0001093D408809166018823B1F457FF04C031 |
:106F00002F5F3F4F4F4F5F4F5595479537952795CB |
:106F1000A21AB30AC40AD50AA092B802B092B90262 |
:106F2000C092BA02D092BB022A893B89790100271C |
:106F3000F7FC0095102F80910E0390910F03A09104 |
:106F40001003B0911103E80EF91E0A1F1B1FC801A0 |
:106F5000B70129813A814B815C810E942D7A9B0186 |
:106F6000AC0197FF04C02150384F4F4F5F4FBBE03B |
:106F70005595479537952795BA95D1F78091680132 |
:106F8000A82EBB24CC24DD24CA01B901A601950199 |
:106F90000E942D7ADC01CB018093020390930303BE |
:106FA000A0930403B0930503B7FF04C08150904F32 |
:106FB000AF4FBF4F3C014D01ACE09594879477945F |
:106FC0006794AA95D1F760920203709203038092AE |
:106FD000040390920503C801B7012D813E814F81C2 |
:106FE00058850E942D7A97FF04C06150784F8F4FCB |
:106FF0009F4FFBE09595879577956795FA95D1F723 |
:10700000A60195010E942D7ADC01CB018093060335 |
:1070100090930703A0930803B0930903B7FF04C03C |
:107020008150904FAF4FBF4FAC01BD01ECE0759563 |
:10703000679557954795EA95D1F740930603509386 |
:10704000070360930803709309032A893B8937FF7C |
:1070500003C0309521953F4F21343105E4F1D4012F |
:10706000C30197FE07C0B095A095909581959F4F5D |
:10707000AF4FBF4F81389105A105B10584F4DB0105 |
:10708000CA0177FF07C0B095A095909581959F4F55 |
:10709000AF4FBF4F81389105A105B105E4F081E004 |
:1070A0008093A40218C01092730810927208109274 |
:1070B0006F0810926E081092060310920703109248 |
:1070C0000803109209031092020310920303109216 |
:1070D0000403109205038091060390910703A09189 |
:1070E0000803B0910903BC01CD0124E630E040E083 |
:1070F00050E00E94A17AE0900203F0900303E21AAC |
:10710000F30AF0928508E09284088091020390913E |
:107110000303A0910403B0910503BC01CD0124E653 |
:1071200030E040E050E00E94A17ADA01C9012091EC |
:107130000603309107038C01021B130B10937A088E |
:10714000009379088091400190914101A091420102 |
:10715000B0914301BC01CD0128E631E040E050E0B0 |
:107160000E942D7A2091D1083091D2084091D30805 |
:107170005091D408261737074807590764F0261B93 |
:10718000370B480B590B2093D1083093D20840930A |
:10719000D3085093D4082091D1083091D20840915F |
:1071A000D3085091D40857FF0CC0260F371F481F33 |
:1071B000591F2093D1083093D2084093D30850939D |
:1071C000D40860917708709178086E0D7F1D9B013F |
:1071D000442737FD4095542F8091BC029091BD0209 |
:1071E000A091BE02B091BF02820F931FA41FB51FD2 |
:1071F0008093BC029093BD02A093BE02B093BF02E5 |
:107200008091760290917702681B790BCB01AA27B7 |
:1072100097FDA095BA2F29853A854B855C85820F0D |
:10722000931FA41FB51F8093C0029093C102A09327 |
:10723000C202B093C302C0908201D0908301E0905B |
:107240008401F0908501C816D906EA06FB06C4F44D |
:1072500088EA91E6A0E0B0E08C199D09AE09BF096B |
:107260008093C0029093C102A093C202B093C30264 |
:107270008093BC029093BD02A093BE02B093BF0264 |
:1072800022273327A9012C193D094E095F09809156 |
:10729000C0029091C102A091C202B091C3028217B4 |
:1072A0009307A407B507B4F4D701C601885A9146DD |
:1072B000A040B0408093C0029093C102A093C2024C |
:1072C000B093C3028093BC029093BD02A093BE0210 |
:1072D000B093BF026091860870918708600F711F9C |
:1072E0009B01442737FD4095542F8091C402909113 |
:1072F000C502A091C602B091C702820F931FA41FBE |
:10730000B51F8093C4029093C502A093C602B093A8 |
:10731000C7028091740290917502681B790BCB01B2 |
:10732000AA2797FDA095BA2F2D853E854F855889B0 |
:10733000820F931FA41FB51F8093C8029093C902A8 |
:10734000A093CA02B093CB02E0908601F09087012F |
:107350000091880110918901E816F9060A071B07B8 |
:10736000C4F488EA91E6A0E0B0E08E199F09A00B72 |
:10737000B10B8093C8029093C902A093CA02B09344 |
:10738000CB028093C4029093C502A093C602B0932F |
:10739000C70222273327A9012E193F09400B510BA1 |
:1073A0008091C8029091C902A091CA02B091CB020B |
:1073B00082179307A407B507B4F4D801C701885A08 |
:1073C0009146A040B0408093C8029093C902A09318 |
:1073D000CA02B093CB028093C4029093C502A093DB |
:1073E000C602B093C7028091B8029091B902A091F1 |
:1073F000BA02B091BB028093CC029093CD02A093CD |
:10740000CE02B093CF028091C8029091C902A091A0 |
:10741000CA02B091CB028093E8029093E902A09354 |
:10742000EA02B093EB028091C0029091C102A09158 |
:10743000C202B091C3028093E0029093E102A09354 |
:10744000E202B093E3028091C4029091C502A09140 |
:10745000C602B091C7028093E4029093E502A09324 |
:10746000E602B093E7028091BC029091BD02A09128 |
:10747000BE02B091BF028093DC029093DD02A09324 |
:10748000DE02B093DF02809121019091220197FDED |
:10749000079633E0959587953A95E1F7909387089D |
:1074A0008093860880911F019091200197FD079697 |
:1074B00023E0959587952A95E1F790937808809336 |
:1074C000770880911102909112020F9734F488E1AD |
:1074D0009CEF909387088093860880911102909189 |
:1074E0001202079734F480E398EF90938708809313 |
:1074F00086088091110290911202815D974034F0CC |
:1075000088EE93E09093870880938608809111021B |
:1075100090911202805E974034F080ED97E0909356 |
:1075200087088093860880910F02909110020F9730 |
:1075300034F488E19CEF90937808809377088091E9 |
:107540000F0290911002079734F480E398EF909324 |
:1075500078088093770880910F0290911002815DE6 |
:10756000974034F088EE93E0909378088093770802 |
:1075700080910F0290911002805E974034F080ED70 |
:1075800097E090937808809377086091750166235F |
:1075900009F4AEC040912101509122018091120363 |
:1075A00090911303481B590B5093190340931803F0 |
:1075B0002091210130912201280F391F37FF02C08D |
:1075C0002F5F3F4F35952795309313032093120378 |
:1075D000413851051CF080E890E005C040585F4FED |
:1075E00034F480E89FEF909319038093180340913F |
:1075F0001F01509120018091140390911503481BA5 |
:10760000590B509317034093160320911F0130919B |
:107610002001280F391F37FF02C02F5F3F4F3595DC |
:1076200027953093150320931403413851051CF01E |
:1076300080E890E005C040585F4F34F480E89FEF49 |
:107640009093170380931603462F552780911803B4 |
:1076500090911903849FB001859F700D949F700DC8 |
:1076600011249B0177FF02C0215F3F4FB4E03595A5 |
:107670002795BA95E1F78091860890918708820F47 |
:10768000931F9093870880938608809116039091AA |
:107690001703849F9001859F300D949F300D112416 |
:1076A000A90137FF02C0215F3F4FA4E03595279520 |
:1076B000AA95E1F78091770890917808820F931F3F |
:1076C000909378088093770880912101909122010E |
:1076D000860F971F909322018093210180911F01B3 |
:1076E00090912001840F951F9093200180931F019A |
:1076F0000091890810918A0880916E0890916F0816 |
:10770000101611065CF59C0197FF04C02227332751 |
:10771000281B390BC901AA2797FDA095BA2F2091E4 |
:107720006601332744275527BC01CD010E942D7ADD |
:107730009B01AC0197FF04C0215C3F4F4F4F5F4F4F |
:10774000F6E05595479537952795FA95D1F78091AD |
:10775000840890918508820F931F27C097FF03C06C |
:10776000909581959F4FAA2797FDA095BA2F2091BC |
:107770006601332744275527BC01CD010E942D7A8D |
:107780009B01AC0197FF04C0215C3F4F4F4F5F4FFF |
:10779000E6E05595479537952795EA95D1F780917D |
:1077A000840890918508821B930B909385088093A1 |
:1077B0008408E0909208F09093088091720890916C |
:1077C00073081E141F045CF59C0197FF04C0222758 |
:1077D0003327281B390BC901AA2797FDA095BA2F7B |
:1077E00020916601332744275527BC01CD010E9413 |
:1077F0002D7A9B01AC0197FF04C0215C3F4F4F4F96 |
:107800005F4F76E055954795379527957A95D1F74F |
:107810008091790890917A08820F931F27C097FF73 |
:1078200003C0909581959F4FAA2797FDA095BA2FE9 |
:1078300020916601332744275527BC01CD010E94C2 |
:107840002D7A9B01AC0197FF04C0215C3F4F4F4F45 |
:107850005F4F66E055954795379527956A95D1F71F |
:107860008091790890917A08821B930B90937A0803 |
:10787000809379088091BF0887FF44C039893323FA |
:1078800009F040C0809170028823E1F541E0E416E0 |
:1078900041E0F4064CF080918608909187088E0DA7 |
:1078A0009F1D805091400DC050E0E5165FEFF5063A |
:1078B00064F480918608909187088E0D9F1D8050FA |
:1078C0009F4F909387088093860881E001301807C6 |
:1078D0004CF08091770890917808800F911F80502C |
:1078E00091400CC09FEF0030190764F48091770835 |
:1078F00090917808800F911F80509F4F9093780847 |
:1079000080937708E2E1CD5E0C94D87A80918D0265 |
:10791000882329F5809155028C7F809355028091B0 |
:1079200054028F7D80935402A4EDB3E0E5E7F7E0C5 |
:107930009BE08091C801882309F48C938D91818309 |
:1079400012829150399697FFF4CF8091C801882315 |
:1079500059F08091C80181508093C80105C0809181 |
:10796000550281608093550280913B02882319F073 |
:1079700010923B02089580933F02809139028E7FDE |
:107980008093390285EA8093BC000895882319F416 |
:1079900080E090E00895E82FFF27EE0FFF1FEE51E3 |
:1079A000F84F8081918181589F4F8F3F910521F041 |
:1079B0001CF08FEF90E004C097FF02C080E090E0E1 |
:1079C00099270895CF93DF93AFE8B2E0CFE5D6E0F3 |
:1079D00057E08991E82FFF27EE0FFF1FEE51F84F78 |
:1079E0000190F081E02DE158FF4FEF3FF10521F0CC |
:1079F0001CF0EFEFF0E004C0F7FF02C0E0E0F0E0C1 |
:107A0000893111F4EC931BC04C91242F3327E217DA |
:107A1000F307A9F0CF01821B930B97FD0396959571 |
:107A2000879595958795242F280F2C93822F99273A |
:107A3000E817F90714F4215001C02F5F2C9351501F |
:107A4000119657FFC6CF80916906883F38F0EFEF57 |
:107A5000F0E0E81BF109E157FD4F808180937A0146 |
:107A600080917A01882329F0843618F084E6809387 |
:107A70007A0180916B06883F38F0EFEFF0E0E81B69 |
:107A8000F109E157FD4F808180937901809179015F |
:107A9000882329F0843618F084E680937901809158 |
:107AA0007806883F38F0EFEFF0E0E81BF109E15786 |
:107AB000FD4F808180937401809174018B3010F4AC |
:107AC0008AE002C08F3F11F4809374018091A50673 |
:107AD000883F38F0EFEFF0E0E81BF109E157FD4F88 |
:107AE000808180939E0880919E08863010F485E006 |
:107AF00002C08F3F11F480939E088091A706883FB3 |
:107B000038F0EFEFF0E0E81BF109E157FD4F80811D |
:107B10008093C6088091C608863010F485E002C0C4 |
:107B20008F3F11F48093C60880919206873F19F425 |
:107B3000429905C007C0863F41F4439B03C0809132 |
:107B4000C70616C08091C80613C0883F38F0EFEF13 |
:107B5000F0E0E81BF109E157FD4F808180939B081D |
:107B600080919B08893110F488E102C08F3F11F4A5 |
:107B700080939B0880919306873F19F4429905C032 |
:107B800007C0863F41F4439B03C08091C90616C0DD |
:107B90008091CA0613C0883F38F0EFEFF0E0E81B91 |
:107BA000F109E157FD4F808180937408809174083A |
:107BB000893110F488E102C08F3F11F4809374087A |
:107BC00080919406883F38F0EFEFF0E0E81BF10970 |
:107BD000E157FD4F80818093A4088091A4088931EA |
:107BE00010F488E102C08F3F11F48093A4088091C3 |
:107BF0006A060E94C63C80936B0280916D06883FA6 |
:107C000038F0EFEFF0E0E81BF109E157FD4F80811C |
:107C10008093780180916F06883F38F0EFEFF0E0B5 |
:107C2000E81BF109E157FD4F808180937601809137 |
:107C30007706883F38F0EFEFF0E0E81BF109E157F5 |
:107C4000FD4F80818093770180917906883F38F0DD |
:107C5000EFEFF0E0E81BF109E157FD4F80818093E1 |
:107C6000730180917A06883F38F0EFEFF0E0E81B6F |
:107C7000F109E157FD4F80818093750180917B066A |
:107C8000883F38F0EFEFF0E0E81BF109E157FD4FD6 |
:107C900080818093720180917C06883F38F0EFEFFD |
:107CA000F0E0E81BF109E157FD4F808180937101FD |
:107CB00080918206883F38F0EFEFF0E0E81BF10991 |
:107CC000E157FD4F808180936F0180918306883F4B |
:107CD00038F0EFEFF0E0E81BF109E157FD4F80814C |
:107CE00080936A0280918406883F38F0EFEFF0E0DD |
:107CF000E81BF109E157FD4F808180936902809173 |
:107D00008506883F38F0EFEFF0E0E81BF109E15716 |
:107D1000FD4F80818093680280918606883F38F00D |
:107D2000EFEFF0E0E81BF109E157FD4F8081809310 |
:107D300067028091A006883F38F0EFEFF0E0E81B83 |
:107D4000F109E157FD4F8081809366028091A10681 |
:107D5000883F38F0EFEFF0E0E81BF109E157FD4F05 |
:107D60008081809365028091A206883F38F0EFEF12 |
:107D7000F0E0E81BF109E157FD4F80818093640238 |
:107D80008091A306883F38F0EFEFF0E0E81BF1099F |
:107D9000E157FD4F80818093630280918706883F81 |
:107DA00038F0EFEFF0E0E81BF109E157FD4F80817B |
:107DB00080936D0180918B06883F38F0EFEFF0E003 |
:107DC000E81BF109E157FD4F808180936C018091A0 |
:107DD0008806883F38F0EFEFF0E0E81BF109E15743 |
:107DE000FD4F808180936B0180918C06883F38F035 |
:107DF000EFEFF0E0E81BF109E157FD4F8081809340 |
:107E00006A0180919506883F38F0EFEFF0E0E81BBB |
:107E1000F109E157FD4F80818093690180919806B7 |
:107E2000883F38F0EFEFF0E0E81BF109E157FD4F34 |
:107E300080818093680180919906883F38F0EFEF48 |
:107E4000F0E0E81BF109E157FD4F80818093670165 |
:107E500080919A06883F38F0EFEFF0E0E81BF109D7 |
:107E6000E157FD4F8081809366018091C306883F72 |
:107E700038F0EFEFF0E0E81BF109E157FD4F8081AA |
:107E800080938308809167068093BF088091D40611 |
:107E90008093A30880919F06883F38F0EFEFF0E0D1 |
:107EA000E81BF109E157FD4F8081809365018091C6 |
:107EB000BC06883F38F0EFEFF0E0E81BF109E1572E |
:107EC000FD4F80818093D80880916F01282F332740 |
:107ED0002F5F3F4F8CE398E2B9010E946C7A709358 |
:107EE0007C0160937B01809175068093C708809127 |
:107EF000740680938B08E091BE06EE23D9F181E0F1 |
:107F000080936202FF27EE0FFF1FEE51F84F808132 |
:107F10009181805C9F4F14F41092620280917D01E8 |
:107F2000209162028217B1F0833088F4222319F085 |
:107F30008CED95E002C088EC90E09093EB0180938B |
:107F4000EA0185E08093780220937D0103C081508F |
:107F500080937D01809118099091190997FF0FC0B6 |
:107F600080916202882359F08091CF0380688093CA |
:107F7000CF0305C0E09362028AE080937D01809187 |
:107F800018099091190997FF1DC080918D028823CF |
:107F9000C9F0809162028823A9F080910B01909131 |
:107FA0000C018F5F9F4F71F488E99AE39093EB0186 |
:107FB0008093EA0180E094EA90930C0180930B0196 |
:107FC0001092620280916202882321F08091540213 |
:107FD000816003C0809154028E7F80935402DF91B0 |
:107FE000CF91089580917006882301F56091720207 |
:107FF0007091730277FF02C06D5F7F4F7595679533 |
:10800000759567954091230150912401809102015B |
:10801000282F3327649FC001659F900D749F900D9A |
:108020001124B9010E94587ACB0101C0992790937D |
:10803000810180938001809180019091810187343A |
:10804000910538F486E490E090938101809380015B |
:1080500008958F3A910530F08FEA90E09093810176 |
:10806000809380010895A8E1B0E0E9E3F0E40C9486 |
:10807000BC7A0E94053580915502992784719070D1 |
:10808000892B91F58091D50682FF27C080917202DD |
:10809000909173020097F1F002E088359007D4F4D4 |
:1080A0009C0197FF02C02D5F3F4F35952795359571 |
:1080B000279580917F069927289FA001299F500D21 |
:1080C000389F500D1124CA0164E670E00E946C7A5A |
:1080D000CB0106C08DE290E003C080917F06992716 |
:1080E000909353028093520220915002309151029A |
:1080F00055E72033350759F41092990210929802EF |
:1081000080918B089927909353028093520260913B |
:108110009802709199027A83698380918B089927DC |
:108120000A966817790714F49A83898380918E02DE |
:10813000843608F062C08091540282FD5EC0809156 |
:108140002E0390912F03009731F0019790932F0306 |
:1081500080932E030BC010928D0290935702809350 |
:108160005602809155028D7E80935502289A809107 |
:10817000560290915702895E9340E0F180915C092C |
:108180008536C0F180915202909153029A8389837F |
:108190008091550280618093550280915B06A82FE3 |
:1081A000BB27AA0FBB1FFD01E85DF74F11821082AC |
:1081B00080915C06282F3327220F331FC901885D69 |
:1081C000974FFC0111821082AE51B84F11961C924C |
:1081D0001E922E51384FD90111961C921E928091F9 |
:1081E0005E06E82FFF27EE0FFF1FEE51F84F1182BA |
:1081F000108251C410928D024EC480918E028D382F |
:1082000008F41FC4809155028F7E8093550290918F |
:10821000800682E3989FC001112490932F038093DE |
:108220002E03E981FA81B9978CF080918D02882321 |
:1082300069F08091560290915702FFEF8F3F9F07A0 |
:1082400029F001969093570280935602209156028E |
:10825000309157022F3F310509F030F51092B002EE |
:108260001092B1021092B2021092B3021092AC02BC |
:108270001092AD021092AE021092AF0210921A0349 |
:1082800010921B0310921C0310921D031092B8024F |
:108290001092B9021092BA021092BB02809154025D |
:1082A0008062809354024DC0809155028260809319 |
:1082B00055028091540285FF44C08091F60190914F |
:1082C000F701A091F801B091F90187399105A10555 |
:1082D000B1058CF48091880290918902A0918A0264 |
:1082E000B0918B02825A9E4FAF4FBF4F24F08091C6 |
:1082F000BF0880FD05C0809154028F7180935402A5 |
:108300001092B0021092B1021092B2021092B30217 |
:108310001092AC021092AD021092AE021092AF0217 |
:108320001092B8021092B9021092BA021092BB02D7 |
:10833000295E334030F088EE93E0909357028093AB |
:10834000560280915D06E82FFF27EE0FFF1FEE51CA |
:10835000F84F80819181813591050CF434C12091D1 |
:108360008D02222309F02FC180915E06E82FFF279E |
:10837000EE0FFF1FEE51F84F808191818C349105F3 |
:108380000CF4FFC0809130038F5F80933003893CF1 |
:1083900008F419C12093300310925702109256022C |
:1083A00030915B06E32FFF27EE0FFF1FEE51F84FD2 |
:1083B0008081918187349105B4F480915C06E82F27 |
:1083C000FF27EE0FFF1FEE51F84F80819181019042 |
:1083D000F081E02DF7FF03C0F095E195FF4FE73402 |
:1083E000F1050CF478C041E020915C06A22FBB2778 |
:1083F000AA0FBB1FAE51B84F8D919C911197873436 |
:10840000910544F0E32FFF27EE0FFF1FEE51F84FC9 |
:10841000808191818D919C918734910574F0809138 |
:108420005B06E82FFF27EE0FFF1FEE51F84F80810C |
:108430009181873491050CF042E0E22FFF27EE0F87 |
:10844000FF1FEE51F84F808191818634910574F4BD |
:1084500080915B06E82FFF27EE0FFF1FEE51F84FCC |
:1084600080819181873491050CF043E0E22FFF2752 |
:10847000EE0FFF1FEE51F84F808191818A5B9F4F75 |
:1084800074F480915B06E82FFF27EE0FFF1FEE517B |
:10849000F84F80819181873491050CF044E0E22F00 |
:1084A000FF27EE0FFF1FEE51F84F808191818A5B0D |
:1084B0009F4F74F480915B06E82FFF27EE0FFF1F9C |
:1084C000EE51F84F80819181863491050CF445E09E |
:1084D000842F0E94CF2780915C06E82FFF27EE0FA4 |
:1084E000FF1FEE51F84F808191810190F081E02DC6 |
:1084F000F7FF03C0F095E195FF4F7E97CCF4809194 |
:108500005B06E82FFF27EE0FFF1FEE51F84F80812B |
:1085100091818A5B9F4F64F481E08093EA0310921B |
:10852000790288EE93E09093EB018093EA014BC0CF |
:10853000809101010E947C2780E00E943106809199 |
:1085400081060E94A9758091BF0880FF10C08091AC |
:10855000190190911A01875B934038F480911901B9 |
:1085600090911A018E5E924010F40E94BD1A81E033 |
:108570000E94FE318093790281E08093E801579A4E |
:1085800019C080819181855B9F4FDCF4809130031D |
:108590008F5F80933003893CB0F020938D0220934D |
:1085A0003003109257021092560282E00E94FE3170 |
:1085B0008093790268E770E0809101010E9449315F |
:1085C00002C02093300380915D06E82FFF27EE0F55 |
:1085D000FF1FEE51F84F808191818C599F4F0CF015 |
:1085E00029C22091BF06E22FFF27EF77F070EE0F30 |
:1085F000FF1FE85DF74F80819181069714F084E6B4 |
:1086000006C0808191818B5F9F4F1CF48CE9809321 |
:10861000330380918D02E0915E06882309F058C1F2 |
:10862000FF27EE0FFF1FEE51F84F808191818C598B |
:108630009F4F9CF48091D50683FD0BC0E22FFF274E |
:10864000EE0FFF1FEE51F84F80819181855B9F4FA8 |
:10865000DCF08091BF068823B9F08091D50683FFB6 |
:1086600034C18091BF06E82FFF27EE0FFF1FEE51A8 |
:10867000F84F80819181875F9F4F0CF426C18091D4 |
:108680003303843609F021C180917902882329F0CF |
:108690008091550288608093550280911B019091D2 |
:1086A0001C01A0911D01B0911E018093FC059093C7 |
:1086B000FD05A093FE05B093FF051092F601109200 |
:1086C000F7011092F8011092F901109288021092AD |
:1086D000890210928A0210928B0210920302109269 |
:1086E0000402109205021092060280915B06E82FA8 |
:1086F000FF27EE0FFF1FEE51F84F808191818D59BA |
:108700009F4FACF480915C06E82FFF27EE0FFF1F10 |
:10871000EE51F84F808191810190F081E02DF7FFBB |
:1087200003C0F095E195FF4FE436F10534F48091F4 |
:10873000BF06882311F480933103809131038F5F4A |
:10874000809331038E3F08F458C18091CA089091FC |
:10875000CB0897FF03C0909581959F4F8197B4F404 |
:10876000809186089091870897FF03C09095819526 |
:108770009F4F45975CF4809177089091780897FF18 |
:1087800003C0909581959F4F459714F01092790200 |
:10879000109231038091CF03882309F093C0809118 |
:1087A0007902882309F48EC080916E03882309F032 |
:1087B00089C081E090E0909357028093560281E057 |
:1087C00080938D0210921A0310921B0310921C03C7 |
:1087D00010921D031092B8021092B9021092BA02C0 |
:1087E0001092BB021092B4021092B5021092B6021F |
:1087F0001092B70280917606E82EFF2400271127F9 |
:108800008091C3089091C4089C01442737FD40958E |
:10881000542FC801B7010E942D7ADC01CB0180934F |
:10882000C8029093C902A093CA02B093CB02809170 |
:10883000D5089091D6089C01442737FD4095542FC8 |
:10884000C801B7010E942D7ADC01CB018093C002E0 |
:108850009093C102A093C202B093C3028091E80238 |
:108860009091E902A091EA02B091EB028093C402D8 |
:108870009093C502A093C602B093C7028091E00214 |
:108880009091E102A091E202B091E3028093BC02D8 |
:108890009093BD02A093BE02B093BF021092B002AB |
:1088A0001092B1021092B2021092B3021092AC0276 |
:1088B0001092AD021092AE021092AF0284E6809345 |
:1088C00078029BC08CED95E091C01092310395C069 |
:1088D000FF27EE0FFF1FEE51F84F80819181853603 |
:1088E00091059CF08091D50683FD0BC0E22FFF27F8 |
:1088F000EE0FFF1FEE51F84F80819181855B9F4FF6 |
:10890000DCF08091BF068823B9F08091D50683FF03 |
:1089100072C08091BF06E82FFF27EE0FFF1FEE51B8 |
:10892000F84F808191818E5C9F4F0CF064C08091E4 |
:1089300033038C3909F05FC080915B06E82FFF2775 |
:10894000EE0FFF1FEE51F84F808191818D599F4F9F |
:10895000ACF480915C06E82FFF27EE0FFF1FEE516D |
:10896000F84F808191810190F081E02DF7FF03C0E5 |
:10897000F095E195FF4FE436F1053CF48091BF0698 |
:10898000882319F48093320318C01092B002109219 |
:10899000B1021092B2021092B3021092AC02109285 |
:1089A000AD021092AE021092AF0210929F0210928E |
:1089B0009E0210929D0210929C02809132038F5F62 |
:1089C000809332038B3F70F010928D02109232032D |
:1089D0001092570210925602809154028F71809328 |
:1089E00054020BC0843649F48CEA9DE09093EB016D |
:1089F0008093EA0102C0109232032091500230911C |
:108A0000510273E0283E370708F045C0809100020C |
:108A1000909101028B569F4F1CF02F5F3F4F05C076 |
:108A200021153105C1F1215030403093510220937E |
:108A3000500231C010923303109251021092500232 |
:108A40002AC02E5E324038F18091E0089091E10812 |
:108A50008059914000F58091880290918902A091FF |
:108A60008A02B0918B028C5D9540A040B0409CF48E |
:108A700080E395E7909351028093500280915602D3 |
:108A8000909157028A5E934030F089EE93E0909384 |
:108A900057028093560280913E01815080933E019F |
:108AA00080913E018F3F21F08091550284FFDFC30A |
:108AB0000E94E23CB090710680913C0390913D038E |
:108AC0009C01220F331F280F391FC0905B06AC2D6D |
:108AD000BB27AA0FBB1FFD01EE51F84F4B2D5527A9 |
:108AE00080819181849FB001859F700D949F700D4E |
:108AF0001124260F371F37FF02C02D5F3F4FB901EA |
:108B00007595679575956795A85DB74F80917206C5 |
:108B1000082F11278D919C91809FD001819FB00DCE |
:108B2000909FB00D11246A0F7B1F70933D036093DB |
:108B30003C0380913E0390913F039C01220F331F21 |
:108B4000280F391FD0905C06AD2DBB27AA0FBB1F85 |
:108B5000FD01EE51F84F80819181849FF001859F46 |
:108B6000F00D949FF00D11242E0F3F1F37FF02C010 |
:108B70002D5F3F4FA9015595479555954795A85DA0 |
:108B8000B74F8D919C91809F7001819FF00C909FB9 |
:108B9000F00C11244E0D5F1D50933F0340933E0394 |
:108BA00080916202882309F448C0CB0177FD0396C7 |
:108BB000DC01B595A795B595A795CA0157FD039614 |
:108BC000FC01F595E795F595E7958091A001682F53 |
:108BD000772767FD70956A9F90016B9F300D7A9F94 |
:108BE000300D112480917003482F552747FD509573 |
:108BF0004E9FC0014F9F900D5E9F900D1124280F36 |
:108C0000391F37FF02C0295F3F4F03E03595279595 |
:108C10000A95E1F730939F0220939E026E9F900188 |
:108C20006F9F300D7E9F300D11244A9FC0014B9FD6 |
:108C3000900D5A9F900D11243FC08091BD06E82FE2 |
:108C4000FF27EA5BFE4F86818093A001908190937D |
:108C50007003A82FBB27A7FDB095A69F9001A79FE3 |
:108C6000300DB69F300D1124E92FFF27E7FDF09559 |
:108C7000E49FC001E59F900DF49F900D1124280FF3 |
:108C8000391F37FF02C0295F3F4F13E03595279505 |
:108C90001A95E1F730939F0220939E02A49F9001C2 |
:108CA000A59F300DB49F300D1124E69FC001E79FB2 |
:108CB000900DF69F900D1124281B390B37FF02C031 |
:108CC000295F3F4F43E0359527954A95E1F730936B |
:108CD0009D0220939C0280915E06E82FFF27EE0FF5 |
:108CE000FF1FEE51F84F80819181909581959F4FA4 |
:108CF00090939B0280939A028530910514F004971B |
:108D000005C00FEF8C3F900734F4049690939B02BC |
:108D100080939A0204C010929B0210929A02809152 |
:108D20005002909151028150924078F180919E02C0 |
:108D300090919F0297FD079623E0959587952A9538 |
:108D4000E1F790939F0280939E0280919C02909104 |
:108D50009D0297FD079603E0959587950A95E1F7A3 |
:108D600090939D0280939C021092B0021092B102E7 |
:108D70001092B2021092B3021092AC021092AD02A5 |
:108D80001092AE021092AF0243C080915D0388231F |
:108D900009F43EC0282F332780919E0290919F02B4 |
:108DA00097FD079613E0959587951A95E1F7289F0B |
:108DB000A001299F500D389F500D1124CA0157FD65 |
:108DC0000F96B4E095958795BA95E1F790939F0239 |
:108DD00080939E0280919C0290919D0297FD079640 |
:108DE000A3E095958795AA95E1F7289FB001299F63 |
:108DF000700D389F700D1124CB0177FD0F96F4E0B4 |
:108E000095958795FA95E1F790939D0280939C0242 |
:108E100080909E0290909F028091600390916103E8 |
:108E2000881A990A90929F0280929E0200919C0259 |
:108E300010919D0280915E0390915F03081B190BB6 |
:108E400010939D0200939C0280915D06E82FFF27FE |
:108E5000EE0FFF1FEE51F84FE080F1808FE790E0BA |
:108E6000E80EF91EF0929902E09298028091740146 |
:108E70009927AA2797FDA095BA2FBC01CD010E9482 |
:108E8000A179DC01CB0120E030E040E251E4BC01FB |
:108E9000CD010E940F79DC01CB01BC01CD010E9404 |
:108EA0007379DC01CB018093CF08809173018093AB |
:108EB000A508809172019927AA2797FDA095BA2F3E |
:108EC000BC01CD010E94A179DC01CB0120E030E0A2 |
:108ED00040E251E4BC01CD010E940F79DC01CB01DD |
:108EE000BC01CD010E947379DC01CB0180937E0827 |
:108EF00080917101809394088091F60380FF59C09E |
:108F00008091D808813808F454C08091EF039927E4 |
:108F100087FD90952B2D3327829FD001839FB00D25 |
:108F2000929FB00D11248A0E9B1E90929F028092F8 |
:108F30009E028091F003992787FD9095829FF00112 |
:108F4000839FF00D929FF00D11240E0F1F1F1093A1 |
:108F50009D0200939C028091F103282F332727FD67 |
:108F6000309580919A0290919B02820F931F90936B |
:108F70009B0280939A028091F303282F332727FDC9 |
:108F8000309580916C069927289F8001299F100DAC |
:108F9000389F100D112410934501009344018091D6 |
:108FA000F20399278E159F0524F4909399028093DC |
:108FB0009802809198029091990297FF04C01092B4 |
:108FC0009902109298028091BF0882FF02C010920D |
:108FD000A50840919E0250919F02CA0157FD039639 |
:108FE0009C01359527953595279537FF03C030951A |
:108FF00021953F4F80915A0290915B02821793070F |
:10900000B4F4CA0157FF03C0909581959F4F97FD17 |
:109010000396959587959595879590935B02809398 |
:109020005A028536910544F084E690E001C001972C |
:1090300090935B0280935A0240919C0250919D0252 |
:10904000CA0157FD03969C013595279535952795BF |
:1090500037FF03C0309521953F4F80915802909182 |
:10906000590282179307B4F4CA0157FF03C09095C1 |
:1090700081959F4F97FD0396959587959595879533 |
:1090800090935902809358028536910544F084E606 |
:1090900090E001C00197909359028093580280910B |
:1090A000550284FF08C010925B0210925A0210927F |
:1090B000590210925802ED2DFF27EE0FFF1FEE51BF |
:1090C000F84F40919606242F3327808191812817ED |
:1090D000390744F48091D20682FF04C081E0809376 |
:1090E0006F0213C0ED2DFF27EE0FFF1FEE51F84F5B |
:1090F000842F992720919706821B91092081318125 |
:109100002817390714F410926F0240915C06E42F7F |
:10911000FF27EE0FFF1FEE51F84F50919606852F57 |
:10912000992722273327281B390B808191818217A9 |
:10913000930744F48091D20683FF04C081E08093BA |
:109140006E0216C080916E02882391F0E42FFF27F3 |
:10915000EE0FFF1FEE51F84F809197069927851B60 |
:109160009109208131818217930714F410926E02C5 |
:10917000EC2DFF27EE0FFF1FEE51F84F40919606A2 |
:10918000242F3327808191812817390744F4809157 |
:10919000D20680FF04C081E080936C0217C08091EA |
:1091A0006C02882399F0EC2DFF27EE0FFF1FEE5184 |
:1091B000F84F842F992720919706821B91092081CF |
:1091C00031812817390714F410926C0240915B0624 |
:1091D000E42FFF27EE0FFF1FEE51F84F5091960638 |
:1091E000852F992722273327281B390B80819181CE |
:1091F0008217930744F48091D20681FF04C081E076 |
:1092000080936D0216C080916D02882391F0E42F47 |
:10921000FF27EE0FFF1FEE51F84F80919706992719 |
:10922000851B9109208131818217930714F41092D4 |
:109230006D0280916F02882319F480916E02811172 |
:1092400081E08093700280916C02882321F48091E8 |
:109250006D02882351F081E08093710210927002B8 |
:1092600010926F0210926E0202C080937102809180 |
:109270007002882321F480917102882369F0809123 |
:109280009506992729813A818217930714F49A83C6 |
:10929000898381E08093A4028091540299279C01E4 |
:1092A0002470307082FF31C080916003909161031F |
:1092B000909581959F4F90939F0280939E028091FD |
:1092C0005E0390915F03909581959F4F90939D02CF |
:1092D00080939C02809180019091810190939902EA |
:1092E0008093980210929B0210929A028091BF087C |
:1092F0008B778B668093BF088091A3088C7B8093CB |
:10930000A30888EC80936B021EC08091550284FFF5 |
:109310001AC030939B0220939A0230939F022093AD |
:109320009E0230939D0220939C029AE59093CF0871 |
:1093300088E78093A50890937E0880939408109204 |
:109340007002109271028091970890919808A091F4 |
:109350009908B0919A082091E8023091E902409171 |
:10936000EA025091EB02820F931FA41FB51F809356 |
:10937000970890939808A0939908B0939A088091C1 |
:109380009F089091A008A091A108B091A208E09038 |
:10939000E002F090E1020091E2021091E302EB8220 |
:1093A000FC820D831E838E0D9F1DA01FB11F809315 |
:1093B0009F089093A008A093A108B093A208809161 |
:1093C0008C0890918D08A0918E08B0918F08E09044 |
:1093D000E402F090E5020091E6021091E702EF82CC |
:1093E000F88609871A878E0D9F1DA01FB11F8093D5 |
:1093F0008C0890938D08A0938E08B0938F0880916D |
:109400007F0890918008A0918108B0918208E09037 |
:10941000DC02F090DD020091DE021091DF02EB86AB |
:10942000FC860D871E878E0D9F1DA01FB11F809388 |
:109430007F0890938008A0938108B0938208F090F1 |
:109440007102FF86FF2029F480917002882309F4BD |
:1094500060C01092D8021092D9021092DA021092D3 |
:10946000DB021092D4021092D5021092D602109212 |
:10947000D7021092970810929808109299081092AB |
:109480009A0810929F081092A0081092A1081092BA |
:10949000A20810928C0810928D0810928E081092DB |
:1094A0008F0810927F081092800810928108109205 |
:1094B00082088091C8029091C902A091CA02B0911D |
:1094C000CB028093C4029093C502A093C602B093CE |
:1094D000C7028091C0029091C102A091C202B091D6 |
:1094E000C3028093BC029093BD02A093BE02B093CE |
:1094F000BF021092FF011092FE01109275021092AD |
:10950000740210927702109276020F85002309F000 |
:10951000D0C180917002882309F0CBC18091FA05F7 |
:109520009091FB05815092402CF480918D0288230C |
:1095300009F4BFC190905109A09076062090C3080D |
:109540003090C4084090D5085090D60819140CF0FB |
:10955000BBC0BB24CC24DD24CA01B901A6019501FE |
:109560000E94A17A79018A0180911A0990911B09C0 |
:10957000281A390AC101AA2797FDA095BA2FE81A1F |
:10958000F90A0A0B1B0B6B817C818D819E81A601E0 |
:1095900095010E94A17A59016A0180911C0990915C |
:1095A0001D09481A590AC201AA2797FDA095BA2F8A |
:1095B000A81AB90ACA0ADB0A292C332427FC3094DA |
:1095C000432C532CC801B701A20191010E942D7AAE |
:1095D00097FF04C061507E4F8F4F9F4F3B014C015E |
:1095E00009E095948794779467940A95D1F7C6011A |
:1095F000B501A20191010E942D7A97FF04C061502C |
:109600007E4F8F4F9F4F5B016C0119E0D594C7943B |
:10961000B794A7941A95D1F780915A0290915B0262 |
:10962000813491053CF48091580290915902813423 |
:109630009105D4F0D401C30197FE03C00196A11D8A |
:10964000B11D3C014D019594879477946794D601A0 |
:10965000C501D7FE03C00196A11DB11D5C016D01BE |
:10966000D594C794B794A79480915309282F332792 |
:1096700027FD3095432F532F2615370548055905EB |
:1096800014F439014A01992787FD909590958195A9 |
:109690009F4FAA2797FDA095BA2F681679068A06CC |
:1096A0009B0614F43C014D012A153B054C055D0554 |
:1096B00014F459016A01A816B906CA06DB060CF0B3 |
:1096C000D0C05C016D01CDC0EA2CFF24002711271A |
:1096D000CA01B901A80197010E94A17A39014A0182 |
:1096E000C101AA2797FDA095BA2F681A790A8A0A9C |
:1096F0009B0A6B817C818D819E81A80197010E94CC |
:10970000A17A59016A01C201AA2797FDA095BA2F33 |
:10971000A81AB90ACA0ADB0AD401C30197FE03C01A |
:109720000F96A11DB11D3C014D01F4E09594879465 |
:1097300077946794FA95D1F7D601C501D7FE03C097 |
:109740000F96A11DB11D5C016D01E4E0D594C79495 |
:10975000B794A794EA95D1F780915A0290915B0251 |
:10976000813491053CF480915802909159028134E2 |
:109770009105A4F0C401B30123E030E040E050E0E3 |
:109780000E94A17A39014A01C601B50123E030E007 |
:1097900040E050E00E94A17A59016A0180915E0682 |
:1097A000E82FFF27EE0FFF1FEE51F84F80819181C8 |
:1097B0000190F081E02DF7FF03C0F095E195FF4F98 |
:1097C0007A97A4F0C401B30123E030E040E050E018 |
:1097D0000E94A17A39014A01C601B50123E030E0B7 |
:1097E00040E050E00E94A17A59016A0189E180932A |
:1097F0008C0121E262167104810491042CF070E264 |
:10980000672E712C812C912C30EE63163FEF73067E |
:109810003FEF83063FEF930644F460EE662E6FEF52 |
:10982000762E6FEF862E6FEF962E41E2A416B104CE |
:10983000C104D1042CF050E2A52EB12CC12CD12CA6 |
:1098400050EEA5165FEFB5065FEFC5065FEFD506D4 |
:1098500044F440EEA42E4FEFB42E4FEFC42E4FEF42 |
:10986000D42E8091C8029091C902A091CA02B091F1 |
:10987000CB0286199709A809B9098093C802909369 |
:10988000C902A093CA02B093CB028091C00290910A |
:10989000C102A091C202B091C3028A199B09AC090E |
:1098A000BD098093C0029093C102A093C202B093FD |
:1098B000C3028091FE019091FF018F3F910509F055 |
:1098C00008F4C4C56F85662309F04EC58091700207 |
:1098D000882309F049C58091A402882309F044C572 |
:1098E00070919E06788B772309F43EC58091970886 |
:1098F00090919808A0919908B0919A08B7FF04C078 |
:1099000081509F4FAF4FBF4FE92EFA2E0B2F1127DB |
:1099100007FD1A95E0929708F0929808009399082D |
:1099200010939A0880919F089091A008A091A10897 |
:10993000B091A208B7FF04C081509F4FAF4FBF4FF7 |
:10994000892F9A2FAB2FBB27A7FDBA95898B9A8BAE |
:10995000AB8BBC8B80939F089093A008A093A10829 |
:10996000B093A20880917606A82EBB24CC24DD24D7 |
:109970002091D8023091D9024091DA025091DB0255 |
:10998000C601B5010E942D7A97FF04C061507F4F38 |
:109990008F4F9F4F672E782E892E992487FC9A949B |
:1099A0006092D8027092D9028092DA029092DB0221 |
:1099B0002091D4023091D5024091D6025091D70225 |
:1099C000C601B5010E942D7A97FF04C061507F4FF8 |
:1099D0008F4F9F4F272E382E492E552447FC5A94DF |
:1099E0002092D4023092D5024092D6025092D702F1 |
:1099F0008091D0029091D102A091D202B091D30275 |
:109A0000B7FF04C081509F4FAF4FBF4F892F9A2F90 |
:109A1000AB2FBB27A7FDBA958093D0029093D102BC |
:109A2000A093D202B093D302D801C7018619970937 |
:109A3000A809B9098093260390932703A0932803CC |
:109A4000B093290320919D06E22EFF2400271127C1 |
:109A5000BC01CD01A80197010E94A17A59016A01B8 |
:109A600020933403309335034093360350933703E8 |
:109A700089899A89AB89BC8982199309A409B50996 |
:109A800080932A0390932B03A0932C03B0932D0370 |
:109A9000BC01CD01A80197010E94A17A209338034F |
:109AA0003093390340933A0350933B03D601C501E9 |
:109AB000D7FE04C081509F4FAF4FBF4F892F9A2FC1 |
:109AC000AB2FBB27A7FDBA959093750280937402C4 |
:109AD00057FF04C021503F4F4F4F5F4FBB2757FDEB |
:109AE000BA95A52F942F832F9093770280937602B7 |
:109AF00080915A0290915B0281349105DCF480914F |
:109B000058029091590281349105A4F480915E0627 |
:109B1000E82FFF27EE0FFF1FEE51F84F8081918154 |
:109B20000190F081E02DF7FF03C0F095E195FF4F24 |
:109B30007A97E4F0809151098F3FC1F480917402CB |
:109B40009091750297FD0196959587959093750272 |
:109B500080937402809176029091770297FD01962E |
:109B600095958795909377028093760280918C08E3 |
:109B700090918D08A0918E08B0918F08B7FF04C016 |
:109B800081509F4FAF4FBF4F892F9A2FAB2FBB27CD |
:109B9000A7FDBA9580938C0890938D08A0938E08AA |
:109BA000B0938F0880917F0890918008A0918108E0 |
:109BB000B0918208B7FF04C081509F4FAF4FBF4F95 |
:109BC000892F9A2FAB2FBB27A7FDBA9580937F08CB |
:109BD00090938008A0938108B09382088091E80256 |
:109BE0009091E902A091EA02B091EB022F813885B1 |
:109BF00049855A85281B390B4A0B5B0B20931E03A2 |
:109C000030931F0340932003509321038091E0027F |
:109C10009091E102A091E202B091E302EB84FC8416 |
:109C20000D851E85E81AF90A0A0B1B0BE092220328 |
:109C3000F09223030093240310932503209326031B |
:109C4000309327034093280350932903E0922A037B |
:109C5000F0922B0300932C0310932D038091C402E8 |
:109C60009091C502A091C602B091C702821B930BCE |
:109C7000A40BB50B8093C4029093C502A093C602B7 |
:109C8000B093C7028091BC029091BD02A091BE0228 |
:109C9000B091BF028E199F09A00BB10B8093BC023B |
:109CA0009093BD02A093BE02B093BF02888988231F |
:109CB000E1F02091A2023091A302213831054CF04D |
:109CC0008091FA029091FB0201969093FB0280939F |
:109CD000FA0220583F4F4CF48091FA029091FB0217 |
:109CE00001979093FB028093FA021092A3021092C4 |
:109CF000A20281E090E09093410380934003E090C2 |
:109D00002603F09027030091280310912903D8011E |
:109D1000C70117FF07C088279927DC018E199F0903 |
:109D2000A00BB10B81509240A040B04034F084E0D1 |
:109D300090E090934103809340038091460390917B |
:109D40004703A0914803B0914903209197083091AF |
:109D500098084091990850919A08821B930BA40B84 |
:109D6000B50B815E914BAF4FBF4F8F539C49A040C5 |
:109D7000B04028F08091520989310CF4FFC021E0F5 |
:109D8000E21620E1F20620E0020720E012070CF4C0 |
:109D900073C080914203882309F46AC0D801C701C7 |
:109DA00017FF07C088279927DC018E199F09A00B90 |
:109DB000B10B9C01AD01B7FF04C021503E4F4F4F86 |
:109DC0005F4FF9E05595479537952795FA95D1F767 |
:109DD0008091400390914103820F931F9093410320 |
:109DE00080934003D801C70117FF03C00796A11D48 |
:109DF000B11DE3E0B595A79597958795EA95D1F7BD |
:109E00008093340390933503A0933603B0933703C4 |
:109E100089589341A040B04064F088E893E1A0E005 |
:109E2000B0E08093340390933503A0933603B0934E |
:109E3000370320913403309135034091360350911C |
:109E4000370357FF04C021503F4F4F4F5F4F232F21 |
:109E5000342F452F552747FD5A95809174029091D4 |
:109E60007502820F931F909375028093740206C04F |
:109E700081E08093420302C01092420340E0E41666 |
:109E800040EFF4064FEF04074FEF14070CF073C0D8 |
:109E900080914303882309F46AC0D801C70117FFE2 |
:109EA00007C088279927DC018E199F09A00BB10BE9 |
:109EB0009C01AD01B7FF04C021503E4F4F4F5F4F93 |
:109EC00069E055954795379527956A95D1F7809123 |
:109ED000400390914103820F931F9093410380931D |
:109EE0004003D801C70117FF03C00796A11DB11D8C |
:109EF00023E0B595A795979587952A95D1F78093F7 |
:109F0000340390933503A0933603B09337038857F7 |
:109F10009C4EAF4FBF4F64F488E79CEEAFEFBFEFAE |
:109F20008093340390933503A0933603B0933703A3 |
:109F3000209134033091350340913603509137031B |
:109F400057FF04C021503F4F4F4F5F4F232F342FF7 |
:109F5000452F552747FD5A958091740290917502BF |
:109F6000820F931F909375028093740211C081E059 |
:109F7000809343030DC0109243030AC01092410323 |
:109F80001092400384E690E090938B0180938A01C5 |
:109F90006889262F33278091400390914103281729 |
:109FA000390724F430934103209340031091520960 |
:109FB000112379F0212F332727FD3095809140031D |
:109FC000909141032817390724F4309341032093DB |
:109FD000400340912603509127036091280370911C |
:109FE0002903413851056105710574F08091FE0225 |
:109FF0009091FF022091400330914103820F931F03 |
:10A000009093FF028093FE0240585F4F6F4F7F4F47 |
:10A0100074F48091FE029091FF02209140033091F0 |
:10A020004103821B930B9093FF028093FE0281E019 |
:10A0300090E09093410380934003C0902A03D09016 |
:10A040002B03E0902C03F0902D03D701C601F7FEFF |
:10A0500007C088279927DC018C199D09AE09BF0923 |
:10A0600081509240A040B04034F084E090E0909362 |
:10A0700041038093400380914A0390914B03A09148 |
:10A080004C03B0914D0320919F083091A00840915E |
:10A09000A1085091A208821B930BA40BB50B815E03 |
:10A0A000914BAF4FBF4F8F539C49A040B04018F029 |
:10A0B00019310CF4FFC001E0C01600E1D00600E049 |
:10A0C000E00600E0F0060CF473C08091440388239E |
:10A0D00009F46AC0D701C601F7FE07C0882799278F |
:10A0E000DC018C199D09AE09BF099C01AD01B7FFC8 |
:10A0F00004C021503E4F4F4F5F4F09E055954795A3 |
:10A10000379527950A95D1F78091400390914103A7 |
:10A11000820F931F9093410380934003D701C601A0 |
:10A12000F7FE03C00796A11DB11D13E0B595A795D5 |
:10A13000979587951A95D1F78093380390933903B3 |
:10A14000A0933A03B0933B0389589341A040B04099 |
:10A1500064F088E893E1A0E0B0E080933803909346 |
:10A160003903A0933A03B0933B0320913803309115 |
:10A17000390340913A0350913B0357FF04C02150EB |
:10A180003F4F4F4F5F4F232F342F452F552747FD0C |
:10A190005A958091760290917702820F931F909347 |
:10A1A00077028093760206C081E08093440302C068 |
:10A1B0001092440320E0C21620EFD2062FEFE206F1 |
:10A1C0002FEFF2060CF073C080914503882309F449 |
:10A1D0006AC0D701C601F7FE07C088279927DC01AE |
:10A1E0008C199D09AE09BF099C01AD01B7FF04C0E0 |
:10A1F00021503E4F4F4F5F4FE9E0559547953795BA |
:10A200002795EA95D1F78091400390914103820F01 |
:10A21000931F9093410380934003D701C601F7FE3B |
:10A2200003C00796A11DB11D73E0B595A79597953D |
:10A2300087957A95D1F78093380390933903A0934B |
:10A240003A03B0933B0388579C4EAF4FBF4F64F423 |
:10A2500088E79CEEAFEFBFEF80933803909339030C |
:10A26000A0933A03B0933B03209138033091390314 |
:10A2700040913A0350913B0357FF04C021503F4F98 |
:10A280004F4F5F4F232F342F452F552747FD5A95AA |
:10A290008091760290917702820F931F90937702BC |
:10A2A0008093760211C081E0809345030DC0109227 |
:10A2B00045030AC0109241031092400384E690E0E7 |
:10A2C00090938B0180938A014889242F33278091B2 |
:10A2D0004003909141032817390724F43093410338 |
:10A2E0002093400380915209882379F0282F332747 |
:10A2F00027FD30958091400390914103281739073D |
:10A3000024F4309341032093400340912A03509159 |
:10A310002B0360912C0370912D0341385105610589 |
:10A32000710574F08091FC029091FD022091400330 |
:10A3300030914103820F931F9093FD028093FC02A2 |
:10A3400040585F4F6F4F7F4FCCF48091FC0290914B |
:10A35000FD022091400330914103821B930B9093A7 |
:10A36000FD028093FC020AC01092770210927602DE |
:10A3700010927502109274021092A4028091A508A6 |
:10A38000882341F41092770210927602109275029F |
:10A39000109274028091970890919808A091990862 |
:10A3A000B0919A088093460390934703A093480383 |
:10A3B000B093490380919F089091A008A091A108B3 |
:10A3C000B091A20880934A0390934B03A0934C034F |
:10A3D000B0934D031092D8021092D9021092DA0273 |
:10A3E0001092DB021092D4021092D5021092D60283 |
:10A3F0001092D7021092D0021092D1021092D20283 |
:10A400001092D3021092970810929808109299080F |
:10A4100010929A0810929F081092A0081092A1081A |
:10A420001092A20810928C0810928D0810928E083B |
:10A4300010928F0810927F08109280081092810865 |
:10A44000109282081092FF011092FE01E0909A0291 |
:10A45000F0909B02C701F7FE04C0882799278E1948 |
:10A460009F0904973CF08091BF0884FD03C082E3FC |
:10A470008093780210917306A12EBB24CC24DD2496 |
:10A48000B701882777FD8095982F9701F7FE04C0C4 |
:10A49000222733272E193F09442737FD4095542F93 |
:10A4A0000E942D7A9B01AC01C601B5010E942D7A54 |
:10A4B00097FF04C061507E4F8F4F9F4F59E0959595 |
:10A4C0008795779567955A95D1F79B01812F9927A5 |
:10A4D0008E9DD0018F9DB00D9E9DB00D1124CD019C |
:10A4E000B7FD03969595879595958795280F391F04 |
:10A4F00080915002909151028150924010F020E0E2 |
:10A5000030E080917A0290917B02280F391F442716 |
:10A5100037FD4095542F20931A0330931B0340932B |
:10A520001C0350931D038091B8029091B902A09131 |
:10A53000BA02B091BB02821B930BA40BB50B8093A4 |
:10A54000B8029093B902A093BA02B093BB028155AE |
:10A55000934CA040B04064F080E593ECA0E0B0E004 |
:10A560008093B8029093B902A093BA02B093BB0251 |
:10A570008091B8029091B902A091BA02B091BB0249 |
:10A58000805B9C43AF4FBF4F64F480EB9CE3AFEF25 |
:10A59000BFEF8093B8029093B902A093BA02B09330 |
:10A5A000BB0280908E0190908F0197FCFBC0809140 |
:10A5B000BF0883FFF7C080918D01815080938D018A |
:10A5C000882309F0F3C08DE080938D018091E8022B |
:10A5D0009091E902A091EA02B091EB02B7FF04C0AA |
:10A5E00081509E4FAF4FBF4F39E0B595A7959795D6 |
:10A5F00087953A95D1F78C0197FF03C01095019587 |
:10A600001F4F8091E0029091E102A091E202B0918F |
:10A61000E302B7FF04C081509E4FAF4FBF4F29E008 |
:10A62000B595A795979587952A95D1F79C0197FFA2 |
:10A6300003C0309521953F4F021713070CF4890191 |
:10A64000B80117FF02C0695F7F4F3B01B3E075940B |
:10A650006794BA95E1F7A2E0EA2EF12C6E0C7F1C0C |
:10A66000A090D108B090D208C090D308D090D40860 |
:10A6700020914001309141014091420150914301AC |
:10A68000C601B5010E94A17A19012A0130937D0803 |
:10A6900020937C08821A930AC401845E9D4F68E669 |
:10A6A00071E00E946C7AAC01445B504020917802CA |
:10A6B000222321F03092A7022092A60280918A01E3 |
:10A6C00090918B01009731F0019790938B018093CB |
:10A6D0008A0112C0093111057CF48091A202909187 |
:10A6E000A302840F951F9093A3028093A2022223BA |
:10A6F00019F021502093780280918A0190918B016A |
:10A70000892BF9F480918C019927489F8001499FFA |
:10A71000100D589F100D1124C801B3010E946C7ACE |
:10A72000CB01AA2797FDA095BA2FA80EB91ECA1E65 |
:10A73000DB1EA092D108B092D208C092D308D0926A |
:10A74000D40880917802882369F58091A6029091BF |
:10A75000A70220917C0830917D08821B930B845EB8 |
:10A760009D4F68E671E00E946C7A9C01245B30404A |
:10A770008091770186959927289FA001299F500DE8 |
:10A78000389F500D11249A0157FF02C0215F3F4F9F |
:10A79000F4E035952795FA95E1F730937B02209305 |
:10A7A0007A0204C010927B0210927A028091A40275 |
:10A7B000882381F01092AC021092AD021092AE028A |
:10A7C0001092AF021092B0021092B1021092B20237 |
:10A7D0001092B302809171028823F1F48091A50850 |
:10A7E000282F3327442755278091E8029091E902CA |
:10A7F000A091EA02B091EB02BC01CD010E942D7A3A |
:10A80000DC01CB01BC01CD0128EF3AE240E050E091 |
:10A810000E94A17A390102C06624772480917002D7 |
:10A820008823F1F48091A508282F33274427552742 |
:10A830008091E0029091E102A091E202B091E302E6 |
:10A84000BC01CD010E942D7ADC01CB01BC01CD0100 |
:10A8500028EF3AE240E050E00E94A17A290102C0CC |
:10A86000442455248091790890917A08893C910577 |
:10A870001CF088EC90E005C088539F4F34F488E3C7 |
:10A880009FEF90937A088093790880918408909143 |
:10A890008508893C91051CF088EC90E005C0885340 |
:10A8A0009F4F34F488E39FEF90938508809384084A |
:10A8B0008091860890918708AA2797FDA095BA2FC6 |
:10A8C0002091CF08A22EBB24CC24DD24BC01CD01D5 |
:10A8D000A60195010E942D7A9B01AC018091790817 |
:10A8E00090917A08AA2797FDA095BA2FE7E0880FE4 |
:10A8F000991FAA1FBB1FEA95D1F7280F391F4A1FBE |
:10A900005B1F57FF04C0215C3F4F4F4F5F4F76E006 |
:10A9100055954795379527957A95D1F78301020F7D |
:10A92000131F1093870800938608809177089091F1 |
:10A930007808AA2797FDA095BA2FBC01CD01A601E2 |
:10A9400095010E942D7A9B01AC0180918408909121 |
:10A950008508AA2797FDA095BA2F67E0880F991F51 |
:10A96000AA1FBB1F6A95D1F7280F391F4A1F5B1F0B |
:10A9700057FF04C0215C3F4F4F4F5F4FA6E05595F6 |
:10A98000479537952795AA95D1F77201E20EF31EE8 |
:10A99000F0927808E09277088091CA089091CB08ED |
:10A9A000880F991FAA2797FDA095BA2F20917E089E |
:10A9B000332744275527BC01CD010E942D7A5B0126 |
:10A9C0006C0197FF08C08FE390E0A0E0B0E0A80E14 |
:10A9D000B91ECA1EDB1EF6E0D594C794B794A7949F |
:10A9E000FA95D1F780919408282F332744275527CB |
:10A9F0008091CC029091CD02A091CE02B091CF0275 |
:10AA0000BC01CD010E942D7ADC01CB01BC01CD013E |
:10AA100020EF35E540E050E00E94A17AB501620FD9 |
:10AA2000731F7093CB086093CA080150104134F033 |
:10AA300080E090E190938708809386088091860853 |
:10AA4000909187088050904F34F480E090EF90937D |
:10AA5000870880938608B1E0EB16B0E1FB0634F07E |
:10AA600080E090E190937808809377088091770850 |
:10AA7000909178088050904F34F480E090EF90935C |
:10AA80007808809377086150704134F080E090E15D |
:10AA90009093CB088093CA088091CA089091CB0804 |
:10AAA0008050904F34F480E090EF9093CB088093E7 |
:10AAB000CA088091550285FD16C080910201992730 |
:10AAC000209123013091240169817A81689FA0013E |
:10AAD000699F500D789F500D1124CA01B9010E9441 |
:10AAE000587A7A83698380914E03815080934E0314 |
:10AAF0008F3F09F05EC080914F0390915003892BE6 |
:10AB000041F480912301909124019093500380930C |
:10AB10004F03809123019091240120914F033091A4 |
:10AB200050032817390718F42F5F3F4F09C0809151 |
:10AB30002301909124018217930730F42150304073 |
:10AB40003093500320934F0384E680934E0380910B |
:10AB5000BC01282F332740914F03509150034217D7 |
:10AB6000530710F48AE00CC080910001280F311DBA |
:10AB70002417350738F480914C02882319F081504E |
:10AB800080934C028091BB01282F33274217530733 |
:10AB900010F489E10CC080910001280F311D2417A9 |
:10ABA000350738F480914B02882319F08150809347 |
:10ABB0004B0280914C028823D1F080917E029091CB |
:10ABC0007F02A0918002B0918102B7FD10C08091F8 |
:10ABD000CC0680937D0280EE91EBAFEFBFEF8093C8 |
:10ABE0007E0290937F02A0938002B09381028091B5 |
:10ABF000E901882311F40E942F6289819A81880FCC |
:10AC0000991F880F991F9A8389838091BF0880FDBF |
:10AC100002C00C940E5E80917002882311F00C9497 |
:10AC20000E5E40917102442311F00C940E5E8091EF |
:10AC3000CF0399278F779070009711F00C940E5ED8 |
:10AC40004C0120910003309101032115310509F0D9 |
:10AC500044C08091190190911A018959934058F08C |
:10AC600087B5853F20F480910202815011C081E0B8 |
:10AC700080935C0353C08091190190911A0184362E |
:10AC8000910530F587B58B30F8F0809102028F5F27 |
:10AC9000809302029AE089029001112480910606B5 |
:10ACA000821B87BD87B5809588BD8CE291E090932B |
:10ACB000EB018093EA018EE591E09093010380938C |
:10ACC00000030E94851A2AC081E080935B0326C09E |
:10ACD00040935B0340935C0321C0909301028093F7 |
:10ACE00000028091880290918902A0918A02B0911D |
:10ACF0008B0274E0880F991FAA1FBB1F7A95D1F7AA |
:10AD00008093030290930402A0930502B09306027D |
:10AD10002150304030930103209300038091BF08FD |
:10AD200020916B0281FF25C02233E8F480919001CD |
:10AD30008150809390018F3FE1F51092A5028091A0 |
:10AD4000880290918902A0918A02B0918B0280932F |
:10AD5000840290938502A0938602B093870281E0DB |
:10AD60008093900126C0273420F188EC80939001D5 |
:10AD70001DC08091440190914501820F911D209149 |
:10AD80006C063327829FF001839FF00D929FF00D98 |
:10AD90001124CF01AA2797FDA095BA2F8093840292 |
:10ADA00090938502A0938602B093870281E08093FE |
:10ADB000A5028091E8029091E902A091EA02B09187 |
:10ADC000EB02E0904001F0904101009142011091AE |
:10ADD0004301BC01CD01A80197010E94A17A59014C |
:10ADE0006A018091E0029091E102A091E202B091AB |
:10ADF000E302BC01CD01A80197010E94A17AB9012B |
:10AE0000C5010E9456789093910880939008CC9742 |
:10AE100034F08CE390E090939108809390088091B7 |
:10AE20009008909191080E94B76A9093910880933E |
:10AE3000900880E280933F01109283021092820278 |
:10AE40008091A502882309F487C58091550299272E |
:10AE50009C012071307084FD7FC580915402826016 |
:10AE6000809354027091A308872F992761E0C62E22 |
:10AE7000D12CC822D92280FD04C08091BF0881FD59 |
:10AE800010C0E980FA80309352032093510330932D |
:10AE900083022093820280915502806C8093550238 |
:10AEA000BBC28091550281FF8AC20091800110913E |
:10AEB0008101C8010F96A0909802B09099028A155E |
:10AEC0009B0508F07DC080915B03882309F078C062 |
:10AED0008091550287FF15C0809155028F7780932E |
:10AEE00055028091F6019091F701A091F801B0917F |
:10AEF000F9018093840290938502A0938602B09317 |
:10AF00008702E0908308EE20F9F08091840290910E |
:10AF10008502A0918602B0918702BC01CD0124E692 |
:10AF200030E040E050E00E94A17A8E2D9927AA27B8 |
:10AF3000BB2782179307A407B50734F4D092830286 |
:10AF4000C09282028DE337C08091530390915403E5 |
:10AF5000459784F08091F6019091F701A091F80156 |
:10AF6000B091F9018093840290938502A0938602A8 |
:10AF7000B0938702809155028064809355029501B9 |
:10AF8000201B310B2F50304037FF03C030952195E7 |
:10AF90003F4F309383022093820280914C0288239A |
:10AFA00049F0C90163E070E00E946C7A70938302FB |
:10AFB000609382028BE280933F0110927C0234C145 |
:10AFC000C8010F97A816B906C0F520915C0322238B |
:10AFD000A1F58091550286FF15C0809155028F7BA7 |
:10AFE000809355028091F6019091F701A091F801AC |
:10AFF000B091F9018093840290938502A093860218 |
:10B00000B093870280915502806880935502C501F4 |
:10B01000801B910B0F9697FF03C0909581959F4FD2 |
:10B02000909581959F4F90938302809382028DE249 |
:10B0300080933F0120937C02F7C08DE380933F0112 |
:10B0400060917D02662371F120917E0230917F0232 |
:10B0500040918002509181028091840290918502FA |
:10B06000A0918602B091870282179307A407B507C3 |
:10B07000CCF480915502806480935502862F9927E5 |
:10B0800090938302809382028AE080937C028EE513 |
:10B0900080933F018091550287FFC6C08091550281 |
:10B0A0008F7733C0662309F443C020917E0230912C |
:10B0B0007F024091800250918102809184029091A0 |
:10B0C0008502A0918602B0918702281739074A07A6 |
:10B0D0005B0774F580915502806880935502862F36 |
:10B0E0009927909581959F4F909383028093820238 |
:10B0F00086EF80937C0286E780933F018091550222 |
:10B1000086FF92C0809155028F7B8093550280917B |
:10B11000F6019091F701A091F801B091F9018093A7 |
:10B12000840290938502A0938602B09387027CC02C |
:10B1300080915502807C09F477C080917C0288233D |
:10B1400009F04CC08091F6019091F701A091F801AF |
:10B15000B091F901885C9040A040B04020918402F9 |
:10B1600030918502409186025091870282179307A1 |
:10B17000A407B5076CF08091F6019091F701A091BA |
:10B18000F801B091F901885C9040A040B0401DC02A |
:10B190008091F6019091F701A091F801B091F90129 |
:10B1A00088539F4FAF4FBF4F281739074A075B0798 |
:10B1B000BCF08091F6019091F701A091F801B09157 |
:10B1C000F90188539F4FAF4FBF4F809384029093F4 |
:10B1D0008502A0938602B093870202C010927C027F |
:10B1E000809155028F7380935502109252031092F2 |
:10B1F000510371FF06C084EF91E09093EB018093BF |
:10B20000EA0180918C02882379F4809188029091E0 |
:10B210008902A0918A02B0918B02C397A105B10562 |
:10B220001CF081E080938C02609151037091520375 |
:10B230008091820290918302680F791F709352036C |
:10B2400060935103CB0177FF04C088279927861BA1 |
:10B25000970B855F91400CF49BC040917C02442386 |
:10B2600089F180917E0290917F0220918402309139 |
:10B270008502821B930B0996439748F480917E02C6 |
:10B2800090917F02A0918002B091810212C0242F80 |
:10B29000332727FD3095432F532F809184029091BF |
:10B2A0008502A0918602B0918702820F931FA41F8E |
:10B2B000B51F8093840290938502A0938602B09379 |
:10B2C000870224C080916C0620918402309185020F |
:10B2D00040918602509187021616170644F463E0E7 |
:10B2E0000E944C7A280F311D411D511D07C063E09B |
:10B2F0000E944C7A281B310941095109209384028C |
:10B300003093850240938602509387021092520335 |
:10B3100010925103E0908802F090890200918A0215 |
:10B3200010918B02D801C70180509440A040B040DA |
:10B3300020918402309185024091860250918702CB |
:10B3400082179307A407B5075CF4D801C7018050A2 |
:10B350009C4FAF4FBF4F281739074A075B0744F090 |
:10B360008093840290938502A0938602B093870213 |
:10B370008091A30881FF06C084E690E09093EB01E2 |
:10B380008093EA0180917D02882311F40E94F23FAC |
:10B390008091000390910103892BD1F18091F601F6 |
:10B3A0009091F701A091F801B091F9018093840286 |
:10B3B00090938502A0938602B093870229C0809162 |
:10B3C000880290918902A0918A02B0918B028059E3 |
:10B3D0009140A040B0408093840290938502A09356 |
:10B3E0008602B093870280917006882311F0992716 |
:10B3F00002C08FE790E09093810180938001E98003 |
:10B40000FA80F0927302E09272028EE280933F0122 |
:10B41000E0907202F09073028091F6019091F70132 |
:10B42000A091F801B091F901209184023091850238 |
:10B430004091860250918702281739074A075B0717 |
:10B4400024F08091A30880FD99C280914D02882349 |
:10B4500009F094C28091000390910103892B49F077 |
:10B46000E0907202F0907302109254031092530312 |
:10B47000E1C08091F6019091F701A091F801B0919F |
:10B48000F901821B930BA40BB50B80931E039093C1 |
:10B490001F03A0932003B0932103823000E890079C |
:10B4A0000FEFA0070FEFB0072CF481E090E8AFEFAB |
:10B4B000BFEF09C08F5F9F47A040B04064F08FEF9F |
:10B4C0009FE7A0E0B0E080931E0390931F03A0933A |
:10B4D0002003B093210380911E0390911F0390934A |
:10B4E00054038093530380917901282F33274427F5 |
:10B4F000552780911E0390911F03A0912003B091C6 |
:10B500002103BC01CD010E942D7A97FF04C0615E2A |
:10B510007F4F8F4F9F4F55E095958795779567950E |
:10B520005A95D1F760931E0370931F0380932003F5 |
:10B530009093210365302EEF72072FEF82072FEFD4 |
:10B5400092072CF484E09EEFAFEFBFEF09C060508C |
:10B5500074408040904064F080E094E0A0E0B0E06F |
:10B5600080931E0390931F03A0932003B0932103A5 |
:10B5700080901E0390901F032091000230910102E1 |
:10B5800037FF02C0295F3F4F43E0359527954A9525 |
:10B59000E1F74FEF223834071CF421E83FEF05C0F4 |
:10B5A0002038310514F020E830E0C901AA2797FDC2 |
:10B5B000A095BA2F20917A01332744275527BC0143 |
:10B5C000CD010E942D7A97FF04C06D5F7F4F8F4F92 |
:10B5D0009F4F22E095958795779567952A95D1F7A6 |
:10B5E0009B015FEF613075071CF420E03FEF06C060 |
:10B5F0006F3F710519F014F020E031E080915502A1 |
:10B60000807C49F0C90137FD03969C01359527954B |
:10B61000359527950DC08091A30880FF09C0C90109 |
:10B6200037FD07969C0103E0359527950A95E1F7CC |
:10B63000820E931E20917801222309F454C0609158 |
:10B64000A8027091A9028091AA029091AB0297FF83 |
:10B6500004C061587F4F8F4F9F4F17E09595879596 |
:10B66000779567951A95D1F73327442755270E9478 |
:10B670002D7A97FF04C0615E7F4F8F4F9F4FB5E0DB |
:10B680009595879577956795BA95D1F760931E0341 |
:10B6900070931F0380932003909321036138AFEFD1 |
:10B6A0007A07AFEF8A07AFEF9A072CF480E89FEF95 |
:10B6B000AFEFBFEF0AC06F3F71058105910569F0DB |
:10B6C00064F080E091E0A0E0B0E080931E039093EE |
:10B6D0001F03A0932003B093210380911E03909138 |
:10B6E0001F03880E991E80917601282F33278091A1 |
:10B6F0005509992787FD9095289FF001299FF00D06 |
:10B70000389FF00D11249F01F7FF02C021583F4FD1 |
:10B71000220F232F221F330BFFEF21383F071CF48A |
:10B7200020E83FEF06C02F3F310519F014F020E06C |
:10B7300031E0280D391DC901AA2797FDA095BA2F20 |
:10B7400000917202109173029801442737FD4095D1 |
:10B75000542FBC01CD010E942D7A97FF04C0615087 |
:10B760007E4F8F4F9F4FF9E0959587957795679519 |
:10B77000FA95D1F7E61AF70A809182029091830236 |
:10B78000892B09F064C0101611060CF060C02091DE |
:10B79000530330915403C90137FF03C030952195FD |
:10B7A0003F4F2D33310540F48091A0029091A102CA |
:10B7B0008E159F0574F526C02C533040E5E0369574 |
:10B7C0002795EA95E1F72031310510F02FE030E0C0 |
:10B7D0004091A0025091A10218161906E4F480E1EC |
:10B7E00090E0821B930B489F9001499F300D589F1A |
:10B7F000300D112474E0369527957A95E1F72E15D2 |
:10B800003F0520F580917E0190917F01E816F906B1 |
:10B81000F4F07C011CC0205F3F4F80917E0190912D |
:10B820007F01829FB001839F700D929F700D112444 |
:10B830009B0164E0369527956A95E1F74E155F0503 |
:10B8400014F07A0104C0E216F30608F07901C7018A |
:10B85000AA2797FDA095BA2F5DE0880F991FAA1F10 |
:10B86000BB1F5A95D1F72091900830919108442739 |
:10B8700037FD4095542FBC01CD010E94A17A209341 |
:10B880002203309323034093240350932503E09035 |
:10B890002203F090230380915503909156039C015D |
:10B8A000220F331F280F391F2E0D3F1D37FF02C0F7 |
:10B8B0002D5F3F4FA9015595479555954795509355 |
:10B8C00056034093550380916806282F3327220F93 |
:10B8D000331F220F331F241735076CF48091C708DC |
:10B8E000282F3327220F331F220F331F20553040BC |
:10B8F0004217530724F03093560320935503809149 |
:10B90000A30880FF14C08091550390915603A9812C |
:10B91000BA818A179B0724F0B0935603A09355036E |
:10B92000E0915503F0915603FA83E98327C02981FA |
:10B930003A81201B310B37FF02C02D5F3F4F3595F9 |
:10B94000279535952795E0905503F0905603E20E24 |
:10B95000F31EFA82E98212C00E94F23F09811A8125 |
:10B96000109356030093550380915502806C809389 |
:10B970005502809154028D7F80935402809155022C |
:10B9800099279C012270307081FF39C18091570343 |
:10B9900090915803A0915903B0915A030097A105C3 |
:10B9A000B10521F080918C028130B9F4809172024E |
:10B9B00090917302AA2797FDA095BA2F1EE0880FD9 |
:10B9C000991FAA1FBB1F1A95D1F780935703909315 |
:10B9D0005803A0935903B0935A0380918C0281308D |
:10B9E00019F482E080938C0229813A817901002741 |
:10B9F000F7FC0095102F80919008909191089C0180 |
:10BA0000442737FD4095542FC801B7010E942D7A75 |
:10BA1000DC01CB018093220390932303A0932403A2 |
:10BA2000B0932503B7FF04C08150904EAF4FBF4F76 |
:10BA30007C018D01FDE015950795F794E794FA9543 |
:10BA4000D1F7E0922203F092230300932403109392 |
:10BA5000250360915602709157023FE0603A7307E8 |
:10BA600050F58091570390915803A0915903B091DC |
:10BA70005A039C01AD01EAE0569547953795279505 |
:10BA8000EA95D1F7821B930BA40BB50BA801970184 |
:10BA9000F4E0220F331F441F551FFA95D1F7820F90 |
:10BAA000931FA41FB51F8093570390935803A0932F |
:10BAB0005903B0935A0360547F4118F5809157039E |
:10BAC00090915803A0915903B0915A039C01AD0184 |
:10BAD000ECE05695479537952795EA95D1F7821B67 |
:10BAE000930BA40BB50BA801970172E0220F331F33 |
:10BAF000441F551F7A95D1F7820F931FA41FB51FBE |
:10BB000041C08091000290910102809100029091C9 |
:10BB1000010297FF03C0909581959F4F8436910550 |
:10BB2000CCF58091F6019091F701A091F801B091C8 |
:10BB3000F9019C018091840290918502281B390BA8 |
:10BB400037FF03C0309521953F4F2F3F310509F056 |
:10BB50000CF58091570390915803A0915903B0912F |
:10BB60005A039C01AD016EE0569547953795279590 |
:10BB70006A95D1F7821B930BA40BB50B8E0D9F1DFD |
:10BB8000A01FB11F8093570390935803A0935903AC |
:10BB9000B0935A038091570390915803A091590391 |
:10BBA000B0915A031EE0B695A795979587951A957B |
:10BBB000D1F7909373028093720240916E064423F2 |
:10BBC00099F055279C01BA010E946C7AC901861B25 |
:10BBD000970B9093A1028093A002260F371F3093FA |
:10BBE0007F0120937E011FC01092A1021092A0023B |
:10BBF0008FEF93E090937F0180937E0114C01092A9 |
:10BC00008C0210925703109258031092590310920D |
:10BC10005A03309373022093720205C0809155023B |
:10BC2000806C8093550280916A0381FF37C08981BF |
:10BC30009A8197FD0396959587959595879520917F |
:10BC40005202309153022817390760F48091720232 |
:10BC500090917302892B31F0220F331F220F331F73 |
:10BC60003A8329838091F6019091F701A091F80120 |
:10BC7000B091F9018093840290938502A09386028B |
:10BC8000B093870288E99AE39093EB018093EA01ED |
:10BC900080E09EE090930C0180930B0120918B0833 |
:10BCA000822F9927880F991F880F991F889669817D |
:10BCB0007A818617970714F09A8389838091C70841 |
:10BCC0009927880F991F880F991F80559040A98147 |
:10BCD000BA818A179B0714F49A83898380913A0268 |
:10BCE000882341F480915C098E3F20F080916E039F |
:10BCF0008823E9F080915602909157020297C097ED |
:10BD0000B0F4E981FA811E161F068CF481E090E000 |
:10BD10009093570280935602E22EFF24EE0CFF1CF4 |
:10BD2000EE0CFF1C8701085D1F4F1A830983809169 |
:10BD3000E901882311F40E942F6229813A8130930E |
:10BD4000C4052093C30580911A0390911B03A09111 |
:10BD50001C03B0911D0342E0880F991FAA1FBB1F4F |
:10BD60004A95D1F70091CA081091CB08081B190B0E |
:10BD7000213A31058CF0C90137FD019695958795DB |
:10BD8000801791070CF48C01909581959F4F0817AF |
:10BD900019076CF48C010BC00135110514F000E596 |
:10BDA00010E03FEF003B130714F400EB1FEF80910E |
:10BDB000C708282F3327220F331F220F331FC90133 |
:10BDC00049815A81841B950B801791070CF48C01D3 |
:10BDD00069817A81621B730B061717070CF48B01BC |
:10BDE000809186089091870860919E0270919F02D1 |
:10BDF000861B970B9093960880939508D090A50882 |
:10BE00002091B0023091B1024091B2025091B30240 |
:10BE1000DD2041F0661A770AC301AA2797FDA09595 |
:10BE2000BA2F04C0AA2797FDA095BA2F280F391F53 |
:10BE30004A1F5B1F2093B0023093B1024093B202BD |
:10BE40005093B3028091B0029091B102A091B202DE |
:10BE5000B091B30281509A4FA040B04064F080E0AE |
:10BE60009AEFA0E0B0E08093B0029093B102A0936B |
:10BE7000B202B093B3028091B0029091B102A0914E |
:10BE8000B202B091B30280509640AF4FBF4F64F4FE |
:10BE900080E096E0AFEFBFEF8093B0029093B102E5 |
:10BEA000A093B202B093B302C0907D062091950892 |
:10BEB00030919608F8E0FC1598F08C2D9927829F18 |
:10BEC0007001839FF00C929FF00C1124C701F7FCC6 |
:10BED00007967C01B3E0F594E794BA95E1F712C0B8 |
:10BEE0008C2D86959927829FA001839F500D929F4C |
:10BEF000500D1124CA0157FD03967C01F594E79477 |
:10BF0000F594E794A0907B01B0907C0195014427C3 |
:10BF100037FD4095542F8091B0029091B102A091CD |
:10BF2000B202B091B302BC01CD010E94A17AE20E2F |
:10BF3000F31E90906501692D77278827992798012E |
:10BF400017FF04C022273327201B310B37FF02C005 |
:10BF50002F5F3F4F35952795A981BA812A0F3B1F47 |
:10BF6000442737FD4095542F0E942D7A97FF04C037 |
:10BF7000615C7F4F8F4F9F4FE6E095958795779552 |
:10BF80006795EA95D1F79B016E157F050CF47B014F |
:10BF9000309521953F4FE216F3060CF4790180911C |
:10BFA00077089091780860919C0270919D02861BA1 |
:10BFB000970B90937608809375082091AC0230918E |
:10BFC000AD024091AE025091AF02DD2041F0461A21 |
:10BFD000570AC201AA2797FDA095BA2F04C0AA2725 |
:10BFE00097FDA095BA2F280F391F4A1F5B1F20937A |
:10BFF000AC023093AD024093AE025093AF028091F9 |
:10C00000AC029091AD02A091AE02B091AF0281500E |
:10C010009A4FA040B04064F080E09AEFA0E0B0E01A |
:10C020008093AC029093AD02A093AE02B093AF02A6 |
:10C030008091AC029091AD02A091AE02B091AF029E |
:10C0400080509640AF4FBF4F64F480E096E0AFEF72 |
:10C05000BFEF8093AC029093AD02A093AE02B09379 |
:10C06000AF02209175083091760848E04C1598F0A1 |
:10C070008C2D9927829FB001839F700D929F700D28 |
:10C080001124CB0177FD07966C0163E0D594C7942A |
:10C090006A95E1F712C0C6948C2D9927829FD00132 |
:10C0A000839FB00D929FB00D1124CD01B7FD039673 |
:10C0B0006C01D594C794D594C7949501442737FD56 |
:10C0C0004095542F8091AC029091AD02A091AE02A8 |
:10C0D000B091AF02BC01CD010E94A17AC20ED31E65 |
:10C0E000692D772788279927980117FF04C02227F1 |
:10C0F0003327201B310B37FF02C02F5F3F4F359591 |
:10C100002795E981FA812E0F3F1F442737FD40957F |
:10C11000542F0E942D7A97FF04C0615C7F4F8F4F90 |
:10C120009F4F36E095958795779567953A95D1F726 |
:10C130009B016C157D050CF46B01309521953F4FEB |
:10C14000C216D3060CF469018091E901882311F429 |
:10C150000E942F6280918B08282F33273E8B2D8BD6 |
:10C160008091C708282E33245090C00625E7A22EC0 |
:10C1700027E0B22E90EF892E96E0992E8BE0482E84 |
:10C18000B6EA6B2EB8E07B2ED4012C9112160CF07F |
:10C190002FC1203429F4E981FA81F88FEF8B1FC079 |
:10C1A00049815A81CA01AA2797FDA095BA2F332742 |
:10C1B00027FD3095432F532FBC01CD010E942D7ACE |
:10C1C00097FF04C0615C7F4F8F4F9F4FA6E095950E |
:10C1D000879577956795AA95D1F7788F6F8BF4013E |
:10C1E0002181203439F42F89388D2E0D3F1D388F51 |
:10C1F0002F8B2AC0203C39F44F89588D4E195F0986 |
:10C20000588F4F8B21C0C701AA2797FDA095BA2F41 |
:10C21000332727FD3095432F532FBC01CD010E94BA |
:10C220002D7A97FF04C0615C7F4F8F4F9F4FF6E0E0 |
:10C230009595879577956795FA95D1F7AF89B88DDC |
:10C24000A60FB71FB88FAF8BF4012281203439F4C9 |
:10C250002F89388D2C0D3D1D388F2F8B2AC0203C07 |
:10C2600039F44F89588D4C195D09588F4F8B21C077 |
:10C27000C601AA2797FDA095BA2F332727FD309531 |
:10C28000432F532FBC01CD010E942D7A97FF04C08C |
:10C29000615C7F4F8F4F9F4FE6E09595879577952F |
:10C2A0006795EA95D1F7AF89B88DA60FB71FB88FFC |
:10C2B000AF8BF4012381203439F42F89388D200F7E |
:10C2C000311F388F2F8B2AC0203C39F44F89588D6D |
:10C2D000401B510B588F4F8B21C0C801AA2797FDD7 |
:10C2E000A095BA2F332727FD3095432F532FBC013C |
:10C2F000CD010E942D7A97FF04C0615C7F4F8F4F64 |
:10C300009F4F56E095958795779567955A95D1F704 |
:10C31000AF89B88DA60FB71FB88FAF8BF50180819D |
:10C3200081FD08C0D3018D919C91EF89F88D8E1706 |
:10C330009F0774F4D3018D919C91EF89F88D8E0F36 |
:10C340009F1F97FD019695958795988F8F8B1EC09F |
:10C35000552049F42F89388D220F331F281B390BA4 |
:10C36000388F2F8B13C031E0351580F4252D3327FE |
:10C370004F89588D841B950BB9010E946C7ACB01B3 |
:10C380006F89788D680F791F788F6F8B8D899E8963 |
:10C39000880F991F880F991FAF89B88D8A179B073F |
:10C3A00054F4C101880F991F880F991FEF89F88DE8 |
:10C3B000E817F90714F0988F8F8B8F89988D97FD68 |
:10C3C00003969595879595958795F5018183880FB7 |
:10C3D000991F880F991F2F89388D281B390BC90188 |
:10C3E000880F8283EF89F88DD301ED93FC9303C00E |
:10C3F000F501118212824A9422E030E0620E731E2F |
:10C4000044E050E0840E951E69E070E0A60EB71E71 |
:10C4100047FEBACEE2E1C85E0C94D87A84B1806A55 |
:10C4200084B93D9A82E58CBD1DBC459A81E080931C |
:10C43000DB088AEA8093EC0883E88093ED088AE0C1 |
:10C440008093EE081092F0081092EF081092F20814 |
:10C450001092F10810925409109210090895309129 |
:10C46000DB08332309F070C00DB407FE6DC085E012 |
:10C470008093E901459A2EB5809171039927813007 |
:10C48000910589F0823091051CF4892B21F03EC082 |
:10C490000297B9F03BC030930F0920937203213803 |
:10C4A000A9F581E008C0253549F480917203820F17 |
:10C4B0008093720382E08093710328C030937103EC |
:10C4C00025C080910F09E82FFF27EF5CF64F2083EE |
:10C4D0008F5F80930F09909172038032A0F029172B |
:10C4E00069F480E2A1E3B9E0E1E1F9E00D900192A5 |
:10C4F0008A95E1F781E08093100902C0309310091A |
:10C500001092710303C0920F909372032091EB0875 |
:10C510002232A0F445980000000000000000E091E5 |
:10C52000E408F091E508E20FF11D80818EBD809155 |
:10C530000D099081890F80930D0903C081E08093DC |
:10C54000DB082F5F2093EB080895EF92FF920F9383 |
:10C550001F93809176069927880F991F880F991F3E |
:10C560007C010027F7FC0095102F8091E802909144 |
:10C57000E902A091EA02B091EB02BC01CD01A80151 |
:10C5800097010E94A17A3093F0082093EF088091E0 |
:10C59000E0029091E102A091E202B091E302BC01BD |
:10C5A000CD01A80197010E94A17A3093F20820934F |
:10C5B000F1082091D1083091D2084091D3085091D0 |
:10C5C000D408DA01C90173E0880F991FAA1FBB1FA5 |
:10C5D0007A95D1F7820F931FA41FB51F820F931F67 |
:10C5E000A41FB51F209140013091410140914201AB |
:10C5F00050914301BC01CD010E94A17A3093F8080B |
:10C600002093F7088091FA029091FB0220910D028D |
:10C6100030910E02821B930B9093FE088093FD08CD |
:10C62000E091F002F091F10280919C0890919D08B8 |
:10C63000BF010E946C7ACB019B01220F331F220F96 |
:10C64000331F280F391F280F391F37FF02C02D5FF6 |
:10C650003F4F35952795359527953093F4082093CE |
:10C66000F3088091CD089091CE08BF010E946C7AAA |
:10C670009B01220F331F220F331F260F371F260F58 |
:10C68000371F37FF02C02D5F3F4F359527953595F2 |
:10C6900027953093F6082093F5081092F102109236 |
:10C6A000F00210929D0810929C081092CE081092F1 |
:10C6B000CD088091EE089927AA27BB27FC013A975D |
:10C6C000E830F10508F03DC2E35AFF4F0C94F37ACD |
:10C6D00080916A0280930109809169028093020926 |
:10C6E0008091680280930309809167028093040916 |
:10C6F0008091660280930509809165028093060906 |
:10C7000080916402809307098091630280930809F5 |
:10C71000809155028093090980915502837F80930F |
:10C7200055028091010180930A0980912301909123 |
:10C73000240180930B098091540280930C09429943 |
:10C7400000C280915402877F80935402FAC1809185 |
:10C75000560990915709909302098093010980919D |
:10C7600073038093030980915C098093040980918D |
:10C77000AB060E94C63C8093050980913F018093DF |
:10C78000060920917303822F9927FC0113E0EE0F15 |
:10C79000FF1F1A95E1F7E80FF91FEB58F84F808556 |
:10C7A0008093070980818093080986818093090915 |
:10C7B000838180930A09878180930B098581809307 |
:10C7C0000C092F5F20937303E22FFF27EE0FFF1F4B |
:10C7D000EE0FFF1FED51F94F858518160CF4B1C10E |
:10C7E000222309F4AEC1822F992701966DE070E0F3 |
:10C7F0000E946C7AAC01282FE82FFF27EE0FFF1F55 |
:10C80000EE0FFF1FED51F94F8585181614F04423E4 |
:10C8100051F74093730395C1809102018093010900 |
:10C820008091AC06809302098091AD068093030944 |
:10C830008091AE06809304098091AF06809305092C |
:10C840008091B306809306098091B406809307090E |
:10C850008091B506809308098091B80680930909F4 |
:10C860008091B60680930A098091B70680930B09E0 |
:10C870008091B9063BC18091AA068093010910926C |
:10C8800002098091CC06809303098091C1068093B0 |
:10C89000040980914B02809305098091980380934D |
:10C8A00006098091960380930709809195038093F0 |
:10C8B00008091092980310929603109295038091A4 |
:10C8C000A6029091A70290930A098093090980918A |
:10C8D000D00680930B098091D10608C1F89480910D |
:10C8E0005D06E82FFF27EE0FFF1FEE51F84F019076 |
:10C8F000F081E02DE038F1051CF0EFE7F0E006C034 |
:10C900002FEFE138F20714F4E1E8FFEFE0930109BB |
:10C9100080915E06E82FFF27EE0FFF1FEE51F84FC4 |
:10C920000190F081E02DE038F1051CF0EFE7F0E038 |
:10C9300006C07FEFE138F70714F4E1E8FFEFE0937A |
:10C94000020980915C06E82FFF27EE0FFF1FEE51D2 |
:10C95000F84F0190F081E02DE038F1051CF0EFE791 |
:10C96000F0E006C08FEFE138F80714F4E1E8FFEFDC |
:10C97000E093030980915B06E82FFF27EE0FFF1F6E |
:10C98000EE51F84F0190F081E02DE038F1051CF0F8 |
:10C99000EFE7F0E006C02FEFE138F20714F4E1E82A |
:10C9A000FFEF7894E093040980918F02809305094A |
:10C9B00080919002809306098091910280930709EB |
:10C9C00080919202809308098091930280930909D3 |
:10C9D0008091940280930A098091950280930B09BB |
:10C9E0008091960283C08091EA03853018F01092FE |
:10C9F000EA0385E0809301098091BA0680930209D9 |
:10CA00008091880290918902A0918A02B0918B0254 |
:10CA1000BC01CD0125E030E040E050E00E94A17A69 |
:10CA20003093040920930309809184029091850238 |
:10CA3000A0918602B0918702BC01CD0125E030E0D3 |
:10CA400040E050E00E94A17A309306092093050946 |
:10CA50008091B006809307098091B1068093080900 |
:10CA60008091B2068093090980918E0280930A0911 |
:10CA70008091740380930B098091C3059091C40544 |
:10CA800097FD039695958795959587952FC082E09C |
:10CA90008093010986E0809302091092030984E4DF |
:10CAA0008093040980910301809305098091CF034D |
:10CAB000809306099091D003909307098F77809314 |
:10CAC000CF0390719093D0038091CD068093080995 |
:10CAD0008091BF08809309098091A30880930A0977 |
:10CAE0008091BD0680930B098091D50680930C0937 |
:10CAF00028C080915A0990915B0990930209809314 |
:10CB0000010980916D018093030980916C018093EC |
:10CB100004098091ED05809305098091B20180930D |
:10CB200006098091BB068093070980918308809352 |
:10CB300008098091B7019091B80190930A098093F8 |
:10CB4000090980911009882309F465C160911109D0 |
:10CB50008091A101681719F08AEF80939F0160937B |
:10CB6000A10181E080938D01409112095091130938 |
:10CB7000CA0181509E4F8F5F9340B0F420911409F9 |
:10CB800030911509C90181509E4F8F5F934060F429 |
:10CB90008091670685FF08C050936103409360034E |
:10CBA00030935F0320935E038091180990911909D7 |
:10CBB00021E08936920724F490938F0180938E01AF |
:10CBC00020912209309123098091EA019091EB0193 |
:10CBD0008217930740F48091BD01882321F430939C |
:10CBE000EB012093EA01862F99278836910509F4F5 |
:10CBF00068C08936910524F48736910551F013C138 |
:10CC00008936910509F492C08B36910509F4DEC08E |
:10CC10000AC180912409809351098091250980934C |
:10CC200053098091260980935209809127098093A6 |
:10CC30008C0180912809809355098091290980935E |
:10CC4000A00180912A098093700380912B09809321 |
:10CC50005D03809162028823F9F020912C093091C4 |
:10CC60002D0937FD19C03093A7022093A602909199 |
:10CC70009106992389F08FE0989FC0011124281B09 |
:10CC8000390BC90188599E4F68E671E00E946C7AA1 |
:10CC90009093A7028093A6022091680330916903C4 |
:10CCA00080912E0990912F09280F391F37FF02C05C |
:10CCB0002F5F3F4F35952795309369032093680385 |
:10CCC000B2C0809124098093E60880912509809361 |
:10CCD000E708809126098093E808809127098093CE |
:10CCE000E908809128098093EA088091B305909122 |
:10CCF0002909892B8093B3059091B4059370809195 |
:10CD00002A098C70982B9093B40580912B098093FD |
:10CD10006E0380912C098093910180912D0980935D |
:10CD2000540980912E0980936A037DC08091240963 |
:10CD30008093DC08809125098093DD088091260985 |
:10CD40008093DE08809127098093DF08809128096D |
:10CD5000909129099093E1088093E00880912A0935 |
:10CD600090912B099093E3088093E20880912C091D |
:10CD7000992787FD909590931D0880931C088091BA |
:10CD80002D0980937D0280912E0990912F099C019D |
:10CD9000442737FD4095542FDA01C90163E0880F1D |
:10CDA000991FAA1FBB1F6A95D1F7820F931FA41F5B |
:10CDB000B51F820F931FA41FB51F80937E0290930F |
:10CDC0007F02A0938002B09381022DC0809124093C |
:10CDD00080936D038091250980936C0380912609CF |
:10CDE00080936B038091280980939B03809129098C |
:10CDF00080939A0380912C098093990380912D0947 |
:10CE00008093970380912E0990912F099093C908E0 |
:10CE10008093C80808C010926103109260031092BA |
:10CE20005F0310925E031F910F91FF90EF900895A2 |
:10CE30008091DB08882319F480E090E008954598FC |
:10CE40008CEE98E09093E5088093E40890916F034E |
:10CE5000E92FFF27EE56FE4F9F5F90936F0380816F |
:10CE60008093EE089D3010F010926F031092DB0853 |
:10CE70000E94A56281E08093EB088091EC0880938A |
:10CE80000D098EBD81E090E0089587B18C6087B96F |
:10CE9000429843981092760380E88093A301109201 |
:10CEA00075038093A201089580911C0890911D083C |
:10CEB00081589F4F39F080911C0890911D0881582E |
:10CEC0008093800380917B03815080937B038F3F0D |
:10CED00009F052C18091A40680937C038091A6063C |
:10CEE00080937D0389E080937B038091550299278D |
:10CEF00080739070892B21F48091D00380FF1DC036 |
:10CF00008091A806882351F080917E03882319F42C |
:10CF100084E08093760381E080937E038091A9066C |
:10CF2000882379F080917F03882319F484E080932B |
:10CF3000750381E080937F0304C010927E031092FA |
:10CF40007F0380917E03882309F082C08091D206FE |
:10CF5000282F332724FF07C080918D02882319F4DE |
:10CF600025FD8FC090C09091A506983F48F0809114 |
:10CF70009E088D3D28F080917C0388236CF00AC0C8 |
:10CF8000983F78F080919E08853059F480917C0319 |
:10CF900087FF02C0429A01C0429881E08093A301BA |
:10CFA00054C0809176038150809376038F3F09F0BF |
:10CFB0006BC08091D50685FF2FC090918003892F8B |
:10CFC000869580937603992361F4909374038091FE |
:10CFD0007C0387FF02C0429A01C042981092A301CD |
:10CFE00053C081E0809374038091A30190917C03EE |
:10CFF000882349F48093800380E48093A3019923DC |
:10D000000CF43FC040C0982311F0429A01C04298EE |
:10D0100086958093A30138C080919E088695809361 |
:10D0200076038091A301813021F41092800380E483 |
:10D0300001C086958093A3018091A30190917C0308 |
:10D04000892311F0429A01C04298109274031CC0C7 |
:10D05000809176038150809376038F3FA9F489E015 |
:10D06000809376038091A301813011F480E801C0A0 |
:10D0700086958093A3018091A3019091A8068923AE |
:10D0800011F0429A01C0429880917F03882309F0F1 |
:10D0900043C09091D20697FF07C080918D028823EC |
:10D0A00019F496FD52C053C09091A706983F48F0DE |
:10D0B0008091C6088D3D28F080917D0388236CF017 |
:10D0C0000AC0983F78F08091C608853059F4809165 |
:10D0D0007D0387FF02C0439A01C0439881E080939B |
:10D0E000A20136C0809175038150809375038F3FF4 |
:10D0F00079F58091C6088695809375038091A20189 |
:10D10000813011F480E401C086958093A201809162 |
:10D11000A20190917D0317C0809175038150809387 |
:10D1200075038F3FA9F489E0809375038091A20174 |
:10D13000813011F480E801C086958093A20180912E |
:10D14000A2019091A906892311F0439A01C0439846 |
:10D15000429B05C080915402886080935402439B97 |
:10D1600006C080915402806180935402089580919A |
:10D1700054028F7E8093540208954FB724E130E02B |
:10D18000F8948091C9008F778093C9008091C9007D |
:10D190008F7B8093C9008091C9008F7D8093C900E7 |
:10D1A000832F99278093CD002093CC008091C800D5 |
:10D1B00082608093C80080E18093C9008091CA009A |
:10D1C0008F778093CA008091CA008F7B8093CA00BA |
:10D1D0008091CA008F7D8093CA008091CA008F7EA3 |
:10D1E0008093CA008091CA00877F8093CA00809193 |
:10D1F000C9008B7F8093C9008091CA0084608093AE |
:10D20000CA008091CA0082608093CA008091C800E1 |
:10D2100087FF03C08091CE00F9CF8091C90080685C |
:10D220008093C9004FBF0895EF92FF920F931F9311 |
:10D23000CF93DF93482F00E010E08091A40181306C |
:10D2400061F41092A40184E480938103109283031B |
:10D25000109282031092840339C180918103882344 |
:10D2600019F421E030E001C09801909182039923E4 |
:10D2700071F4232B11F081E010C084E480938103CA |
:10D2800090938303909382039093840308C1913019 |
:10D2900069F4232B09F0F9C082E080938203809126 |
:10D2A00083038F5F8093830383E0F7C09230D1F4D0 |
:10D2B000232B09F0EAC083E0809381034093840329 |
:10D2C00090918303923039F41092850347FF03C095 |
:10D2D00081E08093850383E0809382039F5F909336 |
:10D2E0008303DDC0933009F0D0C0232B09F0CDC0FB |
:10D2F0009093810382E080938203809183038F5F08 |
:10D300008093830320918403822F9927782F6627A7 |
:10D31000842F9927682B792B80918106813049F4DD |
:10D320007370CB018050924063E070E00E946C7A91 |
:10D3300017C0823061F47770CB018050944066E072 |
:10D3400070E00E946C7A2695269526950BC0737026 |
:10D3500068567140CB0177FD0196BC0175956795C4 |
:10D3600026952695022F11270F7010700F5F1F4F03 |
:10D370000D30110508F082C07801E00EF11EF701B2 |
:10D38000EE51F84F808191819B01281B390BC90117 |
:10D3900037FF03C0909581959F4F069704F5E09164 |
:10D3A000C406EE2351F0FF27EE0FFF1FEE51F84F9A |
:10D3B000808191818436910594F480918E02883C1D |
:10D3C00030F480918E02865F80938E0208C088ECD4 |
:10D3D00080938E0280916F008F7D80936F00F701A4 |
:10D3E000EE51F84F808191819C01220F331F280F4D |
:10D3F000391F260F371F37FF02C02D5F3F4FE9014E |
:10D40000D595C795D595C795CB0101968C179D07E6 |
:10D4100014F4219706C061507040C617D7070CF46A |
:10D42000219680918E02843BD0F0F701EE51F84FA7 |
:10D4300080819181FE01E81BF90BCF0163E070E070 |
:10D440000E946C7ACB01880F991F860F971F28E2E4 |
:10D4500038E0E20EF31EF7019183808307C028E2D3 |
:10D4600038E0E20EF31EF70111821082000F111F47 |
:10D470000E51184FF801D183C08311C0023111053C |
:10D4800070F081E08093A4010AC081E08093A40140 |
:10D49000109283031092850384E48093810380912A |
:10D4A0008303803198F080918503882331F4809143 |
:10D4B000A401882311F480933E01109283031092FB |
:10D4C00085031092820384E480938103E6E0CDB764 |
:10D4D000DEB70C94E47ACF93FC0197FF05C0CFEF41 |
:10D4E000F095E195FF4F01C0C1E028E631E0CF01A2 |
:10D4F000B9010E946C7AFC018B35910554F08B5573 |
:10D5000090408A35910538F484EB90E08E1B9F0B98 |
:10D51000FC0141E00DC0CF01855B90408A3591054B |
:10D5200018F4E45BF04003C02E1B3F0BF9014FEFF2 |
:10D53000EE0FFF1FE658F84F259134918C2F992755 |
:10D5400087FD9095289FB001299F700D389F700D21 |
:10D550001124842F992787FD9095689FA001699FCA |
:10D56000500D789F500D1124CA01CF9108952AE5DE |
:10D5700030E0281B390BC9010E946B6A0895CF93D4 |
:10D58000DF9380E00E943F718091230190912401FC |
:10D590006AE070E00E946C7A9F938F9380912301E0 |
:10D5A000909124016AE070E00E946C7A7F936F93FF |
:10D5B00086E698E09F938F93C2E3D1E7DF93CF9302 |
:10D5C000E091B603F091B70309952DB73EB7285FF8 |
:10D5D0003F4F2DBF80919F01882361F186E00E941B |
:10D5E0003F718091910199279F938F938091E008DB |
:10D5F0009091E1086AE070E00E94587A7F936F93FF |
:10D600008FED90E09F938F938091C8089091C90807 |
:10D610009F938F938FE698E09F938F93DF93CF93A1 |
:10D62000E091B603F091B70309958DB79EB70C96BC |
:10D630008DBF12C086E00E943F718DE798E09F93F6 |
:10D640008F93DF93CF93E091B603F091B7030995E1 |
:10D650000F900F900F900F9080916E038823F9F038 |
:10D6600086E00E943F7180916E0399279F938F936C |
:10D6700084E898E09F938F93DF93CF93E091B60374 |
:10D68000F091B70309952DB73EB72A5F3F4F2DBFE5 |
:10D6900080918D02882319F083E58093B30180E1A6 |
:10D6A0000E943F718091B5019091B6016CE370E0EA |
:10D6B0000E94587A9F938F938091B5019091B60103 |
:10D6C0006CE370E00E94587A7F936F9380915A09BF |
:10D6D00090915B099F938F9380E998E09F938F933C |
:10D6E000C2E3D1E7DF93CF93E091B603F091B703A4 |
:10D6F00009958091BF082DB73EB7265F3F4F2DBFDC |
:10D7000080FF29C08AE10E943F7180913F019927E3 |
:10D710009F938F938091880290918902A0918A02B1 |
:10D72000B0918B02BC01CD0124E630E040E050E036 |
:10D730000E94A17A3F932F938DE998E09F938F9356 |
:10D74000DF93CF93E091B603F091B70309958DB7BE |
:10D750009EB708968DBF8091B201882391F08AE12F |
:10D760000E943F7184EA98E09F938F93DF93CF9359 |
:10D77000E091B603F091B70309950F900F900F90C9 |
:10D780000F90DF91CF910895CF93DF9380E00E94B7 |
:10D790003F7180919707992787FD90959F938F936D |
:10D7A00080918E07992787FD90959F938F93809105 |
:10D7B0008507992787FD90959F938F9380917C078C |
:10D7C000992787FD90959F938F9386EA98E09F9382 |
:10D7D0008F93C2E3D1E7DF93CF93E091B603F0914B |
:10D7E000B703099580E10E943F712DB73EB7245FD2 |
:10D7F0003F4F2DBF8091BB07992787FD90959F9341 |
:10D800008F938091B207992787FD90959F938F936F |
:10D810008091A907992787FD90959F938F93809179 |
:10D82000A007992787FD90959F938F9386EB98E0AB |
:10D830009F938F93DF93CF93E091B603F091B7035B |
:10D840000995809159062DB73EB7245F3F4F2DBFF4 |
:10D85000853098F480E10E943F7186EC98E09F93B8 |
:10D860008F93DF93CF93E091B603F091B7030995BF |
:10D870000F900F900F900F9018C08730B0F488E190 |
:10D880000E943F718FED90E09F938F9387ED98E01A |
:10D890009F938F93DF93CF93E091B603F091B703FB |
:10D8A00009958DB79EB706968DBFDF91CF910895EC |
:10D8B0000F931F9380E00E943F712AE030E0809137 |
:10D8C000560990915709B9010E94587A9F938F93F6 |
:10D8D0008091560990915709B9010E94587A7F9317 |
:10D8E0006F938091230190912401B9010E946C7A79 |
:10D8F0009F938F938091230190912401B9010E94FD |
:10D900006C7A7F936F9380EE98E09F938F9302E3FE |
:10D9100011E71F930F93E091B603F091B7030995B8 |
:10D9200080E10E943F718DB79EB70C968DBF8091AC |
:10D930005A0990915B099F938F9380915809909118 |
:10D9400059099F938F9382EF98E09F938F931F9332 |
:10D950000F93E091B603F091B70309958DB79EB789 |
:10D9600008968DBF1F910F910895EF92FF920F932C |
:10D970001F9380E00E943F718FEDE82EF12CFF9203 |
:10D98000EF9280918E0190918F019F938F93809160 |
:10D990006D0399279F938F938EEF98E09F938F93BA |
:10D9A00002E311E71F930F93E091B603F091B703E1 |
:10D9B000099580E10E943F718DB79EB70A968DBF91 |
:10D9C00080916B0399279F938F93FF92EF928091A1 |
:10D9D0006C0399279F938F9381E199E09F938F9395 |
:10D9E0001F930F93E091B603F091B70309958DB79C |
:10D9F0009EB70A968DBF1F910F91FF90EF900895EB |
:10DA00000F931F9380E00E943F7184E299E09F93FF |
:10DA10008F9302E311E71F930F93E091B603F09108 |
:10DA2000B703099580E10E943F710F900F900F900E |
:10DA30000F9083E399E09F938F931F930F93E0914F |
:10DA4000B603F091B70309950F900F900F900F90C8 |
:10DA50001F910F9108950F931F9380E00E943F71D3 |
:10DA600081E499E09F938F9302E311E71F930F9353 |
:10DA7000E091B603F091B703099580E10E943F71F0 |
:10DA80000F900F900F900F9080E599E09F938F93E8 |
:10DA90001F930F93E091B603F091B70309950F9090 |
:10DAA0000F900F900F901F910F9108951F93CF9398 |
:10DAB000DF93182F80915D09C2E3D1E7882391F4A9 |
:10DAC0000E943F718EE599E09F938F93DF93CF93F0 |
:10DAD000E091B603F091B70309950F900F900F9066 |
:10DAE0000F9016C080E00E943F718DE599E09F93F2 |
:10DAF0008F938CE699E09F938F93DF93CF93E09180 |
:10DB0000B603F091B70309958DB79EB706968DBF02 |
:10DB100080919703C2E3D1E7882399F480E10E94C2 |
:10DB20003F7183E799E09F938F93DF93CF93E091C9 |
:10DB3000B603F091B70309950F900F900F900F90D7 |
:10DB400089C080E10E943F718091A50199279F9330 |
:10DB50008F938EE799E09F938F93DF93CF93E0911C |
:10DB6000B603F091B70309958DB79EB706968DBFA2 |
:10DB700080919A038823E9F088E10E943F718091A7 |
:10DB80009A0399279F938F9380919B0399279F9343 |
:10DB90008F9387E899E09F938F93DF93CF93E091E2 |
:10DBA000B603F091B70309958DB79EB708968DBF60 |
:10DBB00012C088E10E943F718FE899E09F938F9394 |
:10DBC000DF93CF93E091B603F091B70309950F90DF |
:10DBD0000F900F900F9080918603882331F08EE193 |
:10DBE0000E943F7185E999E005C08EE10E943F7176 |
:10DBF00088E999E09F938F93DF93CF93E091B603E9 |
:10DC0000F091B70309950F900F900F900F901F326E |
:10DC100051F49091A501809197039817D8F49F5FD4 |
:10DC20009093A50109C01F3459F48091A501823059 |
:10DC300088F081508093A50181E0809386030AC01B |
:10DC40001F3141F48091A501882321F0809398032E |
:10DC500010928603DF91CF911F9108951F93CF9368 |
:10DC6000DF93182F80915D09C2E3D1E7882391F4F7 |
:10DC70000E943F718BE999E09F938F93DF93CF933D |
:10DC8000E091B603F091B70309950F900F900F90B4 |
:10DC90000F9016C080E00E943F718DE599E09F9340 |
:10DCA0008F9389EA99E09F938F93DF93CF93E091CD |
:10DCB000B603F091B70309958DB79EB706968DBF51 |
:10DCC00080919703882361F480E10E943F7180EB8B |
:10DCD00099E09F938F9382E391E79F938F930FC077 |
:10DCE0008091DE08C2E3D1E7833099F080E10E94A1 |
:10DCF0003F718BEB99E09F938F93DF93CF93E091EC |
:10DD0000B603F091B70309950F900F900F900F9005 |
:10DD10008AC080E10E943F718091A60199279F935C |
:10DD20008F9386EC99E09F938F93DF93CF93E0914D |
:10DD3000B603F091B70309958DB79EB706968DBFD0 |
:10DD400080919A038823E9F088E10E943F718091D5 |
:10DD50009A0399279F938F9380919B0399279F9371 |
:10DD60008F9380ED99E09F938F93DF93CF93E09112 |
:10DD7000B603F091B70309958DB79EB708968DBF8E |
:10DD800012C088E10E943F7188ED99E09F938F93C4 |
:10DD9000DF93CF93E091B603F091B70309950F900D |
:10DDA0000F900F900F9080918703882331F08EE1C0 |
:10DDB0000E943F718EED99E005C08EE10E943F7197 |
:10DDC00081EE99E09F938F93DF93CF93E091B60319 |
:10DDD000F091B70309950F900F900F900F901F329D |
:10DDE00051F49091A601809197039817E0F49F5FFA |
:10DDF0009093A60109C01F3459F48091A601823086 |
:10DE000090F081508093A60181E0809387030BC03E |
:10DE10001F3149F48091A601882329F080688093FE |
:10DE2000980310928703DF91CF911F9108950F936C |
:10DE30001F93CF93DF9380919F01C2E3D1E78823A3 |
:10DE400009F47DC080E00E943F718091DD08992730 |
:10DE50009F938F938091DF0899279F938F9384EEF0 |
:10DE600099E09F938F938E01DF93CF93E091B60358 |
:10DE7000F091B70309958DB79EB708968DBF809135 |
:10DE8000DE08833031F48CE00E943F7183EF99E02B |
:10DE900005C08CE00E943F7188EF99E09F938F93BB |
:10DEA000DF93CF93E091B603F091B70309950F90FC |
:10DEB0000F900F900F908091DC0881FF12C08CE0D2 |
:10DEC0000E943F718DEF99E09F938F931F930F9363 |
:10DED000E091B603F091B70309950F900F900F9062 |
:10DEE0000F9080E10E943F718091910199279F934B |
:10DEF0008F938FED90E09F938F938091E2089091A4 |
:10DF0000E3089F938F938091E0089091E1086AE085 |
:10DF100070E00E94587A7F936F9382E09AE09F931B |
:10DF20008F9382E391E79F938F93E091B603F091F3 |
:10DF3000B70309958DB79EB70C968DBF12C082E0CE |
:10DF40000E943F7185E19AE09F938F93DF93CF9377 |
:10DF5000E091B603F091B70309950F900F900F90E1 |
:10DF60000F90DF91CF911F910F910895CF93C82FFC |
:10DF7000209188032093890399278F329105E1F03E |
:10DF8000803391051CF44F9779F027C08F349105A9 |
:10DF9000D9F08F38910509F586E0289FF00111240A |
:10DFA000E05DF74F849117C086E0289FF0011124AF |
:10DFB000EF5CF74F84910FC086E0289FF001112499 |
:10DFC000EE5CF74F849107C086E0289FF001112492 |
:10DFD000ED5CF74F84918093880390918803809142 |
:10DFE00089039813C0E08091A701282F33278F5F02 |
:10DFF0008093A70120FD02C0CF3089F0C0938A032F |
:10E000000E9445719091880386E0989FF001112449 |
:10E01000EC5CF74F259134918C2FF901099580E044 |
:10E0200090E0CF91089510925709109256091092DE |
:10E030005B0910925A0910925909109258091092CE |
:10E040005C0982E390E00E945A1690938C038093BF |
:10E050008B0308959927FC0123E0EE0FFF1F2A95FB |
:10E06000E1F7E80FF91FEB58F84F95819F3F19F43E |
:10E0700080E090E00895993C18F4892F992708953D |
:10E08000808182FF07C08AE0989FC00111248850D8 |
:10E0900097400895892F99270895A0E0B0E0E3E51F |
:10E0A000F0E70C94C57A80918B0390918C030E94C9 |
:10E0B0006316882309F4CFC080918B0390918C0361 |
:10E0C000C29690938C0380938B03C0E0D0E07E01D6 |
:10E0D000BB247FEFC72E80915C098E3F21F481E045 |
:10E0E0008093B20104C08F3F11F4B092B201DD24DD |
:10E0F00005E717E0F801838187FF17C0B394858196 |
:10E10000893C30F08D2D0E942A70C80FD91F02C0A3 |
:10E11000C80FD11DF8018181E80EF11C8681C81657 |
:10E1200010F0C82E02C01092B201D394075F1F4FA7 |
:10E13000FBE0FD15F8F6C0925C09EF2841F520914F |
:10E140009103309192034091930350919403BB2724 |
:10E15000A52F942F832F9093900380938F03AA274A |
:10E16000BB27281B390B4A0B5B0BCE01AA27BB2709 |
:10E17000280F391F4A1F5B1F20939103309392038E |
:10E180004093930350939403C5E0D0E013C0809173 |
:10E190008F03909190038C179D0718F4C81BD90B1F |
:10E1A00002C0C0E0D0E08B2D9927880F991FC80FBF |
:10E1B000D91F2596D0935709C0935609CF3FD10553 |
:10E1C00078F480912301909124018C9F90018D9F80 |
:10E1D000300D9C9F300D1124C90164E670E013C01E |
:10E1E000CE0196958795969587952091230130913C |
:10E1F0002401289FA001299F500D389F500D112404 |
:10E20000CA0169E170E00E94587A709359096093DD |
:10E21000580980918D0390918E038C0F9D1F9093D0 |
:10E220008E0380938D0352E0813D9507A0F02091ED |
:10E230005A0930915B092F5F3F4F805D9240E2E0C9 |
:10E24000813D9E07C0F790938E0380938D0330939A |
:10E250005B0920935A09E9E0CDB7DEB70C94E17A67 |
:10E260000895089590919F03933240F4E92FFF277A |
:10E27000E959F64F80839F5F90939F0308958332FF |
:10E2800018F48D5F80939F03089590E2EAE6F9E029 |
:10E290008FE19193815087FFFCCF0895CF93CFB743 |
:10E2A00023E031E0F8948091C9008F778093C90012 |
:10E2B0008091C9008F7B8093C9008091C9008F7DB8 |
:10E2C0008093C900832F99278093CD002093CC00A1 |
:10E2D0008091C80082608093C80088E18093C90063 |
:10E2E0008091CA008F778093CA008091CA008F7B8B |
:10E2F0008093CA008091CA0080628093CA00809196 |
:10E30000CA0080618093CA008091CA0088608093AF |
:10E31000CA008091C90084608093C9008091CA00BE |
:10E3200084608093CA008091CA0082608093CA0092 |
:10E330008091C80087FF03C08091CE00F9CF809103 |
:10E34000C90080688093C9008091C900806480936F |
:10E35000C9000E944571CFBFCF910895282F9927FA |
:10E360008F709070892B31F4209580919E03822BC1 |
:10E3700080939E0308958091AE01882309F44BC0D9 |
:10E380008091550285FD04C08091B301882381F0FE |
:10E3900082E98093670983E2809368098091B301E1 |
:10E3A000882309F485E5809369091092B30102C0BE |
:10E3B000809367098091AF018F3071F480919E0343 |
:10E3C0000E94B66F882341F081E9809367098093AA |
:10E3D000680981E3809369091092AE018091C800B9 |
:10E3E00085FFFCCF8091C9008F7E8093C90080910A |
:10E3F000C9008E7F8093C90080916709882311F43A |
:10E400008EEF01C08EE78093CE0080919E038093B3 |
:10E41000AF0110929E0308951F920F920FB60F92B4 |
:10E4200011248F939F93EF93FF939091AE019923C3 |
:10E4300009F040C08091A003882361F480916709AE |
:10E44000882311F483E003C0813999F481E080933B |
:10E45000A0030FC0833099F480916709882349F0A5 |
:10E46000909367098091C9008E7F8093C9008EEFD9 |
:10E470001EC08091C90081608093C9000EC08332A4 |
:10E4800061F48091C9008E7F8093C9008FEF8093E3 |
:10E49000CE0081E08093AE0118C08091A003E82FE8 |
:10E4A000FF27E959F64F8F5F8093A0038081809307 |
:10E4B000CE000BC01092A0031092A1031092A203F1 |
:10E4C0008091C90080618093C900FF91EF919F9175 |
:10E4D0008F910F900FBE0F901F901895EF92FF92A3 |
:10E4E0000F931F93CF93DF937C018B01EA01452BA0 |
:10E4F00039F0F80181918F01F70109952197C9F74A |
:10E50000E6E0CDB7DEB70C94E47AEF92FF920F937A |
:10E510001F93CF93DF937C018B01EA01452B41F0E0 |
:10E52000F8010F5F1F4F8491F70109952197C1F7FB |
:10E53000E6E0CDB7DEB70C94E47A0F931F93CF9348 |
:10E540008C01C62F161634F480E2F8010995C150EB |
:10E550001C16D4F3CF911F910F9108950F931F9321 |
:10E56000CF938C01C62F161634F480E3F801099579 |
:10E57000C1501C16D4F3CF911F910F910895A5E3BC |
:10E58000B0E0E5ECF2E70C94BC7A2E96EEADFFAD70 |
:10E590002E9788249924540180919D03882321F487 |
:10E5A0002C961FAE1EAE2C97AEE44A2E512C4C0E6C |
:10E5B0005D1E6F01B60105C0153239F00894C11C0B |
:10E5C000D11CF60114911123B9F7A601461B570B74 |
:10E5D00031F02C968EAD9FAD2C970E948572112341 |
:10E5E00009F46AC20894C11CD11CFF24FDA6FCA634 |
:10E5F0007FEFE72EF9A6F6010894C11CD11C1491F7 |
:10E60000153721F0812F80628837B1F4F0FE0AC0FF |
:10E61000F20124E030E0420E531E80809180A280FF |
:10E62000B3800AC0F20142E050E0440E551E8081E2 |
:10E6300091814C01AA24BB24103221F489A588239E |
:10E64000D1F61DC0133219F458E0F52AD4CF1A328E |
:10E6500011F01D3291F41A3259F4F20182E090E087 |
:10E66000480E591EE081ECA7EE232CF6E195ECA7AD |
:10E6700090E1F92AAFEDFA22BECF1B3211F419A7AF |
:10E68000BACF1E32C1F5F6010894C11CD11C1491F9 |
:10E690001A3279F4F20122E030E0420E531E40813A |
:10E6A00051813FEF4F3F530714F44FEF5FEFE42EDC |
:10E6B000A2CF40E050E0812F80538A30A0F4CA01FD |
:10E6C00063E0880F991F6A95E1F7840F951F480F43 |
:10E6D000591F410F511D40535040F6010894C11C71 |
:10E6E000D11C1491E8CF8FEF4F3F580714F44FEF30 |
:10E6F0005FEFE42E85CF103329F4F4FC7CCF90E259 |
:10E70000F92A79CF812F81538930D8F440E050E045 |
:10E71000CA0133E0880F991F3A95E1F7840F951FDE |
:10E72000480F591F410F511D40535040F6010894A6 |
:10E73000C11CD11C1491812F80538A3048F34CA7FF |
:10E740005FCF183619F4A4E0FA2A55CF1C3619F415 |
:10E75000B1E0FB2A50CF133661F43E010894611CEE |
:10E76000711CF20122E030E0420E531E8081898349 |
:10E770003CC1143421F0143611F0193651F514341B |
:10E7800011F431E0F32AF0FE0AC0F20144E050E057 |
:10E79000440E551E80809180A280B3800CC0F2018F |
:10E7A00082E090E0480E591E808191814C01AA249C |
:10E7B00097FCA094BA2CB7FE0AC0B094A094909491 |
:10E7C0008094811C911CA11CB11C8DE289A70AE0D8 |
:10E7D0006FC01F3411F01F3631F41F3411F491E073 |
:10E7E000F92A08E064C0103779F4F201A2E0B0E041 |
:10E7F0004A0E5B1E808191814C01AA24BB2400E15A |
:10E80000B0E4FB2A18E753C01337C1F5F20122E048 |
:10E8100030E0420E531E608071806114710489F4EF |
:10E820003E010894611C711C88E289838EE6F30125 |
:10E83000818385E78B838CE68C838D8389E28E834D |
:10E840001F82E7FC13C08E2D992787FD9095AC01A0 |
:10E8500060E070E0C3010E948978009729F0382EAB |
:10E860003618E3140CF0C3C03E2CC1C0F301019074 |
:10E870000020E9F731973E2E3618B9C0153511F052 |
:10E88000153731F4153511F4F1E0FF2A0AE00FC015 |
:10E89000183519F0183709F0A0C000E1F3FE07C0E1 |
:10E8A00081149104A104B10411F020E4F22A19A604 |
:10E8B000EDA6E7FC02C03FEDF32229E2622E712CA7 |
:10E8C0006C0E7D1E81149104A104B10421F44DA5A8 |
:10E8D000442309F47BC0802F9927AA27BB278EA742 |
:10E8E0009FA7A8ABB9AB202E332490E0891690E007 |
:10E8F000990691E0A90690E0B90648F0C501B40177 |
:10E900002EA53FA548A959A90E947F7A17C0AFEF4D |
:10E910008A169104A104B10449F040F0C401B10188 |
:10E920000E94587A9B014427552708C0882D602FE4 |
:10E930000E944C7A282F3327442755272AAB3BAB1C |
:10E940004CAB5DAB0A3059F48AA9880F880F880F49 |
:10E950009AA9990F890F382D381B832F10C00031C9 |
:10E9600039F48AA98295807F482D481B842F07C0DF |
:10E970008AA9880F880F880F582D581B852F90E083 |
:10E980002EA53FA548A959A982169306A406B50647 |
:10E9900008F091E08AA89BA8ACA8BDA88A3010F422 |
:10E9A000805D04C0895A183509F48F7DD3018E9398 |
:10E9B0003D01992309F099CF083041F4F3FE06C0D8 |
:10E9C000803321F080E3FD0182933F01CE01019667 |
:10E9D000382E3618F8E23F0E0BC0112309F46CC034 |
:10E9E0003E010894611C711C198391E0392E19A60F |
:10E9F000032D2DA4231827FC222489A5882311F098 |
:10EA00000F5F02C0F6FC0E5F020DEF2CFF24C70162 |
:10EA100080739070892B49F48CA5801B682F2C96ED |
:10EA20008EAD9FAD2C970E949D7289A5882331F0F1 |
:10EA300041E050E0BE01675D7F4F0AC0E6FE0EC0B8 |
:10EA400080E38AA71BA742E050E0BE01665D7F4FCE |
:10EA50002C968EAD9FAD2C970E946E72C70180736D |
:10EA60009070809749F48CA5801B682F2C968EADF2 |
:10EA70009FAD2C970E94AE72622D2C968EAD9FADED |
:10EA80002C970E94AE72832D992787FD9095AC013B |
:10EA9000B3012C968EAD9FAD2C970E946E72E4FE52 |
:10EAA00089CD2CA5201B2CA7622F2C968EAD9FAD57 |
:10EAB0002C970E949D727ECDE2E1CB5C0C94D87ABB |
:10EAC0002FB740E0F894E0E0F0E081E28093570057 |
:10EAD0009491E2E0F0E0809357003491E4E0F0E0BC |
:10EAE0008093570084912FBF9E3199F4363941F4B9 |
:10EAF000893011F441E00DC08A3059F442E009C078 |
:10EB0000373939F4863011F443E003C0853009F415 |
:10EB100044E0842F992708959FB7F8948091C90005 |
:10EB2000877F8093C9008091C9008F7E8093C90040 |
:10EB30008091C9008F778093C9008091C9008F7B35 |
:10EB40008093C9008091C9008F7D8093C9009FBFC9 |
:10EB500008951F93CF93DF93182F80919D038823EF |
:10EB600009F4A0C08091AD01181709F49BC08091F1 |
:10EB70009C03882321F40E94607580939C0382ED9E |
:10EB800091E090933D0180933C0181EC9AE09F934A |
:10EB90008F93C5E8D2E1DF93CF93E091B603F09174 |
:10EBA000B70309950F900F900F900F90812F992721 |
:10EBB00084309105F1F0853091051CF4892B51F0DA |
:10EBC0000CC086309105D9F086309105ACF00897DD |
:10EBD00041F12AC08DEB9AE002C084EB9AE09F934A |
:10EBE0008F93DF93CF93E091B603F091B70309952C |
:10EBF00027C08FEA9AE0F3CF87EA9AE0F0CF8FE957 |
:10EC00009AE09F938F93DF93CF93E091B603F091B7 |
:10EC1000B703099588ED91E090933D0180933C0105 |
:10EC20000FC08AE99AE0DBCF8EEC9AE09F938F9336 |
:10EC3000DF93CF93E091B603F091B703099510E00D |
:10EC40000F900F900F900F9080919C03843011F0E3 |
:10EC5000823099F40E948C75812F8150833018F492 |
:10EC60000E94BD681DC0143019F40E944E7118C076 |
:10EC70001830B1F40E94307113C0112389F084EE72 |
:10EC80009AE09F938F9385E892E19F938F93E09111 |
:10EC9000B603F091B70309950F900F900F900F9066 |
:10ECA0001093AD01DF91CF911F9108950F931F93A2 |
:10ECB000082F81E080939D034091AC01EAE4FAE0E3 |
:10ECC00020E030E05FE4849199272F5F3F4F829FDF |
:10ECD000B001839F700D929F700D112446275150F3 |
:10ECE000319657FFF0CF4093AC01E2E2FAE020E02A |
:10ECF00030E057E2849199272F5F3F4F829FB00108 |
:10ED0000839F700D929F700D1124462751503196AC |
:10ED100057FFF0CF4093AC0180919C03882321F4EE |
:10ED20000E94607580939C038FEB92E79093B703EA |
:10ED30008093B6038091AC01833459F088E190E070 |
:10ED400029E20FB6F894A895809360000FBE209337 |
:10ED50006000063091F08FEF9AE09F938F9385E8E3 |
:10ED600092E19F938F93E091B603F091B7030995D9 |
:10ED70000F900F900F900F90EECF0E94F10581E65B |
:10ED800090E09F938F9386E090E09F938F9382E033 |
:10ED900090E09F938F93809103016AE00E944C7AE8 |
:10EDA000892F99279F938F93809103010E944C7A1A |
:10EDB00099279F938F938CE19BE09F938F9305E816 |
:10EDC00012E11F930F93E091B603F091B7030995F9 |
:10EDD0008AE49AE09F938F931F930F93E091B60379 |
:10EDE000F091B703099582E29AE09F938F931F9366 |
:10EDF0000F93E091B603F091B70309950E94F105D6 |
:10EE000083EC8093810080916F00806280936F001B |
:10EE10008DB79EB746968DBF1F910F910895809133 |
:10EE2000C2068D3338F08091DC0887FD03C08CE387 |
:10EE30008093C20680917006882331F08055853614 |
:10EE400018F08FE780937006089580919D038823C2 |
:10EE500009F482C08091B30381508093B303882367 |
:10EE600009F069C089E18093B3038091C2068E33B3 |
:10EE700038F08091DC0887FD03C08DE38093C206E3 |
:10EE800080918E028238A0F58091560290915702AF |
:10EE9000805D974020F080915C09843620F41092C8 |
:10EEA000B5031092B4032091B4033091B50321153A |
:10EEB0003105B1F1C90101979093B5038093B40373 |
:10EEC000419798F18091DC0884FF2FC08091540213 |
:10EED0008460809354028091EA0887FF26C0809165 |
:10EEE0009B03882311F13093B5032093B4031DC015 |
:10EEF00080918E02853BC8F09091C20684E1989F74 |
:10EF0000C001112440962091B4033091B503281715 |
:10EF1000390730F42F5F3F4F3093B5032093B4038C |
:10EF2000809154028B7F809354028091AC01833492 |
:10EF300011F010929D038091B001882321F081503F |
:10EF40008093B00108958BE48093B0018091AD016E |
:10EF5000843011F40E94BB7108951F920F920FB676 |
:10EF60000F9211242F933F934F935F936F937F934F |
:10EF70008F939F93AF93BF93EF93FF932091CE0016 |
:10EF80008091BF018823B1F02093C6008091BF011A |
:10EF9000823029F52F3F19F58FEF94E3ACE0B0E014 |
:10EFA000C297A109B109B7FFFBCF8091F903809304 |
:10EFB000CE0015C09091AD01892F8150833020F48F |
:10EFC000822F0E9414690BC0943021F4822F0E947A |
:10EFD000AE7105C0983019F4822F0E943171FF91F3 |
:10EFE000EF91BF91AF919F918F917F916F915F91C1 |
:10EFF0004F913F912F910F900FBE0F901F9018953A |
:10F00000002422273327442751E0BB27EE27FF2780 |
:10F01000A0E1660F771F881F991F001C221F331F56 |
:10F02000441F660F771F881F991F001C221F331F64 |
:10F03000441F2AF4050E2B1F3E1F4F1F04C0051A44 |
:10F040002B0B3E0B4F0B550FBB1FEE1F587F556010 |
:10F0500047FD5250AA95E9F6E695B7955795E6957E |
:10F06000B7955795852F9B2F08952227332741E089 |
:10F07000552768E0880F991F221F331F880F991F9B |
:10F08000221F331F1AF4240F351F02C0241B350B17 |
:10F09000440F551F487F456037FD42506A9551F730 |
:10F0A0005695479556954795842F0895AA2797FF1B |
:10F0B00004C0809590958A1F9A1F77FF04C06095C1 |
:10F0C00070956A1F7A1F669F9001779FA001679FC6 |
:10F0D000300D411D5A1F300D411D5A1F889FF001F0 |
:10F0E000999F2E0F3F1F401D511D899F300D411DBF |
:10F0F0005A1F300D411D5A1FCA01B901112480CF7A |
:10F10000FB01DC0102C005900D9241505040D8F740 |
:10F110000895FC014150504030F001900616D1F79F |
:10F120003197CF010895882799270895A0E0B0E08E |
:10F13000ECE9F8E70C94C47A6C017B01EA0159010F |
:10F1400021978FEFCF3FD80789F086010894C11C23 |
:10F15000D11CC7010894E11CF11CF5010995F801C7 |
:10F1600080832197FFEFCF3FDF0779F7EAE0CDB744 |
:10F17000DEB70C94E07ACF92DF92EF92FF920F937A |
:10F180001F937C016B01FB010995082FC7010196B4 |
:10F19000F6010995182FC8011F910F91FF90EF906C |
:10F1A000DF90CF900895A0E0B0E0E9EDF8E70C948F |
:10F1B000C67A8C017B01EA01690121978FEFCF3F6D |
:10F1C000D80771F0F70121917F01C8010F5F1F4F30 |
:10F1D000622FF60109952197FFEFCF3FDF0791F7E7 |
:10F1E000E8E0CDB7DEB70C94E27ACF92DF92EF92EF |
:10F1F000FF920F931F936C018B017A01FA0109951D |
:10F20000812F9927682FC6010196F70109951F9153 |
:10F210000F91FF90EF90DF90CF9008955058BB274B |
:10F22000AA270ED0E0C0D1D030F0D6D020F031F4F3 |
:10F230009F3F11F41EF4C6C00EF4E095E7FBBCC07E |
:10F24000E92FE2D080F3BA176207730784079507A6 |
:10F2500018F071F49EF5FAC00EF4E0950B2EBA2F5B |
:10F26000A02D0B01B90190010C01CA01A0011124CC |
:10F27000FF27591B99F0593F50F4503E68F11A1678 |
:10F28000F040A22F232F342F4427585FF3CF469509 |
:10F2900037952795A795F0405395C9F77EF41F162B |
:10F2A000BA0B620B730B840BBAF09150A1F0FF0FF5 |
:10F2B000BB1F661F771F881FC2F70EC0BA0F621FE1 |
:10F2C000731F841F48F4879577956795B795F795D1 |
:10F2D0009E3F08F0B3CF9395880F08F09927EE0F63 |
:10F2E00097958795089598D088F09F5790F0B92FFB |
:10F2F0009927B751A0F0D1F0660F771F881F991F8B |
:10F300001AF0BA95C9F712C0B13081F09FD0B1E0C0 |
:10F3100008959CC0672F782F8827B85F39F0B93FD0 |
:10F32000CCF3869577956795B395D9F73EF490958C |
:10F330008095709561957F4F8F4F9F4F0895E8940A |
:10F3400009C097FB3EF490958095709561957F4F2D |
:10F350008F4F9F4F9923A9F0F92F96E9BB279395DB |
:10F36000F695879577956795B795F111F8CFFAF4EB |
:10F37000BB0F11F460FF1BC06F5F7F4F8F4F9F4F1C |
:10F3800016C0882311F096E911C0772321F09EE87A |
:10F39000872F762F05C0662371F096E8862F70E0E0 |
:10F3A00060E02AF09A95660F771F881FDAF7880FBA |
:10F3B0009695879597F9089597F99F6780E870E08B |
:10F3C00060E008959FEF80EC089500240A941616DB |
:10F3D000170618060906089500240A941216130643 |
:10F3E000140605060895092E0394000C11F48823D1 |
:10F3F00052F0BB0F40F4BF2B11F460FF04C06F5FED |
:10F400007F4F8F4F9F4F089557FD9058440F551FC2 |
:10F4100059F05F3F71F04795880F97FB991F61F096 |
:10F420009F3F79F087950895121613061406551F0D |
:10F43000F2CF4695F1DF08C0161617061806991F79 |
:10F44000F1CF86957105610508940895E894BB276E |
:10F4500066277727CB0197F90895629FD001739FA4 |
:10F46000F001829FE00DF11D649FE00DF11D929F60 |
:10F47000F00D839FF00D749FF00D659FF00D99279F |
:10F48000729FB00DE11DF91F639FB00DE11DF91FC3 |
:10F49000BD01CF0111240895991B79E004C0991F83 |
:10F4A000961708F0961B881F7A95C9F780950895DE |
:10F4B000AA1BBB1B51E107C0AA1FBB1FA617B7079A |
:10F4C00010F0A61BB70B881F991F5A95A9F78095B6 |
:10F4D0009095BC01CD01089597FB092E07260AD00F |
:10F4E00077FD04D0E5DF06D000201AF47095619511 |
:10F4F0007F4F0895F6F7909581959F4F0895A1E26B |
:10F500001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F9D |
:10F51000FF1FA217B307E407F50720F0A21BB30BE8 |
:10F52000E40BF50B661F771F881F991F1A9469F764 |
:10F5300060957095809590959B01AC01BD01CF01C0 |
:10F54000089597FB092E05260ED057FD04D0D7DF6E |
:10F550000AD0001C38F450954095309521953F4FC6 |
:10F560004F4F5F4F0895F6F7909580957095619590 |
:10F570007F4F8F4F9F4F08952F923F924F925F92F0 |
:10F580006F927F928F929F92AF92BF92CF92DF92B3 |
:10F59000EF92FF920F931F93CF93DF93CDB7DEB718 |
:10F5A000CA1BDB0B0FB6F894DEBF0FBECDBF0994AC |
:10F5B0002A88398848885F846E847D848C849B8403 |
:10F5C000AA84B984C884DF80EE80FD800C811B8111 |
:10F5D000AA81B981CE0FD11D0FB6F894DEBF0FBE40 |
:10F5E000CDBFED010895EE0FFF1F0590F491E02DC2 |
:04F5F0000994FFCFAC |
:10F5F40004035E0A010164FF010020FFFFC01FC075 |
:10F604001F0101F40101737373FF03007D0000C443 |
:10F6140009C4099600124167696C650051756164FB |
:10F62400726F0000000000000064000CD201012091 |
:10F634000B050000ECFF0002040607080808070693 |
:10F64400040200FEFCFAF9F8F8F8F9FAFCFE0002EC |
:10F6540004060708086440415A4655326464640A43 |
:10F6640002969696960840403A1030380132FF03CD |
:10F674007F0090D0030090D0030032002064FFFF8D |
:10F6840064200B0A0D0B0E100B0A0C0F0B1110FA51 |
:10F694002068010101010101F7FFFCFF70FF010F68 |
:02F6A400640000 |
:00000001FF |
/tags/V2.06a/Hex-Files/License.txt |
---|
0,0 → 1,69 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + * porting the sources to other systems or using the software on other systems (except hardware from www.mikrokopter.de) is not allowed |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
// + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
// + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
// + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
// + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
// + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
// + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
// + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
// + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
// + POSSIBILITY OF SUCH DAMAGE. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
/tags/V2.06a/Hex-Files/WasIstWas.txt |
---|
0,0 → 1,14 |
+++++++++++++++++++++++++ |
+ Flight-Ctrl: |
+++++++++++++++++++++++++ |
Flight-Ctrl_MEGA1284_Vx_yy.hex |
Flight-Ctrl_MEGA644_Vx_yy.hex |
Aktuelle Firmware |
Wird per serielle Schnittstelle (durch den Bootloader) eingespielt |
Achtung: Die Programme für den ATMEGA1284 dürfen ausschliesslich per Bootloader, also seriell (MKUSB) eingespielt werden und NICHT per ISP |
Warning: do not program the ATMEGA1284 (FC2.1) via SPI. Only use the MKUSB and the Koptertool for update! |
/tags/V2.06a/License.txt |
---|
0,0 → 1,52 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
/tags/V2.06a/Settings.h |
---|
--- Spektrum.c (nonexistent) |
+++ Spektrum.c (revision 2450) |
@@ -0,0 +1,406 @@ |
+/*####################################################################################### |
+Decodieren eines RC Summen Signals oder Spektrum Empfänger-Satellit |
+#######################################################################################*/ |
+ |
+#include "Spektrum.h" |
+#include "main.h" |
+ |
+unsigned char SpektrumTimer = 0; |
+ |
+// Achtung: RECEIVER_SPEKTRUM_DX7EXP oder RECEIVER_SPEKTRUM_DX8EXP wird in der main.h gesetzt |
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP) |
+unsigned char s_excnt = 0; // Bitcounter for Spektrum-Expander |
+unsigned char s_exparity = 0; // Parity Bit for Spektrum-Expander |
+signed char s_exdata[11]; // Data for Spektrum-Expander |
+ |
+void s_update(unsigned char channel, signed int value) // Channel-Diff numbercrunching and finally assign new stickvalue to PPM_in |
+{ |
+ if(SenderOkay >= 180) PPM_diff[channel] = ((value - PPM_in[channel]) / 3) * 3; |
+ else PPM_diff[channel] = 0; |
+ PPM_in[channel] = value; |
+} |
+#endif |
+ |
+//############################################################################ |
+// USART1 initialisation from killagreg |
+void SpektrumUartInit(void) |
+//############################################################################ |
+ { |
+ // -- Start of USART1 initialisation for Spekturm seriell-mode |
+ // USART1 Control and Status Register A, B, C and baud rate register |
+ uint8_t sreg = SREG; |
+ |
+ uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 115200) - 1); |
+ |
+ // disable all interrupts before reconfiguration |
+ cli(); |
+ // disable RX-Interrupt |
+ UCSR1B &= ~(1 << RXCIE1); |
+ // disable TX-Interrupt |
+ UCSR1B &= ~(1 << TXCIE1); |
+ // disable DRE-Interrupt |
+ UCSR1B &= ~(1 << UDRIE1); |
+/* |
+ // set direction of RXD1 and TXD1 pins |
+ // set RXD1 (PD2) as an input pin |
+ PORTD |= (1 << PORTD2); |
+ DDRD &= ~(1 << DDD2); |
+ // set TXD1 (PD3) as an output pin |
+ PORTD |= (1 << PORTD3); |
+ DDRD |= (1 << DDD3); |
+*/ |
+ // USART0 Baud Rate Register |
+ // set clock divider |
+ UBRR1H = (uint8_t)(ubrr>>8); |
+ UBRR1L = (uint8_t)ubrr; |
+ // enable double speed operation |
+ UCSR1A |= (1 << U2X1); |
+ // enable receiver and transmitter |
+ //UCSR1B = (1<<RXEN1)|(1<<TXEN1); |
+ |
+ UCSR1B = (1<<RXEN1); |
+ // set asynchronous mode |
+ UCSR1C &= ~(1 << UMSEL11); |
+ UCSR1C &= ~(1 << UMSEL10); |
+ // no parity |
+ UCSR1C &= ~(1 << UPM11); |
+ UCSR1C &= ~(1 << UPM10); |
+ // 1 stop bit |
+ UCSR1C &= ~(1 << USBS1); |
+ // 8-bit |
+ UCSR1B &= ~(1 << UCSZ12); |
+ UCSR1C |= (1 << UCSZ11); |
+ UCSR1C |= (1 << UCSZ10); |
+ // flush receive buffer explicit |
+ while(UCSR1A & (1<<RXC1)) UDR1; |
+ // enable RX-interrupts at the end |
+ UCSR1B |= (1 << RXCIE1); |
+ // -- End of USART1 initialisation |
+ // restore global interrupt flags |
+ |
+ SREG = sreg; |
+ return; |
+ } |
+ |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// + Copyright (c) Rainer Walther |
+// + RC-routines from original MK rc.c (c) H&I |
+// + Useful infos from Walter: http://www.rcgroups.com/forums/showthread.php?t=714299&page=2 |
+// + only for non-profit use |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+// |
+// 20080808 rw Modified for Spektrum AR6100 (PPM) |
+// 20080823 rw Add Spektrum satellite receiver on USART1 (644P only) |
+// 20081213 rw Add support for Spektrum DS9 Air-Tx-Module (9 channels) |
+// Replace AR6100-coding with original composit-signal routines |
+// |
+// --- |
+// Entweder Summensignal ODER Spektrum-Receiver anschließen. Nicht beides gleichzeitig betreiben! |
+// Binding is not implemented. Bind with external Receiver. |
+// Servo output J3, J4, J5 not serviced |
+// |
+// Anschuß Spektrum Receiver |
+// Orange: 3V von der FC (keinesfalls an 5V anschließen!) |
+// Schwarz: GND |
+// Grau: RXD1 (Pin 3) auf 10-Pol FC-Stecker |
+// |
+// --- |
+// Satellite-Reciever connected on USART1: |
+// |
+// DX7/DX6i: One data-frame at 115200 baud every 22ms. |
+// DX7se: One data-frame at 115200 baud every 11ms. |
+// byte1: unknown |
+// byte2: unknown |
+// byte3: and byte4: channel data (FLT-Mode) |
+// byte5: and byte6: channel data (Roll) |
+// byte7: and byte8: channel data (Nick) |
+// byte9: and byte10: channel data (Gier) |
+// byte11: and byte12: channel data (Gear Switch) |
+// byte13: and byte14: channel data (Gas) |
+// byte15: and byte16: channel data (AUX2) |
+// |
+// DS9 (9 Channel): One data-frame at 115200 baud every 11ms, alternating frame 1/2 for CH1-7 / CH8-9 |
+// 1st Frame: |
+// byte1: unknown |
+// byte2: unknown |
+// byte3: and byte4: channel data |
+// byte5: and byte6: channel data |
+// byte7: and byte8: channel data |
+// byte9: and byte10: channel data |
+// byte11: and byte12: channel data |
+// byte13: and byte14: channel data |
+// byte15: and byte16: channel data |
+// 2nd Frame: |
+// byte1: unknown |
+// byte2: unknown |
+// byte3: and byte4: channel data |
+// byte5: and byte6: channel data |
+// byte7: and byte8: 0xffff |
+// byte9: and byte10: 0xffff |
+// byte11: and byte12: 0xffff |
+// byte13: and byte14: 0xffff |
+// byte15: and byte16: 0xffff |
+// |
+// Each channel data (16 bit= 2byte, first msb, second lsb) is arranged as: |
+// |
+// Bits: F 0 C3 C2 C1 C0 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 |
+// |
+// 0 means a '0' bit |
+// F: 1 = indicates beginning of 2nd frame for CH8-9 (DS9 only) |
+// C3 to C0 is the channel number. 0 to 9 (4 bit, as assigned in the transmitter) |
+// D9 to D0 is the channel data (10 bit) 0xaa..0x200..0x356 for 100% transmitter-travel |
+// |
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
+ |
+#define MIN_FRAMEGAP 68 // 7ms |
+#define MAX_BYTEGAP 3 // 310us |
+ |
+ |
+//############################################################################ |
+// Wird im UART-Interrupt aufgerufen |
+//############################################################################ |
+void SpektrumParser(unsigned char c) |
+{ |
+ static unsigned char Sync=0, FrameCnt=0, ByteHigh=0, ReSync=1, Frame2=0; |
+ unsigned int Channel, index = 0; |
+ signed int signal = 0, tmp; |
+ int bCheckDelay; |
+// c = UDR1; // get data byte |
+ if(ReSync == 1) |
+ { |
+ // wait for beginning of new frame |
+ ReSync = 0; |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ FrameCnt = 0; |
+ Sync = 0; |
+ ByteHigh = 0; |
+ } |
+ else |
+ { |
+ if(!SpektrumTimer) bCheckDelay = 1; else bCheckDelay = 0;//CheckDelay(FrameTimer); |
+ if ( Sync == 0 ) |
+ { |
+ if(bCheckDelay) |
+ { |
+ // nach einer Pause von mind. 7ms erstes Sync-Character gefunden |
+ // Zeichen ignorieren, da Bedeutung unbekannt |
+ Sync = 1; |
+ FrameCnt ++; |
+ SpektrumTimer = MAX_BYTEGAP; |
+ } |
+ else |
+ { |
+ // Zeichen kam vor Ablauf der 7ms Sync-Pause |
+ // warten auf erstes Sync-Zeichen |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ FrameCnt = 0; |
+ Sync = 0; |
+ ByteHigh = 0; |
+ } |
+ } |
+ else if((Sync == 1) && !bCheckDelay) |
+ { |
+ // zweites Sync-Character ignorieren, Bedeutung unbekannt |
+ Sync = 2; |
+ FrameCnt ++; |
+ SpektrumTimer = MAX_BYTEGAP; |
+ } |
+ else if((Sync == 2) && !bCheckDelay) |
+ { |
+ SpektrumTimer = MAX_BYTEGAP; |
+ // Datenbyte high |
+ ByteHigh = c; |
+ if (FrameCnt == 2) |
+ { |
+ // is 1st Byte of Channel-data |
+ // Frame 1 with Channel 1-7 comming next |
+ Frame2 = 0; |
+ if(ByteHigh & 0x80) |
+ { |
+ // DS9: Frame 2 with Channel 8-9 comming next |
+ Frame2 = 1; |
+ } |
+ } |
+ Sync = 3; |
+ FrameCnt ++; |
+ } |
+ else if((Sync == 3) && !bCheckDelay) |
+ { |
+ // Datenbyte low |
+ // High-Byte for next channel comes next |
+ SpektrumTimer = MAX_BYTEGAP; |
+ Sync = 2; |
+ FrameCnt ++; |
+ Channel = ((unsigned int)ByteHigh << 8) | c; |
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM) |
+ { |
+ signal = Channel & 0x3ff; |
+ signal -= 0x200; // Offset, range 0x000..0x3ff? |
+ signal = signal/3; // scaling to fit PPM resolution |
+ index = (ByteHigh >> 2) & 0x0f; |
+ } |
+ else |
+ if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_HI_RES) |
+ { |
+ signal = Channel & 0x7ff; |
+ signal -= 0x400; // Offset, range 0x000..0x7ff? |
+ signal = signal/6; // scaling to fit PPM resolution |
+ index = (ByteHigh >> 3) & 0x0f; |
+ } |
+ else |
+ //if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_LOW_RES) |
+ { |
+ signal = Channel & 0x3ff; |
+ signal -= 360; // Offset, range 0x000..0x3ff? |
+ signal = signal/2; // scaling to fit PPM resolution |
+ index = (ByteHigh >> 2) & 0x0f; |
+ } |
+ |
+ index++; |
+ if(index < 13) |
+ { |
+ // Stabiles Signal |
+#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP) |
+ if (index == 2) index = 4; // Analog channel reassigment (2 <-> 4) for logical numbering (1,2,3,4) |
+ else if (index == 4) index = 2; |
+#endif |
+ if(abs(signal - PPM_in[index]) < 6) |
+ { |
+ if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
+ { |
+ if(SenderOkay < 200) SenderOkay += 10; |
+ else |
+ { |
+ SenderOkay = 200; |
+ TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input |
+ } |
+ } |
+ } |
+ tmp = (3 * (PPM_in[index]) + signal) / 4; |
+ if(tmp > signal+1) tmp--; else |
+ if(tmp < signal-1) tmp++; |
+ |
+#ifdef RECEIVER_SPEKTRUM_DX7EXP |
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
+ { |
+ if (signal > 100) // SYNC received |
+ { |
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit |
+ if ((s_excnt == 6 && ((s_exparity != 0 && s_exdata[s_excnt] == -125) || (s_exparity == 0 && s_exdata[s_excnt] == 125))) || (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125)))) // Parity check |
+ { |
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5) |
+ s_update(6,s_exdata[3]); // Elevator (CH6) |
+ s_update(11,s_exdata[4]); // Aileron (CH11) |
+ s_update(12,s_exdata[5]); // Rudder (CH12) |
+ |
+ if (s_excnt == 9) // New Mode (12 Channels) |
+ { |
+ if (s_exdata[7] == 125) s_update(8,PPM_in[8]+5); // Hover Pitch UP (CH8) |
+ if (s_exdata[8] == 125) s_update(8,PPM_in[8]-5); // Hover Pitch DN (CH8) |
+ if (PPM_in[8] < -125) PPM_in[8] = -125; // Range-Limit |
+ else if (PPM_in[8] > 125) PPM_in[8] = 125; // Range-Limit |
+ s_update(10,s_exdata[6]); // AUX2 (CH10) |
+ } |
+ } |
+ |
+ s_excnt = 0; // Reset bitcounter |
+ s_exparity = 0; // Reset parity bit |
+ } |
+ |
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min) |
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection |
+ if (signal < -100) |
+ { |
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max) |
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit |
+ } |
+ |
+ } |
+ |
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4) |
+ else if (index == 5) s_update(7,signal); // Gear (CH7) |
+ else if (index == 7) s_update(9,signal); // Hover Throttle (CH9) |
+ |
+#elif defined RECEIVER_SPEKTRUM_DX8EXP |
+ if(index == 6) // FLIGHT-MODE - The channel used for our data uplink |
+ { |
+ if (signal > 100) // SYNC received |
+ { |
+ if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit |
+ if (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125))) // Parity check |
+ { |
+ if (s_exdata[1] == 125 && s_exdata[2] == -125) s_update(5,-125); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == -125) s_update(5,0); // Reconstruct tripole Flight-Mode value (CH5) |
+ else if (s_exdata[1] == -125 && s_exdata[2] == 125) s_update(5,125); // Reconstruct tripole Flight-Mode value (CH5) |
+ |
+ if (s_exdata[3] == 125 && s_exdata[6] == -125) s_update(6,125); // Reconstruct tripole Elev D/R value (CH6) |
+ else if (s_exdata[3] == -125 && s_exdata[6] == -125) s_update(6,0); // Reconstruct tripole Elev D/R value (CH6) |
+ else if (s_exdata[3] == -125 && s_exdata[6] == 125) s_update(6,-125); // Reconstruct tripole Elev D/R value (CH6) |
+ |
+ |
+ if (s_exdata[7] == 125 && s_exdata[8] == -125) s_update(9,-125); // Reconstruct tripole AIL D/R value (CH9) |
+ else if (s_exdata[7] == -125 && s_exdata[8] == -125) s_update(9,0); // Reconstruct tripole AIL D/R value (CH9) |
+ else if (s_exdata[7] == -125 && s_exdata[8] == 125) s_update(9,125); // Reconstruct tripole AIL D/R value (CH9) |
+ |
+ s_update(10,s_exdata[5]); // Gear (CH10) |
+ s_update(12,s_exdata[4]); // Mix (CH12) |
+ } |
+ |
+ s_excnt = 0; // Reset bitcounter |
+ s_exparity = 0; // Reset parity bit |
+ } |
+ |
+ if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min) |
+ if (s_excnt == 10) s_excnt = 0; // Overflow protection |
+ if (signal < -100) |
+ { |
+ s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max) |
+ s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit |
+ } |
+ |
+ } |
+ |
+ if (index < 5 ) s_update(index,tmp); // Update normal potis (CH1-4) |
+ else if (index == 7) s_update(7,signal); // R Trim (CH7) |
+ else if (index == 5) s_update(8,signal); // AUX2 (CH8) |
+ else if (index == 8) s_update(11,signal); // AUX3 (CH11) |
+ |
+#else |
+ if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
+ else PPM_diff[index] = 0; |
+ PPM_in[index] = tmp; |
+#endif |
+ } |
+ else if(index > 17) ReSync = 1; // hier stimmt was nicht: neu synchronisieren |
+ } |
+ else |
+ { |
+ // hier stimmt was nicht: neu synchronisieren |
+ ReSync = 1; |
+ FrameCnt = 0; |
+ Frame2 = 0; |
+ // new frame next, nach fruehestens 7ms erwartet |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ } |
+ |
+ // 16 Bytes eingetroffen -> Komplett |
+ if(FrameCnt >= 16) |
+ { |
+ // Frame complete |
+ if(Frame2 == 0) |
+ { |
+ // Null bedeutet: Neue Daten |
+ // nur beim ersten Frame (CH 0-7) setzen |
+ if(!ReSync) NewPpmData = 0; |
+ } |
+ FrameCnt = 0; |
+ Frame2 = 0; |
+ Sync = 0; |
+ SpektrumTimer = MIN_FRAMEGAP; |
+ } |
+ } |
+} |
+ |
+ |
/tags/V2.06a/Spektrum.h |
---|
0,0 → 1,12 |
/*####################################################################################### |
Dekodieren eines Spektrum Signals |
#######################################################################################*/ |
#ifndef _SPEKTRUM_H |
#define _SPEKTRUM_H |
void SpektrumUartInit(void); |
void SpektrumBinding(void); |
extern unsigned char SpektrumTimer; |
extern void SpektrumParser(unsigned char c); |
#endif //_RC_H |
/tags/V2.06a/analog.c |
---|
0,0 → 1,394 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "eeprom.h" |
volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az, UBat = 150; |
volatile int AdWertNickFilter = 0, AdWertRollFilter = 0, AdWertGierFilter = 0; |
volatile int HiResNick = 2500, HiResRoll = 2500; |
volatile int AdWertNick = 0, AdWertRoll = 0, AdWertGier = 0; |
volatile int AdWertAccRoll = 0,AdWertAccNick = 0,AdWertAccHoch = 0; |
volatile long Luftdruck = 32000; |
volatile long SummenHoehe = 0; |
volatile long StartLuftdruck; |
volatile unsigned int MessLuftdruck = 1023; |
unsigned char DruckOffsetSetting; |
signed char ExpandBaro = 0; |
volatile int VarioMeter = 0; |
volatile unsigned int ZaehlMessungen = 0; |
unsigned char AnalogOffsetNick = 115,AnalogOffsetRoll = 115,AnalogOffsetGier = 115; |
volatile unsigned char AdReady = 1; |
unsigned int BaroStep = 500; |
long ExpandBaroStep = 0; |
volatile long HoehenWertF = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
unsigned char CalAthmospheare = 16; |
unsigned char AD_ACC_Y = 6; |
unsigned char AD_ACC_X = 7; |
#endif |
//####################################################################################### |
void ADC_Init(void) |
//####################################################################################### |
{ |
ADMUX = 0;//Referenz ist extern |
ANALOG_ON; |
} |
#define DESIRED_H_ADC 800 |
void CalcExpandBaroStep(void) |
{ |
if(ACC_AltitudeControl) ExpandBaroStep = BaroStep * (long)ExpandBaro; |
else ExpandBaroStep = (16 * BaroStep) * (long)ExpandBaro - 4; |
} |
void SucheLuftruckOffset(void) |
{ |
unsigned int off; |
ExpandBaro = 0; |
CalcExpandBaroStep(); |
off = GetParamByte(PID_PRESSURE_OFFSET); |
if(off < 240) off += 10; |
OCR0A = off; |
OCR0B = 255-off; |
Delay_ms_Mess(150); |
if(MessLuftdruck > DESIRED_H_ADC) off = 240; |
for(; off > 5; off--) |
{ |
OCR0A = off; |
OCR0B = 255-off; |
Delay_ms_Mess(100); |
printf("."); |
if(MessLuftdruck > DESIRED_H_ADC) break; |
} |
DruckOffsetSetting = off; |
SetParamByte(PID_PRESSURE_OFFSET, off); |
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) && (DruckOffsetSetting < 10 || DruckOffsetSetting >= 230)) VersionInfo.HardwareError[0] |= FC_ERROR0_PRESSURE; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + correction of the altitude error in higher altitudes |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
CalAthmospheare = 16; |
if(ACC_AltitudeControl) |
{ |
if(PlatinenVersion < 23) { if(off < 140) CalAthmospheare += (160 - off) / 26; } |
else { if(off < 170) CalAthmospheare += (188 - off) / 19; } |
} |
Luftdruck = MessLuftdruck * CalAthmospheare; |
#endif |
Delay_ms_Mess(300); |
} |
/* |
void SucheGyroOffset(void) |
{ |
unsigned char i, ready = 0; |
int timeout; |
timeout = SetDelay(2000); |
for(i=140; i != 0; i--) |
{ |
if(ready == 3 && i > 10) i = 9; |
ready = 0; |
if(AdWertNick < 1020) AnalogOffsetNick--; else if(AdWertNick > 1030) AnalogOffsetNick++; else ready++; |
if(AdWertRoll < 1020) AnalogOffsetRoll--; else if(AdWertRoll > 1030) AnalogOffsetRoll++; else ready++; |
if(AdWertGier < 1020) AnalogOffsetGier--; else if(AdWertGier > 1030) AnalogOffsetGier++; else ready++; |
I2C_Start(TWI_STATE_GYRO_OFFSET_TX); |
if(AnalogOffsetNick < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; AnalogOffsetNick = 10;}; if(AnalogOffsetNick > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; AnalogOffsetNick = 245;}; |
if(AnalogOffsetRoll < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; AnalogOffsetRoll = 10;}; if(AnalogOffsetRoll > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; AnalogOffsetRoll = 245;}; |
if(AnalogOffsetGier < 10) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; AnalogOffsetGier = 10;}; if(AnalogOffsetGier > 245) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; AnalogOffsetGier = 245;}; |
while(twi_state) if(CheckDelay(timeout)) {printf("\n\r DAC or I2C ERROR! Check I2C, 3Vref, DAC and BL-Ctrl"); break;} |
AdReady = 0; |
ANALOG_ON; |
while(!AdReady); |
if(i<10) Delay_ms_Mess(10); |
} |
Delay_ms_Mess(70); |
} |
*/ |
/* |
0 n |
1 r |
2 g |
3 y |
4 x |
5 n |
6 r |
7 u |
8 z |
9 L |
10 n |
11 r |
12 g |
13 y |
14 x |
15 n |
16 r |
17 L |
*/ |
//####################################################################################### |
// |
ISR(ADC_vect) |
//####################################################################################### |
{ |
static unsigned char kanal=0,state = 0; |
static signed int subcount = 0; |
static signed int gier1, roll1, nick1, nick_filter, roll_filter; |
static signed int accy, accx; |
static long tmpLuftdruck = 0; |
static char messanzahl_Druck = 0; |
switch(state++) |
{ |
case 0: |
nick1 = ADC; |
kanal = AD_ROLL; |
break; |
case 1: |
roll1 = ADC; |
kanal = AD_GIER; |
break; |
case 2: |
gier1 = ADC; |
kanal = AD_ACC_Y; |
break; |
case 3: |
Aktuell_ay = NeutralAccY - ADC; |
accy = Aktuell_ay; |
kanal = AD_ACC_X; |
break; |
case 4: |
Aktuell_ax = ADC - NeutralAccX; |
accx = Aktuell_ax; |
kanal = AD_NICK; |
break; |
case 5: |
nick1 += ADC; |
kanal = AD_ROLL; |
break; |
case 6: |
roll1 += ADC; |
kanal = AD_UBAT; |
break; |
case 7: |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(EE_Parameter.ExtraConfig & CFG_3_3V_REFERENCE) UBat = (3 * UBat + (11 * ADC) / 30) / 4; // there were some single FC2.1 with 3.3V reference |
else |
#endif |
{ |
static unsigned int tmpVoltage = 0; |
if(!tmpVoltage) tmpVoltage = (10 * ADC); |
if(tmpVoltage <= (10 * ADC)) tmpVoltage += 2; else tmpVoltage -= 2; |
UBat = tmpVoltage / 31; |
} |
kanal = AD_ACC_Z; |
break; |
case 8: |
Aktuell_az = ADC; |
AdWertAccHoch = Aktuell_az - NeutralAccZ - (int) NeutralAccZfine; |
if(!ACC_AltitudeControl) // The Offset must be corrected, because of the ACC-Drift from vibrations |
{ |
if(AdWertAccHoch > 1) |
{ |
if(NeutralAccZ < 750) |
{ |
subcount += 5; |
if(modell_fliegt < 500) subcount += 10; |
if(subcount > 100) { NeutralAccZ++; subcount -= 100;} |
} |
} |
else if(AdWertAccHoch < -1) |
{ |
if(NeutralAccZ > 550) |
{ |
subcount -= 5; |
if(modell_fliegt < 500) subcount -= 10; |
if(subcount < -100) { NeutralAccZ--; subcount += 100;} |
} |
} |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
else |
if(CosAttitude > 8192 - 50) // horizontal leveled within 6° |
{ |
if(AdWertAccHoch > 1) |
{ |
if(++subcount > 5000) |
{ |
if(NeutralAccZfine < 6) NeutralAccZfine++; |
subcount -= 5000; |
} |
} |
else |
if(AdWertAccHoch < -1) |
{ |
if(--subcount < -5000) |
{ |
if(NeutralAccZfine > -6) NeutralAccZfine--; |
subcount += 5000; |
} |
} |
} |
#endif |
Mess_Integral_Hoch += AdWertAccHoch; // Integrieren |
Mess_Integral_Hoch -= Mess_Integral_Hoch / 1024; // dämfen |
kanal = AD_DRUCK; |
break; |
// "case 9:" fehlt hier absichtlich |
case 10: |
nick1 += ADC; |
kanal = AD_ROLL; |
break; |
case 11: |
roll1 += ADC; |
kanal = AD_GIER; |
break; |
case 12: |
/* if(PlatinenVersion == 10) AdWertGier = (ADC + gier1 + 1) / 2; |
else |
if(PlatinenVersion >= 20) AdWertGier = 2047 - (ADC + gier1); |
else AdWertGier = (ADC + gier1); |
*/ |
AdWertGier = 2047 - (ADC + gier1); |
kanal = AD_ACC_Y; |
break; |
case 13: |
Aktuell_ay = NeutralAccY - ADC; |
AdWertAccRoll = (Aktuell_ay + accy); |
kanal = AD_ACC_X; |
break; |
case 14: |
Aktuell_ax = ADC - NeutralAccX; |
AdWertAccNick = (Aktuell_ax + accx); |
kanal = AD_NICK; |
break; |
case 15: |
nick1 += ADC; |
//if(PlatinenVersion == 10) nick1 *= 2; else |
nick1 *= 4; |
AdWertNick = nick1 / 8; |
nick_filter = (nick_filter + nick1) / 2; |
HiResNick = nick_filter - AdNeutralNick; |
AdWertNickFilter = (AdWertNickFilter + HiResNick) / 2; |
kanal = AD_ROLL; |
break; |
case 16: |
roll1 += ADC; |
//if(PlatinenVersion == 10) roll1 *= 2; else |
roll1 *= 4; |
AdWertRoll = roll1 / 8; |
roll_filter = (roll_filter + roll1) / 2; |
HiResRoll = roll_filter - AdNeutralRoll; |
AdWertRollFilter = (AdWertRollFilter + HiResRoll) / 2; |
kanal = AD_DRUCK; |
break; |
case 17: |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
HoehenWertF = (ACC_AltitudeFusion(0) + SA_FILTER/2)/SA_FILTER; // cm |
} |
else HoehenWertF = HoehenWert; |
#else |
HoehenWertF = HoehenWert; |
#endif |
state = 0; |
AdReady = 1; |
ZaehlMessungen++; |
// "break" fehlt hier absichtlich |
case 9: |
MessLuftdruck = ADC; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
// ExpandBaroStep = BaroStep * (long)ExpandBaro; // wird in fc.c aufgerufen |
// tmpLuftdruck = MessLuftdruck - BaroStep * (long)ExpandBaro; // -523 counts per offset step |
tmpLuftdruck = MessLuftdruck - ExpandBaroStep; // -523 counts per offset step |
Luftdruck -= Luftdruck / CalAthmospheare; // 16 |
Luftdruck += tmpLuftdruck; |
HoehenWert = StartLuftdruck - Luftdruck; // cm |
} |
else |
#endif |
{ // old version (until FC V2.1) |
tmpLuftdruck += MessLuftdruck; |
if(++messanzahl_Druck >= 16) // war bis 0.86 "18" |
{ |
signed int tmp; |
// Luftdruck = (7 * Luftdruck + tmpLuftdruck - (16 * BaroStep) * (long)ExpandBaro + 4) / 8; // -523.19 counts per 10 counts offset step |
// ExpandBaroStep = (16 * BaroStep) * (long)ExpandBaro - 4; // wird in fc.c aufgerufen |
Luftdruck = (7 * Luftdruck + tmpLuftdruck - ExpandBaroStep) / 8; // -523.19 counts per 10 counts offset step |
HoehenWert = StartLuftdruck - Luftdruck; |
SummenHoehe -= SummenHoehe/SM_FILTER; |
SummenHoehe += HoehenWert; |
tmp = (HoehenWert - SummenHoehe/SM_FILTER); |
if(tmp > 1024) tmp = 1024; else if(tmp < -1024) tmp = -1024; |
if(abs(VarioMeter) > 700) VarioMeter = (15 * VarioMeter + 8 * tmp)/16; |
else VarioMeter = (31 * VarioMeter + 8 * tmp)/32; |
tmpLuftdruck /= 2; |
messanzahl_Druck = 16/2; |
} |
} |
kanal = AD_NICK; |
break; |
default: |
kanal = 0; state = 0; kanal = AD_NICK; |
break; |
} |
ADMUX = kanal; |
if(state != 0) ANALOG_ON; |
} |
/tags/V2.06a/analog.h |
---|
0,0 → 1,58 |
#ifndef _ANALOG_H |
#define _ANALOG_H |
/*####################################################################################### |
#######################################################################################*/ |
#define SM_FILTER 16 |
#define SA_FILTER 512 |
extern volatile int UBat; |
extern volatile int AdWertNick, AdWertRoll, AdWertGier; |
extern volatile int AdWertAccRoll,AdWertAccNick,AdWertAccHoch; |
extern volatile int HiResNick, HiResRoll; |
extern volatile int AdWertNickFilter, AdWertRollFilter, AdWertGierFilter; |
extern volatile int Aktuell_Nick,Aktuell_Roll,Aktuell_Gier,Aktuell_ax, Aktuell_ay,Aktuell_az; |
extern volatile long Luftdruck; |
extern volatile long SummenHoehe; |
extern volatile char messanzahl_Druck; |
extern volatile unsigned int ZaehlMessungen; |
extern unsigned char DruckOffsetSetting; |
extern signed char ExpandBaro; |
extern volatile int VarioMeter; |
extern volatile unsigned int MessLuftdruck; |
extern volatile long StartLuftdruck; |
extern volatile char MessanzahlNick; |
extern unsigned char AnalogOffsetNick,AnalogOffsetRoll,AnalogOffsetGier; |
extern volatile unsigned char AdReady; |
extern unsigned int BaroStep; |
volatile long HoehenWertF; |
unsigned int ReadADC(unsigned char adc_input); |
void ADC_Init(void); |
void SucheLuftruckOffset(void); |
//void SucheGyroOffset(void); |
void CalcExpandBaroStep(void); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern unsigned char CalAthmospheare; |
#endif |
#define AD_GIER 0 |
#define AD_ROLL 1 |
#define AD_NICK 2 |
#define AD_DRUCK 3 |
#define AD_UBAT 4 |
#define AD_ACC_Z 5 |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern unsigned char AD_ACC_Y; |
extern unsigned char AD_ACC_X; |
#else |
#define AD_ACC_Y 6 |
#define AD_ACC_X 7 |
#endif |
#define ANALOG_OFF ADCSRA=0 |
#define ANALOG_ON ADCSRA=(1<<ADEN)|(1<<ADSC)|(0<<ADATE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADIE) |
//Signle trigger Mode, Interrupt on |
#endif //_ANALOG_H |
/tags/V2.06a/capacity.c |
---|
0,0 → 1,164 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "capacity.h" |
#include "twimaster.h" |
#include "main.h" |
#include "timer0.h" |
#include "analog.h" |
//#define CAPACITY_UPDATE_INTERVAL 10 // 10 ms |
#define CAPACITY_UPDATE_INTERVAL 50 // 50 ms = 20Hz |
#define FC_OFFSET_CURRENT 5 // calculate with a current of 0.5A |
#define BL_OFFSET_CURRENT 2 // calculate with a current of 0.2A |
// global varialbles |
unsigned short update_timer = 0; |
Capacity_t Capacity; |
// initialize capacity calculation |
void Capacity_Init(void) |
{ |
Capacity.ActualCurrent = 0; |
Capacity.UsedCapacity = 0; |
Capacity.ActualPower = 0; |
Capacity.MinOfMaxPWM = 0; |
update_timer = SetDelay(CAPACITY_UPDATE_INTERVAL); |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + extended Current measurement -> 200 = 20A 201 = 21A 255 = 75A (20+55) |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
unsigned int BL3_Current(unsigned char who) // in 0,1A |
{ |
if(Motor[who].Current == 255) return(0); // invalid |
if(Motor[who].Current <= 200) return(Motor[who].Current); |
else |
{ |
if(Motor[who].Version & MOTOR_STATE_BL30) return(200 + 10 * ((unsigned int)Motor[who].Current-200)); |
else return(Motor[who].Current); |
} |
} |
// called in main loop at a regular interval |
void Capacity_Update(void) |
{ |
unsigned short Current, SetSum; // max value will be 255 * 12 = 3060 |
static unsigned short SubCounter = 0; |
static unsigned short CurrentOffset = 0; |
static unsigned long SumCurrentOffset = 0; |
unsigned char i, NumOfMotors, MinOfMaxPWM; |
if(CheckDelay(update_timer)) |
{ |
update_timer += CAPACITY_UPDATE_INTERVAL; // do not use SetDelay to avoid timing leaks |
// determine sum of all present BL currents and setpoints |
Current = 0; |
SetSum = 0; |
NumOfMotors = 0; |
MinOfMaxPWM = 255; |
if(Capacity.MinOfMaxPWM == 254) RedundanceBlOperation = 1; |
else if(Capacity.MinOfMaxPWM == 255) RedundanceBlOperation = 0; |
for(i = 0; i < MAX_MOTORS; i++) |
{ |
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK/* && Mixer.Motor[i][MIX_GAS]*/) |
{ |
NumOfMotors++; |
if(Motor[i].Current > 200) |
{ |
Current += BL3_Current(i); // extended Current measurement -> 200 = 20A 201 = 21A 255 = 75A (20+55) |
} |
else Current += (unsigned int)(Motor[i].Current); |
SetSum += (unsigned int)(Motor[i].SetPoint); |
if(Motor[i].MaxPWM <= MinOfMaxPWM) MinOfMaxPWM = Motor[i].MaxPWM; else RedundanceBlOperation = 0; |
} |
} |
Capacity.MinOfMaxPWM = MinOfMaxPWM; |
if(SetSum == 0) // if all setpoints are 0 |
{ // determine offsets of motor currents |
#define CURRENT_AVERAGE 8 // 8bit = 256 * 10 ms = 2.56s average time |
CurrentOffset = (unsigned int)(SumCurrentOffset>>CURRENT_AVERAGE); |
SumCurrentOffset -= CurrentOffset; |
SumCurrentOffset += Current; |
// after averaging set current to static offset |
Current = FC_OFFSET_CURRENT; |
} |
else // some motors are running, includes also motor test condition, where "MotorRunning" is false |
{ // subtract offset |
if(Current > CurrentOffset) Current -= CurrentOffset; |
else Current = 0; |
// add the FC and BL Offsets |
Current += FC_OFFSET_CURRENT + NumOfMotors * BL_OFFSET_CURRENT; |
} |
// update actual Current |
Capacity.ActualCurrent = Current; |
// update actual Power |
if(Current < 255) Capacity.ActualPower = (UBat * Current) / 100; // in W higher resolution |
else Capacity.ActualPower = (UBat * (Current/4)) / 25; // in W |
// update used capacity |
SubCounter += Current; |
// 100mA * 1ms * CAPACITY_UPDATE_INTERVAL = 1 mA * 100 ms * CAPACITY_UPDATE_INTERVAL |
// = 1mA * 0.1s * CAPACITY_UPDATE_INTERVAL = 1mA * 1min / (600 / CAPACITY_UPDATE_INTERVAL) |
// = 1mAh / (36000 / CAPACITY_UPDATE_INTERVAL) |
#define SUB_COUNTER_LIMIT (36000 / CAPACITY_UPDATE_INTERVAL) |
while(SubCounter > SUB_COUNTER_LIMIT) |
{ |
Capacity.UsedCapacity++; // we have one mAh more |
SubCounter -= SUB_COUNTER_LIMIT; // keep the remaining sub part |
} |
} // EOF check delay update timer |
} |
/tags/V2.06a/capacity.h |
---|
0,0 → 1,18 |
#ifndef _CAPACITY_H |
#define _CAPACITY_H |
typedef struct |
{ |
unsigned short ActualCurrent; // in 0.1A Steps |
unsigned short ActualPower; // in 0.1W |
unsigned short UsedCapacity; // in mAh |
unsigned char MinOfMaxPWM; // BL Power Limit |
} __attribute__((packed)) Capacity_t; |
extern Capacity_t Capacity; |
void Capacity_Init(void); |
void Capacity_Update(void); |
#endif //_CAPACITY_H |
/tags/V2.06a/debug.c |
---|
0,0 → 1,48 |
#include "main.h" |
#include "debug.h" |
#ifdef DEBUG // only include functions if DEBUG is defined in main.h |
#warning : "### DEBUG-Funktion aktiv ###" |
unsigned char Debug_BufPtr = 0; |
struct str_Debug tDebug; |
unsigned char SendDebugOutput = 0; |
// function called from _printf_P to output character |
void Debug_Putchar(char c) |
{ |
if (!SendDebugOutput) |
{ |
tDebug.Text[Debug_BufPtr++] = c; // copy character to buffer |
if (Debug_BufPtr > 30) Debug_BufPtr = 30; // avoid buffer overflow |
} |
} |
void DebugSend(unsigned char cmd) |
{ |
if (!SendDebugOutput) |
{ |
tDebug.Cmd = cmd; |
tDebug.Text[Debug_BufPtr] = '\0'; // end of text marker |
Debug_BufPtr = 0; // set bufferindex to 0 |
SendDebugOutput = 1; // set flag to trasmit data the next time in serial transmit function |
} |
} |
#endif |
/* |
add the following code block to the serial transmit function |
#ifdef DEBUG // only include functions if DEBUG is defined |
if(SendDebugOutput && UebertragungAbgeschlossen) |
{ |
SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug)); |
SendDebugOutput = 0; |
} |
#endif |
*/ |
/tags/V2.06a/debug.h |
---|
0,0 → 1,60 |
#ifndef _DEBUG_H |
#define _DEBUG_H |
// ---------------------------------------------- |
#define CMD_NONE 0x00 |
#define CMD_RAW_OUTPUT 0x01 |
#define CMD_ERROR_MSG 0x02 |
#define CMD_WARNING_MSG 0x04 |
#define CMD_GREEN_MSG 0x08 |
// debug console in MK-Tool can also handle ANSI ESC seq. |
#define ANSI_ATTRIBUTE_OFF "\033[0m" |
#define ANSI_BOLD "\033[1m" |
#define ANSI_UNDERSCORE "\033[4m" |
#define ANSI_BLINK "\033[5m" |
#define ANSI_INVERSE "\033[7m" |
#define ANSI_INVISIBLE "\033[8m" |
#define ANSI_COLOR_BLACK "\033[30m" |
#define ANSI_COLOR_RED "\033[31m" |
#define ANSI_COLOR_GREEN "\033[32m" |
#define ANSI_COLOR_YELLOW "\033[33m" |
#define ANSI_COLOR_BLUE "\033[34m" |
#define ANSI_COLOR_VIOLETT "\033[35m" |
#define ANSI_COLOR_KOBALTBLUE "\033[36m" |
#define ANSI_COLOR_WHITE "\033[37m" |
#define ANSI_CLEAR "\033[2J" |
#define ANSI_HOME "\033[H" |
// macros for easier use |
#ifdef DEBUG // only include functions if DEBUG is defined in main.h |
#define Debug(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_NONE); } |
#define Debug_Raw(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_RAW_OUTPUT); } |
#define Debug_Warning(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_WARNING_MSG); } |
#define Debug_Error(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_ERROR_MSG); } |
#define Debug_OK(format, args...) { _printf_P(&Debug_Putchar, PSTR(format) , ## args); DebugSend(CMD_GREEN_MSG); } |
struct str_Debug |
{ |
unsigned char Cmd; // bitcoded command |
char Text[32]; |
}; |
extern struct str_Debug tDebug; |
unsigned char SendDebugOutput; |
void Debug_Putchar(char c); |
void DebugSend(unsigned char cmd); |
#else // dummy macros (won't waste flash, if #DEBUG is disabled) |
#define Debug(format, args...) ; |
#define Debug_Raw(format, args...) ; |
#define Debug_Warning(format, args...) ; |
#define Debug_Error(format, args...) ; |
#define Debug_OK(format, args...) ; |
#endif |
// ---------------------------------------------- |
#endif |
/tags/V2.06a/eeprom.c |
---|
0,0 → 1,669 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#ifndef EEMEM |
#define EEMEM __attribute__ ((section (".eeprom"))) |
#endif |
#include <avr/eeprom.h> |
#include <string.h> |
#include "eeprom.h" |
#include "uart.h" |
#include "led.h" |
#include "main.h" |
#include "fc.h" |
#include "twimaster.h" |
paramset_t EE_Parameter; |
MixerTable_t Mixer; |
uint8_t RequiredMotors; |
uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len) |
{ |
uint8_t crc = 0xAA; |
uint16_t i; |
for(i=0; i<len; i++) |
{ |
crc += pBuffer[i]; |
} |
return crc; |
} |
uint8_t EEProm_Checksum(uint16_t EEAddr, uint16_t len) |
{ |
uint8_t crc = 0xAA; |
uint16_t off; |
for(off=0; off<len; off++) |
{ |
crc += eeprom_read_byte((uint8_t*)(EEAddr + off));; |
} |
return crc; |
} |
void ParamSet_DefaultStickMapping(void) |
{ |
EE_Parameter.Kanalbelegung[K_GAS] = 1; |
EE_Parameter.Kanalbelegung[K_ROLL] = 2; |
EE_Parameter.Kanalbelegung[K_NICK] = 3; |
EE_Parameter.Kanalbelegung[K_GIER] = 4; |
EE_Parameter.Kanalbelegung[K_POTI1] = 5; |
EE_Parameter.Kanalbelegung[K_POTI2] = 6; |
EE_Parameter.Kanalbelegung[K_POTI3] = 7; |
EE_Parameter.Kanalbelegung[K_POTI4] = 8; |
EE_Parameter.Kanalbelegung[K_POTI5] = 9; |
EE_Parameter.Kanalbelegung[K_POTI6] = 10; |
EE_Parameter.Kanalbelegung[K_POTI7] = 11; |
EE_Parameter.Kanalbelegung[K_POTI8] = 12; |
} |
/***************************************************/ |
/* Default Values for parameter set 1 */ |
/***************************************************/ |
void CommonDefaults(void) |
{ |
EE_Parameter.Revision = EEPARAM_REVISION; |
memset(EE_Parameter.Name,0,12); // delete name |
// if(PlatinenVersion >= 20) |
{ |
EE_Parameter.Gyro_D = 10; |
EE_Parameter.Driftkomp = 0; |
EE_Parameter.GyroAccFaktor = 27; |
EE_Parameter.WinkelUmschlagNick = 78; |
EE_Parameter.WinkelUmschlagRoll = 78; |
} |
/* else |
{ |
EE_Parameter.Gyro_D = 3; |
EE_Parameter.Driftkomp = 32; |
EE_Parameter.GyroAccFaktor = 30; |
EE_Parameter.WinkelUmschlagNick = 85; |
EE_Parameter.WinkelUmschlagRoll = 85; |
} |
*/ |
EE_Parameter.GyroAccAbgleich = 32; // 1/k |
EE_Parameter.BitConfig = 0; // Looping usw. |
EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER; |
EE_Parameter.ExtraConfig = CFG_GPS_AID | CFG2_VARIO_BEEP | CFG_LEARNABLE_CAREFREE | CFG_NO_RCOFF_BEEPING; |
EE_Parameter.GlobalConfig3 = CFG3_SPEAK_ALL | CFG3_NO_GPSFIX_NO_START;// |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
EE_Parameter.Receiver = RECEIVER_HOTT; |
#else |
EE_Parameter.Receiver = RECEIVER_JETI; |
#endif |
EE_Parameter.MotorSafetySwitch = 0; |
EE_Parameter.ExternalControl = 0; |
EE_Parameter.Gas_Min = 8; // Wert : 0-32 |
EE_Parameter.Gas_Max = 230; // Wert : 33-247 |
EE_Parameter.KompassWirkung = 64; // Wert : 0-247 |
EE_Parameter.HoeheChannel = 5; // Wert : 0-32 |
EE_Parameter.Hoehe_MinGas = 30; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
EE_Parameter.Hoehe_P = 20; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 40; // Wert : 0-247 |
EE_Parameter.Hoehe_ACC_Wirkung = 30; // Wert : 0-247 |
EE_Parameter.Hoehe_HoverBand = 1; // Wert : 0-247 |
EE_Parameter.Hoehe_GPS_Z = 0; // Wert : 0-247 |
EE_Parameter.Hoehe_StickNeutralPoint = 127;// Wert : 0-247 (0 = Hover-Estimation) |
EE_Parameter.FailSafeTime = 30; // 0 = off |
} |
else |
#endif |
{ |
EE_Parameter.Hoehe_P = 15; // Wert : 0-32 |
EE_Parameter.Luftdruck_D = 30; // Wert : 0-247 |
EE_Parameter.Hoehe_ACC_Wirkung = 0; // Wert : 0-247 |
EE_Parameter.Hoehe_HoverBand = 8; // Wert : 0-247 |
EE_Parameter.Hoehe_GPS_Z = 20; // Wert : 0-247 |
EE_Parameter.Hoehe_StickNeutralPoint = 0;// Wert : 0-247 (0 = Hover-Estimation) |
EE_Parameter.FailSafeTime = 0; // 0 = off |
} |
EE_Parameter.Hoehe_Verstaerkung = 15; // Wert : 0-50 (15 -> ca. +/- 5m/sek bei Stick-Voll-Ausschlag) |
EE_Parameter.StartLandChannel = 0; |
EE_Parameter.LandingSpeed = 12; |
EE_Parameter.UserParam1 = 0; // zur freien Verwendung |
EE_Parameter.UserParam2 = 0; // zur freien Verwendung |
EE_Parameter.UserParam3 = 0; // zur freien Verwendung |
EE_Parameter.UserParam4 = 0; // zur freien Verwendung |
EE_Parameter.UserParam5 = 0; // zur freien Verwendung |
EE_Parameter.UserParam6 = 0; // zur freien Verwendung |
EE_Parameter.UserParam7 = 0; // zur freien Verwendung |
EE_Parameter.UserParam8 = 0; // zur freien Verwendung |
EE_Parameter.ServoNickControl = 128; // Wert : 0-247 // Stellung des Servos |
EE_Parameter.ServoNickComp = 50; // Wert : 0-247 // Einfluss Gyro/Servo |
EE_Parameter.ServoCompInvert = 2; // Wert : 0-247 // Richtung Einfluss Gyro/Servo |
EE_Parameter.ServoNickMin = 24; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoNickMax = 230; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoNickRefresh = 3; |
EE_Parameter.Servo3 = 125; |
EE_Parameter.Servo4 = 125; |
EE_Parameter.Servo5 = 125; |
EE_Parameter.ServoRollControl = 128; // Wert : 0-247 // Stellung des Servos |
EE_Parameter.ServoRollComp = 85; // Wert : 0-247 // Einfluss Gyro/Servo |
EE_Parameter.ServoRollMin = 70; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoRollMax = 220; // Wert : 0-247 // Anschlag |
EE_Parameter.ServoManualControlSpeed = 60; |
EE_Parameter.CamOrientation = 0; // Wert : 0-24 -> 0-360 -> 15° steps |
EE_Parameter.J16Bitmask = 0xAA; |
EE_Parameter.J17Bitmask = 0xCC; |
EE_Parameter.WARN_J16_Bitmask = 0x00; |
EE_Parameter.WARN_J17_Bitmask = 0xAA; |
EE_Parameter.J16Timing = 40; |
EE_Parameter.J17Timing = 40; |
EE_Parameter.AutoPhotoDistance = 0; // Photo release in meter |
EE_Parameter.AutoPhotoAtitudes = 0; // Photo release in meter |
EE_Parameter.SingleWpSpeed = 50; // Speed when flying the single points |
EE_Parameter.LoopGasLimit = 50; |
EE_Parameter.LoopThreshold = 90; // Wert: 0-247 Schwelle für Stickausschlag |
EE_Parameter.LoopHysterese = 50; |
EE_Parameter.NaviGpsModeChannel = 6; // Kanal 6 |
EE_Parameter.NaviGpsGain = 100; |
EE_Parameter.NaviGpsP = 100; |
EE_Parameter.NaviGpsI = 90; |
EE_Parameter.NaviGpsD = 120; |
EE_Parameter.NaviGpsA = 40; |
EE_Parameter.NaviGpsPLimit = 75; |
EE_Parameter.NaviGpsILimit = 85; |
EE_Parameter.NaviGpsDLimit = 75; |
EE_Parameter.NaviGpsMinSat = 6; |
EE_Parameter.NaviStickThreshold = 8; |
EE_Parameter.NaviWindCorrection = 50; |
EE_Parameter.NaviAccCompensation = 42; |
EE_Parameter.NaviMaxFlyingRange = 0; |
EE_Parameter.NaviDescendRange = 0; |
EE_Parameter.NaviAngleLimitation = 140; |
EE_Parameter.NaviPH_LoginTime = 2; |
EE_Parameter.OrientationAngle = 0; |
EE_Parameter.CareFreeChannel = 0; |
EE_Parameter.NotGas = 65; // Wert : 0-247 // Gaswert bei Empangsverlust (ggf. in Prozent) |
EE_Parameter.NotGasZeit = 90; // Wert : 0-247 // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen |
EE_Parameter.MotorSmooth = 0; |
EE_Parameter.ComingHomeAltitude = 0; // 0 = don't change |
EE_Parameter.MaxAltitude = 150; // 0 = off |
EE_Parameter.AchsKopplung1 = 125; |
EE_Parameter.AchsKopplung2 = 52; |
EE_Parameter.FailsafeChannel = 0; |
EE_Parameter.ServoFilterNick = 0; |
EE_Parameter.ServoFilterRoll = 0; |
EE_Parameter.Servo3OnValue = 140; |
EE_Parameter.Servo3OffValue = 70; |
EE_Parameter.Servo4OnValue = 140; |
EE_Parameter.Servo4OffValue = 70; |
EE_Parameter.CompassOffset = 0; |
EE_Parameter.UnterspannungsWarnung = 32; // Wert : 0-247 ( Automatische Zellenerkennung bei < 50) |
EE_Parameter.ComingHomeVoltage = 31; |
EE_Parameter.AutoLandingVoltage = 30; |
} |
/* |
void ParamSet_DefaultSet1(void) // sport |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 14; // Wert : 1-20 |
EE_Parameter.Stick_D = 16; // Wert : 0-20 |
EE_Parameter.StickGier_P = 12; // Wert : 1-20 |
EE_Parameter.Gyro_P = 80; // Wert : 0-247 |
EE_Parameter.Gyro_I = 150; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 80; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 150; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 32; |
EE_Parameter.CouplingYawCorrection = 1; |
EE_Parameter.GyroAccAbgleich = 16; // 1/k; |
EE_Parameter.DynamicStability = 100; |
memcpy(EE_Parameter.Name, "Sport\0", 12); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
*/ |
/***************************************************/ |
/* Default Values for parameter set 1 */ |
/***************************************************/ |
void ParamSet_DefaultSet1(void) // normal |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 10; // Wert : 1-20 |
EE_Parameter.Stick_D = 16; // Wert : 0-20 |
EE_Parameter.StickGier_P = 6; // Wert : 1-20 |
EE_Parameter.Gyro_P = 90; // Wert : 0-247 |
EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 90; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 32; |
EE_Parameter.CouplingYawCorrection = 60; |
EE_Parameter.DynamicStability = 75; |
memcpy(EE_Parameter.Name, "Fast",4); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
/***************************************************/ |
/* Default Values for parameter set 2 */ |
/***************************************************/ |
void ParamSet_DefaultSet2(void) // Agil |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 8; // Wert : 1-20 |
EE_Parameter.Stick_D = 16; // Wert : 0-20 |
EE_Parameter.StickGier_P = 6; // Wert : 1-20 |
EE_Parameter.Gyro_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 16; |
EE_Parameter.CouplingYawCorrection = 70; |
EE_Parameter.DynamicStability = 70; |
memcpy(EE_Parameter.Name, "Agile",5); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
/***************************************************/ |
/* Default Values for parameter set 3 */ |
/***************************************************/ |
void ParamSet_DefaultSet3(void) // Easy |
{ |
CommonDefaults(); |
EE_Parameter.Stick_P = 6; // Wert : 1-20 |
EE_Parameter.Stick_D = 10; // Wert : 0-20 |
EE_Parameter.StickGier_P = 4; // Wert : 1-20 |
EE_Parameter.Gyro_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_P = 100; // Wert : 0-247 |
EE_Parameter.Gyro_Gier_I = 120; // Wert : 0-247 |
EE_Parameter.Gyro_Stability = 6; // Wert : 1-8 |
EE_Parameter.I_Faktor = 16; |
EE_Parameter.CouplingYawCorrection = 70; |
EE_Parameter.DynamicStability = 70; |
memcpy(EE_Parameter.Name, "Easy", 4); |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
} |
/***************************************************/ |
/* Read Parameter from EEPROM as byte */ |
/***************************************************/ |
uint8_t GetParamByte(uint16_t param_id) |
{ |
return eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id)); |
} |
/***************************************************/ |
/* Write Parameter to EEPROM as byte */ |
/***************************************************/ |
void SetParamByte(uint16_t param_id, uint8_t value) |
{ |
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value); |
} |
/***************************************************/ |
/* Read Parameter from EEPROM as word */ |
/***************************************************/ |
uint16_t GetParamWord(uint16_t param_id) |
{ |
return eeprom_read_word((uint16_t *)(EEPROM_ADR_PARAM_BEGIN + param_id)); |
} |
/***************************************************/ |
/* Write Parameter to EEPROM as word */ |
/***************************************************/ |
void SetParamWord(uint16_t param_id, uint16_t value) |
{ |
eeprom_write_word((uint16_t*)(EEPROM_ADR_PARAM_BEGIN + param_id), value); |
} |
/***************************************************/ |
/* Read Parameter Set from EEPROM */ |
/***************************************************/ |
// number [1..5] |
uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber) |
{ |
uint8_t crc; |
uint16_t eeaddr; |
// range the setnumber |
if((1 > setnumber) || (setnumber > 5)) setnumber = 3; |
// calculate eeprom addr |
eeaddr = EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1); |
// calculate checksum from eeprom |
crc = EEProm_Checksum(eeaddr, PARAMSET_STRUCT_LEN - 1); |
// check crc |
if(crc != eeprom_read_byte((uint8_t*)(eeaddr + PARAMSET_STRUCT_LEN - 1))) return 0; |
// check revision |
if(eeprom_read_byte((uint8_t*)(eeaddr)) != EEPARAM_REVISION) return 0; |
// read paramset from eeprom |
eeprom_read_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN); |
LED_Init(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
LIBFC_HoTT_Clear(); |
#endif |
return 1; |
} |
/***************************************************/ |
/* Write Parameter Set to EEPROM */ |
/***************************************************/ |
// number [1..5] |
uint8_t ParamSet_WriteToEEProm(uint8_t setnumber) |
{ |
uint8_t crc; |
if(EE_Parameter.Revision == EEPARAM_REVISION) // write only the right revision to eeprom |
{ |
if(setnumber > 5) setnumber = 5; |
if(setnumber < 1) return 0; |
LIBFC_CheckSettings(); |
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE) // check the Setting: Not more than 100% emergency gas |
{ |
if(EE_Parameter.NotGas > 99) EE_Parameter.NotGas = 80; // i.e. 80% of Hovergas |
} |
// update checksum |
EE_Parameter.crc = RAM_Checksum((uint8_t*)(&EE_Parameter), sizeof(EE_Parameter)-1); |
// write paramset to eeprom |
eeprom_write_block((void *) &EE_Parameter, (void*)(EEPROM_ADR_PARAMSET + PARAMSET_STRUCT_LEN * (setnumber - 1)), PARAMSET_STRUCT_LEN); |
// backup channel settings to separate block in eeprom |
eeprom_write_block( (void*)(EE_Parameter.Kanalbelegung), (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
// write crc of channel block to eeprom |
crc = RAM_Checksum((uint8_t*)(EE_Parameter.Kanalbelegung), sizeof(EE_Parameter.Kanalbelegung)); |
eeprom_write_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)), crc); |
// update active settings number |
SetActiveParamSet(setnumber); |
LED_Init(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
LIBFC_HoTT_Clear(); |
#endif |
return 1; |
} |
// wrong revision |
return 0; |
} |
/***************************************************/ |
/* Read MixerTable from EEPROM */ |
/***************************************************/ |
uint8_t MixerTable_ReadFromEEProm(void) |
{ |
uint8_t crc; |
// calculate checksum in eeprom |
crc = EEProm_Checksum(EEPROM_ADR_MIXERTABLE, sizeof(Mixer) - 1); |
// check crc |
if( crc != eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE + sizeof(Mixer) - 1)) ) return 0; |
// check revision |
if(eeprom_read_byte((uint8_t*)(EEPROM_ADR_MIXERTABLE)) != EEMIXER_REVISION) return 0; |
// read mixer table |
eeprom_read_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer)); |
return 1; |
} |
/***************************************************/ |
/* Write Mixer Table to EEPROM */ |
/***************************************************/ |
uint8_t MixerTable_WriteToEEProm(void) |
{ |
if(Mixer.Revision == EEMIXER_REVISION) |
{ |
// update crc |
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1); |
// write to eeprom |
eeprom_write_block((void *) &Mixer, (void*)(EEPROM_ADR_MIXERTABLE), sizeof(Mixer)); |
return 1; |
} |
else return 0; |
} |
/***************************************************/ |
/* Default Values for Mixer Table */ |
/***************************************************/ |
void MixerTable_Default(void) // Quadro |
{ |
uint8_t i; |
Mixer.Revision = EEMIXER_REVISION; |
// clear mixer table |
for(i = 0; i < 16; i++) |
{ |
Mixer.Motor[i][MIX_GAS] = 0; |
Mixer.Motor[i][MIX_NICK] = 0; |
Mixer.Motor[i][MIX_ROLL] = 0; |
Mixer.Motor[i][MIX_YAW] = 0; |
} |
// default = Quadro |
Mixer.Motor[0][MIX_GAS] = 64; Mixer.Motor[0][MIX_NICK] = +64; Mixer.Motor[0][MIX_ROLL] = 0; Mixer.Motor[0][MIX_YAW] = +64; |
Mixer.Motor[1][MIX_GAS] = 64; Mixer.Motor[1][MIX_NICK] = -64; Mixer.Motor[1][MIX_ROLL] = 0; Mixer.Motor[1][MIX_YAW] = +64; |
Mixer.Motor[2][MIX_GAS] = 64; Mixer.Motor[2][MIX_NICK] = 0; Mixer.Motor[2][MIX_ROLL] = -64; Mixer.Motor[2][MIX_YAW] = -64; |
Mixer.Motor[3][MIX_GAS] = 64; Mixer.Motor[3][MIX_NICK] = 0; Mixer.Motor[3][MIX_ROLL] = +64; Mixer.Motor[3][MIX_YAW] = -64; |
memcpy(Mixer.Name, "Quadro\0\0\0\0\0\0", 12); |
Mixer.crc = RAM_Checksum((uint8_t*)(&Mixer), sizeof(Mixer) - 1); |
} |
/***************************************************/ |
/* Get active parameter set */ |
/***************************************************/ |
uint8_t GetActiveParamSet(void) |
{ |
uint8_t setnumber; |
setnumber = eeprom_read_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET)); |
if(setnumber > 5) |
{ |
setnumber = 3; |
eeprom_write_byte((void*)(EEPROM_ADR_PARAM_BEGIN+PID_ACTIVE_SET), setnumber); |
} |
ActiveParamSet = setnumber; |
return(setnumber); |
} |
/***************************************************/ |
/* Set active parameter set */ |
/***************************************************/ |
void SetActiveParamSet(uint8_t setnumber) |
{ |
if(setnumber > 5) setnumber = 5; |
if(setnumber < 1) setnumber = 1; |
ActiveParamSet = setnumber; |
eeprom_write_byte((uint8_t*)(EEPROM_ADR_PARAM_BEGIN + PID_ACTIVE_SET), setnumber); |
} |
/***************************************************/ |
/* Set default parameter set */ |
/***************************************************/ |
void SetDefaultParameter(uint8_t set, uint8_t restore_channels) |
{ |
if(set > 5) set = 5; |
else if(set < 1) set = 1; |
switch(set) |
{ |
case 1: |
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport) |
break; |
case 2: |
ParamSet_DefaultSet2(); // Kamera |
break; |
case 3: |
ParamSet_DefaultSet3(); // Beginner |
break; |
default: |
ParamSet_DefaultSet3(); // Beginner |
break; |
} |
if(restore_channels) |
{ |
uint8_t crc; |
// 1st check for a valid channel backup in eeprom |
crc = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung)); |
if(crc == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung))) ) |
{ |
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
} |
else ParamSet_DefaultStickMapping(); |
} |
else ParamSet_DefaultStickMapping(); |
ParamSet_WriteToEEProm(set); |
} |
/***************************************************/ |
/* Initialize EEPROM Parameter Sets */ |
/***************************************************/ |
void ParamSet_Init(void) |
{ |
uint8_t channel_backup = 0, bad_params = 0, ee_default = 0,i; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(PlatinenVersion != GetParamByte(PID_HARDWARE_VERSION)) |
{ |
if(PlatinenVersion == 22 && GetParamByte(PID_HARDWARE_VERSION) == 21 && !(PIND & 0x10)) SetParamByte(PID_EE_REVISION,0); // reset the Settings if the Version changed to V2.2 |
SetParamByte(PID_HARDWARE_VERSION,PlatinenVersion); // Remember the Version number |
wdt_enable(WDTO_15MS); // Reset-Commando |
printf("\n\r--> Hardware Version Byte Changed <--"); |
while(1); |
} |
#endif |
if((EEPARAM_REVISION) != GetParamByte(PID_EE_REVISION)) |
{ |
ee_default = 1; // software update or forced by mktool |
} |
// 1st check for a valid channel backup in eeprom |
i = EEProm_Checksum(EEPROM_ADR_CHANNELS, sizeof(EE_Parameter.Kanalbelegung)); |
if(i == eeprom_read_byte((uint8_t*)(EEPROM_ADR_CHANNELS + sizeof(EE_Parameter.Kanalbelegung)))) channel_backup = 1; |
// parameter check |
// check all 5 parameter settings |
for (i = 1;i < 6; i++) |
{ |
if(ee_default || !ParamSet_ReadFromEEProm(i)) // could not read paramset from eeprom |
{ |
bad_params = 1; |
printf("\n\rGenerating default Parameter Set %d",i); |
switch(i) |
{ |
case 1: |
ParamSet_DefaultSet1(); // Fill ParamSet Structure to default parameter set 1 (Sport) |
break; |
case 2: |
ParamSet_DefaultSet2(); // Normal |
break; |
default: |
ParamSet_DefaultSet3(); // Easy |
break; |
} |
if(channel_backup) // if we have an channel mapping backup in eeprom |
{ // restore it from eeprom |
eeprom_read_block((void *)EE_Parameter.Kanalbelegung, (void*)(EEPROM_ADR_CHANNELS), sizeof(EE_Parameter.Kanalbelegung)); |
} |
else |
{ // use default mapping |
ParamSet_DefaultStickMapping(); |
} |
ParamSet_WriteToEEProm(i); |
} |
} |
if(bad_params) // at least one of the parameter settings were invalid |
{ |
// default-Setting is parameter set 3 |
SetActiveParamSet(3); |
} |
// read active parameter set to ParamSet stucture |
i = GetActiveParamSet(); |
ParamSet_ReadFromEEProm(i); |
printf("\n\rUsing Parameter Set %d", i); |
// load mixer table |
if(GetParamByte(PID_EE_REVISION) == 0xff || !MixerTable_ReadFromEEProm() ) |
{ |
printf("\n\rGenerating default Mixer Table"); |
MixerTable_Default(); // Quadro |
MixerTable_WriteToEEProm(); |
} |
if(ee_default) SetParamByte(PID_EE_REVISION, (EEPARAM_REVISION)); |
// determine motornumber |
RequiredMotors = 0; |
for(i = 0; i < 16; i++) |
{ |
if(Mixer.Motor[i][MIX_GAS] > 0) RequiredMotors++; |
} |
printf("\n\rMixer-Config: '%s' (%u Motors)",Mixer.Name, RequiredMotors); |
PrintLine();// ("\n\r==================================="); |
} |
/tags/V2.06a/eeprom.h |
---|
0,0 → 1,292 |
#ifndef _EEPROM_H |
#define _EEPROM_H |
#include <inttypes.h> |
#include "twimaster.h" |
#define EEPARAM_REVISION 102 // is count up, if paramater stucture has changed (compatibility) |
#define EEMIXER_REVISION 1 // is count up, if mixer stucture has changed (compatibility) |
#define EEPROM_ADR_PARAM_BEGIN 0 |
#define EE_DUMMY 0 // Byte |
#define PID_EE_REVISION 1 // byte |
#define PID_ACTIVE_SET 2 // byte |
#define PID_PRESSURE_OFFSET 3 // byte |
#define PID_ACC_NICK 4 // word |
#define PID_ACC_ROLL 6 // word |
#define PID_ACC_TOP 8 // word |
#define PID_FLIGHT_MINUTES_TOTAL 10 // word |
#define PID_FLIGHT_MINUTES 14 // word |
#define PID_SPEAK_HOTT_CFG 16 // Byte |
#define PID_HARDWARE_VERSION 17 // Byte |
#define EEPROM_ADR_CHANNELS 80 // 80 - 93, 12 bytes + 1 byte crc |
#define EEPROM_ADR_PARAMSET 100 // 100 - 725, 5 * 125 bytes |
#define EEPROM_ADR_MIXERTABLE 1000 // 1000 - 1078, 78 bytes |
#define EEPROM_ADR_BLCONFIG 1200 // 1200 - 1296, 12 * 8 bytes |
#define MIX_GAS 0 |
#define MIX_NICK 1 |
#define MIX_ROLL 2 |
#define MIX_YAW 3 |
typedef struct |
{ |
uint8_t Revision; |
int8_t Name[12]; |
int8_t Motor[16][4]; |
uint8_t crc; |
} __attribute__((packed)) MixerTable_t; |
extern MixerTable_t Mixer; |
extern uint8_t RequiredMotors; |
//GlobalConfig3 |
#define CFG3_NO_SDCARD_NO_START 0x01 |
//#define CFG3_DPH_MAX_RADIUS 0x02 |
#define CFG3_VARIO_FAILSAFE 0x04 |
#define CFG3_MOTOR_SWITCH_MODE 0x08 |
#define CFG3_NO_GPSFIX_NO_START 0x10 |
#define CFG3_USE_NC_FOR_OUT1 0x20 |
#define CFG3_SPEAK_ALL 0x40 |
#define CFG3_SERVO_NICK_COMP_OFF 0x80 |
//GlobalConfig |
#define CFG_HOEHENREGELUNG 0x01 |
#define CFG_HOEHEN_SCHALTER 0x02 |
#define CFG_HEADING_HOLD 0x04 |
#define CFG_KOMPASS_AKTIV 0x08 |
#define CFG_KOMPASS_FIX 0x10 |
#define CFG_GPS_AKTIV 0x20 |
#define CFG_ACHSENKOPPLUNG_AKTIV 0x40 |
#define CFG_DREHRATEN_BEGRENZER 0x80 |
//BitConfig |
#define CFG_LOOP_OBEN 0x01 |
#define CFG_LOOP_UNTEN 0x02 |
#define CFG_LOOP_LINKS 0x04 |
#define CFG_LOOP_RECHTS 0x08 |
#define CFG_MOTOR_BLINK1 0x10 |
#define CFG_MOTOR_OFF_LED1 0x20 |
#define CFG_MOTOR_OFF_LED2 0x40 |
#define CFG_MOTOR_BLINK2 0x80 |
// ExtraConfig |
#define CFG2_HEIGHT_LIMIT 0x01 |
#define CFG2_VARIO_BEEP 0x02 |
#define CFG_SENSITIVE_RC 0x04 |
#define CFG_3_3V_REFERENCE 0x08 |
#define CFG_NO_RCOFF_BEEPING 0x10 |
#define CFG_GPS_AID 0x20 |
#define CFG_LEARNABLE_CAREFREE 0x40 |
#define CFG_IGNORE_MAG_ERR_AT_STARTUP 0x80 |
// bit mask for ParamSet.Config0 |
#define CFG0_AIRPRESS_SENSOR 0x01 |
#define CFG0_HEIGHT_SWITCH 0x02 |
#define CFG0_HEADING_HOLD 0x04 |
#define CFG0_COMPASS_ACTIVE 0x08 |
#define CFG0_COMPASS_FIX 0x10 |
#define CFG0_GPS_ACTIVE 0x20 |
#define CFG0_AXIS_COUPLING_ACTIVE 0x40 |
#define CFG0_ROTARY_RATE_LIMITER 0x80 |
// bitcoding for EE_Parameter.ServoCompInvert |
#define SERVO_NICK_INV 0x01 |
#define SERVO_ROLL_INV 0x02 |
#define SERVO_RELATIVE 0x04 // direct poti control or relative moving of the servo value |
// defines for the receiver selection |
#define RECEIVER_PPM 0 |
#define RECEIVER_SPEKTRUM 1 |
#define RECEIVER_SPEKTRUM_HI_RES 2 |
#define RECEIVER_SPEKTRUM_LOW_RES 3 |
#define RECEIVER_JETI 4 |
#define RECEIVER_ACT_DSL 5 |
#define RECEIVER_HOTT 6 |
#define RECEIVER_SBUS 7 |
#define RECEIVER_USER 8 |
#define RECEIVER_UNKNOWN 0xFF |
// defines for lookup ParamSet.ChannelAssignment |
#define K_NICK 0 |
#define K_ROLL 1 |
#define K_GAS 2 |
#define K_GIER 3 |
#define K_POTI1 4 |
#define K_POTI2 5 |
#define K_POTI3 6 |
#define K_POTI4 7 |
#define K_POTI5 8 |
#define K_POTI6 9 |
#define K_POTI7 10 |
#define K_POTI8 11 |
// values above 247 representing poti1 to poti8 |
// poti1 = 255 |
// poti2 = 254 |
// poti3 = 253 |
// poti4 = 252 |
// poti5 = 251 |
// poti6 = 250 |
// poti7 = 249 |
// poti8 = 248 |
typedef struct |
{ |
unsigned char Revision; |
unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3 |
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv |
unsigned char Hoehe_MinGas; // Wert : 0-100 |
unsigned char Luftdruck_D; // Wert : 0-250 |
unsigned char HoeheChannel; // Wert : 0-32 |
unsigned char Hoehe_P; // Wert : 0-32 |
unsigned char Hoehe_Verstaerkung; // Wert : 0-50 |
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250 |
unsigned char Hoehe_HoverBand; // Wert : 0-250 |
unsigned char Hoehe_GPS_Z; // Wert : 0-250 |
unsigned char Hoehe_StickNeutralPoint;// Wert : 0-250 |
unsigned char Stick_P; // Wert : 1-6 |
unsigned char Stick_D; // Wert : 0-64 |
unsigned char StickGier_P; // Wert : 1-20 |
unsigned char Gas_Min; // Wert : 0-32 |
unsigned char Gas_Max; // Wert : 33-250 |
unsigned char GyroAccFaktor; // Wert : 1-64 |
unsigned char KompassWirkung; // Wert : 0-32 |
unsigned char Gyro_P; // Wert : 10-250 |
unsigned char Gyro_I; // Wert : 0-250 |
unsigned char Gyro_D; // Wert : 0-250 |
unsigned char Gyro_Gier_P; // Wert : 10-250 |
unsigned char Gyro_Gier_I; // Wert : 0-250 |
unsigned char Gyro_Stability; // Wert : 0-16 |
unsigned char UnterspannungsWarnung; // Wert : 0-250 |
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust |
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen |
unsigned char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D |
unsigned char I_Faktor; // Wert : 0-250 |
unsigned char UserParam1; // Wert : 0-250 |
unsigned char UserParam2; // Wert : 0-250 |
unsigned char UserParam3; // Wert : 0-250 |
unsigned char UserParam4; // Wert : 0-250 |
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos |
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo |
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag |
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag |
//--- Seit V0.75 |
unsigned char ServoRollControl; // Wert : 0-250 // Stellung des Servos |
unsigned char ServoRollComp; // Wert : 0-250 |
unsigned char ServoRollMin; // Wert : 0-250 |
unsigned char ServoRollMax; // Wert : 0-250 |
//--- |
unsigned char ServoNickRefresh; // Speed of the Servo |
unsigned char ServoManualControlSpeed;// |
unsigned char CamOrientation; // |
unsigned char Servo3; // Value or mapping of the Servo Output |
unsigned char Servo4; // Value or mapping of the Servo Output |
unsigned char Servo5; // Value or mapping of the Servo Output |
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping |
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag |
unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag |
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung) |
unsigned char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden |
unsigned char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden |
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt |
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt |
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung) |
unsigned char Driftkomp; |
unsigned char DynamicStability; |
unsigned char UserParam5; // Wert : 0-250 |
unsigned char UserParam6; // Wert : 0-250 |
unsigned char UserParam7; // Wert : 0-250 |
unsigned char UserParam8; // Wert : 0-250 |
//---Output --------------------------------------------- |
unsigned char J16Bitmask; // for the J16 Output |
unsigned char J16Timing; // for the J16 Output |
unsigned char J17Bitmask; // for the J17 Output |
unsigned char J17Timing; // for the J17 Output |
// seit version V0.75c |
unsigned char WARN_J16_Bitmask; // for the J16 Output |
unsigned char WARN_J17_Bitmask; // for the J17 Output |
//---NaviCtrl--------------------------------------------- |
unsigned char AutoPhotoDistance; // Auto Photo |
unsigned char NaviGpsModeChannel; // Parameters for the Naviboard |
unsigned char NaviGpsGain; |
unsigned char NaviGpsP; |
unsigned char NaviGpsI; |
unsigned char NaviGpsD; |
unsigned char NaviGpsPLimit; |
unsigned char NaviGpsILimit; |
unsigned char NaviGpsDLimit; |
unsigned char NaviGpsA; |
unsigned char NaviGpsMinSat; |
unsigned char NaviStickThreshold; |
unsigned char NaviWindCorrection; |
unsigned char NaviAccCompensation; // New since 0.86 -> was: SpeedCompensation |
unsigned char NaviMaxFlyingRange; // in 10m |
unsigned char NaviAngleLimitation; |
unsigned char NaviPH_LoginTime; |
unsigned char NaviDescendRange; |
//---Ext.Ctrl--------------------------------------------- |
unsigned char ExternalControl; // for serial Control |
//---CareFree--------------------------------------------- |
unsigned char OrientationAngle; // Where is the front-direction? |
unsigned char CareFreeChannel; // switch for CareFree |
unsigned char MotorSafetySwitch; |
unsigned char MotorSmooth; |
unsigned char ComingHomeAltitude; |
unsigned char FailSafeTime; |
unsigned char MaxAltitude; |
unsigned char FailsafeChannel; // if the value of this channel is > 100, the MK reports "RC-Lost" |
unsigned char ServoFilterNick; |
unsigned char ServoFilterRoll; |
unsigned char Servo3OnValue; |
unsigned char Servo3OffValue; |
unsigned char Servo4OnValue; |
unsigned char Servo4OffValue; |
unsigned char StartLandChannel; |
unsigned char LandingSpeed; |
unsigned char CompassOffset; |
unsigned char AutoLandingVoltage; // in 0,1V 0 -> disabled |
unsigned char ComingHomeVoltage; // in 0,1V 0 -> disabled |
unsigned char AutoPhotoAtitudes; |
unsigned char SingleWpSpeed; |
//------------------------------------------------ |
unsigned char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt |
unsigned char ServoCompInvert; // // 0x01 = Nick, 0x02 = Roll, 0x04 = relative moving // WICHTIG!!! am Ende lassen |
unsigned char ExtraConfig; // bitcodiert |
unsigned char GlobalConfig3; // bitcodiert |
char Name[12]; |
unsigned char crc; // must be the last byte! |
} paramset_t; // 127 bytes |
#define PARAMSET_STRUCT_LEN sizeof(paramset_t) |
extern paramset_t EE_Parameter; |
extern uint8_t RAM_Checksum(uint8_t* pBuffer, uint16_t len); |
extern void ParamSet_Init(void); |
extern void SetDefaultParameter(uint8_t set, uint8_t restore_channels); |
extern uint8_t ParamSet_ReadFromEEProm(uint8_t setnumber); |
extern uint8_t ParamSet_WriteToEEProm(uint8_t setnumber); |
extern uint8_t GetActiveParamSet(void); |
extern void SetActiveParamSet(uint8_t setnumber); |
extern uint8_t MixerTable_ReadFromEEProm(void); |
extern uint8_t MixerTable_WriteToEEProm(void); |
extern uint8_t GetParamByte(uint16_t param_id); |
extern void SetParamByte(uint16_t param_id, uint8_t value); |
extern uint16_t GetParamWord(uint16_t param_id); |
extern void SetParamWord(uint16_t param_id, uint16_t value); |
#endif //_EEPROM_H |
/tags/V2.06a/fc.c |
---|
0,0 → 1,2278 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "mymath.h" |
#include "isqrt.h" |
unsigned char h,m,s; |
unsigned int BaroExpandActive = 0; |
int MesswertNick,MesswertRoll,MesswertGier,MesswertGierBias, RohMesswertNick,RohMesswertRoll; |
int TrimNick, TrimRoll; |
int AdNeutralNick = 0,AdNeutralRoll = 0,AdNeutralGier = 0,StartNeutralRoll = 0,StartNeutralNick = 0; |
int Mittelwert_AccNick, Mittelwert_AccRoll; |
unsigned int NeutralAccX=0, NeutralAccY=0; |
int NaviAccNick, NaviAccRoll,NaviCntAcc = 0; |
int NeutralAccZ = 0; |
signed char NeutralAccZfine = 0; |
unsigned char ControlHeading = 0;// in 2° |
long IntegralNick = 0,IntegralNick2 = 0; |
long IntegralRoll = 0,IntegralRoll2 = 0; |
long IntegralAccNick = 0,IntegralAccRoll = 0,IntegralAccZ = 0; |
long Integral_Gier = 0; |
long Mess_IntegralNick = 0,Mess_IntegralNick2 = 0; |
long Mess_IntegralRoll = 0,Mess_IntegralRoll2 = 0; |
long Mess_Integral_Gier = 0,Mess_Integral_Gier2 = 0; |
long MittelIntegralNick,MittelIntegralRoll,MittelIntegralNick2,MittelIntegralRoll2; |
long SummeNick=0,SummeRoll=0; |
volatile long Mess_Integral_Hoch = 0; |
int KompassValue = -1; |
int KompassSollWert = 0; |
//int KompassRichtung = 0; |
char CalculateCompassTimer = 100; |
unsigned char KompassFusion = 32; |
unsigned int KompassSignalSchlecht = 50; |
unsigned char MAX_GAS,MIN_GAS; |
unsigned char HoehenReglerAktiv = 0; |
unsigned char TrichterFlug = 0; |
long Umschlag180Nick = 250000L, Umschlag180Roll = 250000L; |
long ErsatzKompass; |
int ErsatzKompassInGrad, CompassCorrected; // Kompasswert in Grad |
int GierGyroFehler = 0; |
char GyroFaktor,GyroFaktorGier; |
char IntegralFaktor,IntegralFaktorGier; |
int DiffNick,DiffRoll; |
unsigned int StickGasHover = 127; |
int HoverGasMin = 0, HoverGasMax = 1023; |
int StickNick = 0,StickRoll = 0,StickGier = 0,StickGas = 0; |
//int Poti1 = 0, Poti2 = 0, Poti3 = 0, Poti4 = 0, Poti5 = 0, Poti6 = 0, Poti7 = 0, Poti8 = 0; |
unsigned char Poti[9] = {0,0,0,0,0,0,0,0}; |
volatile unsigned char SenderOkay = 0; |
char MotorenEin = 0,StartTrigger = 0; |
long HoehenWert = 0; |
long SollHoehe = 0; |
signed int AltitudeSetpointTrimming = 0; |
long FromNC_AltitudeSetpoint = 0; |
unsigned char FromNC_AltitudeSpeed = 0; |
unsigned char carefree_old = 50; // to make the Beep when switching |
signed char WaypointTrimming = 0; |
int CompassGierSetpoint = 0; |
unsigned char CalibrationDone = 0; |
char NeueKompassRichtungMerken = 0; |
int LageKorrekturRoll = 0,LageKorrekturNick = 0, HoverGas = 0; |
//float Ki = FAKTOR_I; |
int Ki = 10300 / 33; |
unsigned char Looping_Nick = 0,Looping_Roll = 0; |
unsigned char Looping_Links = 0, Looping_Rechts = 0, Looping_Unten = 0, Looping_Oben = 0; |
unsigned char Parameter_Luftdruck_D = 48; // Wert : 0-250 |
unsigned char Parameter_HoehenSchalter = 0; // Wert : 0-250 |
unsigned char Parameter_Hoehe_P = 16; // Wert : 0-32 |
unsigned char Parameter_Hoehe_ACC_Wirkung = 58; // Wert : 0-250 |
unsigned char Parameter_KompassWirkung = 64; // Wert : 0-250 |
unsigned char Parameter_Hoehe_GPS_Z = 64; // Wert : 0-250 |
unsigned char Parameter_Gyro_D = 8; // Wert : 0-250 |
unsigned char Parameter_Gyro_P = 150; // Wert : 10-250 |
unsigned char Parameter_Gyro_I = 150; // Wert : 0-250 |
unsigned char Parameter_Gyro_Gier_P = 150; // Wert : 10-250 |
unsigned char Parameter_Gyro_Gier_I = 150; // Wert : 10-250 |
unsigned char Parameter_Gier_P = 2; // Wert : 1-20 |
unsigned char Parameter_I_Faktor = 10; // Wert : 1-20 |
unsigned char Parameter_UserParam1 = 0; |
unsigned char Parameter_UserParam2 = 0; |
unsigned char Parameter_UserParam3 = 0; |
unsigned char Parameter_UserParam4 = 0; |
unsigned char Parameter_UserParam5 = 0; |
unsigned char Parameter_UserParam6 = 0; |
unsigned char Parameter_UserParam7 = 0; |
unsigned char Parameter_UserParam8 = 0; |
unsigned char Parameter_NickControl = 100; |
unsigned char Parameter_ServoNickControl = 100; |
unsigned char Parameter_ServoRollControl = 100; |
unsigned char Parameter_ServoNickComp = 50; |
unsigned char Parameter_ServoRollComp = 85; |
unsigned char Parameter_LoopGasLimit = 70; |
unsigned char Parameter_AchsKopplung1 = 90; |
unsigned char Parameter_AchsKopplung2 = 65; |
unsigned char Parameter_CouplingYawCorrection = 64; |
//unsigned char Parameter_AchsGegenKopplung1 = 0; |
unsigned char Parameter_DynamicStability = 100; |
unsigned char Parameter_J16Bitmask; // for the J16 Output |
unsigned char Parameter_J16Timing; // for the J16 Output |
unsigned char Parameter_J17Bitmask; // for the J17 Output |
unsigned char Parameter_J17Timing; // for the J17 Output |
unsigned char Parameter_NaviGpsGain; |
unsigned char Parameter_NaviGpsP; |
unsigned char Parameter_NaviGpsI; |
unsigned char Parameter_NaviGpsD; |
unsigned char Parameter_NaviGpsA; |
//unsigned char Parameter_NaviOperatingRadius; |
unsigned char Parameter_NaviWindCorrection; |
unsigned char Parameter_NaviSpeedCompensation; |
unsigned char Parameter_ExternalControl; |
unsigned char Parameter_GlobalConfig; |
unsigned char Parameter_ExtraConfig; |
unsigned char Parameter_MaximumAltitude; |
unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
unsigned char CareFree = 0; |
const signed char sintab[31] = { 0, 2, 4, 6, 7, 8, 8, 8, 7, 6, 4, 2, 0, -2, -4, -6, -7, -8, -8, -8, -7, -6, -4, -2, 0, 2, 4, 6, 7, 8, 8}; // 15° steps |
signed int ExternStickNick = 0,ExternStickRoll = 0,ExternStickGier = 0, ExternHoehenValue = -20; |
int MaxStickNick = 0,MaxStickRoll = 0; |
unsigned int modell_fliegt = 0; |
volatile unsigned char FC_StatusFlags = 0, FC_StatusFlags2 = 0; |
long GIER_GRAD_FAKTOR = 1291; |
signed int KopplungsteilNickRoll,KopplungsteilRollNick; |
signed int tmp_motorwert[MAX_MOTORS]; |
char VarioCharacter = ' '; |
unsigned int HooverGasEmergencyPercent = 0; // The gas value for Emergency landing |
unsigned int GasIsZeroCnt = 0; // to detect that the gas-stick is down for a while |
signed int Variance = 0; |
signed int CosAttitude; // for projection of hoover gas |
unsigned char ACC_AltitudeControl = 0; |
unsigned char LowVoltageLandingActive = 0; |
unsigned char LowVoltageHomeActive = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#define OPA_OFFSET_STEP 5 |
#else |
#define OPA_OFFSET_STEP 10 |
#endif |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Debugwerte zuordnen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
void CopyDebugValues(void) |
{ |
DebugOut.Analog[0] = ToNaviCtrl.IntegralNick;//IntegralNick / (EE_Parameter.GyroAccFaktor * 4); |
DebugOut.Analog[1] = ToNaviCtrl.IntegralRoll;//IntegralRoll / (EE_Parameter.GyroAccFaktor * 4); |
DebugOut.Analog[2] = Mittelwert_AccNick / 4; |
DebugOut.Analog[3] = Mittelwert_AccRoll / 4; |
DebugOut.Analog[4] = (signed int) AdNeutralGier - AdWertGier; |
DebugOut.Analog[5] = HoehenWert/10; |
DebugOut.Analog[6] = Aktuell_az;//AdWertAccHoch;//(Mess_Integral_Hoch / 512); |
DebugOut.Analog[8] = KompassValue; |
DebugOut.Analog[9] = UBat; |
DebugOut.Analog[10] = SenderOkay; |
DebugOut.Analog[11] = ErsatzKompassInGrad; |
DebugOut.Analog[12] = Motor[0].SetPoint; |
DebugOut.Analog[13] = Motor[1].SetPoint; |
DebugOut.Analog[14] = Motor[2].SetPoint; |
DebugOut.Analog[15] = Motor[3].SetPoint; |
DebugOut.Analog[20] = ServoNickValue; |
DebugOut.Analog[21] = HoverGas; |
DebugOut.Analog[22] = Capacity.ActualCurrent; |
DebugOut.Analog[23] = Capacity.UsedCapacity; |
DebugOut.Analog[24] = SollHoehe/10; |
// DebugOut.Analog[27] = KompassSollWert; |
DebugOut.Analog[29] = Capacity.MinOfMaxPWM; |
DebugOut.Analog[30] = GPS_Nick; |
DebugOut.Analog[31] = GPS_Roll; |
if(VersionInfo.HardwareError[0] || VersionInfo.HardwareError[1]) DebugOut.Status[1] |= 1; else DebugOut.Status[1] &= 0xfe; |
//DebugOut.Analog[16] = MinBlTemperture; |
//DebugOut.Analog[17] = MaxBlTemperture; |
//DebugOut.Analog[16] = Variance; |
//DebugOut.Analog[17] = VarioMeter; |
//DebugOut.Analog[16] = GasIsZeroCnt; |
//DebugOut.Analog[18] = HoehenWertF; |
//DebugOut.Analog[25] = Parameter_Hoehe_P; |
//DebugOut.Analog[26] = Parameter_Luftdruck_D; |
} |
void Piep(unsigned char Anzahl, unsigned int dauer) |
{ |
unsigned int wait = 0; |
if(MotorenEin) return; //auf keinen Fall im Flug! |
GRN_OFF; |
while(Anzahl--) |
{ |
beeptime = dauer; |
wait = dauer; |
while(beeptime || wait) |
{ |
if(UpdateMotor) |
{ |
UpdateMotor = 0; |
if(!beeptime) wait--; |
LIBFC_Polling(); |
}; |
} |
} |
GRN_ON; |
} |
//############################################################################ |
// Messwerte beim Ermitteln der Nullage |
void CalibrierMittelwert(void) |
//############################################################################ |
{ |
// if(PlatinenVersion == 13) SucheGyroOffset(); |
// ADC auschalten, damit die Werte sich nicht während der Berechnung ändern |
ANALOG_OFF; |
MesswertNick = AdWertNick; |
MesswertRoll = AdWertRoll; |
MesswertGier = AdWertGier; |
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick; |
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll; |
// ADC einschalten |
ANALOG_ON; |
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
} |
//############################################################################ |
// Nullwerte ermitteln |
// Parameter: 0 -> after switch on (ignore ACC-Z fault) |
// Parameter: 1 -> before Start |
// Parameter: 2 -> calibrate and store ACC |
unsigned char SetNeutral(unsigned char AdjustmentMode) // retuns: "sucess" |
//############################################################################ |
{ |
unsigned char i, sucess = 1; |
unsigned int gier_neutral = 0, nick_neutral = 0, roll_neutral = 0, acc_z_neutral = 0, barotest; |
VersionInfo.HardwareError[0] = 0; |
// HEF4017Reset_ON; |
NeutralAccX = 0; |
NeutralAccY = 0; |
NeutralAccZ = 0; |
NeutralAccZfine = 0; |
AdNeutralNick = 0; |
AdNeutralRoll = 0; |
AdNeutralGier = 0; |
Parameter_AchsKopplung1 = 0; |
Parameter_AchsKopplung2 = 0; |
ExpandBaro = 0; |
CalibrierMittelwert(); |
Delay_ms_Mess(100); |
CalibrierMittelwert(); |
DebugOut.Analog[16] = 0; |
DebugOut.Analog[17] = 0; |
if((EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
{ |
if((MessLuftdruck > 950) || (MessLuftdruck < 750) || ExpandBaro) SucheLuftruckOffset(); |
} |
barotest = MessLuftdruck; |
#define NEUTRAL_FILTER 32 |
OCR0A += OPA_OFFSET_STEP; |
OCR0B = 255 - OCR0A; |
for(i=0; i<NEUTRAL_FILTER; i++) |
{ |
Delay_ms_Mess(10); |
gier_neutral += AdWertGier; |
nick_neutral += AdWertNick; |
roll_neutral += AdWertRoll; |
acc_z_neutral += Aktuell_az; |
} |
if(MessLuftdruck < 1010 && MessLuftdruck > 20) BaroStep = barotest - MessLuftdruck; |
OCR0A -= OPA_OFFSET_STEP; |
OCR0B = 255 - OCR0A; |
AdNeutralNick = (nick_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8); |
AdNeutralRoll = (roll_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER / 8); |
AdNeutralGier = (gier_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER); |
NeutralAccZ = (acc_z_neutral+NEUTRAL_FILTER/2) / (NEUTRAL_FILTER); |
StartNeutralRoll = AdNeutralRoll; |
StartNeutralNick = AdNeutralNick; |
if(AdjustmentMode == 2) |
{ |
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY); |
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY); |
// Save ACC neutral settings to eeprom |
SetParamWord(PID_ACC_NICK, (uint16_t)NeutralAccX); |
SetParamWord(PID_ACC_ROLL, (uint16_t)NeutralAccY); |
SetParamWord(PID_ACC_TOP, (uint16_t)NeutralAccZ); |
} |
else |
{ |
// restore from eeprom |
NeutralAccX = (int16_t)GetParamWord(PID_ACC_NICK); |
NeutralAccY = (int16_t)GetParamWord(PID_ACC_ROLL); |
// strange settings? |
if(((unsigned int) NeutralAccX > 2048) || ((unsigned int) NeutralAccY > 2048)/* || ((unsigned int) NeutralAccZ > 1024)*/) |
{ |
printf("\n\rACC not calibrated!\r\n"); |
NeutralAccX = abs(Mittelwert_AccNick) / (2*ACC_AMPLIFY); |
NeutralAccY = abs(Mittelwert_AccRoll) / (2*ACC_AMPLIFY); |
sucess = 0; |
} |
} |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
MesswertNick = 0; |
MesswertRoll = 0; |
MesswertGier = 0; |
Delay_ms_Mess(200); |
Mittelwert_AccNick = ACC_AMPLIFY * AdWertAccNick; |
Mittelwert_AccRoll = ACC_AMPLIFY * AdWertAccRoll; |
IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick; |
IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll; |
Mess_IntegralNick = IntegralNick; |
Mess_IntegralRoll = IntegralRoll; |
Mess_Integral_Gier = 0; |
KompassSollWert = KompassValue; |
KompassSignalSchlecht = 100; |
beeptime = 50; |
Umschlag180Nick = ((long) EE_Parameter.WinkelUmschlagNick * 2500L) + 15000L; |
Umschlag180Roll = ((long) EE_Parameter.WinkelUmschlagRoll * 2500L) + 15000L; |
ExternHoehenValue = 0; |
ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR; |
GierGyroFehler = 0; |
LED_Init(); |
if(AdjustmentMode != 0) FC_StatusFlags |= FC_STATUS_CALIBRATE; |
FromNaviCtrl_Value.Kalman_K = -1; |
FromNaviCtrl_Value.Kalman_MaxDrift = 0; |
FromNaviCtrl_Value.Kalman_MaxFusion = 32; |
SenderOkay = 100; |
if(ServoActive) DDRD |=0x80; // enable J7 -> Servo signal |
else |
{ |
if((EE_Parameter.ServoCompInvert & SERVO_NICK_INV) && (EE_Parameter.ServoCompInvert & SERVO_RELATIVE)) NickServoValue = 12000;//((128 + 60) * 4 * 16); // neutral position = upper 1/4// else |
else NickServoValue = ((128 - 60) * 4 * 16); // neutral position = lower 1/4 |
CalculateServoSignals = 1; |
CalculateServo(); // nick |
CalculateServo(); // roll |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
signed int tilt1, tilt2; |
tilt1 = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
tilt2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
tilt1 = (int16_t)ihypot(tilt1,tilt2); // tilt angle over all |
CosAttitude = c_cos_8192(tilt1); |
NeutralAccZ = (long)((long) (NeutralAccZ - 512) * 8192 + 4096) / CosAttitude + 512; |
if(tilt1 > 20) sucess = 0; // calibration must be within 20° Tilt angle |
if(AdjustmentMode != 0 && ACC_AltitudeControl) if((NeutralAccZ < 682 - 30) || (NeutralAccZ > 682 + 35)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; sucess = 0;}; |
#else |
NeutralAccZ = (int16_t)GetParamWord(PID_ACC_TOP); |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
#endif |
if((AdNeutralNick < 150 * 16) || (AdNeutralNick > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_NICK; }; |
if((AdNeutralRoll < 150 * 16) || (AdNeutralRoll > 850 * 16)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_ROLL; }; |
if((AdNeutralGier < 150 * 2) || (AdNeutralGier > 850 * 2)) { VersionInfo.HardwareError[0] |= FC_ERROR0_GYRO_YAW; }; |
if((NeutralAccX < 300) || (NeutralAccX > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_NICK; }; |
if((NeutralAccY < 300) || (NeutralAccY > 750)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_ROLL; }; |
if((NeutralAccZ < 512) || (NeutralAccZ > 850)) { VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; }; |
if(VersionInfo.HardwareError[0]) sucess = 0; |
carefree_old = 70; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
LIBFC_HoTT_Clear(); |
ACC_AltitudeFusion(2); // initalisation |
#endif |
StartLuftdruck = Luftdruck; |
VarioMeter = 0; |
SummenHoehe = 0; Mess_Integral_Hoch = 0; |
DebugOut.Analog[28] = 0; // I2C-Counter |
CalcExpandBaroStep(); |
return(sucess); |
} |
//############################################################################ |
// Bearbeitet die Messwerte |
void Mittelwert(void) |
//############################################################################ |
{ |
static signed long tmpl,tmpl2,tmpl3,tmpl4; |
static signed int oldNick, oldRoll, d2Roll, d2Nick; |
signed long winkel_nick, winkel_roll; |
MesswertGier = (signed int) AdNeutralGier - AdWertGier; |
MesswertNick = (signed int) AdWertNickFilter / 8; |
MesswertRoll = (signed int) AdWertRollFilter / 8; |
RohMesswertNick = MesswertNick; |
RohMesswertRoll = MesswertRoll; |
// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mittelwert_AccNick = (Mittelwert_AccNick * 3 + ((ACC_AMPLIFY * AdWertAccNick))) / 4L; |
Mittelwert_AccRoll = (Mittelwert_AccRoll * 3 + ((ACC_AMPLIFY * AdWertAccRoll))) / 4L; |
IntegralAccNick += ACC_AMPLIFY * AdWertAccNick; |
IntegralAccRoll += ACC_AMPLIFY * AdWertAccRoll; |
NaviAccNick += AdWertAccNick; |
NaviAccRoll += AdWertAccRoll; |
NaviCntAcc++; |
IntegralAccZ += Aktuell_az - NeutralAccZ; |
//++++++++++++++++++++++++++++++++++++++++++++++++ |
// ADC einschalten |
ANALOG_ON; |
AdReady = 0; |
//++++++++++++++++++++++++++++++++++++++++++++++++ |
if(Mess_IntegralRoll > 93000L) winkel_roll = 93000L; |
else if(Mess_IntegralRoll <-93000L) winkel_roll = -93000L; |
else winkel_roll = Mess_IntegralRoll; |
if(Mess_IntegralNick > 93000L) winkel_nick = 93000L; |
else if(Mess_IntegralNick <-93000L) winkel_nick = -93000L; |
else winkel_nick = Mess_IntegralNick; |
// Gier ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mess_Integral_Gier += MesswertGier; |
ErsatzKompass += MesswertGier; |
// Kopplungsanteil +++++++++++++++++++++++++++++++++++++ |
if(!Looping_Nick && !Looping_Roll && (Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) |
{ |
tmpl3 = (MesswertRoll * winkel_nick) / 2048L; |
tmpl3 *= Parameter_AchsKopplung2; //65 |
tmpl3 /= 4096L; |
tmpl4 = (MesswertNick * winkel_roll) / 2048L; |
tmpl4 *= Parameter_AchsKopplung2; //65 |
tmpl4 /= 4096L; |
KopplungsteilNickRoll = tmpl3; |
KopplungsteilRollNick = tmpl4; |
tmpl4 -= tmpl3; |
ErsatzKompass += tmpl4; |
if(!Parameter_CouplingYawCorrection) Mess_Integral_Gier -= tmpl4/2; // Gier nachhelfen |
tmpl = ((MesswertGier + tmpl4) * winkel_nick) / 2048L; |
tmpl *= Parameter_AchsKopplung1; // 90 |
tmpl /= 4096L; |
tmpl2 = ((MesswertGier + tmpl4) * winkel_roll) / 2048L; |
tmpl2 *= Parameter_AchsKopplung1; |
tmpl2 /= 4096L; |
if(abs(MesswertGier) > 64) if(labs(tmpl) > 128 || labs(tmpl2) > 128) TrichterFlug = 1; |
//MesswertGier += (Parameter_CouplingYawCorrection * tmpl4) / 256; |
} |
else tmpl = tmpl2 = KopplungsteilNickRoll = KopplungsteilRollNick = 0; |
TrimRoll = tmpl - tmpl2 / 100L; |
TrimNick = -tmpl2 + tmpl / 100L; |
// Kompasswert begrenzen ++++++++++++++++++++++++++++++++++++++++++++++++ |
if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR; // 360° Umschlag |
if(ErsatzKompass < 0) ErsatzKompass += 360L * GIER_GRAD_FAKTOR; |
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mess_IntegralRoll2 += MesswertRoll + TrimRoll; |
Mess_IntegralRoll += MesswertRoll + TrimRoll - LageKorrekturRoll; |
if(Mess_IntegralRoll > Umschlag180Roll) |
{ |
Mess_IntegralRoll = -(Umschlag180Roll - 25000L); |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
} |
if(Mess_IntegralRoll <-Umschlag180Roll) |
{ |
Mess_IntegralRoll = (Umschlag180Roll - 25000L); |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
} |
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
Mess_IntegralNick2 += MesswertNick + TrimNick; |
Mess_IntegralNick += MesswertNick + TrimNick - LageKorrekturNick; |
if(Mess_IntegralNick > Umschlag180Nick) |
{ |
Mess_IntegralNick = -(Umschlag180Nick - 25000L); |
Mess_IntegralNick2 = Mess_IntegralNick; |
} |
if(Mess_IntegralNick <-Umschlag180Nick) |
{ |
Mess_IntegralNick = (Umschlag180Nick - 25000L); |
Mess_IntegralNick2 = Mess_IntegralNick; |
} |
Integral_Gier = Mess_Integral_Gier; |
IntegralNick = Mess_IntegralNick; |
IntegralRoll = Mess_IntegralRoll; |
IntegralNick2 = Mess_IntegralNick2; |
IntegralRoll2 = Mess_IntegralRoll2; |
#define D_LIMIT 128 |
MesswertNick = HiResNick / 8; |
MesswertRoll = HiResRoll / 8; |
if(AdWertNick < 15) MesswertNick = -1000; if(AdWertNick < 7) MesswertNick = -2000; |
// if(PlatinenVersion == 10) { if(AdWertNick > 1010) MesswertNick = +1000; if(AdWertNick > 1017) MesswertNick = +2000; } |
// else |
{ if(AdWertNick > 2000) MesswertNick = +1000; if(AdWertNick > 2015) MesswertNick = +2000; } |
if(AdWertRoll < 15) MesswertRoll = -1000; if(AdWertRoll < 7) MesswertRoll = -2000; |
// if(PlatinenVersion == 10) { if(AdWertRoll > 1010) MesswertRoll = +1000; if(AdWertRoll > 1017) MesswertRoll = +2000; } |
// else |
{ if(AdWertRoll > 2000) MesswertRoll = +1000; if(AdWertRoll > 2015) MesswertRoll = +2000; } |
if(Parameter_Gyro_D) |
{ |
d2Nick = HiResNick - oldNick; |
oldNick = (oldNick + HiResNick)/2; |
if(d2Nick > D_LIMIT) d2Nick = D_LIMIT; |
else if(d2Nick < -D_LIMIT) d2Nick = -D_LIMIT; |
d2Roll = HiResRoll - oldRoll; |
oldRoll = (oldRoll + HiResRoll)/2; |
if(d2Roll > D_LIMIT) d2Roll = D_LIMIT; |
else if(d2Roll < -D_LIMIT) d2Roll = -D_LIMIT; |
MesswertNick += (d2Nick * (signed int) Parameter_Gyro_D) / 16; |
MesswertRoll += (d2Roll * (signed int) Parameter_Gyro_D) / 16; |
HiResNick += (d2Nick * (signed int) Parameter_Gyro_D); |
HiResRoll += (d2Roll * (signed int) Parameter_Gyro_D); |
} |
if(RohMesswertRoll > 0) TrimRoll += ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L; |
else TrimRoll -= ((long) abs(KopplungsteilNickRoll) * Parameter_CouplingYawCorrection) / 64L; |
if(RohMesswertNick > 0) TrimNick += ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L; |
else TrimNick -= ((long) abs(KopplungsteilRollNick) * Parameter_CouplingYawCorrection) / 64L; |
if(Parameter_GlobalConfig & CFG_DREHRATEN_BEGRENZER && !Looping_Nick && !Looping_Roll) |
{ |
if(RohMesswertNick > 256) MesswertNick += 1 * (RohMesswertNick - 256); |
else if(RohMesswertNick < -256) MesswertNick += 1 * (RohMesswertNick + 256); |
if(RohMesswertRoll > 256) MesswertRoll += 1 * (RohMesswertRoll - 256); |
else if(RohMesswertRoll < -256) MesswertRoll += 1 * (RohMesswertRoll + 256); |
} |
} |
//############################################################################ |
// Senden der Motorwerte per I2C-Bus |
void SendMotorData(void) |
//############################################################################ |
{ |
unsigned char i; |
if(!MotorenEin) |
{ |
FC_StatusFlags &= ~(FC_STATUS_MOTOR_RUN | FC_STATUS_FLY); |
FC_StatusFlags2 &= ~FC_STATUS2_WAIT_FOR_TAKEOFF; |
for(i=0;i<MAX_MOTORS;i++) |
{ |
if(!PC_MotortestActive) MotorTest[i] = 0; |
Motor[i].SetPoint = MotorTest[i]; |
Motor[i].SetPointLowerBits = 0; |
/* |
Motor[i].SetPoint = MotorTest[i] / 4; // testing the high resolution |
Motor[i].SetPointLowerBits = MotorTest[i] % 4; |
*/ |
} |
if(PC_MotortestActive) PC_MotortestActive--; |
} |
else FC_StatusFlags |= FC_STATUS_MOTOR_RUN; |
// ++++++++++++++++++++++++++++++++++++++++++ |
// ++++++++++++++++++++++++++++++++++++++++++ |
#ifdef REDUNDANT_FC_SLAVE |
I2CTimeout = 100; |
return; |
#endif |
#ifdef REDUNDANT_FC_MASTER |
if(Parameter_UserParam7 > 150) |
{ |
// Make noise |
if((BeepMuster == 0xffff)) { beeptime = 25000; BeepMuster = 0x0080; } |
// Do not send I2C-Data |
if(RedundanceBlOperation) |
{ |
I2CTimeout = 100; |
return; |
} |
} |
#endif |
if(I2C_TransferActive) |
{ |
I2C_TransferActive = 0; // enable for the next time |
} |
else |
{ |
// motor_write = 0; |
I2C_Start(TWI_STATE_MOTOR_TX); //Start I2C Interrupt Mode |
} |
} |
unsigned char GetChannelValue(unsigned char ch) // gives the unsigned value of the channel |
{ |
int tmp2; |
if(ch == 0) return(0); |
tmp2 = PPM_in[ch] + 127; |
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0; |
return(tmp2); |
} |
//############################################################################ |
// Trägt ggf. das Poti als Parameter ein |
void ParameterZuordnung(void) |
//############################################################################ |
{ |
unsigned char tmp,i; |
for(i=0;i<8;i++) |
{ |
int tmp2; |
tmp = EE_Parameter.Kanalbelegung[K_POTI1 + i]; |
tmp2 = PPM_in[tmp] + 127; |
if(tmp2 > 255) tmp2 = 255; else if(tmp2 < 0) tmp2 = 0; |
if(tmp == 25) Poti[i] = tmp2; // 25 = WaypointEvent channel -> no filter |
else |
if(tmp2 != Poti[i]) |
{ |
Poti[i] += (tmp2 - Poti[i]) / 4; |
if(Poti[i] > tmp2) Poti[i]--; |
else Poti[i]++; |
} |
} |
CHK_POTI_MM(Parameter_Luftdruck_D,EE_Parameter.Luftdruck_D,0,100); |
CHK_POTI_MM(Parameter_Hoehe_P,EE_Parameter.Hoehe_P,0,100); |
CHK_POTI_MM(Parameter_Gyro_P,EE_Parameter.Gyro_P,10,255); |
CHK_POTI_MM(Parameter_J16Timing,EE_Parameter.J16Timing,5,255); |
CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,5,255); |
if(EE_Parameter.Servo3 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo3 = EE_Parameter.Servo3OnValue; else Parameter_Servo3 = EE_Parameter.Servo3OffValue;} // Out1 (J16) |
else if(EE_Parameter.Servo3 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo3 = EE_Parameter.Servo3OnValue; else Parameter_Servo3 = EE_Parameter.Servo3OffValue;} |
else CHK_POTI_MM(Parameter_Servo3,EE_Parameter.Servo3, 24, 255); |
if(EE_Parameter.Servo4 == 247) { if(PORTC & (1<<PORTC2)) Parameter_Servo4 = EE_Parameter.Servo4OnValue; else Parameter_Servo4 = EE_Parameter.Servo4OffValue;} |
else if(EE_Parameter.Servo4 == 246) { if(PORTC & (1<<PORTC3)) Parameter_Servo4 = EE_Parameter.Servo4OnValue; else Parameter_Servo4 = EE_Parameter.Servo4OffValue;} // Out2 (J17) |
else CHK_POTI_MM(Parameter_Servo4,EE_Parameter.Servo4, 24, 255); |
CHK_POTI_MM(Parameter_Servo5,EE_Parameter.Servo5, 24, 255); |
Parameter_HoehenSchalter = GetChannelValue(EE_Parameter.HoeheChannel); |
CHK_POTI(Parameter_Hoehe_ACC_Wirkung,EE_Parameter.Hoehe_ACC_Wirkung); |
CHK_POTI(Parameter_Hoehe_GPS_Z,EE_Parameter.Hoehe_GPS_Z); |
CHK_POTI(Parameter_KompassWirkung,EE_Parameter.KompassWirkung); |
CHK_POTI(Parameter_Gyro_I,EE_Parameter.Gyro_I); |
CHK_POTI(Parameter_Gyro_D,EE_Parameter.Gyro_D); |
CHK_POTI(Parameter_Gyro_Gier_P,EE_Parameter.Gyro_Gier_P); |
CHK_POTI(Parameter_Gyro_Gier_I,EE_Parameter.Gyro_Gier_I); |
CHK_POTI(Parameter_I_Faktor,EE_Parameter.I_Faktor); |
CHK_POTI(Parameter_UserParam1,EE_Parameter.UserParam1); |
CHK_POTI(Parameter_UserParam2,EE_Parameter.UserParam2); |
CHK_POTI(Parameter_UserParam3,EE_Parameter.UserParam3); |
CHK_POTI(Parameter_UserParam4,EE_Parameter.UserParam4); |
CHK_POTI(Parameter_UserParam5,EE_Parameter.UserParam5); |
CHK_POTI(Parameter_UserParam6,EE_Parameter.UserParam6); |
CHK_POTI(Parameter_UserParam7,EE_Parameter.UserParam7); |
CHK_POTI(Parameter_UserParam8,EE_Parameter.UserParam8); |
CHK_POTI(Parameter_ServoNickControl,EE_Parameter.ServoNickControl); |
CHK_POTI(Parameter_ServoRollControl,EE_Parameter.ServoRollControl); |
CHK_POTI(Parameter_ServoNickComp,EE_Parameter.ServoNickComp); |
CHK_POTI(Parameter_ServoRollComp,EE_Parameter.ServoRollComp); |
CHK_POTI(Parameter_LoopGasLimit,EE_Parameter.LoopGasLimit); |
CHK_POTI(Parameter_AchsKopplung1,EE_Parameter.AchsKopplung1); |
CHK_POTI(Parameter_AchsKopplung2,EE_Parameter.AchsKopplung2); |
CHK_POTI(Parameter_CouplingYawCorrection,EE_Parameter.CouplingYawCorrection); |
CHK_POTI(Parameter_MaximumAltitude,EE_Parameter.MaxAltitude); |
// if((NC_To_FC_MaxAltitude && NC_To_FC_MaxAltitude < Parameter_MaximumAltitude) || Parameter_MaximumAltitude == 0) Parameter_MaximumAltitude = NC_To_FC_MaxAltitude; |
Parameter_GlobalConfig = EE_Parameter.GlobalConfig; |
Parameter_ExtraConfig = EE_Parameter.ExtraConfig; |
// CHK_POTI(Parameter_AchsGegenKopplung1,EE_Parameter.AchsGegenKopplung1,0,255); |
CHK_POTI(Parameter_DynamicStability,EE_Parameter.DynamicStability); |
CHK_POTI(Parameter_ExternalControl,EE_Parameter.ExternalControl); |
Ki = 10300 / (Parameter_I_Faktor + 1); |
MAX_GAS = EE_Parameter.Gas_Max; |
MIN_GAS = EE_Parameter.Gas_Min; |
if(EE_Parameter.CareFreeChannel) |
{ |
CareFree = 1; |
if(PPM_in[EE_Parameter.CareFreeChannel] < -64) CareFree = 0; |
// if(tmp >= 248 && Poti[255 - tmp] < 50) CareFree = 0; |
if(carefree_old != CareFree) |
{ |
if(carefree_old < 3) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(CareFree) { beeptime = 1500; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_ON; } |
else { beeptime = 200; if(!SpeakHoTT) SpeakHoTT = SPEAK_CF_OFF; } |
#else |
if(CareFree) beeptime = 1500; |
else beeptime = 200; |
#endif |
NeueKompassRichtungMerken = 5; |
carefree_old = CareFree; |
} else carefree_old--; |
} |
if(FromNaviCtrl.CompassValue < 0 && CareFree) VersionInfo.HardwareError[0] |= FC_ERROR0_CAREFREE; //else VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE; |
} |
else |
{ |
CareFree = 0; |
carefree_old = 10; |
} |
if(FromNaviCtrl.CompassValue < 0 && MotorenEin && CareFree && BeepMuster == 0xffff) // ungültiger Kompasswert |
{ |
beeptime = 15000; |
BeepMuster = 0xA400; |
CareFree = 0; |
} |
if(CareFree) { FC_StatusFlags2 |= FC_STATUS2_CAREFREE; /*if(Parameter_AchsKopplung1 < 210) Parameter_AchsKopplung1 += 30;*/} else FC_StatusFlags2 &= ~FC_STATUS2_CAREFREE; |
} |
void CalcStickGasHover(void) |
{ |
if(!EE_Parameter.Hoehe_StickNeutralPoint) |
{ |
StickGasHover = HoverGas/STICK_GAIN; // rescale back to stick value |
StickGasHover = (unsigned int)((unsigned int) StickGasHover * UBat) / BattLowVoltageWarning; |
} |
else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint; |
LIMIT_MIN_MAX(StickGasHover, 70, 175); // reserve some range for trim up and down |
} |
//############################################################################ |
// |
void MotorRegler(void) |
//############################################################################ |
{ |
int pd_ergebnis_nick,pd_ergebnis_roll,tmp_int, tmp_int2; |
int GierMischanteil,GasMischanteil; |
static long sollGier = 0,tmp_long,tmp_long2; |
static long IntegralFehlerNick = 0; |
static long IntegralFehlerRoll = 0; |
static unsigned int RcLostTimer; |
static unsigned char delay_neutral = 0; |
static unsigned char delay_einschalten = 0,delay_ausschalten = 0; |
static signed char move_safety_switch = 0; |
static long ausgleichNick, ausgleichRoll; |
int IntegralNickMalFaktor,IntegralRollMalFaktor; |
unsigned char i; |
Mittelwert(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gaswert ermitteln |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!(FC_StatusFlags & (FC_STATUS_EMERGENCY_LANDING | FC_STATUS2_RC_FAILSAVE_ACTIVE))) |
{ |
if(EE_Parameter.GlobalConfig3 & CFG3_VARIO_FAILSAFE) |
{ |
if(HoverGas && HoverGas < 150 * STICK_GAIN) |
{ |
HooverGasEmergencyPercent = (HoverGas/(STICK_GAIN) * EE_Parameter.NotGas) / 100; // i.e. 80% of Hovergas |
} |
else HooverGasEmergencyPercent = 45; // default if the Hoovergas was could not calculated yet |
} else HooverGasEmergencyPercent = EE_Parameter.NotGas; |
} |
if(GasIsZeroCnt == 30000) // in that case we have RC-Lost, but the MK is probably landed |
{ |
StickGas = 0; // Hold Gas down in that case |
HooverGasEmergencyPercent = MIN_GAS; |
} |
GasMischanteil = StickGas; |
if(GasMischanteil < MIN_GAS + 10) GasMischanteil = MIN_GAS + 10; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Empfang schlecht |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(SenderOkay < 100 && !(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE)) |
{ |
if(RcLostTimer) RcLostTimer--; |
else |
{ |
MotorenEin = 0; |
modell_fliegt = 0; |
FC_StatusFlags &= ~(FC_STATUS_EMERGENCY_LANDING | FC_STATUS_FLY); |
} |
ROT_ON; |
if(modell_fliegt > 1000 && Capacity.MinOfMaxPWM > 100) // wahrscheinlich in der Luft --> langsam absenken |
{ |
GasMischanteil = HooverGasEmergencyPercent; |
FC_StatusFlags |= FC_STATUS_EMERGENCY_LANDING; |
PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] = 0; |
PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] = 0; |
PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] = 0; |
} |
else |
{ |
MotorenEin = 0; |
} |
} |
else |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Emfang gut |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(SenderOkay > 140) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
static unsigned int trigger = 1000; |
static unsigned char old_switch = 100; |
if(EE_Parameter.StartLandChannel && EE_Parameter.LandingSpeed) |
{ |
if(PPM_in[EE_Parameter.StartLandChannel] > 50) |
{ |
if(old_switch == 50) if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) { FC_StatusFlags2 |= FC_STATUS2_AUTO_STARTING; SpeakHoTT = SPEAK_RISING;} |
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_LANDING; |
old_switch = 150; |
} |
else |
if(PPM_in[EE_Parameter.StartLandChannel] < -50) |
{ |
if(old_switch == 150) { FC_StatusFlags2 |= FC_STATUS2_AUTO_LANDING; SpeakHoTT = SPEAK_SINKING;} |
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_STARTING; |
old_switch = 50; |
} |
else |
{ |
FC_StatusFlags2 &= ~(FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING); |
} |
} |
#endif |
FC_StatusFlags &= ~FC_STATUS_EMERGENCY_LANDING; |
RcLostTimer = EE_Parameter.NotGasZeit * 50; |
if(GasMischanteil > 40 && MotorenEin) |
{ |
if(modell_fliegt < 0xffff) modell_fliegt++; |
} |
if((modell_fliegt < 256)) |
{ |
SummeNick = 0; |
SummeRoll = 0; |
sollGier = 0; |
Mess_Integral_Gier = 0; |
FC_StatusFlags2 |= FC_STATUS2_WAIT_FOR_TAKEOFF; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
old_switch = 100; |
#endif |
} |
else |
{ |
FC_StatusFlags |= FC_STATUS_FLY; |
if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if((NC_To_FC_Flags & NC_TO_FC_AUTOSTART || FC_StatusFlags2 & FC_STATUS2_AUTO_STARTING) && (VarioCharacter == '=') && ACC_AltitudeControl) |
{ |
FromNC_AltitudeSpeed = 80; |
FromNC_AltitudeSetpoint = 500; |
SollHoehe = 500; |
trigger = 1000; |
if(NC_To_FC_Flags & NC_TO_FC_AUTOSTART) SpeakHoTT = SPEAK_NEXT_WP; |
/* if(StartTrigger != 2) |
{ |
StartTrigger = 1; |
if(HoverGas < STICK_GAIN * 35) HoverGas = STICK_GAIN * 35; |
} |
*/ |
} |
// else FC_StatusFlags2 &= ~(FC_STATUS2_AUTO_STARTING); |
#endif |
if(HoehenWertF > 150 || HoehenWert < -350 || !(Parameter_GlobalConfig & CFG_HOEHENREGELUNG)) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
trigger = 1000; |
if(FC_StatusFlags2 & FC_STATUS2_AUTO_STARTING) { FromNC_AltitudeSpeed = 0; SollHoehe = 300;/*HoehenWertF + 100;*/} |
else SpeakHoTT = SPEAK_RISING; |
#endif |
FC_StatusFlags2 &= ~(FC_STATUS2_WAIT_FOR_TAKEOFF | FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING); |
} |
SummeNick = 0; |
SummeRoll = 0; |
Mess_Integral_Gier = 0; |
// sollGier = 0; |
if(modell_fliegt > 1000) modell_fliegt = 1000; // for the Hooverpoint-Estimation |
} |
else // Flying mode |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if((FC_StatusFlags2 & FC_STATUS2_AUTO_LANDING) && (VarioCharacter == 'v' || VarioCharacter == '=') && ACC_AltitudeControl) |
{ |
FromNC_AltitudeSpeed = EE_Parameter.LandingSpeed; |
FromNC_AltitudeSetpoint = -20000; |
} |
if(trigger < 1000) |
{ |
trigger++; |
SummeNick = 0; |
SummeRoll = 0; |
Mess_Integral_Gier = 0; |
SollHoehe = HoehenWertF - 300; |
if(trigger == 1000 && FC_StatusFlags2 & FC_STATUS2_AUTO_LANDING && VarioCharacter != '+') |
{ |
FC_StatusFlags2 &= ~FC_STATUS2_AUTO_LANDING; |
FC_StatusFlags2 |= FC_STATUS2_WAIT_FOR_TAKEOFF; // go back into starting state |
} |
} |
else |
if(ACC_AltitudeControl && (VarioCharacter == 'v' || VarioCharacter == '-') && HoehenWert < 1000 /*&& FromNC_AltitudeSetpoint < 0*/) |
{ |
if(Aktuell_az > 940) |
{ |
trigger = 0; |
SpeakHoTT = SPEAK_LANDING; |
}; |
} |
#endif |
} |
} // end of: modell_fliegt > 256 |
if((PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] > 80) && MotorenEin == 0) |
{ |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// auf Nullwerte kalibrieren |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) // Neutralwerte |
{ |
if(++delay_neutral > 200) // nicht sofort |
{ |
delay_neutral = 0; |
modell_fliegt = 0; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) > 70) |
{ |
unsigned char setting=1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 2; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < 70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 3; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > 70) setting = 4; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] <-70 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < 70) setting = 5; |
SetActiveParamSet(setting); // aktiven Datensatz merken |
} |
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 30 && PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70) |
{ |
WinkelOut.CalcState = 1; |
CalibrationDone = 0; |
beeptime = 1000; |
} |
else |
{ |
ParamSet_ReadFromEEProm(ActiveParamSet); |
LipoDetection(0); |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG)) // Höhenregelung aktiviert? |
{ |
if((MessLuftdruck > 950) || (MessLuftdruck < 750)) SucheLuftruckOffset(); |
} |
CalibrationDone = SetNeutral(1); |
ServoActive = 1; |
DDRD |=0x80; // enable J7 -> Servo signal |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(VersionInfo.HardwareError[0]) SpeakHoTT = SPEAK_ERR_SENSOR; |
else |
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION; |
else SpeakHoTT = SPEAK_CALIBRATE; |
ShowSettingNameTime = 5; // for HoTT & Jeti |
#endif |
Piep(ActiveParamSet,120); |
} |
} |
} |
else |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -75) // ACC Neutralwerte speichern |
{ |
if(++delay_neutral > 200) // nicht sofort |
{ |
MotorenEin = 0; |
delay_neutral = 0; |
modell_fliegt = 0; |
CalibrationDone = SetNeutral(2); // store ACC values into EEPROM |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(VersionInfo.HardwareError[0]) SpeakHoTT = SPEAK_ERR_SENSOR; |
else |
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION; |
else SpeakHoTT = SPEAK_CALIBRATE; |
#endif |
Piep(ActiveParamSet,120); |
} |
} |
else delay_neutral = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gas ist unten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] < -100) |
{ |
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] > 5) move_safety_switch = 100; |
else |
if(PPM_diff[EE_Parameter.MotorSafetySwitch & 127] < -5) move_safety_switch = -100; |
// Motoren Starten |
if(!MotorenEin) |
{ |
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] < -100) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0))) |
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] > -10 && move_safety_switch == 100))) |
{ |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Einschalten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(CalibrationDone) FC_StatusFlags |= FC_STATUS_START; |
StartLuftdruck = Luftdruck; |
HoehenWertF = 0; |
HoehenWert = 0; |
SummenHoehe = 0; |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -100 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 100) && EE_Parameter.MotorSafetySwitch == 0) delay_einschalten = 0; |
if(++delay_einschalten > 253) |
{ |
if((abs(MesswertGier) > 32 || abs(MesswertNick) > 20) || abs(MesswertRoll) > 20) CalibrationDone = 0; // dann ist der Gyro defekt, schlecht kalibriert oder der MK dreht sich |
delay_einschalten = 0; |
if(!VersionInfo.HardwareError[0] && CalibrationDone && !NC_ErrorCode) |
{ |
modell_fliegt = 1; |
MotorenEin = 1; |
sollGier = 0; |
Mess_Integral_Gier = 0; |
Mess_Integral_Gier2 = 0; |
Mess_IntegralNick = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccNick; |
Mess_IntegralRoll = EE_Parameter.GyroAccFaktor * (long)Mittelwert_AccRoll; |
Mess_IntegralNick2 = IntegralNick; |
Mess_IntegralRoll2 = IntegralRoll; |
SummeNick = 0; |
SummeRoll = 0; |
// ControlHeading = (((int) EE_Parameter.OrientationAngle * 15 + KompassValue) % 360) / 2; |
NeueKompassRichtungMerken = 100; // 2 sekunden |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
SpeakHoTT = SPEAK_STARTING; |
#endif |
} |
else |
{ |
beeptime = 1500; // indicate missing calibration |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!CalibrationDone) SpeakHoTT = SPEAK_ERR_CALIBARTION; |
#endif |
} |
} |
} |
else delay_einschalten = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Auschalten |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
else // only if motors are running |
{ |
// if((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 75) && (PPM_in[EE_Parameter.MotorSafetySwitch] < -75 || EE_Parameter.MotorSafetySwitch == 0)) |
if((((PPM_in[EE_Parameter.Kanalbelegung[K_GIER]] > 100) && ((!(EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -75) || EE_Parameter.MotorSafetySwitch == 0))) |
|| (((EE_Parameter.GlobalConfig3 & CFG3_MOTOR_SWITCH_MODE) && PPM_in[EE_Parameter.MotorSafetySwitch] < -50 && move_safety_switch == -100))) |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -100 || abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < 100) && EE_Parameter.MotorSafetySwitch == 0) |
{ |
delay_ausschalten = 0; |
} |
else |
{ |
SummeNick = 0; |
SummeRoll = 0; |
StickNick = 0; |
StickRoll = 0; |
} |
if(++delay_ausschalten > 250) // nicht sofort |
{ |
MotorenEin = 0; |
delay_ausschalten = 0; |
modell_fliegt = 0; |
FC_StatusFlags2 &= ~(FC_STATUS2_WAIT_FOR_TAKEOFF | FC_STATUS2_AUTO_STARTING | FC_STATUS2_AUTO_LANDING); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
SpeakHoTT = SPEAK_MK_OFF; |
#endif |
} |
else |
if(delay_ausschalten == 100) beeptime = 3500; |
} |
else delay_ausschalten = 0; |
} |
if(GasIsZeroCnt < 1000) |
{ |
if(VarioMeter > -150) GasIsZeroCnt++; |
else if(GasIsZeroCnt) GasIsZeroCnt--; |
} |
} |
else // gas not at minimum |
{ |
move_safety_switch = 0; |
GasIsZeroCnt = 0; |
} |
} |
else // Empfang zwischen 100 und 140 -> schlecht |
{ |
if(GasIsZeroCnt >= 750) // gas-stick was down for 1.5 seconds before RC-Lost |
{ |
if((GPSInfo.HomeDistance < 40 * 10) && (HoehenWert < 15 * 100)) // and we are at the starting point -> maybe landed? |
{ |
GasIsZeroCnt = 30000; |
if(modell_fliegt > 1001) modell_fliegt = 1001; |
} |
} |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// neue Werte von der Funke |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!NewPpmData-- || (FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
{ |
static int stick_nick,stick_roll; |
unsigned char stick_p; |
ParameterZuordnung(); |
stick_p = EE_Parameter.Stick_P; |
stick_nick = (stick_nick * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] * stick_p) / 4; |
stick_nick += PPM_diff[EE_Parameter.Kanalbelegung[K_NICK]] * EE_Parameter.Stick_D; |
stick_roll = (stick_roll * 3 + PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] * stick_p) / 4; |
stick_roll += PPM_diff[EE_Parameter.Kanalbelegung[K_ROLL]] * EE_Parameter.Stick_D; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// CareFree und freie Wahl der vorderen Richtung |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(CareFree) |
{ |
signed int nick, roll; |
nick = stick_nick / 4; |
roll = stick_roll / 4; |
StickNick = ((FromNC_Rotate_C * nick) + (FromNC_Rotate_S * roll)) / (32 / 4); |
StickRoll = ((FromNC_Rotate_C * roll) - (FromNC_Rotate_S * nick)) / (32 / 4); |
} |
else |
{ |
FromNC_Rotate_C = sintab[EE_Parameter.OrientationAngle + 6]; |
FromNC_Rotate_S = sintab[EE_Parameter.OrientationAngle]; |
StickNick = ((FromNC_Rotate_C * stick_nick) + (FromNC_Rotate_S * stick_roll)) / 8; |
StickRoll = ((FromNC_Rotate_C * stick_roll) - (FromNC_Rotate_S * stick_nick)) / 8; |
} |
StickGier = -PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; |
if(StickGier > 4) StickGier -= 4; else |
if(StickGier < -4) StickGier += 4; else StickGier = 0; |
if(GasIsZeroCnt > 512) // About to switch - off |
{ |
StickNick = StickNick/8; |
StickRoll = StickRoll/8; |
SummeNick = 0; |
SummeRoll = 0; |
} |
else |
if(GPS_Aid_StickMultiplikator) // in that case the GPS controls stronger |
{ |
StickNick = (GPS_Aid_StickMultiplikator * (StickNick / 8)) / 16; |
StickRoll = (GPS_Aid_StickMultiplikator * (StickRoll / 8)) / 16; |
} |
StickNick -= GPS_Nick; |
StickRoll -= GPS_Roll; |
StickGas = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]] + 127; |
GyroFaktor = (Parameter_Gyro_P + 10.0); |
IntegralFaktor = Parameter_Gyro_I; |
GyroFaktorGier = (Parameter_Gyro_Gier_P + 10.0); |
IntegralFaktorGier = Parameter_Gyro_Gier_I; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//+ Analoge Steuerung per Seriell |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(ExternControl.Config & 0x01 && Parameter_ExternalControl > 128) |
{ |
StickNick += (int) ExternControl.Nick * (int) EE_Parameter.Stick_P; |
StickRoll += (int) ExternControl.Roll * (int) EE_Parameter.Stick_P; |
StickGier += ExternControl.Gier; |
ExternHoehenValue = (int) ExternControl.Hight * (int)EE_Parameter.Hoehe_Verstaerkung; |
if(ExternControl.Gas < StickGas) StickGas = ExternControl.Gas; |
} |
if(StickGas < 0) StickGas = 0; |
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) IntegralFaktor = 0; |
if(abs(StickNick/STICK_GAIN) > MaxStickNick) |
{ |
MaxStickNick = abs(StickNick)/STICK_GAIN; |
if(MaxStickNick > 100) MaxStickNick = 100; |
} |
else MaxStickNick--; |
if(abs(StickRoll/STICK_GAIN) > MaxStickRoll) |
{ |
MaxStickRoll = abs(StickRoll)/STICK_GAIN; |
if(MaxStickRoll > 100) MaxStickRoll = 100; |
} |
else MaxStickRoll--; |
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING) {MaxStickNick = 0; MaxStickRoll = 0;} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Looping? |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_LINKS) Looping_Links = 1; |
else |
{ |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Links = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_RECHTS) Looping_Rechts = 1; |
else |
{ |
if(Looping_Rechts) // Hysterese |
{ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Rechts = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_OBEN) Looping_Oben = 1; |
else |
{ |
if(Looping_Oben) // Hysterese |
{ |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < (EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese))) Looping_Oben = 0; |
} |
} |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -EE_Parameter.LoopThreshold) && EE_Parameter.BitConfig & CFG_LOOP_UNTEN) Looping_Unten = 1; |
else |
{ |
if(Looping_Unten) // Hysterese |
{ |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -(EE_Parameter.LoopThreshold - EE_Parameter.LoopHysterese)) Looping_Unten = 0; |
} |
} |
if(Looping_Links || Looping_Rechts) Looping_Roll = 1; else Looping_Roll = 0; |
if(Looping_Oben || Looping_Unten) { Looping_Nick = 1; Looping_Roll = 0; Looping_Links = 0; Looping_Rechts = 0;} else Looping_Nick = 0; |
} // Ende neue Funken-Werte |
if(Looping_Roll || Looping_Nick) |
{ |
if(GasMischanteil > EE_Parameter.LoopGasLimit) GasMischanteil = EE_Parameter.LoopGasLimit; |
TrichterFlug = 1; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Bei Empfangsausfall im Flug |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(FC_StatusFlags2 & FC_STATUS2_RC_FAILSAVE_ACTIVE) |
{ |
StickNick = -GPS_Nick; |
StickRoll = -GPS_Roll; |
StickGas = StickGasHover; |
StickGier = 0; |
Parameter_GlobalConfig &= ~(CFG_HEADING_HOLD | CFG_DREHRATEN_BEGRENZER); |
Parameter_GlobalConfig |= CFG_HOEHENREGELUNG | CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER | CFG_GPS_AKTIV; |
Parameter_ExtraConfig &= ~(CFG2_HEIGHT_LIMIT | CFG_LEARNABLE_CAREFREE | CFG2_VARIO_BEEP); |
Parameter_HoehenSchalter = 200; // switch on |
} |
else |
if(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING) |
{ |
StickGier = 0; |
StickNick = 0; |
StickRoll = 0; |
GyroFaktor = 90; |
IntegralFaktor = 120; |
GyroFaktorGier = 90; |
IntegralFaktorGier = 120; |
Looping_Roll = 0; |
Looping_Nick = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Integrale auf ACC-Signal abgleichen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define ABGLEICH_ANZAHL 256L |
MittelIntegralNick += IntegralNick; // Für die Mittelwertbildung aufsummieren |
MittelIntegralRoll += IntegralRoll; |
MittelIntegralNick2 += IntegralNick2; |
MittelIntegralRoll2 += IntegralRoll2; |
if(Looping_Nick || Looping_Roll) |
{ |
IntegralAccNick = 0; |
IntegralAccRoll = 0; |
MittelIntegralNick = 0; |
MittelIntegralRoll = 0; |
MittelIntegralNick2 = 0; |
MittelIntegralRoll2 = 0; |
Mess_IntegralNick2 = Mess_IntegralNick; |
Mess_IntegralRoll2 = Mess_IntegralRoll; |
ZaehlMessungen = 0; |
LageKorrekturNick = 0; |
LageKorrekturRoll = 0; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!Looping_Nick && !Looping_Roll && (Aktuell_az > 512 || MotorenEin)) |
{ |
long tmp_long, tmp_long2; |
if(FromNaviCtrl_Value.Kalman_K > 0 /*&& !TrichterFlug*/) |
{ |
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccNick - FromNaviCtrl.AccErrorN)); |
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)(Mittelwert_AccRoll - FromNaviCtrl.AccErrorR)); |
tmp_long = (tmp_long * FromNaviCtrl_Value.Kalman_K) / (32 * 16); |
tmp_long2 = (tmp_long2 * FromNaviCtrl_Value.Kalman_K) / (32 * 16); |
if((MaxStickNick > 64) || (MaxStickRoll > 64)) |
{ |
tmp_long /= 2; |
tmp_long2 /= 2; |
} |
if(tmp_long > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long) FromNaviCtrl_Value.Kalman_MaxFusion; |
if(tmp_long < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long = (long)-FromNaviCtrl_Value.Kalman_MaxFusion; |
if(tmp_long2 > (long) FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long) FromNaviCtrl_Value.Kalman_MaxFusion; |
if(tmp_long2 < (long)-FromNaviCtrl_Value.Kalman_MaxFusion) tmp_long2 = (long)-FromNaviCtrl_Value.Kalman_MaxFusion; |
} |
else |
{ |
tmp_long = (long)(IntegralNick / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccNick); |
tmp_long2 = (long)(IntegralRoll / EE_Parameter.GyroAccFaktor - (long)Mittelwert_AccRoll); |
tmp_long /= 16; |
tmp_long2 /= 16; |
if((MaxStickNick > 64) || (MaxStickRoll > 64)) |
{ |
tmp_long /= 3; |
tmp_long2 /= 3; |
} |
if(abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25) |
{ |
tmp_long /= 3; |
tmp_long2 /= 3; |
} |
KompassFusion = 25; |
#define AUSGLEICH 32 |
if(tmp_long > AUSGLEICH) tmp_long = AUSGLEICH; |
if(tmp_long < -AUSGLEICH) tmp_long =-AUSGLEICH; |
if(tmp_long2 > AUSGLEICH) tmp_long2 = AUSGLEICH; |
if(tmp_long2 <-AUSGLEICH) tmp_long2 =-AUSGLEICH; |
} |
Mess_IntegralNick -= tmp_long; |
Mess_IntegralRoll -= tmp_long2; |
//DebugOut.Analog[16] += tmp_long; |
//DebugOut.Analog[17] += tmp_long2; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(ZaehlMessungen >= ABGLEICH_ANZAHL) |
{ |
static int cnt = 0; |
static char last_n_p,last_n_n,last_r_p,last_r_n; |
static long MittelIntegralNick_Alt,MittelIntegralRoll_Alt; |
if(!Looping_Nick && !Looping_Roll && !TrichterFlug && EE_Parameter.Driftkomp) |
{ |
MittelIntegralNick /= ABGLEICH_ANZAHL; |
MittelIntegralRoll /= ABGLEICH_ANZAHL; |
IntegralAccNick = (EE_Parameter.GyroAccFaktor * IntegralAccNick) / ABGLEICH_ANZAHL; |
IntegralAccRoll = (EE_Parameter.GyroAccFaktor * IntegralAccRoll) / ABGLEICH_ANZAHL; |
IntegralAccZ = IntegralAccZ / ABGLEICH_ANZAHL; |
#define MAX_I 0 |
// Nick ++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralFehlerNick = (long)(MittelIntegralNick - (long)IntegralAccNick); |
ausgleichNick = IntegralFehlerNick / EE_Parameter.GyroAccAbgleich; |
// Roll ++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralFehlerRoll = (long)(MittelIntegralRoll - (long)IntegralAccRoll); |
ausgleichRoll = IntegralFehlerRoll / EE_Parameter.GyroAccAbgleich; |
LageKorrekturNick = ausgleichNick / ABGLEICH_ANZAHL; |
LageKorrekturRoll = ausgleichRoll / ABGLEICH_ANZAHL; |
if(((MaxStickNick > 64) || (MaxStickRoll > 64) || (abs(PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]) > 25)) && (FromNaviCtrl_Value.Kalman_K == -1)) |
{ |
LageKorrekturNick /= 2; |
LageKorrekturRoll /= 2; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gyro-Drift ermitteln |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
MittelIntegralNick2 /= ABGLEICH_ANZAHL; |
MittelIntegralRoll2 /= ABGLEICH_ANZAHL; |
tmp_long = IntegralNick2 - IntegralNick; |
tmp_long2 = IntegralRoll2 - IntegralRoll; |
IntegralFehlerNick = tmp_long; |
IntegralFehlerRoll = tmp_long2; |
Mess_IntegralNick2 -= IntegralFehlerNick; |
Mess_IntegralRoll2 -= IntegralFehlerRoll; |
if(EE_Parameter.Driftkomp) |
{ |
if(GierGyroFehler > ABGLEICH_ANZAHL/2) { AdNeutralGier++; } |
if(GierGyroFehler <-ABGLEICH_ANZAHL/2) { AdNeutralGier--; } |
} |
GierGyroFehler = 0; |
#define FEHLER_LIMIT (ABGLEICH_ANZAHL / 2) |
#define FEHLER_LIMIT1 (ABGLEICH_ANZAHL * 2) //4 |
#define FEHLER_LIMIT2 (ABGLEICH_ANZAHL * 16) //16 |
#define BEWEGUNGS_LIMIT 20000 |
// Nick +++++++++++++++++++++++++++++++++++++++++++++++++ |
cnt = 1;// + labs(IntegralFehlerNick) / 4096; |
if(labs(IntegralFehlerNick) > FEHLER_LIMIT1) cnt = 4; |
if(labs(MittelIntegralNick_Alt - MittelIntegralNick) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8)) |
{ |
if(IntegralFehlerNick > FEHLER_LIMIT2) |
{ |
if(last_n_p) |
{ |
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8); |
ausgleichNick = IntegralFehlerNick / 8; |
if(ausgleichNick > 5000) ausgleichNick = 5000; |
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
} |
else last_n_p = 1; |
} else last_n_p = 0; |
if(IntegralFehlerNick < -FEHLER_LIMIT2) |
{ |
if(last_n_n) |
{ |
cnt += labs(IntegralFehlerNick) / (FEHLER_LIMIT2 / 8); |
ausgleichNick = IntegralFehlerNick / 8; |
if(ausgleichNick < -5000) ausgleichNick = -5000; |
LageKorrekturNick += ausgleichNick / ABGLEICH_ANZAHL; |
} |
else last_n_n = 1; |
} else last_n_n = 0; |
} |
else |
{ |
cnt = 0; |
KompassSignalSchlecht = 100; |
} |
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift; |
if(IntegralFehlerNick > FEHLER_LIMIT) AdNeutralNick += cnt; |
if(IntegralFehlerNick < -FEHLER_LIMIT) AdNeutralNick -= cnt; |
// Roll +++++++++++++++++++++++++++++++++++++++++++++++++ |
cnt = 1;// + labs(IntegralFehlerRoll) / 4096; |
if(labs(IntegralFehlerRoll) > FEHLER_LIMIT1) cnt = 4; |
if(labs(MittelIntegralRoll_Alt - MittelIntegralRoll) < BEWEGUNGS_LIMIT || (FromNaviCtrl_Value.Kalman_MaxDrift > 3*8)) |
{ |
if(IntegralFehlerRoll > FEHLER_LIMIT2) |
{ |
if(last_r_p) |
{ |
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8); |
ausgleichRoll = IntegralFehlerRoll / 8; |
if(ausgleichRoll > 5000) ausgleichRoll = 5000; |
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
} |
else last_r_p = 1; |
} else last_r_p = 0; |
if(IntegralFehlerRoll < -FEHLER_LIMIT2) |
{ |
if(last_r_n) |
{ |
cnt += labs(IntegralFehlerRoll) / (FEHLER_LIMIT2 / 8); |
ausgleichRoll = IntegralFehlerRoll / 8; |
if(ausgleichRoll < -5000) ausgleichRoll = -5000; |
LageKorrekturRoll += ausgleichRoll / ABGLEICH_ANZAHL; |
} |
else last_r_n = 1; |
} else last_r_n = 0; |
} else |
{ |
cnt = 0; |
KompassSignalSchlecht = 100; |
} |
if(cnt > EE_Parameter.Driftkomp) cnt = EE_Parameter.Driftkomp; |
if(FromNaviCtrl_Value.Kalman_MaxDrift) if(cnt > FromNaviCtrl_Value.Kalman_MaxDrift) cnt = FromNaviCtrl_Value.Kalman_MaxDrift; |
if(IntegralFehlerRoll > FEHLER_LIMIT) AdNeutralRoll += cnt; |
if(IntegralFehlerRoll < -FEHLER_LIMIT) AdNeutralRoll -= cnt; |
} |
else |
{ |
LageKorrekturRoll = 0; |
LageKorrekturNick = 0; |
TrichterFlug = 0; |
} |
if(!IntegralFaktor) { LageKorrekturRoll = 0; LageKorrekturNick = 0;} // z.B. bei HH |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
MittelIntegralNick_Alt = MittelIntegralNick; |
MittelIntegralRoll_Alt = MittelIntegralRoll; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++ |
IntegralAccNick = 0; |
IntegralAccRoll = 0; |
IntegralAccZ = 0; |
MittelIntegralNick = 0; |
MittelIntegralRoll = 0; |
MittelIntegralNick2 = 0; |
MittelIntegralRoll2 = 0; |
ZaehlMessungen = 0; |
} // ZaehlMessungen >= ABGLEICH_ANZAHL |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gieren |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(abs(StickGier) > 3) // war 15 |
{ |
// KompassSignalSchlecht = 1000; |
if(!(Parameter_GlobalConfig & CFG_KOMPASS_FIX)) |
{ |
NeueKompassRichtungMerken = 50; // eine Sekunde zum Einloggen |
}; |
} |
tmp_int = (long) EE_Parameter.StickGier_P * ((long)StickGier * abs(StickGier)) / 512L; // expo y = ax + bx² |
tmp_int += (EE_Parameter.StickGier_P * StickGier) / 4; |
if(GasIsZeroCnt > 512) tmp_int = 0; // disable Yawing when Gas-Stick is to Zero |
tmp_int += CompassGierSetpoint; |
sollGier = tmp_int; |
Mess_Integral_Gier -= tmp_int; |
if(Mess_Integral_Gier > 50000) Mess_Integral_Gier = 50000; // begrenzen |
if(Mess_Integral_Gier <-50000) Mess_Integral_Gier =-50000; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Kompass |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(KompassValue >= 0 && (Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) |
{ |
if(CalculateCompassTimer-- == 1) |
{ |
int w,v,r,fehler,korrektur; // wird von der SPI-Routine auf 1 gesetzt |
CalculateCompassTimer = 13; // falls keine Navi-Daten |
// max. Korrekturwert schätzen |
w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln |
v = abs(IntegralRoll /512); |
if(v > w) w = v; // grösste Neigung ermitteln |
// korrektur = w / 4 + 1; |
korrektur = w / 8 + 2; |
ErsatzKompassInGrad = ErsatzKompass/GIER_GRAD_FAKTOR; |
// Kompassfehlerwert bestimmen |
fehler = ((540 + KompassValue - ErsatzKompassInGrad) % 360) - 180; |
// GIER_GRAD_FAKTOR ist ca. 1200 |
// Kompasswert einloggen |
if(NeueKompassRichtungMerken) KompassSollWert = ErsatzKompassInGrad; |
if(KompassSignalSchlecht) KompassSignalSchlecht--; |
else |
if(w < 25) |
{ |
GierGyroFehler += fehler; |
if(NeueKompassRichtungMerken) NeueKompassRichtungMerken--; |
/* if(NeueKompassRichtungMerken) |
{ |
if(--NeueKompassRichtungMerken == 0) |
{ |
KompassSollWert = ErsatzKompassInGrad; |
} |
} |
*/ |
} |
// Kompass fusionieren |
if(!KompassSignalSchlecht) ErsatzKompass += (fehler * KompassFusion) / korrektur; |
// MK Gieren |
if(!NeueKompassRichtungMerken) |
{ |
r = ((540 + (KompassSollWert - ErsatzKompassInGrad)) % 360) - 180; |
v = r * (Parameter_KompassWirkung/2); // nach Kompass ausrichten |
CompassGierSetpoint = v / 16; |
} |
else CompassGierSetpoint = 0; |
} // CalculateCompassTimer |
} |
else CompassGierSetpoint = 0; |
//DebugOut.Analog[16] = KompassFusion; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Drehgeschwindigkeit und -winkel zu einem Istwert zusammenfassen |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(TrichterFlug) { SummeRoll = 0; SummeNick = 0;}; |
if(!Looping_Nick) IntegralNickMalFaktor = (IntegralNick * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralNickMalFaktor = 0; |
if(!Looping_Roll) IntegralRollMalFaktor = (IntegralRoll * IntegralFaktor) / (44000 / STICK_GAIN); else IntegralRollMalFaktor = 0; |
#define TRIM_MAX 200 |
if(TrimNick > TRIM_MAX) TrimNick = TRIM_MAX; else if(TrimNick <-TRIM_MAX) TrimNick =-TRIM_MAX; |
if(TrimRoll > TRIM_MAX) TrimRoll = TRIM_MAX; else if(TrimRoll <-TRIM_MAX) TrimRoll =-TRIM_MAX; |
MesswertNick = IntegralNickMalFaktor + (long)((long)MesswertNick * GyroFaktor + (long)TrimNick * 128L) / (256L / STICK_GAIN); |
MesswertRoll = IntegralRollMalFaktor + (long)((long)MesswertRoll * GyroFaktor + (long)TrimRoll * 128L) / (256L / STICK_GAIN); |
MesswertGier = (long)(MesswertGier * 2 * (long)GyroFaktorGier) / (256L / STICK_GAIN) + (long)(Integral_Gier * IntegralFaktorGier) / (2 * (44000 / STICK_GAIN)); |
// Maximalwerte abfangen |
#define MAX_SENSOR (4096) |
if(MesswertNick > MAX_SENSOR) MesswertNick = MAX_SENSOR; |
if(MesswertNick < -MAX_SENSOR) MesswertNick = -MAX_SENSOR; |
if(MesswertRoll > MAX_SENSOR) MesswertRoll = MAX_SENSOR; |
if(MesswertRoll < -MAX_SENSOR) MesswertRoll = -MAX_SENSOR; |
if(MesswertGier > MAX_SENSOR) MesswertGier = MAX_SENSOR; |
if(MesswertGier < -MAX_SENSOR) MesswertGier = -MAX_SENSOR; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Undervoltage |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!(FC_StatusFlags & FC_STATUS_LOWBAT)) |
{ |
GasMischanteil = ((unsigned int)GasMischanteil * BattLowVoltageWarning) / UBat; // Gas auf das aktuelle Spannungvieveau beziehen |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Auto-Landing |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
static unsigned char slower; |
if(!slower--) |
{ |
static unsigned int u_filter = 0; |
if(!u_filter) u_filter = UBat; |
if(UBat > u_filter) u_filter++; else |
if(UBat < u_filter) u_filter--; |
slower = 100; // 5Hz |
if(u_filter < BattAutoLandingVoltage) |
{ |
LowVoltageLandingActive = 10; // 2 sek |
} |
else if(u_filter > BattAutoLandingVoltage + LipoCells && LowVoltageLandingActive) LowVoltageLandingActive--; |
if(u_filter < BattComingHomeVoltage) |
{ |
LowVoltageHomeActive = 25; // min. 5 sek |
} |
else if(u_filter > BattComingHomeVoltage + LipoCells && LowVoltageHomeActive) LowVoltageHomeActive--; |
} |
if(LowVoltageLandingActive && FromNC_AltitudeSetpoint >= 0) |
{ |
FromNC_AltitudeSpeed = EE_Parameter.LandingSpeed; |
FromNC_AltitudeSetpoint = -20000; |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// send SPI pending bytes |
if(BytegapSPI == 0) SPI_TransmitByte(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Höhenregelung |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
GasMischanteil *= STICK_GAIN; |
// if height control is activated |
if((Parameter_GlobalConfig & CFG_HOEHENREGELUNG) && !(Looping_Roll || Looping_Nick) && !(VersionInfo.HardwareError[0] & 0x7F)) // Höhenregelung |
{ |
#define HOVER_GAS_AVERAGE 16384L // 16384 * 2ms = 32s averaging |
#define HC_GAS_AVERAGE 4 // 4 * 2ms= 8ms averaging |
int HCGas, GasReduction = 0; |
static int HeightTrimming = 0; // rate for change of height setpoint |
static int HeightDeviation = 0, FilterHCGas = 0; |
static unsigned long HoverGasFilter = 0; |
static unsigned char delay = 100, BaroAtUpperLimit = 0, BaroAtLowerLimit = 0; |
// Expand the measurement |
// measurement of air pressure close to upper limit and no overflow in correction of the new OCR0A value occurs |
if(!BaroExpandActive) |
{ |
if(MessLuftdruck > 920) |
{ // increase offset |
if(OCR0A < (255 - OPA_OFFSET_STEP)) |
{ |
ExpandBaro -= 1; |
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // increase offset to shift ADC down |
OCR0B = 255 - OCR0A; |
beeptime = 300; |
BaroExpandActive = 350; |
CalcExpandBaroStep(); |
} |
else |
{ |
BaroAtLowerLimit = 1; |
} |
} |
// measurement of air pressure close to lower limit and |
else |
if(MessLuftdruck < 100) |
{ // decrease offset |
if(OCR0A > OPA_OFFSET_STEP) |
{ |
ExpandBaro += 1; |
OCR0A = DruckOffsetSetting - OPA_OFFSET_STEP * ExpandBaro; // decrease offset to shift ADC up |
OCR0B = 255 - OCR0A; |
beeptime = 300; |
BaroExpandActive = 350; |
CalcExpandBaroStep(); |
} |
else |
{ |
BaroAtUpperLimit = 1; |
} |
} |
else |
{ |
BaroAtUpperLimit = 0; |
BaroAtLowerLimit = 0; |
} |
} |
else // delay, because of expanding the Baro-Range |
{ |
// now clear the D-values |
VarioMeter = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) ACC_AltitudeFusion(1); // init |
else SummenHoehe = HoehenWert * SM_FILTER; |
#else |
SummenHoehe = HoehenWert * SM_FILTER; |
#endif |
BaroExpandActive--; |
} |
// if height control is activated by an rc channel |
if(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER) // Regler wird über Schalter gesteuert |
{ // check if parameter is less than activation threshold |
if(Parameter_HoehenSchalter < 50) // for 3 or 2-state switch height control is disabled in lowest position |
{ //height control not active |
if(!delay--) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!SpeakHoTT && HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_OFF; |
#endif |
HoehenReglerAktiv = 0; // disable height control |
SollHoehe = HoehenWert; // update SetPoint with current reading |
delay = 1; |
} |
} |
else |
if(Parameter_HoehenSchalter > 70) |
{ //height control is activated |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!SpeakHoTT && !HoehenReglerAktiv) SpeakHoTT = SPEAK_ALTITUDE_ON; |
#endif |
delay = 200; |
HoehenReglerAktiv = 1; // enable height control |
} |
} |
else // no switchable height control |
{ |
SollHoehe = ((int16_t) ExternHoehenValue + (int16_t) Parameter_HoehenSchalter) * (int)EE_Parameter.Hoehe_Verstaerkung; |
HoehenReglerAktiv = 1; |
} |
// calculate cos of nick and roll angle used for projection of the vertical hoover gas |
tmp_int = (int)(IntegralNick/GIER_GRAD_FAKTOR); // nick angle in deg |
tmp_int2 = (int)(IntegralRoll/GIER_GRAD_FAKTOR); // roll angle in deg |
CosAttitude = (int16_t)ihypot(tmp_int, tmp_int2); // phytagoras gives effective attitude angle in deg |
LIMIT_MAX(CosAttitude, 60); // limit effective attitude angle |
CosAttitude = c_cos_8192(CosAttitude); // cos of actual attitude |
VarioCharacter = ' '; |
AltitudeSetpointTrimming = 0; |
if(HoehenReglerAktiv && !(FC_StatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
{ |
// Holger original version |
// start of height control algorithm |
// the height control is only an attenuation of the actual gas stick. |
// I.e. it will work only if the gas stick is higher than the hover gas |
// and the hover height will be allways larger than height setpoint. |
FC_StatusFlags2 |= FC_STATUS2_ALTITUDE_CONTROL; |
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) || !(Parameter_GlobalConfig & CFG_HOEHEN_SCHALTER)) // Regler wird über Schalter gesteuert) |
{ // old version |
HCGas = GasMischanteil; // take current stick gas as neutral point for the height control |
HeightTrimming = 0; |
AltitudeSetpointTrimming = 0; |
// set both flags to indicate no vario mode |
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
} |
else |
{ |
// alternative height control |
// PD-Control with respect to hoover point |
// the thrust loss out of horizontal attitude is compensated |
// the setpoint will be fine adjusted with the gas stick position |
if(/*1 || */FC_StatusFlags & FC_STATUS_FLY) // trim setpoint only when flying |
{ // gas stick is above hoover point |
if(StickGas > (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtUpperLimit) |
{ |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
// Limit the maximum Altitude |
if(Parameter_MaximumAltitude && (SollHoehe/100 > Parameter_MaximumAltitude)) |
{ |
AltitudeSetpointTrimming = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!SpeakHoTT && HoehenWert/95 > Parameter_MaximumAltitude) SpeakHoTT = SPEAK_MAX_ALTITUD; |
#endif |
VarioCharacter = '='; |
} |
else |
{ |
if(HeightDeviation > 20) SollHoehe = HoehenWertF; // update setpoint to current heigth |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP; |
AltitudeSetpointTrimming = abs(StickGas - (StickGasHover + HEIGHT_CONTROL_STICKTHRESHOLD)); |
if(LowVoltageLandingActive) AltitudeSetpointTrimming /= 3; // only 33% rising |
VarioCharacter = '+'; |
} |
WaypointTrimming = 0; |
} // gas stick is below hoover point |
else if(StickGas < (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD) && !BaroAtLowerLimit ) // Minus |
{ |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN; |
AltitudeSetpointTrimming = -abs(StickGas - (StickGasHover - HEIGHT_CONTROL_STICKTHRESHOLD)); |
VarioCharacter = '-'; |
WaypointTrimming = 0; |
} |
else // Gas Stick in Hover Range |
{ |
VarioCharacter = '='; |
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint > SollHoehe) // von NC gesteuert -> Steigen |
{ |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_UP; |
AltitudeSetpointTrimming = FromNC_AltitudeSpeed; |
//HeightTrimming += FromNC_AltitudeSpeed; |
WaypointTrimming = 10; |
VarioCharacter = '^'; |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_DOWN) // changed from sinking to rising |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_DOWN; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
} |
else |
if(FromNC_AltitudeSpeed && FromNC_AltitudeSetpoint < SollHoehe) // von NC gesteuert -> sinken |
{ |
FC_StatusFlags |= FC_STATUS_VARIO_TRIM_DOWN; |
AltitudeSetpointTrimming = -FromNC_AltitudeSpeed; |
//HeightTrimming -= FromNC_AltitudeSpeed; |
WaypointTrimming = -10; |
VarioCharacter = 'v'; |
if(FC_StatusFlags & FC_STATUS_VARIO_TRIM_UP) // changed from rising to sinking |
{ |
FC_StatusFlags &= ~FC_STATUS_VARIO_TRIM_UP; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
} |
} |
else |
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) |
{ |
if(!WaypointTrimming) LIMIT_MIN_MAX(SollHoehe, (HoehenWertF-200), (HoehenWertF+200)) // max. 2m Unterschied |
else WaypointTrimming = 0; |
FC_StatusFlags &= ~(FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
HeightTrimming = 0; |
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 500; |
if(!StartTrigger && HoehenWert > 50) |
{ |
StartTrigger = 1; |
} |
} |
} |
// Trim height set point |
HeightTrimming += AltitudeSetpointTrimming; |
if(abs(HeightTrimming) > 500) // bei Waypoint-Flug ist das ca. die 500Hz |
{ |
if(WaypointTrimming) |
{ |
if(abs(FromNC_AltitudeSetpoint - SollHoehe) < 10) SollHoehe = FromNC_AltitudeSetpoint; |
else SollHoehe += WaypointTrimming; |
} |
else |
{ |
if(HeightTrimming > 0) SollHoehe += EE_Parameter.Hoehe_Verstaerkung / 3; |
else SollHoehe -= EE_Parameter.Hoehe_Verstaerkung / 3; |
} |
HeightTrimming = 0; |
LIMIT_MIN_MAX(SollHoehe, (HoehenWert-1024), (HoehenWert+1024)); // max. 10m Unterschied |
if(Parameter_ExtraConfig & CFG2_VARIO_BEEP) beeptime = 100; |
//update hoover gas stick value when setpoint is shifted |
if(FromNC_AltitudeSpeed == 0) CalcStickGasHover(); |
/* |
if(!EE_Parameter.Hoehe_StickNeutralPoint && FromNC_AltitudeSpeed == 0) |
{ |
StickGasHover = HoverGas/STICK_GAIN; //rescale back to stick value |
StickGasHover = (unsigned int)((unsigned int) StickGasHover * UBat) / BattLowVoltageWarning; |
if(StickGasHover < 70) StickGasHover = 70; |
else if(StickGasHover > 175) StickGasHover = 175; |
} |
*/ |
} |
if(BaroExpandActive) SollHoehe = HoehenWertF; // update setpoint to current altitude if Expanding is active |
} //if FCFlags & MKFCFLAG_FLY |
else |
{ |
SollHoehe = HoehenWert - 400; |
if(EE_Parameter.Hoehe_StickNeutralPoint) StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint; |
else StickGasHover = 127; |
HoverGas = GasMischanteil; |
VarioCharacter = '.'; |
} |
HCGas = HoverGas; // take hover gas (neutral point) |
} |
if(HoehenWertF > SollHoehe || !(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)) |
{ |
if(!ACC_AltitudeControl) |
{ |
// from this point the Heigth Control Algorithm is identical for both versions |
if(BaroExpandActive) // baro range expanding active |
{ |
HCGas = HoverGas; // hover while expanding baro adc range |
HeightDeviation = 0; |
} // EOF // baro range expanding active |
else // valid data from air pressure sensor |
{ |
// ------------------------- P-Part ---------------------------- |
tmp_long = (HoehenWertF - SollHoehe); // positive when too high |
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t |
HeightDeviation = (int)(tmp_long); // positive when too high |
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part |
LIMIT_MIN_MAX(tmp_long, -127 * STICK_GAIN, 256 * STICK_GAIN); // more than the full range makes no sense |
GasReduction = tmp_long; |
// ------------------------- D-Part 1: Vario Meter ---------------------------- |
tmp_int = VarioMeter / 8; |
LIMIT_MIN_MAX(tmp_int, -127, 128); |
tmp_int = (tmp_int * (long)Parameter_Luftdruck_D) / 4L; // scale to d-gain parameter |
LIMIT_MIN_MAX(tmp_int,-64 * STICK_GAIN, 64 * STICK_GAIN); |
if(FC_StatusFlags & (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN)) tmp_int /= 4; // reduce d-part while trimming setpoint |
else |
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) tmp_int /= 8; // reduce d-part in "Deckel" mode |
GasReduction += tmp_int; |
} // EOF no baro range expanding |
// ------------------------ D-Part 2: ACC-Z Integral ------------------------ |
if(Parameter_Hoehe_ACC_Wirkung) |
{ |
tmp_long = ((Mess_Integral_Hoch / 128L) * (int32_t) Parameter_Hoehe_ACC_Wirkung) / (128L / STICK_GAIN); |
LIMIT_MIN_MAX(tmp_long, -32 * STICK_GAIN, 64 * STICK_GAIN); |
GasReduction += tmp_long; |
} |
// ------------------------ D-Part 3: GpsZ ---------------------------------- |
tmp_int = (Parameter_Hoehe_GPS_Z * (int)FromNaviCtrl_Value.GpsZ)/128L; |
LIMIT_MIN_MAX(tmp_int, -32 * STICK_GAIN, 64 * STICK_GAIN); |
GasReduction += tmp_int; |
GasReduction = (long)((long)GasReduction * HoverGas) / 512; // scale to the gas value |
// ------------------------ ---------------------------------- |
HCGas -= GasReduction; |
// limit deviation from hoover point within the target region |
if(!AltitudeSetpointTrimming && HoverGas > 0) // height setpoint is not changed and hoover gas not zero |
{ |
unsigned int tmp; |
tmp = abs(HeightDeviation); |
if(tmp <= 60) |
{ |
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limit gas around the hoover point |
} |
else |
{ |
tmp = (tmp - 60) / 32; |
if(tmp > 15) tmp = 15; |
if(HeightDeviation > 0) |
{ |
tmp = (HoverGasMin * (16 - tmp)) / 16; |
LIMIT_MIN_MAX(HCGas, tmp, HoverGasMax); // limit gas around the hoover point |
} |
else |
{ |
tmp = (HoverGasMax * (tmp + 16)) / 16; |
LIMIT_MIN_MAX(HCGas, HoverGasMin, tmp); // limit gas around the hoover point |
} |
} |
} |
// strech control output by inverse attitude projection 1/cos |
// + 1/cos(angle) ++++++++++++++++++++++++++ |
tmp_long2 = (int32_t)HCGas; |
tmp_long2 *= 8192L; |
tmp_long2 /= CosAttitude; |
HCGas = (int16_t)tmp_long2; |
// update height control gas averaging |
FilterHCGas = (FilterHCGas * (HC_GAS_AVERAGE - 1) + HCGas) / HC_GAS_AVERAGE; |
// limit height control gas pd-control output |
LIMIT_MIN_MAX(FilterHCGas, EE_Parameter.Hoehe_MinGas * STICK_GAIN, (MAX_GAS - 20) * STICK_GAIN); |
// set GasMischanteil to HeightControlGasFilter |
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) |
{ // old version |
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas |
GasMischanteil = FilterHCGas; |
} |
else GasMischanteil = FilterHCGas + (GasMischanteil - HoverGas) / 4; // only in Vario-Mode |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
else // ACC-Altitude control |
{ |
// from this point the Heigth Control Algorithm is identical for both versions |
if(BaroExpandActive) // baro range expanding active |
{ |
HCGas = HoverGas; // hover while expanding baro adc range |
HeightDeviation = 0; |
} // EOF // baro range expanding active |
else // valid data from air pressure sensor |
{ |
// ------------------------- P-Part ---------------------------- |
tmp_long = (HoehenWertF - SollHoehe); // positive when too high |
LIMIT_MIN_MAX(tmp_long, -32767L, 32767L); // avoid overflov when casting to int16_t |
HeightDeviation = (int)(tmp_long); // positive when too high |
tmp_long = (tmp_long * (long)Parameter_Hoehe_P) / 32L; // p-part |
LIMIT_MIN_MAX(tmp_long, -511 * STICK_GAIN, 512 * STICK_GAIN); // more than full range makes sense |
GasReduction = tmp_long; |
// ------------------------ D-Part: ACC-Z Integral ------------------------ |
tmp_long = VarioMeter + (AdWertAccHoch * Parameter_Hoehe_ACC_Wirkung)/256; |
// ------------------------- D-Part: Vario Meter ---------------------------- |
if(WaypointTrimming) { |
Variance = AltitudeSetpointTrimming * 8; |
} else { |
Variance = AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung*9/32; |
} |
tmp_long -= (long)Variance; |
tmp_long = (tmp_long * (long)Parameter_Luftdruck_D) / 32; // scale to d-gain parameter |
LIMIT_MIN_MAX(tmp_long,-511 * STICK_GAIN, 512 * STICK_GAIN); |
GasReduction += tmp_long; |
} // EOF no baro range expanding |
HCGas -= GasReduction; |
LIMIT_MIN_MAX(HCGas, HoverGasMin, HoverGasMax); // limits gas around hover point |
// strech control output by inverse attitude projection 1/cos |
// + 1/cos(angle) ++++++++++++++++++++++++++ |
tmp_long2 = (int32_t)HCGas; |
tmp_long2 *= 8192L; |
tmp_long2 /= CosAttitude; |
HCGas = (int16_t)tmp_long2; |
// update height control gas averaging |
FilterHCGas = (FilterHCGas * (HC_GAS_AVERAGE - 1) + HCGas) / HC_GAS_AVERAGE; |
// limit height control gas pd-control output |
LIMIT_MIN_MAX(FilterHCGas, EE_Parameter.Hoehe_MinGas * STICK_GAIN, (MAX_GAS - 20) * STICK_GAIN); |
// set GasMischanteil to HeightControlGasFilter |
if(Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT) |
{ // old version |
LIMIT_MAX(FilterHCGas, GasMischanteil); // nicht mehr als Gas |
GasMischanteil = FilterHCGas; |
} |
else GasMischanteil = FilterHCGas; |
} // end of ACC-Altitude control |
#endif |
} |
}// EOF height control active |
else // HC not active |
{ |
//update hoover gas stick value when HC is not active |
CalcStickGasHover(); |
/* if(!EE_Parameter.Hoehe_StickNeutralPoint) |
{ |
StickGasHover = HoverGas/STICK_GAIN; // rescale back to stick value |
StickGasHover = (unsigned int)((unsigned int) StickGasHover * UBat) / BattLowVoltageWarning; |
} |
else StickGasHover = EE_Parameter.Hoehe_StickNeutralPoint; |
LIMIT_MIN_MAX(StickGasHover, 70, 175); // reserve some range for trim up and down |
*/ |
FilterHCGas = GasMischanteil; |
// set both flags to indicate no vario mode |
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
FC_StatusFlags2 &= ~FC_STATUS2_ALTITUDE_CONTROL; |
} |
// Hover gas estimation by averaging gas control output on small z-velocities |
// this is done only if height contol option is selected in global config and aircraft is flying |
if((FC_StatusFlags & FC_STATUS_FLY))// && !(FC_SatusFlags & FC_STATUS_EMERGENCY_LANDING)) |
{ |
//if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(GasMischanteil); // init estimation |
if(HoverGasFilter == 0 || StartTrigger == 1) HoverGasFilter = HOVER_GAS_AVERAGE * (unsigned long)(HoverGas); // 0.90f: geändert |
if(StartTrigger == 1) StartTrigger = 2; |
tmp_long2 = (int32_t)GasMischanteil; // take current thrust |
tmp_long2 *= CosAttitude; // apply attitude projection |
tmp_long2 /= 8192; |
// average vertical projected thrust |
if(modell_fliegt < 4000) // the first 8 seconds |
{ // reduce the time constant of averaging by factor of 4 to get much faster a stable value |
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/16L); |
HoverGasFilter += 16L * tmp_long2; |
} |
if(modell_fliegt < 8000) // the first 16 seconds |
{ // reduce the time constant of averaging by factor of 2 to get much faster a stable value |
HoverGasFilter -= HoverGasFilter/(HOVER_GAS_AVERAGE/4L); |
HoverGasFilter += 4L * tmp_long2; |
} |
else //later |
if(abs(VarioMeter) < 100 && abs(HoehenWertF - SollHoehe) < 256) // only on small vertical speed & difference is small (only descending) |
{ |
HoverGasFilter -= HoverGasFilter/HOVER_GAS_AVERAGE; |
HoverGasFilter += tmp_long2; |
} |
HoverGas = (int16_t)(HoverGasFilter/HOVER_GAS_AVERAGE); |
if(EE_Parameter.Hoehe_HoverBand) |
{ |
int16_t band; |
band = HoverGas / EE_Parameter.Hoehe_HoverBand; // the higher the parameter the smaller the range |
HoverGasMin = HoverGas - band; |
HoverGasMax = HoverGas + band; |
} |
else |
{ // no limit |
HoverGasMin = 0; |
HoverGasMax = 1023; |
} |
} |
else |
{ |
StartTrigger = 0; |
HoverGasFilter = 0; |
HoverGas = 0; |
} |
}// EOF Parameter_GlobalConfig & CFG_HEIGHT_CONTROL |
else |
{ |
// set undefined state to indicate vario off |
FC_StatusFlags |= (FC_STATUS_VARIO_TRIM_UP|FC_STATUS_VARIO_TRIM_DOWN); |
} // EOF no height control |
// Limits the maximum gas in case of "Out of Range emergency landing" |
if(NC_To_FC_Flags & NC_TO_FC_EMERGENCY_LANDING) |
{ |
if(GasMischanteil/STICK_GAIN > HooverGasEmergencyPercent && HoverGas) GasMischanteil = HooverGasEmergencyPercent * STICK_GAIN; |
SollHoehe = HoehenWertF; // update setpoint to current heigth |
beeptime = 15000; |
BeepMuster = 0x0E00; |
} |
// limit gas to parameter setting |
LIMIT_MIN(GasMischanteil, (MIN_GAS + 10) * STICK_GAIN); |
if(GasMischanteil > (MAX_GAS - 20) * STICK_GAIN) GasMischanteil = (MAX_GAS - 20) * STICK_GAIN; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// all BL-Ctrl connected? |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(MissingMotor || Capacity.MinOfMaxPWM < 254 || NC_ErrorCode) // wait until all BL-Ctrls started and no Errors |
if(modell_fliegt > 1 && modell_fliegt < 50 && GasMischanteil > 0) // only during start-phase |
{ |
modell_fliegt = 1; |
GasMischanteil = (MIN_GAS + 10) * STICK_GAIN; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(Capacity.MinOfMaxPWM < 40) SpeakHoTT = SPEAK_ERR_MOTOR; |
#endif |
} |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// send SPI pending bytes |
if(BytegapSPI == 0) SPI_TransmitByte(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Mischer und PI-Regler |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DebugOut.Analog[7] = GasMischanteil; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Gier-Anteil |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
GierMischanteil = MesswertGier - sollGier * STICK_GAIN; // Regler für Gier |
#define MIN_GIERGAS (40*STICK_GAIN) // unter diesem Gaswert trotzdem Gieren |
if(GasMischanteil > MIN_GIERGAS) |
{ |
if(GierMischanteil > (GasMischanteil / 2)) GierMischanteil = GasMischanteil / 2; |
if(GierMischanteil < -(GasMischanteil / 2)) GierMischanteil = -(GasMischanteil / 2); |
} |
else |
{ |
if(GierMischanteil > (MIN_GIERGAS / 2)) GierMischanteil = MIN_GIERGAS / 2; |
if(GierMischanteil < -(MIN_GIERGAS / 2)) GierMischanteil = -(MIN_GIERGAS / 2); |
} |
tmp_int = MAX_GAS*STICK_GAIN; |
if(GierMischanteil > ((tmp_int - GasMischanteil))) GierMischanteil = ((tmp_int - GasMischanteil)); |
if(GierMischanteil < -((tmp_int - GasMischanteil))) GierMischanteil = -((tmp_int - GasMischanteil)); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Nick-Achse |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DiffNick = MesswertNick - StickNick; // Differenz bestimmen |
if(IntegralFaktor) SummeNick += IntegralNickMalFaktor - StickNick; // I-Anteil bei Winkelregelung |
else SummeNick += DiffNick; // I-Anteil bei HH |
if(SummeNick > (STICK_GAIN * 16000L)) SummeNick = (STICK_GAIN * 16000L); |
if(SummeNick < -(16000L * STICK_GAIN)) SummeNick = -(16000L * STICK_GAIN); |
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_nick = (EE_Parameter.Gyro_Stability * DiffNick) / 8; // PI-Regler für Nick |
else pd_ergebnis_nick = ((EE_Parameter.Gyro_Stability / 2) * DiffNick) / 4; // Überlauf verhindern |
pd_ergebnis_nick += SummeNick / Ki; |
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
if(pd_ergebnis_nick > tmp_int) pd_ergebnis_nick = tmp_int; |
if(pd_ergebnis_nick < -tmp_int) pd_ergebnis_nick = -tmp_int; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Roll-Achse |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
DiffRoll = MesswertRoll - StickRoll; // Differenz bestimmen |
if(IntegralFaktor) SummeRoll += IntegralRollMalFaktor - StickRoll;// I-Anteil bei Winkelregelung |
else SummeRoll += DiffRoll; // I-Anteil bei HH |
if(SummeRoll > (STICK_GAIN * 16000L)) SummeRoll = (STICK_GAIN * 16000L); |
if(SummeRoll < -(16000L * STICK_GAIN)) SummeRoll = -(16000L * STICK_GAIN); |
if(EE_Parameter.Gyro_Stability <= 8) pd_ergebnis_roll = (EE_Parameter.Gyro_Stability * DiffRoll) / 8; // PI-Regler für Roll |
else pd_ergebnis_roll = ((EE_Parameter.Gyro_Stability / 2) * DiffRoll) / 4; // Überlauf verhindern |
pd_ergebnis_roll += SummeRoll / Ki; |
tmp_int = (long)((long)Parameter_DynamicStability * (long)(GasMischanteil + abs(GierMischanteil)/2)) / 64; |
if(pd_ergebnis_roll > tmp_int) pd_ergebnis_roll = tmp_int; |
if(pd_ergebnis_roll < -tmp_int) pd_ergebnis_roll = -tmp_int; |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// send SPI pending bytes |
if(BytegapSPI == 0) SPI_TransmitByte(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Universal Mixer |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
for(i=0; i<MAX_MOTORS; i++) |
{ |
signed int tmp_int; |
if(Mixer.Motor[i][0] > 0) |
{ |
// Gas |
if(Mixer.Motor[i][0] == 64) tmp_int = GasMischanteil; else tmp_int = ((long)GasMischanteil * Mixer.Motor[i][0]) / 64L; |
// Nick |
if(Mixer.Motor[i][1] == 64) tmp_int += pd_ergebnis_nick; |
else if(Mixer.Motor[i][1] == -64) tmp_int -= pd_ergebnis_nick; |
else tmp_int += ((long)pd_ergebnis_nick * Mixer.Motor[i][1]) / 64L; |
// Roll |
if(Mixer.Motor[i][2] == 64) tmp_int += pd_ergebnis_roll; |
else if(Mixer.Motor[i][2] == -64) tmp_int -= pd_ergebnis_roll; |
else tmp_int += ((long)pd_ergebnis_roll * Mixer.Motor[i][2]) / 64L; |
// Gier |
if(Mixer.Motor[i][3] == 64) tmp_int += GierMischanteil; |
else if(Mixer.Motor[i][3] == -64) tmp_int -= GierMischanteil; |
else tmp_int += ((long)GierMischanteil * Mixer.Motor[i][3]) / 64L; |
#ifdef REDUNDANT_FC_SLAVE |
tmp_int = (tmp_motorwert[i] + tmp_int) / 2; |
#else |
if(Motor[i].Version & MOTOR_STATE_FAST_MODE || tmp_int > tmp_motorwert[i]) tmp_int = (tmp_motorwert[i] + tmp_int) / 2; // Beschleunigen |
else |
{ // BL-Ctrl 1.0 or 2.0 |
if(EE_Parameter.MotorSmooth == 0) |
{ |
tmp_int = 2 * tmp_int - tmp_motorwert[i]; // original MotorSmoothing |
} |
else // 1 means tmp_int = tmp_int; |
if(EE_Parameter.MotorSmooth > 1) |
{ |
// If >= 2 then allow >= 50% of the intended step down to rapidly reach the intended value. |
tmp_int = tmp_int + ((tmp_motorwert[i] - tmp_int) / EE_Parameter.MotorSmooth); |
} |
} |
#endif |
LIMIT_MIN_MAX(tmp_int,(int) MIN_GAS * 4,(int) MAX_GAS * 4); |
Motor[i].SetPoint = tmp_int / 4; |
Motor[i].SetPointLowerBits = (tmp_int % 4)<<1; // (3 bits total) |
tmp_motorwert[i] = tmp_int; |
} |
else |
{ |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
} |
} |
#ifdef REDUNDANT_FC_MASTER |
if(Parameter_UserParam6 > 230) Motor[0].SetPoint = 0; |
#endif |
} |
//DebugOut.Analog[16] |
/tags/V2.06a/fc.h |
---|
0,0 → 1,154 |
/*####################################################################################### |
Flight Control |
#######################################################################################*/ |
#ifndef _FC_H |
#define _FC_H |
//#define GIER_GRAD_FAKTOR 1291L // Abhängigkeit zwischen GyroIntegral und Winkel |
//#define GIER_GRAD_FAKTOR 1160L |
extern long GIER_GRAD_FAKTOR; // Abhängigkeit zwischen GyroIntegral und Winkel |
#define STICK_GAIN 4 |
#define ACC_AMPLIFY 6 |
#define HEIGHT_CONTROL_STICKTHRESHOLD 15 |
// FC_StatusFlags |
#define FC_STATUS_MOTOR_RUN 0x01 |
#define FC_STATUS_FLY 0x02 |
#define FC_STATUS_CALIBRATE 0x04 |
#define FC_STATUS_START 0x08 |
#define FC_STATUS_EMERGENCY_LANDING 0x10 |
#define FC_STATUS_LOWBAT 0x20 |
#define FC_STATUS_VARIO_TRIM_UP 0x40 |
#define FC_STATUS_VARIO_TRIM_DOWN 0x80 |
// FC_StatusFlags2 |
#define FC_STATUS2_CAREFREE 0x01 |
#define FC_STATUS2_ALTITUDE_CONTROL 0x02 |
#define FC_STATUS2_RC_FAILSAVE_ACTIVE 0x04 |
#define FC_STATUS2_OUT1_ACTIVE 0x08 |
#define FC_STATUS2_OUT2_ACTIVE 0x10 |
#define FC_STATUS2_WAIT_FOR_TAKEOFF 0x20 // Motor Running, but still on the ground |
#define FC_STATUS2_AUTO_STARTING 0x40 |
#define FC_STATUS2_AUTO_LANDING 0x80 |
//NC_To_FC_Flags |
#define NC_TO_FC_FLYING_RANGE 0x01 |
#define NC_TO_FC_EMERGENCY_LANDING 0x02 |
#define NC_TO_FC_AUTOSTART 0x04 |
#define NC_TO_FC_AUTOLANDING 0x08 // not used |
extern volatile unsigned char FC_StatusFlags, FC_StatusFlags2; |
extern void ParameterZuordnung(void); |
extern unsigned char GetChannelValue(unsigned char ch); // gives the unsigned value of the channel |
#define Poti1 Poti[0] |
#define Poti2 Poti[1] |
#define Poti3 Poti[2] |
#define Poti4 Poti[3] |
#define Poti5 Poti[4] |
#define Poti6 Poti[5] |
#define Poti7 Poti[6] |
#define Poti8 Poti[7] |
#define LIMIT_MIN(value, min) {if(value <= min) value = min;} |
#define LIMIT_MAX(value, max) {if(value >= max) value = max;} |
#define LIMIT_MIN_MAX(value, min, max) {if(value <= min) value = min; else if(value >= max) value = max;} |
#define CHK_POTI(b,a) {if(a < 248) b = a; else b = Poti[255 - a];} |
#define CHK_POTI_OFF(b,a,off) {if(a < 248) b = a; else b = Poti[255 - a] - off;} |
#define CHK_POTI_MM(b,a,min,max) {CHK_POTI(b,a); LIMIT_MIN_MAX(b, min, max);} |
#define CHK_POTI_MM_OFF(b,a,min,max,off) {CHK_POTI_OFF(b,a,off); LIMIT_MIN_MAX(b, min, max);} |
extern unsigned char Sekunde,Minute; |
extern unsigned int BaroExpandActive; |
extern long IntegralNick,IntegralNick2; |
extern long IntegralRoll,IntegralRoll2; |
//extern int IntegralNick,IntegralNick2; |
//extern int IntegralRoll,IntegralRoll2; |
extern unsigned char Poti[9]; |
extern long Mess_IntegralNick,Mess_IntegralNick2; |
extern long Mess_IntegralRoll,Mess_IntegralRoll2; |
extern long IntegralAccNick,IntegralAccRoll; |
extern long SummeNick,SummeRoll; |
extern volatile long Mess_Integral_Hoch; |
extern long Integral_Gier,Mess_Integral_Gier,Mess_Integral_Gier2; |
extern int KompassValue; |
extern int KompassSollWert; |
extern int KompassRichtung; |
extern char CalculateCompassTimer; |
extern unsigned char KompassFusion; |
extern unsigned char ControlHeading; |
extern int TrimNick, TrimRoll; |
extern long ErsatzKompass; |
extern int ErsatzKompassInGrad,CompassCorrected; // Kompasswert in Grad |
extern long HoehenWert; |
extern long SollHoehe; |
extern long FromNC_AltitudeSetpoint; |
extern unsigned char FromNC_AltitudeSpeed; |
extern unsigned char Parameter_HoehenSchalter; // Wert : 0-250 |
extern unsigned char CareFree; |
extern int MesswertNick,MesswertRoll,MesswertGier; |
extern int AdNeutralNick,AdNeutralRoll,AdNeutralGier, Mittelwert_AccNick, Mittelwert_AccRoll; |
extern unsigned int NeutralAccX, NeutralAccY; |
extern unsigned char HoehenReglerAktiv; |
extern int NeutralAccZ; |
extern signed char NeutralAccZfine; |
extern long Umschlag180Nick, Umschlag180Roll; |
extern signed int ExternStickNick,ExternStickRoll,ExternStickGier; |
extern unsigned char Parameter_UserParam1,Parameter_UserParam2,Parameter_UserParam3,Parameter_UserParam4,Parameter_UserParam5,Parameter_UserParam6,Parameter_UserParam7,Parameter_UserParam8; |
extern int NaviAccNick,NaviAccRoll,NaviCntAcc; |
extern unsigned int modell_fliegt; |
extern void MotorRegler(void); |
extern void SendMotorData(void); |
//void CalibrierMittelwert(void); |
//void Mittelwert(void); |
extern unsigned char SetNeutral(unsigned char AccAdjustment); // retuns: "sucess" |
extern void Piep(unsigned char Anzahl, unsigned int dauer); |
extern void CopyDebugValues(void); |
extern unsigned char ACC_AltitudeControl; |
extern signed int CosAttitude; // for projection of hoover gas |
extern unsigned char h,m,s; |
extern int StickNick,StickRoll,StickGier,StickGas; |
extern volatile unsigned char Timeout ; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern int DiffNick,DiffRoll; |
//extern int Poti1, Poti2, Poti3, Poti4; |
extern volatile unsigned char SenderOkay; |
extern int StickNick,StickRoll,StickGier; |
extern char MotorenEin; |
extern unsigned char CalibrationDone; |
extern unsigned char Parameter_Servo3,Parameter_Servo4,Parameter_Servo5; |
extern char VarioCharacter; |
extern signed int AltitudeSetpointTrimming; |
extern signed char WaypointTrimming; |
extern int HoverGas; |
extern unsigned char Parameter_Luftdruck_D; |
//extern unsigned char Parameter_MaxHoehe; |
extern unsigned char Parameter_Hoehe_P; |
extern unsigned char Parameter_Hoehe_ACC_Wirkung; |
extern unsigned char Parameter_KompassWirkung; |
extern unsigned char Parameter_Gyro_P; |
extern unsigned char Parameter_Gyro_I; |
extern unsigned char Parameter_Gier_P; |
extern unsigned char Parameter_ServoNickControl; |
extern unsigned char Parameter_ServoRollControl; |
extern unsigned char Parameter_ServoNickComp; |
extern unsigned char Parameter_ServoRollComp; |
extern unsigned char Parameter_AchsKopplung1; |
extern unsigned char Parameter_AchsKopplung2; |
//extern unsigned char Parameter_AchsGegenKopplung1; |
extern unsigned char Parameter_J16Bitmask; // for the J16 Output |
extern unsigned char Parameter_J16Timing; // for the J16 Output |
extern unsigned char Parameter_J17Bitmask; // for the J17 Output |
extern unsigned char Parameter_J17Timing; // for the J17 Output |
extern unsigned char Parameter_GlobalConfig; |
extern unsigned char Parameter_ExtraConfig; |
extern signed char MixerTable[MAX_MOTORS][4]; |
extern const signed char sintab[31]; |
extern unsigned char LowVoltageLandingActive; |
extern unsigned char LowVoltageHomeActive; |
extern unsigned char Parameter_MaximumAltitude; |
#endif //_FC_H |
/tags/V2.06a/flight.pnproj |
---|
0,0 → 1,0 |
<Project name="Flight-Ctrl"><File path="uart.h"></File><File path="jeti.h"></File><File path="main.c"></File><File path="main.h"></File><File path="makefile"></File><File path="uart.c"></File><File path="printf_P.h"></File><File path="timer0.c"></File><File path="timer0.h"></File><File path="old_macros.h"></File><File path="twimaster.c"></File><File path="version.txt"></File><File path="twimaster.h"></File><File path="rc.c"></File><File path="rc.h"></File><File path="fc.h"></File><File path="menu.h"></File><File path="menu.c"></File><File path="_Settings.h"></File><File path="analog.c"></File><File path="analog.h"></File><File path="GPS.c"></File><File path="gps.h"></File><File path="License.txt"></File><File path="spi.h"></File><File path="spi.c"></File><File path="led.h"></File><File path="led.c"></File><File path="fc.c"></File><File path="mymath.c"></File><File path="mymath.h"></File><File path="isqrt.S"></File><File path="Spektrum.c"></File><File path="Spektrum.h"></File><File path="eeprom.h"></File><File path="eeprom.c"></File><File path="libfc.h"></File><File path="debug.c"></File><File path="debug.h"></File><File path="hottmenu.c"></File><File path="hottmenu.h"></File></Project> |
/tags/V2.06a/flight.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd> |
/tags/V2.06a/gps.h |
---|
0,0 → 1,3 |
extern signed int GPS_Nick; |
extern signed int GPS_Roll; |
extern unsigned char GPS_Aid_StickMultiplikator; |
/tags/V2.06a/hottmenu.c |
---|
0,0 → 1,1067 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "libfc.h" |
#include "printf_P.h" |
#include "main.h" |
#include "spi.h" |
#include "capacity.h" |
unsigned char NaviData_WaypointIndex = 0; |
unsigned char NaviData_WaypointNumber = 0, NaviData_TargetHoldTime = 0, ToNC_Load_WP_List = 0, NaviData_MaxWpListIndex = 0; |
unsigned char ToNC_Load_SingePoint = 0, ToNC_Store_SingePoint = 0; |
char WPL_Name[10];// = {" \0"}; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#define HoTT_printf(format, args...) { _printf_P(&LIBFC_HoTT_Putchar, PSTR(format) , ## args);} |
#define HoTT_printfxy(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar, PSTR(format) , ## args);} |
#define HoTT_printfxy_INV(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar_INV, PSTR(format) , ## args);} |
#define HoTT_printfxy_BLINK(x,y,format, args...) { LIBFC_HoTT_SetPos(y * 21 + x); _printf_P(&LIBFC_HoTT_Putchar_BLINK, PSTR(format) , ## args);} |
#define HoTT_printf_BLINK(format, args...) { _printf_P(&LIBFC_HoTT_Putchar_BLINK, PSTR(format) , ## args);} |
#define HoTT_printf_INV(format, args...) { _printf_P(&LIBFC_HoTT_Putchar_INV, PSTR(format) , ## args);} |
#define VOICE_MINIMALE_EINGANSSPANNUNG 16 |
#define VOICE_BEEP 5 |
#define HoTT_GRAD 96 |
#define HoTT_LINKS 123 |
#define HoTT_RECHTS 124 |
#define HoTT_OBEN 125 |
#define HoTT_UNTEN 126 |
#define HOTT_KEY_RIGHT 1 |
#define HOTT_KEY_DOWN 2 |
#define HOTT_KEY_UP 4 |
#define HOTT_KEY_SET 6 |
#define HOTT_KEY_LEFT 8 |
#define VARIO_ZERO 30000 |
unsigned int NaviData_TargetDistance = 0; |
unsigned char MaxBlTemperture = 0; |
unsigned char MinBlTemperture = 0; |
unsigned char HottestBl = 0; |
GPSPacket_t GPSPacket; |
VarioPacket_t VarioPacket; |
ASCIIPacket_t ASCIIPacket; |
ElectricAirPacket_t ElectricAirPacket; |
HoTTGeneral_t HoTTGeneral; |
unsigned char SpeakHoTT = SPEAK_MIKROKOPTER; |
unsigned char ToNC_SpeakHoTT = 0, ShowSettingNameTime = 0; |
int HoTTVarioMeter = 0; |
const char PROGMEM MIKROKOPTER[] = {" MikroKopter "}; |
const char PROGMEM UNDERVOLTAGE[] = {" !! LiPo voltage !! "}; |
const char PROGMEM LANDING[] = {" !! LANDING !! "}; |
const char PROGMEM SETTING[] = {"Set :"}; |
const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17] = |
{ |
//0123456789123456 |
"No Error \0", // 0 |
"Not compatible \0", // 1 |
"MK3Mag not compa\0", // 2 |
"No FC communicat\0", // 3 |
"Compass communic\0", // 4 |
"GPS communicatio\0", // 5 |
"compass value \0", // 6 |
"RC Signal lost \0", // 7 |
"FC spi rx error \0", // 8 |
"No NC communicat\0", // 9 |
"FC Nick Gyro \0", // 10 |
"FC Roll Gyro \0", // 11 |
"FC Yaw Gyro \0", // 12 |
"FC Nick ACC \0", // 13 |
"FC Roll ACC \0", // 14 |
"FC Z-ACC \0", // 15 |
"Pressure sensor \0", // 16 |
"I2C FC->BL-Ctrl \0", // 17 |
"Bl Missing \0", // 18 |
"Mixer Error \0", // 19 |
"Carefree Error \0", // 20 |
"GPS Fix lost \0", // 21 |
"Magnet Error \0", // 22 |
"Motor restart \0", // 23 |
"BL Limitation \0", // 24 |
"GPS Range \0", // 25 |
"No SD-Card \0", // 26 |
"SD-Logging error\0", // 27 |
"Flying range! \0", // 28 |
"Max Altitude! \0", // 29 |
"No GPS fix \0", // 30 |
"compass not cal.\0", // 31 |
"BL-Selftest \0", // 32 |
"no ext. compass \0", // 33 |
"compass sensor \0" // 34 |
}; |
const char PROGMEM HOTT_ERROR[MAX_ERR_NUMBER][2] = |
{ // 1 -> only in flight 0 -> also on ground |
//0123456789123456 |
{0,0},// "No Error \0", // 0 |
{SPEAK_ERROR,0}, // "Not compatible \0", // 1 |
{SPEAK_ERROR,0}, // "MK3Mag not compa\0", // 2 |
{SPEAK_ERR_NAVI,1}, // "No FC communicat\0", // 3 |
{SPEAK_ERR_COMPASS,1}, // "MK3Mag communica\0", // 4 |
{SPEAK_ERR_GPS,0}, // "GPS communicatio\0", // 5 |
{SPEAK_ERR_COMPASS,1}, // "compass value \0", // 6 |
{SPEAK_ERR_RECEICER,0},// "RC Signal lost \0", // 7 |
{SPEAK_ERR_NAVI,0}, // "FC spi rx error \0", // 8 |
{SPEAK_ERR_NAVI,0}, // "No NC communicat\0", // 9 |
{SPEAK_ERR_SENSOR,0}, // "FC Nick Gyro \0", // 10 |
{SPEAK_ERR_SENSOR,0}, // "FC Roll Gyro \0", // 11 |
{SPEAK_ERR_SENSOR,0}, // "FC Yaw Gyro \0", // 12 |
{SPEAK_ERR_SENSOR,0}, // "FC Nick ACC \0", // 13 |
{SPEAK_ERR_SENSOR,0}, // "FC Roll ACC \0", // 14 |
{SPEAK_ERR_SENSOR,0}, // "FC Z-ACC \0", // 15 |
{SPEAK_ERR_SENSOR,0}, // "Pressure sensor \0", // 16 |
{SPEAK_ERR_DATABUS,1}, // "I2C FC->BL-Ctrl \0", // 17 |
{SPEAK_ERR_DATABUS,1}, // "Bl Missing \0", // 18 |
{SPEAK_ERROR,0}, // "Mixer Error \0", // 19 |
{SPEAK_CF_OFF,1}, // "Carefree Error \0", // 20 |
{SPEAK_GPS_FIX,1}, // "GPS Fix lost \0", // 21 |
{SPEAK_ERR_COMPASS,0}, // "Magnet Error \0", // 22 |
{SPEAK_ERR_MOTOR,1}, // "Motor restart \0", // 23 |
{SPEAK_MAX_TEMPERAT,1},// "BL Limitation \0", // 24 |
{SPEAK_MAX_RANGE,1}, // "GPS Range \0", // 25 |
{SPEAK_ERROR,1}, // "No SD-Card \0", // 26 |
{SPEAK_ERROR,1}, // "SD-Logging error\0", // 27 |
{SPEAK_MAX_RANGE,1}, // "Flying range! \0", // 28 |
{SPEAK_MAX_ALTITUD,1}, // "Max Altitude! \0" // 29 |
{SPEAK_GPS_FIX,1}, // "No GPS fix \0" // 30 |
{SPEAK_ERR_CALIBARTION,0},// "compass not cal." // 31 |
{SPEAK_ERR_MOTOR,0}, // "BL-Selftest \0" // 32 |
{SPEAK_ERR_COMPASS,0}, // "no ext. compass" // 33 |
{SPEAK_ERR_COMPASS,0} // "compass sensor" // 34 |
}; |
void GetHottestBl(void) |
{ |
static unsigned char search = 0,tmp_max,tmp_min,who; |
if(Motor[search].Temperature > tmp_max) { tmp_max = Motor[search].Temperature; who = search;} |
else |
if(Motor[search].Temperature) if(Motor[search].Temperature < tmp_min) tmp_min = Motor[search].Temperature; |
if(++search >= MAX_MOTORS) |
{ |
search = 0; |
if(tmp_min != 255) MinBlTemperture = tmp_min; else MinBlTemperture = 0; |
MaxBlTemperture = tmp_max; |
HottestBl = who; |
tmp_min = 255; |
tmp_max = 0; |
who = 0; |
} |
} |
//--------------------------------------------------------------- |
void Hott_ClearLine(unsigned char line) |
{ |
HoTT_printfxy(0,line," "); |
} |
//--------------------------------------------------------------- |
unsigned char HoTT_Waring(void) |
{ |
unsigned char status = 0; |
static char old_status = 0; |
static int repeat; |
//if(Parameter_UserParam1) return(Parameter_UserParam1); |
ToNC_SpeakHoTT = SpeakHoTT; |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
{ |
if(LowVoltageLandingActive && (EE_Parameter.Receiver == RECEIVER_HOTT)) status = SPEAK_LANDING; |
else status = VOICE_MINIMALE_EINGANSSPANNUNG; // Jeti hat kein wort: "LANDEN" |
if(SpeakHoTT && old_status == VOICE_MINIMALE_EINGANSSPANNUNG) status = SpeakHoTT; // das soll auch noch durch kommen |
} |
else |
if(NC_ErrorCode && NC_ErrorCode < MAX_ERR_NUMBER) // Fehlercodes |
{ |
if(MotorenEin || !pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][1])) status = pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][0]); |
} |
if(!status) // Sprachansagen |
{ |
// if(!(GetParamByte(PID_SPEAK_HOTT_CFG) & 0x01)) SpeakHoTT = 0; // is the voice wanted? |
if(!(EE_Parameter.GlobalConfig3 & CFG3_SPEAK_ALL)) SpeakHoTT = 0; // is the voice wanted? |
else status = SpeakHoTT; |
} |
else ToNC_SpeakHoTT = status; |
if(old_status == status) // Gleichen Fehler nur alle 4 sek bringen |
{ |
if(!CheckDelay(repeat)) return(0); |
repeat = SetDelay(4000); |
} |
else repeat = SetDelay(2000); |
if(status) |
{ |
if(status == SpeakHoTT) SpeakHoTT = 0; |
} |
old_status = status; |
// DebugOut.Analog[16] = status; |
return(status); |
} |
/* |
unsigned char HoTTErrorCode(void) |
{ |
return(NC_ErrorCode); |
} |
*/ |
//--------------------------------------------------------------- |
void NC_Fills_HoTT_Telemety(void) |
{ |
unsigned char *ptr = NULL; |
unsigned char max = 0,i,z; |
switch(FromNaviCtrl.Param.Byte[11]) |
{ |
case HOTT_VARIO_PACKET_ID: |
ptr = (unsigned char *) &VarioPacket; |
max = sizeof(VarioPacket); |
break; |
case HOTT_GPS_PACKET_ID: |
ptr = (unsigned char *) &GPSPacket; |
max = sizeof(GPSPacket); |
break; |
case HOTT_ELECTRIC_AIR_PACKET_ID: |
ptr = (unsigned char *) &ElectricAirPacket; |
max = sizeof(ElectricAirPacket); |
break; |
case HOTT_GENERAL_PACKET_ID: |
ptr = (unsigned char *) &HoTTGeneral; |
max = sizeof(HoTTGeneral); |
break; |
case JETI_GPS_PACKET_ID1: |
ptr = (unsigned char *) &JetiExData[14].Value; |
max = sizeof(JetiExData[14].Value); |
break; |
case JETI_GPS_PACKET_ID2: |
ptr = (unsigned char *) &JetiExData[15].Value; |
max = sizeof(JetiExData[15].Value); |
break; |
case HOTT_WPL_NAME: |
ptr = (unsigned char *) WPL_Name; |
max = sizeof(WPL_Name)-1; |
break; |
} |
z = FromNaviCtrl.Param.Byte[0]; // Data allocation |
for(i=0; i < FromNaviCtrl.Param.Byte[1]; i++) |
{ |
if(z >= max) break; |
ptr[z] = FromNaviCtrl.Param.Byte[2+i]; |
z++; |
} |
} |
unsigned int BuildHoTT_Vario(void) |
{ |
unsigned int tmp = VARIO_ZERO; |
if(VarioCharacter == '+' || VarioCharacter == '-') |
{ |
tmp = VARIO_ZERO + (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 3; |
if(tmp < VARIO_ZERO && tmp > VARIO_ZERO - 50) tmp = VARIO_ZERO - 50; // weil es sonst erst bei < 0,5m/sek piept |
} |
else |
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY)) |
{ |
tmp = VARIO_ZERO + HoTTVarioMeter; |
if(tmp > VARIO_ZERO) |
{ |
if(tmp < VARIO_ZERO + 100) tmp = VARIO_ZERO; |
else tmp -= 100; |
} |
if(tmp < VARIO_ZERO) |
{ |
if(tmp > VARIO_ZERO - 100) tmp = VARIO_ZERO; |
else tmp += 100; |
} |
} |
else |
if(VarioCharacter == '^') tmp = VARIO_ZERO + FromNC_AltitudeSpeed * 10; |
else |
if(VarioCharacter == 'v') tmp = VARIO_ZERO - FromNC_AltitudeSpeed * 10; |
return(tmp); |
} |
//--------------------------------------------------------------- |
unsigned char HoTT_Telemety(unsigned char packet_request) |
{ |
unsigned char i; |
//Debug("rqst: %02X",packet_request); |
switch(packet_request) |
{ |
case HOTT_VARIO_PACKET_ID: |
GPSPacket.WarnBeep = HoTT_Waring(); // Achtung: das ist richtig hier, damit der Varioton schon vorher abgestellt wird |
VarioPacket.Altitude = HoehenWert/100 + 500; |
if(!GPSPacket.WarnBeep) VarioPacket.m_sec = BuildHoTT_Vario(); else VarioPacket.m_sec = VARIO_ZERO; |
VarioPacket.m_3sec = VarioPacket.m_sec; |
VarioPacket.m_10sec = VarioPacket.m_sec; |
if (VarioPacket.Altitude < VarioPacket.MinAltitude) VarioPacket.MinAltitude = VarioPacket.Altitude; |
if (VarioPacket.Altitude > VarioPacket.MaxAltitude) VarioPacket.MaxAltitude = VarioPacket.Altitude; |
VarioPacket.WarnBeep = 0;//HoTT_Waring(); |
HoTT_DataPointer = (unsigned char *) &VarioPacket; |
VarioPacket.FreeCharacters[0] = VarioCharacter; |
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) VarioPacket.FreeCharacters[1] = 'C'; else VarioPacket.FreeCharacters[1] = ' '; |
// VarioPacket.FreeCharacters[2] = ' '; |
if(NC_ErrorCode) |
{ |
VarioPacket.Text[0] = NC_ErrorCode/10 + '0'; |
VarioPacket.Text[1] = NC_ErrorCode%10 + '0'; |
VarioPacket.Text[2] = ':'; |
for(i=0; i<16;i++) VarioPacket.Text[i+3] = pgm_read_byte(&NC_ERROR_TEXT[NC_ErrorCode][i]); |
VarioPacket.Text[19] = ' '; |
VarioPacket.Text[20] = ' '; |
} |
else |
if(LowVoltageLandingActive) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&LANDING[i]); // no Error |
else |
if(FC_StatusFlags & FC_STATUS_LOWBAT) for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&UNDERVOLTAGE[i]); // no Error |
else |
if(ShowSettingNameTime) // no Error |
{ |
for(i=0; i<sizeof(SETTING);i++) VarioPacket.Text[i] = pgm_read_byte(&SETTING[i]); |
VarioPacket.Text[4] = '0' + ActiveParamSet; |
for(i=0; i<sizeof(EE_Parameter.Name);i++) VarioPacket.Text[i+7] = EE_Parameter.Name[i]; // no Error |
VarioPacket.Text[18] = ' '; |
VarioPacket.Text[19] = ' '; |
VarioPacket.Text[20] = ' '; |
} |
else |
if(NaviData_WaypointNumber) |
{ |
unsigned int tmp_int; |
unsigned char tmp; |
VarioPacket.Text[0] = 'W'; VarioPacket.Text[1] = 'P'; |
VarioPacket.Text[2] = ' '; |
VarioPacket.Text[3] = '0'+(NaviData_WaypointIndex) / 10; |
VarioPacket.Text[4] = '0'+(NaviData_WaypointIndex) % 10; |
VarioPacket.Text[5] = '/'; |
VarioPacket.Text[6] = '0'+(NaviData_WaypointNumber) / 10; |
VarioPacket.Text[7] = '0'+(NaviData_WaypointNumber) % 10; |
VarioPacket.Text[8] = ' '; |
tmp_int = NaviData_TargetDistance; |
if(tmp_int > 1000) { VarioPacket.Text[9] = '0'+(tmp_int) / 1000; tmp_int %= 1000;} |
else VarioPacket.Text[9] = ' '; |
if(tmp_int > 100) { VarioPacket.Text[10] = '0'+(tmp_int) / 100; tmp_int %= 100;} |
else VarioPacket.Text[10] = ' '; |
VarioPacket.Text[11] = '0'+(tmp_int) / 10; |
VarioPacket.Text[12] = '0'+(tmp_int) % 10; |
VarioPacket.Text[13] = 'm'; |
VarioPacket.Text[14] = ' '; |
tmp = NaviData_TargetHoldTime; |
if(tmp > 100) { VarioPacket.Text[15] = '0'+(tmp) / 100; tmp %= 100;} else VarioPacket.Text[15] = ' '; |
VarioPacket.Text[16] = '0'+(tmp) / 10; |
VarioPacket.Text[17] = '0'+(tmp) % 10; |
VarioPacket.Text[18] = 's'; |
VarioPacket.Text[19] = ' '; |
VarioPacket.Text[20] = ' '; |
} |
else |
if(!CalibrationDone) |
{ |
for(i=0; i<17;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i+2]); // no Error and not calibrated |
VarioPacket.Text[16] = '0'+VERSION_MAJOR; |
VarioPacket.Text[17] = '.'; |
VarioPacket.Text[18] = '0'+VERSION_MINOR/10; |
VarioPacket.Text[19] = '0'+VERSION_MINOR%10; |
VarioPacket.Text[20] = 'a'+VERSION_PATCH; |
} |
else |
{ |
for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error |
if(RedundanceBlOperation) VarioPacket.Text[0] = 'R'; |
} |
return(sizeof(VarioPacket)); |
break; |
case HOTT_GPS_PACKET_ID: |
GPSPacket.Altitude = HoehenWert/100 + 500; |
// GPSPacket.Distance = GPSInfo.HomeDistance/10; // macht die NC |
// GPSPacket.Heading = GPSInfo.HomeBearing/2; // macht die NC |
// GPSPacket.Speed = (GPSInfo.Speed * 36) / 10; // macht die NC |
// GPSPacket.WarnBeep = HoTT_Waring(); //(wird jetzt weiter oben gemacht) |
if(!GPSPacket.WarnBeep) GPSPacket.m_sec = BuildHoTT_Vario(); else GPSPacket.m_sec = VARIO_ZERO; |
GPSPacket.m_3sec = 120; |
GPSPacket.NumOfSats = GPSInfo.NumOfSats; |
if(GPSInfo.Flags & FLAG_DIFFSOLN) GPSPacket.SatFix = 'D'; |
else |
if(GPSInfo.SatFix == SATFIX_3D) GPSPacket.SatFix = ' '; |
else GPSPacket.SatFix = '!'; |
HoTT_DataPointer = (unsigned char *) &GPSPacket; |
GPSPacket.FreeCharacters[0] = NC_GPS_ModeCharacter; |
GPSPacket.FreeCharacters[2] = GPSPacket.SatFix; |
GPSPacket.HomeDirection = GPSInfo.HomeBearing / 2;//230; |
return(sizeof(GPSPacket)); |
break; |
case HOTT_ELECTRIC_AIR_PACKET_ID: |
GetHottestBl(); |
ElectricAirPacket.Altitude = HoehenWert/100 + 500; |
ElectricAirPacket.Battery1 = UBat; |
ElectricAirPacket.Battery2 = UBat; |
ElectricAirPacket.VoltageCell1 = CompassCorrected / 2; |
ElectricAirPacket.VoltageCell8 = ElectricAirPacket.VoltageCell1; |
ElectricAirPacket.VoltageCell6 = GPSInfo.HomeBearing / 2; |
ElectricAirPacket.VoltageCell7 = GPSInfo.HomeDistance/20; |
ElectricAirPacket.VoltageCell13 = ElectricAirPacket.VoltageCell6; |
ElectricAirPacket.VoltageCell14 = ElectricAirPacket.VoltageCell7; |
if(!GPSPacket.WarnBeep) ElectricAirPacket.m_sec = BuildHoTT_Vario(); else ElectricAirPacket.m_sec = VARIO_ZERO; |
ElectricAirPacket.m_3sec = 120; |
ElectricAirPacket.InputVoltage = UBat; |
ElectricAirPacket.Temperature1 = MinBlTemperture + 20; |
ElectricAirPacket.Temperature2 = MaxBlTemperture + 20; |
ElectricAirPacket.Capacity = Capacity.UsedCapacity/10; |
// ElectricAirPacket.WarnBeep = 0;//HoTT_Waring(); |
ElectricAirPacket.WarnBeep = GPSPacket.WarnBeep; |
ElectricAirPacket.Current = Capacity.ActualCurrent; |
HoTT_DataPointer = (unsigned char *) &ElectricAirPacket; |
ElectricAirPacket.FlightTimeMinutes = FlugSekunden / 60; |
ElectricAirPacket.FlightTimeSeconds = FlugSekunden % 60; |
return(sizeof(ElectricAirPacket)); |
break; |
case HOTT_GENERAL_PACKET_ID: |
GetHottestBl(); |
HoTTGeneral.Rpm = GPSInfo.HomeDistance/100; |
HoTTGeneral.VoltageCell1 = CompassCorrected / 2; |
HoTTGeneral.VoltageCell2 = KompassValue / 2; |
//HoTTGeneral.VoltageCell3 = Magnetstaerke -> macht NC |
//HoTTGeneral.VoltageCell4 = Inclinition -> macht NC |
HoTTGeneral.VoltageCell5 = DebugOut.Analog[28]; // I2C ErrorCounter |
HoTTGeneral.VoltageCell6 = GPSInfo.HomeBearing / 2; |
if(UBat > BattLowVoltageWarning + 2) HoTTGeneral.FuelPercent = (UBat - (BattLowVoltageWarning + 2)) * 3; |
else HoTTGeneral.FuelPercent = 0; |
if(HoTTGeneral.FuelPercent > 100) HoTTGeneral.FuelPercent = 100; |
HoTTGeneral.FuelCapacity = NC_ErrorCode;//HoehenWert/100; // Oelpegel |
// if(HoTTGeneral.FuelCapacity < 0) HoTTGeneral.FuelCapacity = 0; |
HoTTGeneral.Altitude = HoehenWert/100 + 500; |
HoTTGeneral.Battery1 = UBat; |
HoTTGeneral.Battery2 = UBat; |
if(!GPSPacket.WarnBeep) HoTTGeneral.m_sec = BuildHoTT_Vario(); else HoTTGeneral.m_sec = VARIO_ZERO; |
HoTTGeneral.m_3sec = 120 + GPSPacket.WarnBeep; |
HoTTGeneral.InputVoltage = UBat; |
HoTTGeneral.Temperature1 = MinBlTemperture + 20; |
HoTTGeneral.Temperature2 = MaxBlTemperture + 20; |
HoTTGeneral.Capacity = Capacity.UsedCapacity/10; |
HoTTGeneral.WarnBeep = 0;//HoTT_Waring(); |
HoTTGeneral.Current = Capacity.ActualCurrent; |
//HoTTGeneral.ErrorNumber = HoTTErrorCode(); |
HoTT_DataPointer = (unsigned char *) &HoTTGeneral; |
return(sizeof(HoTTGeneral)); |
break; |
default: return(0); |
} |
} |
//--------------------------------------------------------------- |
void HoTT_Menu(void) |
{ |
static unsigned char line, page = 0,show_current = 0,show_mag = 0, show_poti = 0; |
unsigned char tmp; |
HoTTVarioMeter = (HoTTVarioMeter * 7 + VarioMeter) / 8; |
// if(HottKeyboard) {beeptime = 1000;}; |
switch(page) |
{ |
case 0: |
switch(line++) |
{ |
case 0: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,0," %2i.%1iV ",UBat/10, UBat%10) |
else |
HoTT_printfxy(0,0," %2i.%1iV ",UBat/10, UBat%10) |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,0,"ALT:%4im %c", (int16_t)(HoehenWert/100),VarioCharacter) |
else HoTT_printfxy(10,0,"ALT:%4im ", (int16_t)(HoehenWert/100)) |
} |
else HoTT_printfxy(10,0,"ALT:---- "); |
break; |
case 1: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60) |
else HoTT_printfxy(0,1," %2i:%02i ",FlugSekunden/60,FlugSekunden%60); |
HoTT_printfxy(10,1,"DIR: %3d%c",CompassCorrected, HoTT_GRAD); |
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(20,1,"C") else HoTT_printfxy(20,1," "); |
break; |
case 2: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,2," %5i ",Capacity.UsedCapacity) |
else HoTT_printfxy(0,2," %5i ",Capacity.UsedCapacity); |
HoTT_printfxy(12,2,"I:%2i.%1iA ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10); |
break; |
case 3: |
HoTT_printfxy(9,0,":"); |
HoTT_printfxy(9,1,":"); |
HoTT_printfxy(9,2,":"); |
HoTT_printfxy(0,3,"---------+-----------"); |
// HoTT_printfxy(0,3,"---------------------"); |
HoTT_printfxy(0,6,"---------------------"); |
break; |
case 4: |
if(NaviDataOkay) |
{ |
HoTT_printfxy(9,4,":"); |
HoTT_printfxy(0,4,"SAT:%2d ",GPSInfo.NumOfSats); |
HoTT_printfxy(10,4,"DIST:%3dm",GPSInfo.HomeDistance/10); |
switch (GPSInfo.SatFix) |
{ |
case SATFIX_3D: |
if(GPSInfo.Flags & FLAG_DIFFSOLN) HoTT_printfxy(7,4,"D ") |
else HoTT_printfxy(7,4,"3D"); |
break; |
default: |
HoTT_printfxy_BLINK(7,4,"!!"); |
break; |
} |
} |
else |
{ |
Hott_ClearLine(4); |
} |
break; |
case 5: |
if(NaviDataOkay) |
{ |
if(show_mag) |
{ |
HoTT_printfxy(0,5,"MAG:%3u%% ",EarthMagneticField); |
HoTT_printfxy(12,5,"HM:%3d%c %c", GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter); |
HoTT_printfxy(9,5,"incl:%2d%c(%2i)",EarthMagneticInclination, HoTT_GRAD,EarthMagneticInclinationTheoretic); |
} |
else |
{ |
HoTT_printfxy(0,5," %2um/s: HM:%3d%c %c",GPSInfo.Speed, GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter); |
} |
} |
else Hott_ClearLine(5); |
break; |
case 6: |
break; |
case 7: if(NC_ErrorCode) |
{ |
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER) |
{ |
Hott_ClearLine(7); |
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode); |
} |
else |
{ |
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);}; |
} |
else |
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!") |
else HoTT_printfxy(0,7," www.MikroKopter.de "); |
break; |
case 8: //ASCIIPacket.WarnBeep = HoTT_Waring(); |
// ASCIIPacket.WarnBeep = Parameter_UserParam1; |
case 9: |
case 10: |
case 11: |
case 12: |
case 13: |
case 14: |
case 15: |
case 16: |
if(HottKeyboard == HOTT_KEY_DOWN) { LIBFC_HoTT_Clear(); page = 5; line = 0;} |
else |
if(HottKeyboard == HOTT_KEY_SET) { if(show_mag) show_mag = 0; else show_mag = 1;} |
else |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 1; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 1: |
switch(line++) |
{ |
case 0: |
if(FC_StatusFlags & FC_STATUS_LOWBAT) |
HoTT_printfxy_BLINK(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity) |
else HoTT_printfxy(0,0," %2i:%02i %2i.%1iV %4imAh",FlugSekunden/60,FlugSekunden%60,UBat/10, UBat%10,Capacity.UsedCapacity); |
break; |
case 1: |
HoTT_printfxy(0,1,"DIR:%3d%c",CompassCorrected, HoTT_GRAD); |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
if(HoehenReglerAktiv) HoTT_printfxy_INV(10,1,"ALT:%4im", (int16_t)(HoehenWert/100)) |
else HoTT_printfxy(10,1,"ALT:%4im", (int16_t)(HoehenWert/100)) |
} |
else HoTT_printfxy(10,1,"ALT:---- "); |
HoTT_printfxy(20,1,"%c",VarioCharacter); |
break; |
case 2: |
if(NaviDataOkay) |
{ |
HoTT_printfxy(1,2,"HM:%3d%c DIST:%3dm %c", GPSInfo.HomeBearing, HoTT_GRAD, GPSInfo.HomeDistance/10, NC_GPS_ModeCharacter); |
} |
else |
{ |
Hott_ClearLine(2); |
} |
break; |
case 3: |
HoTT_printfxy(0,3,"PWR:%2i.%1iA (%iW) ",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10,Capacity.ActualPower); |
if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) HoTT_printfxy_INV(19,3,"CF") else HoTT_printfxy(19,3," "); |
break; |
case 4: |
if(NaviDataOkay) |
{ |
HoTT_printfxy(0,4,"GPS:%2um/s SAT:%d ",GPSInfo.Speed,GPSInfo.NumOfSats); |
switch (GPSInfo.SatFix) |
{ |
case SATFIX_3D: |
HoTT_printfxy(16,4," 3D "); |
break; |
//case SATFIX_2D: |
//case SATFIX_NONE: |
default: |
HoTT_printfxy_BLINK(16,4,"NOFIX"); |
break; |
} |
if(GPSInfo.Flags & FLAG_DIFFSOLN) |
{ |
HoTT_printfxy(16,4,"DGPS "); |
} |
} |
else |
{ //012345678901234567890 |
HoTT_printfxy(0,4," No NaviCtrl "); |
} |
break; |
case 5: |
if(show_current) |
{ |
// HoTT_printfxy(0,5,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[0].Current/10,Motor[0].Current%10,Motor[1].Current/10,Motor[1].Current%10,Motor[2].Current/10,Motor[2].Current%10,Motor[3].Current/10,Motor[3].Current%10); |
HoTT_printfxy(0,5,"%2i.%i %2i.%i %2i.%i %2i.%iA", BL3_Current(0)/10,BL3_Current(0)%10,BL3_Current(1)/10,BL3_Current(1)%10,BL3_Current(2)/10,BL3_Current(2)%10,BL3_Current(3)/10,BL3_Current(3)%10); |
} |
else |
{ |
HoTT_printfxy(0,5,"%3i %3i %3i %3i%cC", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature,HoTT_GRAD); |
} |
break; |
case 6: |
if(show_current) |
{ |
if(RequiredMotors == 4) Hott_ClearLine(6); |
else |
// if(RequiredMotors == 6) HoTT_printfxy(0,6,"%2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10) |
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%2i.%i %2i.%iA", BL3_Current(4)/10,BL3_Current(4)%10, BL3_Current(5)/10,BL3_Current(5)%10) |
else |
// if(RequiredMotors > 6) HoTT_printfxy(0,6,"%2i.%i %2i.%i %2i.%i %2i.%iA", Motor[4].Current/10,Motor[4].Current%10,Motor[5].Current/10,Motor[5].Current%10,Motor[6].Current/10,Motor[6].Current%10,Motor[7].Current/10,Motor[7].Current%10); |
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%2i.%i %2i.%i %2i.%i %2i.%iA", BL3_Current(4)/10,BL3_Current(4)%10,BL3_Current(5)/10,BL3_Current(5)%10,BL3_Current(6)/10,BL3_Current(6)%10,BL3_Current(7)/10,BL3_Current(7)%10,BL3_Current(8)/10,BL3_Current(8)%10); |
} |
else |
{ |
if(RequiredMotors == 4) Hott_ClearLine(6); |
else |
if(RequiredMotors == 6) HoTT_printfxy(0,6,"%3i %3i%cC ", Motor[4].Temperature, Motor[5].Temperature,HoTT_GRAD) |
else |
if(RequiredMotors > 6) HoTT_printfxy(0,6,"%3i %3i %3i %3i%cC", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature,HoTT_GRAD); |
} |
break; |
case 7: if(NC_ErrorCode) |
{ |
if(HoTTBlink && NC_ErrorCode < MAX_ERR_NUMBER) |
{ |
Hott_ClearLine(7); |
HoTT_printfxy_INV(0,7,"ERR: %2d !",NC_ErrorCode); |
} |
else |
{ |
HoTT_printfxy(0,7,"ERR: "); _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);}; |
} |
else |
if(FC_StatusFlags & FC_STATUS_LOWBAT) HoTT_printfxy(1,7,"!! LiPo voltage !!") |
else HoTT_printfxy(0,7," www.MikroKopter.de "); |
break; |
case 8: // ASCIIPacket.WarnBeep = HoTT_Waring(); |
// ASCIIPacket.WarnBeep = Parameter_UserParam1; |
case 9: |
case 10: |
case 11: |
case 12: |
case 13: |
case 14: |
case 15: |
case 16: |
if(HottKeyboard == HOTT_KEY_SET) { if(show_current) show_current = 0; else show_current = 1; Hott_ClearLine(5); Hott_ClearLine(6);} |
else |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 2; line = 0;} |
else |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 0; line = 0;} |
//if(HottKeyboard) HoTT_printfxy(15,6,"%KEY:%02x ",HottKeyboard); |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 2: |
switch(line++) |
{ |
case 0: |
HoTT_printfxy_INV(0,0,"Setting:%u %s ",ActiveParamSet,EE_Parameter.Name); |
break; |
case 1: HoTT_printfxy(0,1,"Min:%2i.%1iV %s ",BattLowVoltageWarning/10, BattLowVoltageWarning%10, Mixer.Name); |
break; |
case 2: HoTT_printfxy(0,2,"ALT:"); |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
if(!(EE_Parameter.GlobalConfig & CFG_HOEHEN_SCHALTER)) HoTT_printf("POTI:%3u ", Parameter_HoehenSchalter) |
else |
{ |
if(Parameter_HoehenSchalter > 50) HoTT_printf("(ON) ") else HoTT_printf("(OFF) "); |
if((Parameter_ExtraConfig & CFG2_HEIGHT_LIMIT)) HoTT_printf("LIMIT", Parameter_HoehenSchalter) |
else HoTT_printf("VARIO", Parameter_HoehenSchalter); |
} |
} |
else |
HoTT_printf("DISABLED"); |
break; |
case 3: HoTT_printfxy(0,3,"CF:"); |
if(!EE_Parameter.CareFreeChannel) HoTT_printf("DISABLED") |
else |
{ |
if(CareFree) HoTT_printf(" (ON) ") else HoTT_printf(" (OFF)"); |
if(EE_Parameter.ExtraConfig & CFG_LEARNABLE_CAREFREE) HoTT_printf(" TEACH"); |
} |
break; |
case 4: HoTT_printfxy(0,4,"GPS:"); |
if(!(Parameter_GlobalConfig & CFG_GPS_AKTIV)) HoTT_printf("DISABLED") |
else |
{ |
tmp = GetChannelValue(EE_Parameter.NaviGpsModeChannel); |
if(tmp < 50) HoTT_printf("(FREE)") |
else |
if(tmp >= 180) HoTT_printf("(HOME)") |
else |
if(EE_Parameter.ExtraConfig & CFG_GPS_AID) HoTT_printf("(AID) ") |
else HoTT_printf("(HOLD)") |
} |
if(EE_Parameter.FailSafeTime) HoTT_printfxy(10,4," FS:%usek ",EE_Parameter.FailSafeTime) |
break; |
case 5: HoTT_printfxy(0,5,"HOME ALT:"); |
if(EE_Parameter.ComingHomeAltitude) HoTT_printf("%um",EE_Parameter.ComingHomeAltitude) else HoTT_printf("HOLD "); |
break; |
case 6: |
if(!show_poti) |
{ |
HoTT_printfxy(0,6,"Ni:%4i Ro:%4i C:%3i",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]], Parameter_ServoNickControl); |
HoTT_printfxy(0,7,"Gs:%4i Ya:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]); |
} |
else |
{ |
HoTT_printfxy(0,6,"P1:%4i P2:%4i 3:%3i",Poti1,Poti2, Poti3); |
HoTT_printfxy(0,7,"P4:%4i P5:%4i 6:%3i",Poti4,Poti5, Poti6); |
} |
break; |
case 7: //HoTT_printfxy(0,6,"WARNINGS:"); |
if(HoTTBlink) |
{ |
LIBFC_HoTT_SetPos(6 * 21); |
if(!(Parameter_GlobalConfig & CFG_ACHSENKOPPLUNG_AKTIV)) HoTT_printf_BLINK("COUPLING OFF! "); |
if(EE_Parameter.BitConfig & (CFG_LOOP_LINKS | CFG_LOOP_RECHTS | CFG_LOOP_UNTEN | CFG_LOOP_OBEN)) HoTT_printf_BLINK("LOOPING! "); |
if(Parameter_GlobalConfig & CFG_HEADING_HOLD) HoTT_printf_BLINK("HH! "); |
if(!(Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) HoTT_printf_BLINK("COMPASS OFF! "); |
} |
break; |
case 8: //ASCIIPacket.WarnBeep = HoTT_Waring(); |
break; |
case 9: |
case 10: |
case 11: |
case 12: |
case 13: |
case 14: |
case 15: |
case 16: |
if(HottKeyboard == HOTT_KEY_SET) { if(show_poti) show_poti = 0; else show_poti = 1; Hott_ClearLine(6); Hott_ClearLine(7);} |
else |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 3; line = 0;} |
else |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 1; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 3: |
switch(line++) |
{ |
static unsigned char load_waypoint_tmp2 = 1, changed2; |
case 0: |
HoTT_printfxy(0,0,"Load Waypoints"); |
HoTT_printfxy(0,1,"(Relative Positions)"); |
// HoTT_printfxy(0,1,"(Absolute)"); |
break; |
case 1: |
if(NaviData_WaypointNumber) HoTT_printfxy(0,6,"Active WP:%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
else HoTT_printfxy(0,6,"No WPs active ") |
break; |
case 2: |
HoTT_printfxy(0,7,"%2i.%1iV ",UBat/10, UBat%10) |
HoTT_printfxy(11,7,"%s",WPL_Name) |
case 3: |
case 4: |
case 5: |
if(load_waypoint_tmp2) |
{ |
if(changed2 && HoTTBlink) HoTT_printfxy(10,3," ") |
else HoTT_printfxy(10,3,"%2i ",load_waypoint_tmp2); |
HoTT_printfxy(0,3,"Load list:") |
} |
else |
{ |
HoTT_printfxy(0,3,"Load list: -- "); |
} |
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,4,"No SD-Card ") |
else |
{ |
if(GPSInfo.SatFix == SATFIX_3D) |
{ |
if(changed2 && load_waypoint_tmp2) HoTT_printfxy(0,4,"(Set -> Load)") |
else HoTT_printfxy(0,4," "); |
if(HottKeyboard == HOTT_KEY_SET) { if(load_waypoint_tmp2) ToNC_Load_WP_List = load_waypoint_tmp2 | 128; changed2 = 0;} |
} else HoTT_printfxy(0,4,"!No GPS-Fix! "); |
} |
if(HottKeyboard == HOTT_KEY_UP && load_waypoint_tmp2 < NaviData_MaxWpListIndex) { changed2 = 1; load_waypoint_tmp2++;HoTTBlink = 0;} |
if(HottKeyboard == HOTT_KEY_DOWN && load_waypoint_tmp2 > 1) { changed2 = 1; load_waypoint_tmp2--;HoTTBlink = 0;}; |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page = 4; line = 0;} |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page = 2; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 4: |
switch(line++) |
{ |
static unsigned char load_waypoint_tmp = 1, changed; |
case 0: |
HoTT_printfxy(0,0,"Load Waypoints"); |
HoTT_printfxy(0,1,"(Fixed Positions)"); |
break; |
case 1: |
if(NaviData_WaypointNumber) HoTT_printfxy(0,6,"Active WP:%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
else HoTT_printfxy(0,6,"No WPs active ") |
break; |
case 2: |
HoTT_printfxy(0,7,"%2i.%1iV ",UBat/10, UBat%10) |
HoTT_printfxy(11,7,"%s",WPL_Name) |
case 3: |
case 4: |
case 5: |
HoTT_printfxy(0,3,"Load list:") |
if(load_waypoint_tmp) |
{ |
if(changed && HoTTBlink) HoTT_printfxy(10,3," ") |
else HoTT_printfxy(10,3,"%2d (FIX)",load_waypoint_tmp); |
} |
else |
{ |
HoTT_printfxy(10,3," --") |
} |
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,4,"No SD-Card ") |
else |
{ |
if(changed && load_waypoint_tmp) HoTT_printfxy(0,4,"(Set -> Load)") |
else HoTT_printfxy(0,4," "); |
} |
if(HottKeyboard == HOTT_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { changed = 1; load_waypoint_tmp++; HoTTBlink = 0;} |
if(HottKeyboard == HOTT_KEY_DOWN && load_waypoint_tmp > 1) { changed = 1; load_waypoint_tmp--; HoTTBlink = 0;}; |
if(HottKeyboard == HOTT_KEY_SET) { if(load_waypoint_tmp) ToNC_Load_WP_List = load_waypoint_tmp; changed = 0;} |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page++; line = 0;} |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page--; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 5: |
switch(line++) |
{ |
static unsigned char wp_tmp, changed; |
case 0: |
HoTT_printfxy(0,0,"Store single Position"); |
// HoTT_printfxy(0,1,"(Fixed Positions)"); |
break; |
case 1: |
HoTT_printfxy(0,2," %2i.%1iV ",UBat/10, UBat%10) |
HoTT_printfxy(0,3," %2i:%02i ",FlugSekunden/60,FlugSekunden%60); |
// HoTT_printfxy(0,4,"Dist:%3dm",NaviData_TargetDistance) |
break; |
case 2: |
HoTT_printfxy(11,2,"ALT:%4im", (int16_t)(HoehenWert/100)) |
HoTT_printfxy(11,3,"DIR: %3d%c",CompassCorrected, HoTT_GRAD); |
HoTT_printfxy(11,4,"Cam: %3i",Parameter_ServoNickControl); |
break; |
case 3: |
case 4: |
case 5: |
HoTT_printfxy(0,6,"Store point:") |
if(wp_tmp) |
{ |
if(changed && HoTTBlink) HoTT_printfxy(13,6," ") |
else HoTT_printfxy(13,6,"%2d ",wp_tmp); |
} |
else |
{ |
HoTT_printfxy(13,6,"--") |
} |
if(GPSInfo.SatFix == SATFIX_3D) |
{ |
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,7,"No SD-Card ") |
else |
{ |
if(changed && wp_tmp) HoTT_printfxy(0,7,"(Set -> Store)") |
else Hott_ClearLine(7); |
} |
if(HottKeyboard == HOTT_KEY_SET) { if(wp_tmp) ToNC_Store_SingePoint = wp_tmp; changed = 0;} |
} |
else HoTT_printfxy(0,7,"!No GPS-Fix! "); |
if(HottKeyboard == HOTT_KEY_UP && wp_tmp < NaviData_MaxWpListIndex) { changed = 1; wp_tmp++; HoTTBlink = 0;} |
if(HottKeyboard == HOTT_KEY_DOWN && wp_tmp > 1) { changed = 1; wp_tmp--; HoTTBlink = 0;}; |
if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page++; line = 0;} |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page--; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
case 6: |
switch(line++) |
{ |
static unsigned char wp_tmp, changed; |
case 0: |
HoTT_printfxy(0,0,"Load single Position"); |
// HoTT_printfxy(0,1,"(Fixed Positions)"); |
break; |
case 1: |
HoTT_printfxy(0,2," %2i.%1iV ",UBat/10, UBat%10) |
HoTT_printfxy(0,3," %2i:%02i ",FlugSekunden/60,FlugSekunden%60); |
// HoTT_printfxy(0,4,"Dist:%3dm",NaviData_TargetDistance) |
if(NaviData_WaypointNumber) HoTT_printfxy(0,5,"WP:%2d/%d Dist:%3dm ",NaviData_WaypointIndex,NaviData_WaypointNumber,NaviData_TargetDistance) |
else Hott_ClearLine(5); |
break; |
case 2: |
if(FromNC_AltitudeSpeed) |
HoTT_printfxy(8,2,"ALT:%4i/%im ", (int16_t)(HoehenWert/100),(int16_t)(FromNC_AltitudeSetpoint/100)) |
else |
HoTT_printfxy(8,2,"ALT:%4im ",(int16_t)(HoehenWert/100)) |
HoTT_printfxy(8,3,"DIR: %3d%c",CompassCorrected, HoTT_GRAD); |
HoTT_printfxy(8,4,"Cam: %3i",Parameter_ServoNickControl); |
break; |
// HoTT_printfxy(11,7,"%s",WPL_Name) |
case 3: |
case 4: |
case 5: |
if(HottKeyboard) DebugOut.Analog[17]++; |
HoTT_printfxy(0,6,"load point:") |
if(wp_tmp) |
{ |
if(changed && HoTTBlink) HoTT_printfxy(11,6," ") |
else HoTT_printfxy(11,6,"%2d",wp_tmp); |
} |
else |
{ |
HoTT_printfxy(11,6,"--") |
} |
if(NaviData_MaxWpListIndex == 0) HoTT_printfxy(0,7,"No SD-Card ") |
else |
{ |
if(changed && wp_tmp) HoTT_printfxy(0,7,"(Set -> Load)") |
else |
{ |
Hott_ClearLine(7); |
if(NaviData_WaypointNumber) HoTT_printfxy(0,7,"%s",WPL_Name); |
} |
} |
if(HottKeyboard == HOTT_KEY_UP && wp_tmp < NaviData_MaxWpListIndex) { changed = 1; wp_tmp++; HoTTBlink = 0;} |
if(HottKeyboard == HOTT_KEY_DOWN && wp_tmp > 1) { changed = 1; wp_tmp--; HoTTBlink = 0;}; |
if(HottKeyboard == HOTT_KEY_SET) { if(wp_tmp) ToNC_Load_SingePoint = wp_tmp; changed = 0;} |
// if(HottKeyboard == HOTT_KEY_LEFT) { LIBFC_HoTT_Clear(); page++; line = 0;} |
if(HottKeyboard == HOTT_KEY_RIGHT) { LIBFC_HoTT_Clear(); page--; line = 0;}; |
HottKeyboard = 0; |
break; |
default: line = 0; |
break; |
} |
break; |
default: page = 0; |
break; |
} |
} |
#endif |
/tags/V2.06a/hottmenu.h |
---|
0,0 → 1,239 |
#ifndef _HOTTMENU_H |
#define _HOTTMENU_H |
extern unsigned char NaviData_WaypointIndex; |
extern unsigned char NaviData_WaypointNumber, NaviData_TargetHoldTime,ToNC_Load_WP_List,NaviData_MaxWpListIndex; |
extern unsigned char ToNC_Load_SingePoint, ToNC_Store_SingePoint; |
extern char WPL_Name[10]; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#define SPEAK_ERR_CALIBARTION 1 |
#define SPEAK_ERR_RECEICER 2 |
#define SPEAK_ERR_DATABUS 3 |
#define SPEAK_ERR_NAVI 4 |
#define SPEAK_ERROR 5 |
#define SPEAK_ERR_COMPASS 6 |
#define SPEAK_ERR_SENSOR 7 |
#define SPEAK_ERR_GPS 8 |
#define SPEAK_ERR_MOTOR 9 |
#define SPEAK_MAX_TEMPERAT 10 |
#define SPEAK_ALTI_REACHED 11 |
#define SPEAK_WP_REACHED 12 |
#define SPEAK_NEXT_WP 13 |
#define SPEAK_LANDING 14 |
#define SPEAK_GPS_FIX 15 |
#define SPEAK_UNDERVOLTAGE 16 |
#define SPEAK_GPS_HOLD 17 |
#define SPEAK_GPS_HOME 18 |
#define SPEAK_GPS_OFF 19 |
#define SPEAK_BEEP 20 |
#define SPEAK_MIKROKOPTER 21 |
#define SPEAK_CAPACITY 22 |
#define SPEAK_CF_OFF 23 |
#define SPEAK_CALIBRATE 24 |
#define SPEAK_MAX_RANGE 25 |
#define SPEAK_MAX_ALTITUD 26 |
#define SPEAK_MK_OFF 38 |
#define SPEAK_ALTITUDE_ON 39 |
#define SPEAK_ALTITUDE_OFF 40 |
#define SPEAK_CF_ON 46 |
#define SPEAK_SINKING 47 |
#define SPEAK_RISING 48 |
#define SPEAK_HOLDING 49 |
#define SPEAK_GPS_ON 50 |
#define SPEAK_FOLLWING 51 |
#define SPEAK_STARTING 52 |
#define MAX_ERR_NUMBER (34+1) |
extern const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17]; |
extern unsigned int NaviData_TargetDistance; |
extern unsigned char MaxBlTemperture; |
extern unsigned char MinBlTemperture; |
extern unsigned char HottestBl; |
extern unsigned char HottKeyboard,HoTT_RequestedSensor; |
extern unsigned char HottUpdate(unsigned char key); |
extern unsigned char SpeakHoTT,ShowSettingNameTime; |
extern unsigned char ToNC_SpeakHoTT; |
extern volatile unsigned char *HoTT_DataPointer; |
extern void CreateHoTT_Menu(void); |
extern void LIBFC_HoTT_Putchar(char); |
extern void LIBFC_HoTT_Putchar_INV(char); // print Invers |
extern void LIBFC_HoTT_Putchar_BLINK(char); |
extern void LIBFC_HoTT_SetPos(unsigned char); |
extern void LIBFC_HoTT_Clear(void); |
extern void NC_Fills_HoTT_Telemety(void); |
extern void HoTT_Menu(void); |
extern unsigned char HoTT_Telemety(unsigned char); |
extern unsigned char HoTT_Waring(void); |
extern volatile unsigned char HoTTBlink; |
extern void GetHottestBl(void); |
typedef struct |
{ |
unsigned char StartByte; // 0x7C |
unsigned char Packet_ID; // HOTT_GENERAL_PACKET_ID |
unsigned char WarnBeep; // 3 Anzahl der Töne 0..36 |
unsigned char SensorID; // 4 0xD0 |
unsigned char InverseStatus1; // 5 |
unsigned char InverseStatus2; // 6 |
unsigned char VoltageCell1; // 7 208 = 4,16V (Voltage * 50 = Wert) |
unsigned char VoltageCell2; // 8 209 = 4,18V |
unsigned char VoltageCell3; // 9 |
unsigned char VoltageCell4; // 10 |
unsigned char VoltageCell5; // 11 |
unsigned char VoltageCell6; // 12 |
unsigned int Battery1; // 13+14 51 = 5,1V |
unsigned int Battery2; // 15+16 51 = 5,1V |
unsigned char Temperature1; // 17 44 = 24°C, 0 = -20°C |
unsigned char Temperature2; // 18 44 = 24°C, 0 = -20°C |
unsigned char FuelPercent; // 19 |
signed int FuelCapacity; // 20+21 |
unsigned int Rpm; // 22+23 |
signed int Altitude; // 24+25 |
unsigned int m_sec; // 26+27 3000 = 0 |
unsigned char m_3sec; // 28 120 = 0 |
unsigned int Current; // 29+30 1 = 0.1A |
unsigned int InputVoltage; // 31+32 66 = 6,6V |
unsigned int Capacity; // 33+34 1 = 10mAh |
unsigned int Speed; // 35+36 |
unsigned char LowestCellVoltage; // 37 |
unsigned char LowestCellNumber; // 38 |
unsigned int Rpm2; // 39+40 |
unsigned char ErrorNumber; // 41 |
unsigned char Pressure; // 42 in 0,1bar 20=2,0bar |
unsigned char Version; // 43 |
unsigned char EndByte; // 0x7D |
} HoTTGeneral_t; |
typedef struct |
{ |
unsigned char StartByte; // 0x7C |
unsigned char Packet_ID; // HOTT_ELECTRIC_AIR_PACKET_ID |
unsigned char WarnBeep; // Anzahl der Töne 0..36 |
unsigned char SensorID; // 4 0xE0 |
unsigned char InverseStatus1; // 5 |
unsigned char InverseStatus2; // 6 |
unsigned char VoltageCell1; // 7 208 = 4,16V (Voltage * 50 = Wert) |
unsigned char VoltageCell2; // 209 = 4,18V |
unsigned char VoltageCell3; // |
unsigned char VoltageCell4; // |
unsigned char VoltageCell5; // |
unsigned char VoltageCell6; // |
unsigned char VoltageCell7; // |
unsigned char VoltageCell8; // |
unsigned char VoltageCell9; // |
unsigned char VoltageCell10; // |
unsigned char VoltageCell11; // |
unsigned char VoltageCell12; // |
unsigned char VoltageCell13; // |
unsigned char VoltageCell14; // 20 |
unsigned int Battery1; // 21+22 51 = 5,1V |
unsigned int Battery2; // 23+24 51 = 5,1V |
unsigned char Temperature1; // 25 44 = 24°C, 0 = -20°C |
unsigned char Temperature2; // 26 44 = 24°C, 0 = -20°C |
signed int Altitude; // 27+28 |
unsigned int Current; // 29+30 1 = 0.1A |
unsigned int InputVoltage; // 31+32 66 = 6,6V |
unsigned int Capacity; // 33+34 1 = 10mAh |
unsigned int m_sec; // 35+36 30000 = 0 |
unsigned char m_3sec; // 37 120 = 0 |
unsigned int Rpm; // 38+39 |
unsigned char FlightTimeMinutes; // 40 |
unsigned char FlightTimeSeconds; // 41 |
unsigned char Speed; // 42 1=2km |
unsigned char Version; // 43 0x00 |
unsigned char EndByte; // 0x7D |
} ElectricAirPacket_t; |
typedef struct |
{ |
unsigned char StartByte; // 0x7C |
unsigned char Packet_ID; // 0x89 - Vario ID |
unsigned char WarnBeep; //3 // Anzahl der Töne 0..36 |
unsigned char SensorID; // 0x90 |
unsigned char InverseStatus; |
signed int Altitude; //6+7 // 500 = 0m |
signed int MaxAltitude; //8+9 // 500 = 0m |
signed int MinAltitude; //10+11 // 500 = 0m |
unsigned int m_sec; //12+13 // 3000 = 0 |
unsigned int m_3sec; //14+15 |
unsigned int m_10sec; //26+17 |
char Text[21]; //18-38 |
char FreeCharacters[3]; // 39-41 |
unsigned char NullByte; // 42 0x00 |
unsigned char Version; // 43 |
unsigned char EndByte; // 0x7D |
} VarioPacket_t; |
typedef struct |
{ |
unsigned char StartByte; //0 // 0x7C |
unsigned char Packet_ID; //1 // 0x8A - GPS ID |
unsigned char WarnBeep; //2 // Anzahl der Töne 0..36 |
unsigned char SensorID; // 4 0xA0 |
unsigned char InverseStatus1; // 5 |
unsigned char InverseStatus2; // 6 |
unsigned char Heading; //7 // 1 = 2° |
unsigned int Speed; //8+9 // in km/h |
unsigned char Lat_North; //10 |
unsigned char Lat_G; //11 |
unsigned char Lat_M; //12 |
unsigned char Lat_Sek1; //13 |
unsigned char Lat_Sek2; //14 |
unsigned char Lon_East; //15 |
unsigned char Lon_G; //16 |
unsigned char Lon_M; //17 |
unsigned char Lon_Sek1; //18 |
unsigned char Lon_Sek2; //19 |
unsigned int Distance; //20+21 // 9000 = 0m |
signed int Altitude; //22+23 // 500 = 0m |
unsigned int m_sec; //24+25 // 3000 = 0 |
unsigned char m_3sec; //26 120 = 0 |
unsigned char NumOfSats; //27 |
unsigned char SatFix; //28 |
unsigned char HomeDirection; // 29 |
unsigned char AngleX; // 30 |
unsigned char AngleY; // 31 |
unsigned char AngleZ; // 32 |
signed int GyroX; //33+34 |
signed int GyroY; //35+36 |
signed int GyroZ; //37+38 |
unsigned char Vibration; // 39 |
char FreeCharacters[3]; // 40-42 |
unsigned char Version; // 43 |
unsigned char EndByte; // 0x7D |
} GPSPacket_t; |
typedef struct |
{ |
unsigned char StartByte; // 0x7B |
unsigned char Packet_ID; // |
unsigned char WarnBeep; // Anzahl der Töne 0..36 |
char Text[8*21]; |
unsigned char EndByte; // 0x7D |
} ASCIIPacket_t; |
extern GPSPacket_t GPSPacket; |
extern VarioPacket_t VarioPacket; |
extern ASCIIPacket_t ASCIIPacket; |
extern ElectricAirPacket_t ElectricAirPacket; |
extern HoTTGeneral_t HoTTGeneral; |
#define HOTT_VARIO_PACKET_ID 0x89 |
#define HOTT_GPS_PACKET_ID 0x8A |
#define HOTT_ELECTRIC_AIR_PACKET_ID 0x8E |
#define HOTT_GENERAL_PACKET_ID 0x8D |
#define JETI_GPS_PACKET_ID1 0x01 |
#define JETI_GPS_PACKET_ID2 0x02 |
#define HOTT_WPL_NAME 0x03 |
#endif |
#endif |
/tags/V2.06a/isqrt.S |
---|
0,0 → 1,203 |
;-----------------------------------------------------------------------------; |
; Fast integer squareroot routines for avr-gcc project (C)ChaN, 2008 |
; http://elm-chan.org/docs/avrlib/sqrt32.S |
;-----------------------------------------------------------------------------; |
; uint16_t isqrt32 (uint32_t n); |
; uint8_t isqrt16 (uint16_t n); |
; uint16_t ihypot (int16_t x, int16_t y); |
;-----------------------------------------------------------------------------: |
; 32bit integer squareroot |
;-----------------------------------------------------------------------------; |
; uint16_t isqrt32 ( |
; uint32_t n |
; ); |
; |
; Return Value: |
; Squareroot of n. |
; |
; Size = 53 words |
; Clock = 532..548 cycles |
; Stack = 0 byte |
.global isqrt32 |
.func isqrt32 |
isqrt32: |
clr r0 |
clr r18 |
clr r19 |
clr r20 |
ldi r21, 1 |
clr r27 |
clr r30 |
clr r31 |
ldi r26, 16 |
1: lsl r22 |
rol r23 |
rol r24 |
rol r25 |
rol r0 |
rol r18 |
rol r19 |
rol r20 |
lsl r22 |
rol r23 |
rol r24 |
rol r25 |
rol r0 |
rol r18 |
rol r19 |
rol r20 |
brpl 2f |
add r0, r21 |
adc r18, r27 |
adc r19, r30 |
adc r20, r31 |
rjmp 3f |
2: sub r0, r21 |
sbc r18, r27 |
sbc r19, r30 |
sbc r20, r31 |
3: lsl r21 |
rol r27 |
rol r30 |
andi r21, 0b11111000 |
ori r21, 0b00000101 |
sbrc r20, 7 |
subi r21, 2 |
dec r26 |
brne 1b |
lsr r30 |
ror r27 |
ror r21 |
lsr r30 |
ror r27 |
ror r21 |
mov r24, r21 |
mov r25, r27 |
ret |
.endfunc |
;-----------------------------------------------------------------------------: |
; 16bit integer squareroot |
;-----------------------------------------------------------------------------; |
; uint8_t isqrt16 ( |
; uint16_t n |
; ); |
; |
; Return Value: |
; Squareroot of n. |
; |
; Size = 33 words |
; Clock = 181..189 cycles |
; Stack = 0 byte |
.global isqrt16 |
.func isqrt16 |
isqrt16: |
clr r18 |
clr r19 |
ldi r20, 1 |
clr r21 |
ldi r22, 8 |
1: lsl r24 |
rol r25 |
rol r18 |
rol r19 |
lsl r24 |
rol r25 |
rol r18 |
rol r19 |
brpl 2f |
add r18, r20 |
adc r19, r21 |
rjmp 3f |
2: sub r18, r20 |
sbc r19, r21 |
3: lsl r20 |
rol r21 |
andi r20, 0b11111000 |
ori r20, 0b00000101 |
sbrc r19, 7 |
subi r20, 2 |
dec r22 |
brne 1b |
lsr r21 |
ror r20 |
lsr r21 |
ror r20 |
mov r24, r20 |
ret |
.endfunc |
;-----------------------------------------------------------------------------: |
; 16bit integer hypot (megaAVR is required) |
;-----------------------------------------------------------------------------; |
; uint16_t ihypot ( |
; int16_t x, |
; int16_t y |
; ); |
; |
; Return Value: |
; Squareroot of (x*x + y*y) |
; |
; Size = 42 words |
; Clock = 581..597 cycles |
; Stack = 0 byte |
.global ihypot |
.func ihypot |
ihypot: |
clr r26 |
sbrs r25, 7 |
rjmp 1f |
com r24 |
com r25 |
adc r24, r26 |
adc r25, r26 |
1: sbrs r23, 7 |
rjmp 2f |
com r22 |
com r23 |
adc r22, r26 |
adc r23, r26 |
2: mul r22, r22 |
movw r18, r0 |
mul r23, r23 |
movw r20, r0 |
mul r22, r23 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
mul r24, r24 |
movw r30, r0 |
mul r25, r25 |
add r18, r30 |
adc r19, r31 |
adc r20, r0 |
adc r21, r1 |
mul r24, r25 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
add r19, r0 |
adc r20, r1 |
adc r21, r26 |
movw r24, r20 |
movw r22, r18 |
clr r1 |
rjmp isqrt32 |
.endfunc |
/tags/V2.06a/isqrt.h |
---|
0,0 → 1,11 |
#ifndef _ISQRT_H |
#define _ISQRT_H |
#include <inttypes.h> |
// coded in assembler file |
extern uint16_t isqrt32(uint32_t n); |
extern uint8_t isqrt16(uint16_t n); |
extern uint16_t ihypot(int16_t x, int16_t y); |
#endif // _ISQRT_H |
/tags/V2.06a/jeti_ex.c |
---|
0,0 → 1,144 |
#include "libfc.h" |
#include "printf_P.h" |
#include "main.h" |
#include "spi.h" |
#include "capacity.h" |
#include "jeti_ex.h" |
#include "hottmenu.h" |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
const char PROGMEM JETI_CODE[53] = |
{ |
0, // 0 |
'O', // SPEAK_ERR_CALIBARTION 1 |
'P', // SPEAK_ERR_RECEICER 2 |
'Q', // SPEAK_ERR_DATABUS 3 |
'R', // SPEAK_ERR_NAVI 4 |
'S', // SPEAK_ERROR 5 |
'T', // SPEAK_ERR_COMPASS 6 |
'S', // SPEAK_ERR_SENSOR 7 |
'V', // SPEAK_ERR_GPS 8 |
'W', // SPEAK_ERR_MOTOR 9 |
'H', // SPEAK_MAX_TEMPERAT 10 |
0, // SPEAK_ALTI_REACHED 11 |
'X', // SPEAK_WP_REACHED 12 |
'Y', // SPEAK_NEXT_WP 13 |
0, // SPEAK_LANDING 14 |
'Z', // SPEAK_GPS_FIX 15 |
'U', // SPEAK_UNDERVOLTAGE 16 |
'E', // SPEAK_GPS_HOLD 17 |
'F', // SPEAK_GPS_HOME 18 |
'G', // SPEAK_GPS_OFF 19 |
'H', // SPEAK_BEEP 20 |
'A', // SPEAK_MIKROKOPTER 21 |
0, // SPEAK_CAPACITY 22 |
'I', // SPEAK_CF_OFF 23 |
'B', // SPEAK_CALIBRATE 24 |
'J', // SPEAK_MAX_RANGE 25 |
'J', // SPEAK_MAX_ALTITUD 26 |
0, // 27 |
0, // 28 |
0, // 29 |
0, // 30 |
0, // 31 |
0, // 32 |
0, // 33 |
0, // 34 |
0, // 35 |
0, // 36 |
0, // 37 |
'D', // SPEAK_MK_OFF 38 |
'L', // SPEAK_ALTITUDE_ON 39 |
'M', // SPEAK_ALTITUDE_OFF 40 |
0, // 41 |
0, // 42 |
0, // 43 |
0, // 44 |
0, // 45 |
'N', // SPEAK_CF_ON 46 |
0, // SPEAK_SINKING 47 |
0, // SPEAK_RISING 48 |
0, // SPEAK_HOLDING 49 |
'K', // SPEAK_GPS_ON 50 |
0, // SPEAK_FOLLWING 51 |
'C' // SPEAK_STARTING 52 |
}; |
JetiExPacket_t JetiExData[JETI_EX_PARAMETER_COUNT + 1] = // Parameter count + DeviceName (ID0) |
{ |
// Label[10] unit[3], data type, Data , position of decimal point |
// "1234567890", "123", |
// { "-=.M_K.=-" , " ", 1, 0 , 0 }, // first one is device name // datatype 1 = -8192...8192 |
{ "MK " , " ", 1, 0 , 0 }, // first one is device name // datatype 1 = -8192...8192 |
{ "Voltage " , "V ", 1, 0 , 1 }, // ID 1 |
{ "Current " , "A ", 1, 0 , 1 }, // ID 2 |
{ "Capacity " , "Ah ", 1, 0 , 2 }, // ID 3 |
{ "Altitude " , "m ", 1, 0 , 0 }, // ID 4 |
{ "Compass " , "° ", 1, 0 , 0 }, // ID 5 |
{ "Sats " , " ", 1, 0 , 0 }, // ID 6 |
{ "Speed " , "m/s", 1, 0 , 0 }, // ID 7 |
{ "Distance " , "m ", 1, 0 , 0 }, // ID 8 |
{ "Home-Dir " , "° ", 1, 0 , 0 }, // ID 9 |
{ "max.Temp. " , "°C ", 1, 0 , 0 }, // ID 10 |
{ "Magn.field" , "% ", 1, 0 , 0 }, // ID 11 |
{ "Vario " , " ", 1, 0 , 0 }, // ID 12 |
{ "ErrorCode " , " ", 1, 0 , 0 }, // ID 13 |
{ "Latitude " , " ", 9, 0 , 0 }, // ID 14 special data type for coordinates Import: fixed position in list ID 14 - DO NOT MOVE !!! |
{ "Longitude " , " ", 9, 0 , 0 }, // ID 15 special data type for coordinates Import: fixed position in list ID 15 - DO NOT MOVE !!! |
}; |
void BuildJeti_Vario(void) |
{ |
signed int tmp = 0; |
static signed int JetiVarioMeter = 0; |
JetiVarioMeter = (JetiVarioMeter * 3 + VarioMeter) / 4; |
if(VarioCharacter == '+') |
{ |
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 + 5; |
} |
else |
if(VarioCharacter == '-') |
{ |
tmp = (AltitudeSetpointTrimming * EE_Parameter.Hoehe_Verstaerkung) / 32 - 5; |
} |
else |
if((VarioCharacter == ' ') && (FC_StatusFlags & FC_STATUS_FLY)) |
{ |
tmp = (JetiVarioMeter/32); |
} |
else |
if(VarioCharacter == '^') tmp = FromNC_AltitudeSpeed; |
else |
if(VarioCharacter == 'v') tmp = tmp - FromNC_AltitudeSpeed; |
JetiExData[12].Value = tmp; |
} |
// -------------------------------------------------------------------------------------------------- |
void JetiEX_Update(void) |
{ |
GetHottestBl(); |
JetiExData[1].Value = UBat; |
JetiExData[2].Value = Capacity.ActualCurrent; |
JetiExData[3].Value = Capacity.UsedCapacity / 10; |
JetiExData[4].Value = HoehenWert / 100; |
JetiExData[5].Value = KompassValue; |
JetiExData[6].Value = GPSInfo.NumOfSats; |
JetiExData[7].Value = GPSInfo.Speed; |
JetiExData[8].Value = GPSInfo.HomeDistance / 10; |
JetiExData[9].Value = GPSInfo.HomeBearing; |
JetiExData[10].Value = MaxBlTemperture; |
JetiExData[11].Value = EarthMagneticField; |
// JetiExData[12].Value = Vario; // wird in BuildJeti_Vario() gemacht |
JetiExData[13].Value = NC_ErrorCode; |
//JetiExData[14].Value = 53 * 0x10000 + 23467; // GPS-Latitude (macht NC_Fills_HoTT_Telemety() ) |
//JetiExData[15].Value = 7 * 0x10000 + 23467; // GPS-Longitude (macht NC_Fills_HoTT_Telemety() ) |
} |
#endif |
/tags/V2.06a/jeti_ex.h |
---|
0,0 → 1,37 |
#ifndef _JETI_EX_H |
#define _JETI_EX_H |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern void BuildJeti_Vario(void); |
// define here how many Jeti EX parameters should be transmitted (max. = 15) |
// |
#define JETI_EX_PARAMETER_COUNT 15 |
// |
// ------------------------------------------------------------------------- |
extern const char PROGMEM JETI_CODE[53]; |
typedef struct |
{ |
char Label[10]; |
char Unit[3]; |
unsigned char DataType; |
long Value; |
unsigned char DecimalPointPos; |
} JetiExPacket_t; |
extern JetiExPacket_t JetiExData[]; |
extern void JetiEX_Update(void); |
#if (JETI_EX_PARAMETER_COUNT > 15) |
#error "ERROR: Too many Jeti EX parameters (max. allowed 15)" |
#endif |
#endif |
#endif //_JETI_EX_H |
/tags/V2.06a/jetimenu.c |
---|
0,0 → 1,456 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "jetimenu.h" |
#include "libfc.h" |
#include "printf_P.h" |
#include "main.h" |
#include "spi.h" |
#include "capacity.h" |
#include "hottmenu.h" |
#define JETIBOX_KEY_RIGHT 0x1F |
#define JETIBOX_KEY_UP 0x2F |
#define JETIBOX_KEY_DOWN 0x4F |
#define JETIBOX_KEY_LEFT 0x8F |
#define JETIBOX_KEY_NONE 0x0F |
#define JETIBOX_KEY_UNDEF 0x00 |
#define JetiBox_printfxy(x,y,format, args...) { LIBFC_JetiBox_SetPos(y * 16 + x); _printf_P(&LIBFC_JetiBox_Putchar, PSTR(format) , ## args);} |
#define JetiBox_printf(format, args...) { _printf_P(&LIBFC_JetiBox_Putchar, PSTR(format) , ## args);} |
// ----------------------------------------------------------- |
// the menu functions |
// ----------------------------------------------------------- |
void Menu_Status(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"%2i.%1iV",UBat/10, UBat%10); |
if(NaviDataOkay) |
{ |
JetiBox_printfxy(6,0,"%3d%c %03dm%c",CompassCorrected, 0xDF, GPSInfo.HomeDistance/10,NC_GPS_ModeCharacter); |
} |
else |
{ |
JetiBox_printfxy(6,0,"Status"); |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(NC_ErrorCode) |
{ |
static unsigned int timer; |
static char toggle = 1; |
if(CheckDelay(timer)) { if(toggle) toggle = 0; else toggle = 1; timer = SetDelay(1500);}; |
if(toggle) |
{ |
LIBFC_JetiBox_SetPos(0); |
_printf_P(&LIBFC_JetiBox_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0); |
} |
else |
{ |
JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode); |
// if(MotorenEin) JetiBeep = 'O'; |
} |
} |
else |
if(ShowSettingNameTime) |
{ |
LIBFC_JetiBox_Clear(); |
JetiBox_printfxy(0,1,"Set%d:%s ",ActiveParamSet,EE_Parameter.Name); |
return; // nichts weiter ausgeben |
} |
#else |
if(NC_ErrorCode) { JetiBox_printfxy(6,0,"ERROR: %2d ",NC_ErrorCode); if(MotorenEin) JetiBeep = 'S';}; |
#endif |
JetiBox_printfxy(0,1,"%4i %2i:%02i",Capacity.UsedCapacity,FlugSekunden/60,FlugSekunden%60); |
if(Parameter_GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
JetiBox_printfxy(10,1,"%4im%c", (int16_t)(HoehenWert/100),VarioCharacter); |
} |
if(RedundanceBlOperation) JetiBox_printfxy(10,1,"R"); |
#endif |
} |
void Menu_Temperature(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"%3i %3i %3i %3i", Motor[0].Temperature, Motor[1].Temperature, Motor[2].Temperature, Motor[3].Temperature); |
JetiBox_printfxy(0,1,"%3i %3i %3i %3i", Motor[4].Temperature, Motor[5].Temperature, Motor[6].Temperature, Motor[7].Temperature); |
if(RequiredMotors <= 4) |
{ |
JetiBox_printfxy(0,1,"Temperatures "); |
} |
else |
if(RequiredMotors <= 6) |
{ |
JetiBox_printfxy(8,1,"\%cC ",0xdf); |
} |
#endif |
} |
void Menu_Battery(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"%2i.%1iV %3i.%1iA", UBat/10, UBat%10, Capacity.ActualCurrent/10, Capacity.ActualCurrent%10); |
JetiBox_printfxy(0,1,"%4iW %6imAh",Capacity.ActualPower, Capacity.UsedCapacity); |
#endif |
} |
void Magnet_Values(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"Magnet:%3i%% %3i%c",EarthMagneticField, KompassValue,0xDF); |
JetiBox_printfxy(0,1,"Incli.:%3i%c (%i) ",EarthMagneticInclination, 0xDF,EarthMagneticInclinationTheoretic); |
#endif |
} |
void Menu_WPL_A1(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"Load Waypoints"); |
JetiBox_printfxy(0,1,"(Fixed) "); |
#endif |
} |
void Menu_WPL_R1(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
JetiBox_printfxy(0,0,"Load Waypoints"); |
JetiBox_printfxy(0,1,"(Relative) "); |
#endif |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
void Menu_POINT_LD(uint8_t key) |
{ //0123456789ABCDEF |
JetiBox_printfxy(0,0,"Load singl.Point"); |
// JetiBox_printfxy(0,1,"(Fixed) "); |
} |
#endif |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
void Menu_POINT_SV(uint8_t key) |
{ //0123456789ABCDEF |
JetiBox_printfxy(0,0,"Save singl.Point"); |
// JetiBox_printfxy(0,1,"(Relative) "); |
} |
#endif |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
void Menu_POINT_SV2(uint8_t key) |
{ //0123456789ABCDEF |
static unsigned char load_waypoint_tmp = 1, changed; |
// if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"Relative WPs ") |
// else JetiBox_printfxy(0,0,"Rel:%s",WPL_Name); |
JetiBox_printfxy(0,0,"Save Point:"); |
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card") |
else |
if(GPSInfo.SatFix != SATFIX_3D) JetiBox_printfxy(0,1,"no GPS-Fix") |
else |
{ |
JetiBox_printfxy(11,0,"%2d",load_waypoint_tmp); |
// if(NaviData_WaypointNumber) JetiBox_printfxy(8,1,"%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
// else JetiBox_printfxy(8,1,"--/--") |
JetiBox_printfxy(0,1,"Dir:%3d Alt:%3dm",CompassCorrected,(int16_t)(HoehenWert/100)) |
if(changed) JetiBox_printfxy(14,0,"->") |
else JetiBox_printfxy(14,0," "); |
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;} |
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; } |
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp) |
{ |
ToNC_Store_SingePoint = load_waypoint_tmp; |
changed = 0; |
} |
} |
} |
#endif |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
void Menu_POINT_LD2(uint8_t key) |
{ //0123456789ABCDEF |
static unsigned char load_waypoint_tmp = 1, changed; |
// if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"FIX Waypoints") |
// else JetiBox_printfxy(0,0,"FIX:%s",WPL_Name); |
JetiBox_printfxy(0,0,"Load Point") |
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card") |
else |
{ |
JetiBox_printfxy(11,0,"%2d",load_waypoint_tmp); |
if(NaviData_WaypointNumber) JetiBox_printfxy(0,1,"Dist:%3d Alt:%3d ",NaviData_TargetDistance,(int16_t)(FromNC_AltitudeSetpoint/100)) |
else JetiBox_printfxy(8,1," "); |
if(changed) JetiBox_printfxy(14,0,"->") |
else JetiBox_printfxy(14,0," "); |
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;} |
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; } |
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp) |
{ |
ToNC_Load_SingePoint = load_waypoint_tmp; |
changed = 0; |
} |
} |
} |
#endif |
void Menu_WPL_A2(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
static unsigned char load_waypoint_tmp = 1, changed; |
if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"FIX Waypoints") |
else JetiBox_printfxy(0,0,"FIX:%s",WPL_Name); |
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card") |
else |
{ |
JetiBox_printfxy(0,1,"#%2d WP:",load_waypoint_tmp); |
if(NaviData_WaypointNumber) JetiBox_printfxy(8,1,"%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
else JetiBox_printfxy(8,1,"--/--") |
if(changed) JetiBox_printfxy(14,1,"->") |
else JetiBox_printfxy(14,1," "); |
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;} |
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; } |
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp) |
{ |
ToNC_Load_WP_List = load_waypoint_tmp; |
changed = 0; |
} |
} |
#endif |
} |
void Menu_WPL_R2(uint8_t key) |
{ //0123456789ABCDEF |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
static unsigned char load_waypoint_tmp = 1, changed; |
if(WPL_Name[0] == 0) JetiBox_printfxy(0,0,"Relative WPs ") |
else JetiBox_printfxy(0,0,"Rel:%s",WPL_Name); |
if(NaviData_MaxWpListIndex == 0) JetiBox_printfxy(0,1,"no SD-Card") |
else |
if(GPSInfo.SatFix != SATFIX_3D) JetiBox_printfxy(0,1,"no GPS-Fix") |
else |
{ |
JetiBox_printfxy(0,1,"#%2d WPs:",load_waypoint_tmp); |
if(NaviData_WaypointNumber) JetiBox_printfxy(8,1,"%2d/%d ",NaviData_WaypointIndex,NaviData_WaypointNumber) |
else JetiBox_printfxy(8,1,"--/--") |
if(changed) JetiBox_printfxy(14,1,"->") |
else JetiBox_printfxy(14,1," "); |
if(key == JETIBOX_KEY_UP && load_waypoint_tmp < NaviData_MaxWpListIndex) { load_waypoint_tmp++; changed = 1;} |
if(key == JETIBOX_KEY_DOWN && load_waypoint_tmp > 1) { load_waypoint_tmp--; changed = 1; } |
if(key == JETIBOX_KEY_RIGHT && load_waypoint_tmp) |
{ |
ToNC_Load_WP_List = load_waypoint_tmp | 0x80; |
changed = 0; |
} |
} |
#endif |
} |
void Menu_PosInfo(uint8_t key) |
{ |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
if(NaviDataOkay) |
{ |
JetiBox_printfxy(0,0,"%2um/s Sat:%d ",GPSInfo.Speed,GPSInfo.NumOfSats); |
switch (GPSInfo.SatFix) |
{ |
case SATFIX_3D: |
JetiBox_printfxy(12,0," 3D"); |
break; |
// case SATFIX_2D: |
// case SATFIX_NONE: |
default: |
JetiBox_printfxy(12,0,"NoFx"); |
break; |
} |
if(GPSInfo.Flags & FLAG_DIFFSOLN) |
{ |
JetiBox_printfxy(12,0,"DGPS"); |
} |
JetiBox_printfxy(0,1,"Home:%3dm %3d%c %c", GPSInfo.HomeDistance/10, GPSInfo.HomeBearing, 0xDF,NC_GPS_ModeCharacter); |
} |
else |
{ //0123456789ABCDEF |
JetiBox_printfxy(2,0,"No NaviCtrl!"); |
} |
#endif |
} |
// ----------------------------------------------------------- |
// the menu topology |
// ----------------------------------------------------------- |
typedef void (*pFctMenu) (uint8_t); // the menu item handler function pointer |
typedef struct{ |
int8_t left; |
int8_t right; |
int8_t up; |
int8_t down; |
pFctMenu pHandler; |
} MENU_ENTRY; |
// the menu navigation structure |
/* | |
3 - 0 - 1 - 2 - 3 - 0 |
*/ |
const MENU_ENTRY JetiBox_Menu[] PROGMEM= |
{ // l r u d pHandler |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
{8, 1, 0, 0, &Menu_Status }, // 0 |
{0, 2, 1, 1, &Menu_Temperature }, // 1 |
{1, 3, 2, 2, &Menu_Battery }, // 2 |
{2, 4, 3, 3, &Menu_PosInfo }, // 3 |
{3, 5, 4, 9, &Menu_WPL_A1 }, // 4 |
{4, 6, 5,10, &Menu_WPL_R1 }, // 5 |
{5, 7, 6,11, &Menu_POINT_LD}, // 6 |
{6, 8, 7,12, &Menu_POINT_SV}, // 7 |
{7, 0, 8, 6, &Magnet_Values }, // 8 |
{4, 9, 9, 9, &Menu_WPL_A2 }, // 9 |
{5,10,10,10, &Menu_WPL_R2 }, // 10 |
{6,11,11,11, &Menu_POINT_LD2}, // 11 |
{7,12,12,12, &Menu_POINT_SV2}, // 12 |
#else |
{6, 1, 0, 0, &Menu_Status }, // 0 |
{0, 2, 1, 1, &Menu_Temperature }, // 1 |
{1, 3, 2, 2, &Menu_Battery }, // 2 |
{2, 4, 3, 3, &Menu_PosInfo }, // 3 |
{3, 5, 7, 7, &Menu_WPL_A1 }, // 4 |
{4, 6, 8, 8, &Menu_WPL_R1 }, // 5 |
{5, 0, 6, 6, &Magnet_Values }, // 6 |
{4, 7, 7, 7, &Menu_WPL_A2 }, // 7 |
{5, 8, 8, 8, &Menu_WPL_R2 }, // 8 |
#endif |
#endif |
}; |
// ----------------------------------------------------------- |
// Update display buffer |
// ----------------------------------------------------------- |
unsigned char JetiBox_Update(unsigned char key) |
{ |
#if !defined (RECEIVER_SPEKTRUM_DX7EXP) && !defined (RECEIVER_SPEKTRUM_DX8EXP) |
static uint8_t item = 0, last_item = 0; // the menu item |
static uint8_t updateDelay = 1 , last_key; |
// navigate within the menu by key action |
last_item = item; |
switch(key) |
{ |
case JETIBOX_KEY_LEFT: |
//if (item == 0) return (1); // switch back to jeti expander menu |
// else |
item = pgm_read_byte(&JetiBox_Menu[item].left); //trigger to left menu item |
break; |
case JETIBOX_KEY_RIGHT: |
item = pgm_read_byte(&JetiBox_Menu[item].right); //trigger to right menu item |
break; |
case JETIBOX_KEY_UP: |
item = pgm_read_byte(&JetiBox_Menu[item].up); //trigger to up menu item |
break; |
case JETIBOX_KEY_DOWN: |
item = pgm_read_byte(&JetiBox_Menu[item].down); //trigger to down menu item |
break; |
default: |
break; |
} |
// if the menu item has been changed, do not pass the key to the item handler |
// to avoid jumping over to items |
if(item != last_item) key = JETIBOX_KEY_UNDEF; |
// if((updateDelay++ & 0x01) || (key != last_key)) |
if((updateDelay++ & 0x01) || (key != JETIBOX_KEY_NONE)) |
{ |
last_key = key; |
LIBFC_JetiBox_Clear(); |
//execute menu item handler |
((pFctMenu)(pgm_read_word(&(JetiBox_Menu[item].pHandler))))(key); |
} |
#endif |
return (0); |
} |
/tags/V2.06a/jetimenu.h |
---|
0,0 → 1,6 |
#ifndef _JETIMENU_H |
#define _JETIMENU_H |
extern unsigned char JetiBox_Update(unsigned char key); |
#endif //_JETIMENU_H |
/tags/V2.06a/led.c |
---|
0,0 → 1,132 |
#include <inttypes.h> |
#include "main.h" |
uint16_t LED1_Timing = 0; |
uint16_t LED2_Timing = 0; |
unsigned char J16Blinkcount = 0, J16Mask = 1; |
unsigned char J17Blinkcount = 0, J17Mask = 1; |
unsigned char NC_Wait_for_LED = 0; // signal to NC: Wait for the LAD PAtter before switching to the next WP |
// initializes the LED control outputs J16, J17 |
void LED_Init(void) |
{ |
// set PC2 & PC3 as output (control of J16 & J17) |
DDRC |= (1<<DDC2)|(1<<DDC3); |
J16_OFF; |
J17_OFF; |
J16Blinkcount = 0; J16Mask = 128; |
J17Blinkcount = 0; J17Mask = 128; |
} |
// called in UpdateMotors() every 2ms |
void LED_Update(void) |
{ |
static char delay = 0; |
static unsigned char J16Bitmask = 0; |
static unsigned char J17Bitmask = 0; |
static unsigned char J16Warn = 0, J17Warn = 0; |
static unsigned char from_nc = 0; |
if(FromNC_WP_EventChannel != -127) { from_nc = (unsigned char) FromNC_WP_EventChannel + 127; /*beeptime = 300;*/}; |
if(!delay--) // 20ms Intervall |
{ |
J16Bitmask = EE_Parameter.J16Bitmask; |
J17Bitmask = EE_Parameter.J17Bitmask; |
delay = 9; |
if(FC_StatusFlags & (FC_STATUS_LOWBAT | FC_STATUS_EMERGENCY_LANDING) || (VersionInfo.HardwareError[1] & FC_ERROR1_I2C)) |
{ |
if(EE_Parameter.WARN_J16_Bitmask) |
{ |
if(!J16Warn) J16Blinkcount = 4; |
J16Warn = 1; |
} |
if(EE_Parameter.WARN_J17_Bitmask) |
{ |
if(!J17Warn) J17Blinkcount = 4; |
J17Warn = 1; |
} |
} |
else |
{ |
J16Warn = 0; |
J17Warn = 0; |
} |
//DebugOut.Analog[29] = EE_Parameter.GlobalConfig3; |
// Output 1 |
if(!J16Warn) |
{ |
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK1) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED1) J16_ON; else J16_OFF;} |
else |
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing > 220)) {if(J16Bitmask & 128) J16_OFF; else J16_ON; J16Mask = 1; NC_Wait_for_LED = 0;} // Manual overwrite |
else |
if((EE_Parameter.J16Timing > 247) && (Parameter_J16Timing == 5)) {if(J16Bitmask & 128) J16_ON; else J16_OFF; J16Mask = 1; NC_Wait_for_LED = 0;} // Manual overwrite |
else |
if(!J16Blinkcount--) |
{ |
if(EE_Parameter.GlobalConfig3 & CFG3_USE_NC_FOR_OUT1) |
{ |
J16Blinkcount = from_nc / 2; |
if(!from_nc) { NC_Wait_for_LED = 0; if(J16Bitmask & 128) J16_ON; else J16_OFF; J16Mask = 0; } // Ausschalten |
else |
{ |
NC_Wait_for_LED = 1; |
if(J16Mask == 0) |
{ |
from_nc = 0; |
J16Mask = 64; |
if(J16Bitmask & 128) J16_ON; else J16_OFF; // Ausschalten |
} |
else |
{ |
//if(FromNC_WP_EventChannel != -127) |
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF; |
J16Mask /= 2; |
} |
} |
} |
else |
{ |
J16Blinkcount = Parameter_J16Timing / 2; |
if(J16Mask == 1) { from_nc = 0; J16Mask = 64; } else J16Mask /= 2; |
if(J16Mask & J16Bitmask) J16_ON; else J16_OFF; |
NC_Wait_for_LED = 0; |
} |
} |
} |
else // warning case |
if(!J16Blinkcount--) |
{ |
J16Blinkcount = 10-1; |
if(J16Mask == 1) J16Mask = 128; else J16Mask /= 2; |
if(J16Mask & EE_Parameter.WARN_J16_Bitmask) J16_ON; else J16_OFF; |
} |
// Output 2 |
if(!J17Warn) |
{ |
if((EE_Parameter.BitConfig & CFG_MOTOR_BLINK2) && !MotorenEin) {if(EE_Parameter.BitConfig & CFG_MOTOR_OFF_LED2) J17_ON; else J17_OFF;} |
else |
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing > 220)) {if(J17Bitmask & 128) J17_OFF; else J17_ON; J17Mask = 1;} |
else |
if((EE_Parameter.J17Timing > 247) && (Parameter_J17Timing == 5)) {if(J17Bitmask & 128) J17_ON; else J17_OFF; J17Mask = 1;} |
else |
if(!J17Blinkcount--) |
{ |
J17Blinkcount = Parameter_J17Timing / 2; |
if(J17Mask == 1) J17Mask = 64; else J17Mask /= 2; |
if(J17Mask & J17Bitmask) J17_ON; else J17_OFF; |
} |
} |
else // warning case |
if(!J17Blinkcount--) |
{ |
J17Blinkcount = 10-1; |
if(J17Mask == 1) J17Mask = 128; else J17Mask /= 2; |
if(J17Mask & EE_Parameter.WARN_J17_Bitmask) J17_ON; else J17_OFF; |
} |
if(PORTC & (1<<PORTC2)) FC_StatusFlags2 |= FC_STATUS2_OUT1_ACTIVE; //else FC_StatusFlags2 &= ~FC_STATUS2_OUT1_ACTIVE; // Out1 (J16) -> wird in der SPI zurück gesetzt |
if(PORTC & (1<<PORTC3)) FC_StatusFlags2 |= FC_STATUS2_OUT2_ACTIVE; else FC_StatusFlags2 &= ~FC_STATUS2_OUT2_ACTIVE; // Out2 (J17) |
} |
} |
/tags/V2.06a/led.h |
---|
0,0 → 1,12 |
#include <avr/io.h> |
#define J16_ON PORTC |= (1<<PORTC2) |
#define J16_OFF PORTC &= ~(1<<PORTC2) |
#define J16_TOGGLE PORTC ^= (1<<PORTC2) |
#define J17_ON PORTC |= (1<<PORTC3) |
#define J17_OFF PORTC &= ~(1<<PORTC3) |
#define J17_TOGGLE PORTC ^= (1<<PORTC3) |
extern void LED_Init(void); |
extern void LED_Update(void); |
extern unsigned char NC_Wait_for_LED; |
/tags/V2.06a/libfc.h |
---|
0,0 → 1,24 |
#ifndef _LIBFC_H |
#define _LIBFC_H |
#define CPU_UNKNOWN 0 |
#define CPU_ATMEGA644 1 |
#define CPU_ATMEGA644P 2 |
#define CPU_ATMEGA1284 3 |
#define CPU_ATMEGA1284P 4 |
extern void LIBFC_Init(unsigned char); |
extern void LIBFC_Polling(void); |
extern void LIBFC_ReceiverInit(unsigned char rtype); |
extern void LIBFC_JetiBox_Putchar(char c); |
extern void LIBFC_JetiBox_SetPos(unsigned char index); |
extern void LIBFC_JetiBox_Clear(void); |
extern void LIBFC_CheckSettings(void); |
extern unsigned char LIBFC_GetCPUType(void); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern long ACC_AltitudeFusion(unsigned char init); |
#endif |
#endif //_LIBFC_H |
/tags/V2.06a/libfc1284.a |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/tags/V2.06a/libfc644.a |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/tags/V2.06a/main.c |
---|
0,0 → 1,517 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
unsigned char DisableRcOffBeeping = 0; |
unsigned char PlatinenVersion = 10; |
unsigned char BattLowVoltageWarning = 94; |
unsigned char BattAutoLandingVoltage = 0, BattComingHomeVoltage = 0; |
unsigned int FlugMinuten = 0,FlugMinutenGesamt = 0; |
unsigned int FlugSekunden = 0; |
pVoidFnct_pVoidFnctChar_const_fmt _printf_P; |
unsigned char FoundMotors = 0; |
unsigned char JetiBeep = 0; // to allow any Morse-Beeping of the Jeti-Box |
unsigned char ActiveParamSet = 3; |
unsigned char LipoCells = 4; |
unsigned char RedundanceBlOperation = 0; |
void PrintLine(void) |
{ |
printf("\n\r==================================="); |
} |
void CalMk3Mag(void) |
{ |
static unsigned char stick = 1; |
if(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] > -20) stick = 0; |
if((PPM_in[EE_Parameter.Kanalbelegung[K_NICK]] < -70) && !stick) |
{ |
stick = 1; |
WinkelOut.CalcState++; |
if(WinkelOut.CalcState > 4) |
{ |
// WinkelOut.CalcState = 0; // in Uart.c |
beeptime = 1000; |
} |
else Piep(WinkelOut.CalcState,150); |
} |
} |
void LipoDetection(unsigned char print) |
{ |
#define MAX_CELL_VOLTAGE 43 // max cell voltage for LiPO |
if(print) |
{ |
printf("\n\rBatt:"); |
LipoCells = 1 + UBat / MAX_CELL_VOLTAGE; |
if(LipoCells > 6) LipoCells = 6; |
} |
if(EE_Parameter.UnterspannungsWarnung < 50) |
{ |
BattLowVoltageWarning = LipoCells * EE_Parameter.UnterspannungsWarnung; |
if(print) |
{ |
Piep(LipoCells, 200); |
printf(" %d Cells ", LipoCells); |
} |
} |
else BattLowVoltageWarning = EE_Parameter.UnterspannungsWarnung; |
// automatische Zellenerkennung |
if(EE_Parameter.AutoLandingVoltage < 50) BattAutoLandingVoltage = LipoCells * EE_Parameter.AutoLandingVoltage; else BattAutoLandingVoltage = EE_Parameter.AutoLandingVoltage; |
if(EE_Parameter.ComingHomeVoltage < 50) BattComingHomeVoltage = LipoCells * EE_Parameter.ComingHomeVoltage; else BattComingHomeVoltage = EE_Parameter.ComingHomeVoltage; |
if(BattAutoLandingVoltage > BattLowVoltageWarning) BattAutoLandingVoltage = BattLowVoltageWarning - 1; |
if(BattComingHomeVoltage >= BattLowVoltageWarning) BattComingHomeVoltage = BattLowVoltageWarning - 1; |
if(BattAutoLandingVoltage >= BattComingHomeVoltage && EE_Parameter.ComingHomeVoltage) BattAutoLandingVoltage = BattComingHomeVoltage - 1; |
if(print) |
{ |
printf(" Low warning: %d.%dV",BattLowVoltageWarning/10,BattLowVoltageWarning%10); |
if(BattComingHomeVoltage) printf(" Auto-CH: %d.%dV",BattComingHomeVoltage/10,BattComingHomeVoltage%10); |
if(BattAutoLandingVoltage) printf(" Autolanding: %d.%dV",BattAutoLandingVoltage/10,BattAutoLandingVoltage%10); |
} |
} |
//############################################################################ |
//Hauptprogramm |
int main (void) |
//############################################################################ |
{ |
unsigned int timer,i,timer2 = 0, timerPolling; |
unsigned char update_spi = 1; |
DDRB = 0x00; |
PORTB = 0x00; |
DDRD = 0x0A; // UART & J3 J4 J5 |
PORTD = 0x5F; // PPM-Input & UART |
for(timer = 0; timer < 1000; timer++); // verzögern |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
unsigned char AccZ_ErrorCnt = 0; |
if(PINB & 0x02) |
{ |
if(PIND & 0x10) PlatinenVersion = 21; // No Bridge from J4 to GND |
else { PlatinenVersion = 22; ACC_AltitudeControl = 1;}; |
} |
else |
{ |
PlatinenVersion = 25; ACC_AltitudeControl = 1; |
} |
#else |
if(PINB & 0x01) |
{ |
if(PINB & 0x02) PlatinenVersion = 13; |
else PlatinenVersion = 11; |
} |
else |
{ |
if(PINB & 0x02) PlatinenVersion = 20; |
else |
{ |
PlatinenVersion = 10; |
DDRD = 0x3E; // Speaker & TXD & J3 J4 J5 |
PORTD = 0x47; // |
} |
} |
#endif |
DDRC = 0x81; // I2C, Spaker |
DDRC |=0x40; // HEF4017 Reset |
PORTC = 0xff; // Pullup SDA |
DDRB = 0x1B; // LEDs und Druckoffset |
PORTB = 0x01; // LED_Rot |
HEF4017Reset_ON; |
MCUSR &=~(1<<WDRF); |
WDTCSR |= (1<<WDCE)|(1<<WDE); |
WDTCSR = 0; |
beeptime = 2500; |
StickGier = 0; PPM_in[K_GAS] = 0; StickRoll = 0; StickNick = 0; |
if(PlatinenVersion >= 20) GIER_GRAD_FAKTOR = 1220; else GIER_GRAD_FAKTOR = 1291; // unterschiedlich für ME und ENC |
ROT_OFF; |
GRN_ON; |
Timer_Init(); |
TIMER2_Init(); |
UART_Init(); |
rc_sum_init(); |
ADC_Init(); |
I2C_Init(1); |
SPI_MasterInit(); |
Capacity_Init(); |
LIBFC_Init(LIB_FC_COMPATIBLE); |
GRN_ON; |
sei(); |
ParamSet_Init(); |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(PlatinenVersion < 20) |
{ |
wdt_enable(WDTO_250MS); // Reset-Commando |
while(1) printf("\n\rOld FC Hardware not supported by this Frimware!"); |
} |
#ifndef REDUNDANT_FC_SLAVE |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Check connected BL-Ctrls |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Check connected BL-Ctrls |
BLFlags |= BLFLAG_READ_VERSION; |
motor_read = 0; // read the first I2C-Data |
SendMotorData(); |
timer = SetDelay(500); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
printf("\n\rFound BL-Ctrl: "); |
timer = SetDelay(4000); |
for(i=0; i < MAX_MOTORS; i++) |
{ |
SendMotorData(); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
if(Mixer.Motor[i][0] > 0) // wait max 4 sec for the BL-Ctrls to wake up |
{ |
while(!CheckDelay(timer) && !(Motor[i].State & MOTOR_STATE_PRESENT_MASK) ) |
{ |
SendMotorData(); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
} |
} |
if(Motor[i].State & MOTOR_STATE_PRESENT_MASK) |
{ |
printf("%d",i+1); |
FoundMotors++; |
// if(Motor[i].Version & MOTOR_STATE_FAST_MODE) printf("(fast)\n\r"); |
// else if(Motor[i].Version & MOTOR_STATE_NEW_PROTOCOL_MASK) printf("(new)\n\r"); |
} |
} |
for(i=0; i < MAX_MOTORS; i++) |
{ |
if(!(Motor[i].State & MOTOR_STATE_PRESENT_MASK) && Mixer.Motor[i][0] > 0) |
{ |
printf("\n\r\n\r!! MISSING BL-CTRL: %d !!",i+1); |
ServoActive = 2; // just in case the FC would be used as camera-stabilizer |
} |
Motor[i].State &= ~MOTOR_STATE_ERROR_MASK; // clear error counter |
} |
PrintLine();// ("\n\r==================================="); |
if(RequiredMotors < FoundMotors) VersionInfo.HardwareError[1] |= FC_ERROR1_MIXER; |
if(RequiredMotors > 8) Max_I2C_Packets = 8; else Max_I2C_Packets = RequiredMotors; |
#else |
printf("\n\r--> REDUNDANT SLAVE <---"); |
#endif |
#ifdef REDUNDANT_FC_MASTER |
printf("\n\r--> REDUNDANT MASTER <---"); |
#endif |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Calibrating altitude sensor |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG) |
{ |
printf("\n\rCalibrating pressure sensor.."); |
timer = SetDelay(1000); |
SucheLuftruckOffset(); |
while (!CheckDelay(timer)); |
printf("OK\n\r"); |
} |
#ifdef REDUNDANT_FC_SLAVE |
VersionInfo.HardwareError[0] = 0; |
VersionInfo.HardwareError[1] = 0; |
#endif |
SetNeutral(0); |
ROT_OFF; |
beeptime = 2000; |
ExternControl.Digital[0] = 0x55; |
FlugMinuten = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES + 1); |
FlugMinutenGesamt = (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL) * 256 + (unsigned int)GetParamByte(PID_FLIGHT_MINUTES_TOTAL + 1); |
if((FlugMinutenGesamt == 0xFFFF) || (FlugMinuten == 0xFFFF)) |
{ |
FlugMinuten = 0; |
FlugMinutenGesamt = 0; |
} |
printf("\n\rFlight-time %u min Total:%u min", FlugMinuten, FlugMinutenGesamt); |
LcdClear(); |
I2CTimeout = 5000; |
WinkelOut.Orientation = 1; |
LipoDetection(1); |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
PrintLine();// ("\n\r==================================="); |
//SpektrumBinding(); |
timer = SetDelay(2000); |
timerPolling = SetDelay(250); |
Debug(ANSI_CLEAR "FC-Start!\n\rFlugzeit: %d min", FlugMinutenGesamt); // Note: this won't waste flash memory, if #DEBUG is not active |
//printf("\n\rEE_Parameter size:%i\n\r", PARAMSET_STRUCT_LEN); |
DebugOut.Status[0] = 0x01 | 0x02; |
JetiBeep = 0; |
if(EE_Parameter.ExtraConfig & CFG_NO_RCOFF_BEEPING) DisableRcOffBeeping = 1; |
while(1) |
{ |
EEAR = EE_DUMMY; // Set the EEPROM Address pointer to an unused space |
if(ReceiverUpdateModeActive) while (1) PORTC &= ~(1<<7); // Beeper off |
if(UpdateMotor && AdReady) // ReglerIntervall |
{ |
cli(); |
UpdateMotor--; |
sei(); |
if(WinkelOut.CalcState) CalMk3Mag(); |
else MotorRegler(); |
SendMotorData(); |
ROT_OFF; |
if(SenderOkay) { SenderOkay--; /*VersionInfo.HardwareError[1] &= ~FC_ERROR1_PPM;*/ } |
else |
{ |
TIMSK1 |= _BV(ICIE1); // enable PPM-Input |
PPM_in[0] = 0; // set RSSI to zero on data timeout |
VersionInfo.HardwareError[1] |= FC_ERROR1_PPM; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 160 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 220) SenderOkay = 160; |
//if(HoehenReglerAktiv && NaviDataOkay && SenderOkay < 101 && SenderOkay > 10 && FromNaviCtrl_Value.SerialDataOkay > 1) SenderOkay = 101; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
if(!--I2CTimeout || MissingMotor) |
{ |
if(!I2CTimeout) |
{ |
I2C_Reset(); |
I2CTimeout = 5; |
DebugOut.Analog[28]++; // I2C-Error |
VersionInfo.HardwareError[1] |= FC_ERROR1_I2C; |
DebugOut.Status[1] |= 0x02; // BL-Error-Status |
} |
if((BeepMuster == 0xffff) && MotorenEin) |
{ |
beeptime = 25000; |
BeepMuster = 0x0080; |
} |
} |
else |
{ |
ROT_OFF; |
} |
LIBFC_Polling(); |
if(!UpdateMotor) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(NewSBusData) ProcessSBus(); |
else |
#endif |
{ |
if(BytegapSPI == 0) SPI_TransmitByte(); |
if(CalculateServoSignals) CalculateServo(); |
DatenUebertragung(); |
BearbeiteRxDaten(); |
if(CheckDelay(timer)) |
{ |
static unsigned char second; |
timer += 20; // 20 ms interval |
CalcNickServoValue(); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(EE_Parameter.Receiver == RECEIVER_HOTT) HoTT_Menu(); |
else |
if(EE_Parameter.Receiver == RECEIVER_JETI) BuildJeti_Vario(); |
// ++++++++++++++++++++++++++++ |
// + check the ACC-Z range |
if(ACC_AltitudeControl && ((Aktuell_az < 300) || (DebugOut.Analog[7] < (128 * 4) && Aktuell_az > 850))) // DebugOut.Analog[7] = GasMischanteil |
{ |
if(++AccZ_ErrorCnt > 50) |
{ |
if(MotorenEin) VersionInfo.HardwareError[0] |= FC_ERROR0_ACC_TOP; |
else CalibrationDone = 0; |
} |
} |
else AccZ_ErrorCnt = 0; |
// ++++++++++++++++++++++++++++ |
#endif |
if(MissingMotor || Capacity.MinOfMaxPWM < 30) |
{ |
if(MissingMotor) VersionInfo.HardwareError[1] |= FC_ERROR1_BL_MISSING; |
DebugOut.Status[1] |= 0x02; // BL-Error-Status |
} |
else |
{ |
if(!beeptime) |
{ |
if(I2CTimeout > 6) DebugOut.Status[1] &= ~0x02; // BL-Error-Status |
} |
} |
if(DisableRcOffBeeping) if(SenderOkay > 150) { DisableRcOffBeeping = 0; beeptime = 5000;}; |
if(PcZugriff) PcZugriff--; |
else |
{ |
ExternControl.Config = 0; |
ExternStickNick = 0; |
ExternStickRoll = 0; |
ExternStickGier = 0; |
if(!SenderOkay) |
{ |
if(BeepMuster == 0xffff && DisableRcOffBeeping != 2) |
{ |
beeptime = 15000; |
BeepMuster = 0x0c00; |
if(DisableRcOffBeeping) DisableRcOffBeeping = 2; |
} |
} |
} |
if(NaviDataOkay > 200) |
{ |
NaviDataOkay--; |
VersionInfo.HardwareError[1] &= ~FC_ERROR1_SPI_RX; |
VersionInfo.Flags |= FC_VERSION_FLAG_NC_PRESENT; |
} |
else |
{ |
if(NC_Version.Compatible) |
{ |
VersionInfo.HardwareError[1] |= FC_ERROR1_SPI_RX; |
NC_ErrorCode = 9; // "ERR: no NC communication" |
if(BeepMuster == 0xffff && MotorenEin) |
{ |
beeptime = 15000; |
BeepMuster = 0xA800; |
} |
} |
GPS_Nick = 0; |
GPS_Roll = 0; |
GPS_Aid_StickMultiplikator = 0; |
GPSInfo.Flags = 0; |
FromNaviCtrl_Value.Kalman_K = -1; |
FromNaviCtrl.AccErrorN = 0; |
FromNaviCtrl.AccErrorR = 0; |
FromNaviCtrl.CompassValue = -1; |
FromNC_AltitudeSpeed = 0; |
FromNC_AltitudeSetpoint = 0; |
VersionInfo.Flags &= ~FC_VERSION_FLAG_NC_PRESENT; |
NaviDataOkay = 0; |
} |
if(UBat <= BattLowVoltageWarning) |
{ |
FC_StatusFlags |= FC_STATUS_LOWBAT; |
if(BeepMuster == 0xffff && UBat > 10) // Do not beep, if the voltage reading is below 1V (Supplied via MKUSB) |
{ |
beeptime = 6000; |
BeepMuster = 0x0300; |
} |
} |
// +++++++++++++++++++++++++++++++++ |
// Sekundentakt |
if(++second == 49) |
{ |
second = 0; |
/* |
DebugOut.Analog[16] -= DebugOut.Analog[16] / 128; |
DebugOut.Analog[17] -= DebugOut.Analog[17] / 128; |
if(DebugOut.Analog[16] > 3000) {AdNeutralNick++; DebugOut.Analog[16] = 0;} |
else |
if(DebugOut.Analog[16] < -3000) {AdNeutralNick--; DebugOut.Analog[16] = 0;}; |
if(DebugOut.Analog[17] > 3000) {AdNeutralRoll++; DebugOut.Analog[17] = 0;} |
else |
if(DebugOut.Analog[17] < -3000) {AdNeutralRoll--; DebugOut.Analog[17] = 0;}; |
*/ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ShowSettingNameTime) ShowSettingNameTime--; |
#endif |
if(FC_StatusFlags & FC_STATUS_FLY) FlugSekunden++; |
else timer2 = 1450; // 0,5 Minuten aufrunden |
if(modell_fliegt < 1024) |
{ |
if(StartLuftdruck < Luftdruck) StartLuftdruck += 5; |
else |
if(StartLuftdruck > Luftdruck) StartLuftdruck -= 5; |
} |
if(UBat > BattLowVoltageWarning + 1) FC_StatusFlags &= ~FC_STATUS_LOWBAT; |
} |
// +++++++++++++++++++++++++++++++++ |
if(++timer2 == 2930) // eine Minute |
{ |
timer2 = 0; |
FlugMinuten++; |
FlugMinutenGesamt++; |
SetParamByte(PID_FLIGHT_MINUTES,FlugMinuten / 256); |
SetParamByte(PID_FLIGHT_MINUTES+1,FlugMinuten % 256); |
SetParamByte(PID_FLIGHT_MINUTES_TOTAL,FlugMinutenGesamt / 256); |
SetParamByte(PID_FLIGHT_MINUTES_TOTAL+1,FlugMinutenGesamt % 256); |
timer = SetDelay(20); // falls "timer += 20;" mal nicht geht |
} |
} |
LED_Update(); |
Capacity_Update(); |
} |
} //else DebugOut.Analog[18]++; |
if(update_spi) update_spi--; |
} // 500Hz |
if(update_spi == 0) // 41Hz |
{ |
if(SPI_StartTransmitPacket()) update_spi = 12; |
else |
if(BytegapSPI == 0) SPI_TransmitByte(); |
} |
else if(BytegapSPI == 0) SPI_TransmitByte(); |
} |
} |
//DebugOut.Analog[16] |
/tags/V2.06a/main.h |
---|
0,0 → 1,96 |
#ifndef _MAIN_H |
#define _MAIN_H |
//#define REDUNDANT_FC_SLAVE |
//#define REDUNDANT_FC_MASTER |
//#define DEBUG // use to activate debug output to MK-Tool: use Debug(text); |
//#define ACT_S3D_SUMMENSIGNAL |
//#define UserParameter8_FAILSAFE |
//#define RECEIVER_SPEKTRUM_DX7EXP |
//#define RECEIVER_SPEKTRUM_DX8EXP |
// neue Hardware |
//#define ROT_OFF {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB &=~0x01; else PORTB |= 0x01;} |
//#define ROT_ON {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB |= 0x01; else PORTB &=~0x01;} |
#define ROT_OFF {PORTB &=~0x01;} |
#define ROT_ON {PORTB |= 0x01;} |
#define ROT_FLASH PORTB ^= 0x01 |
//#define GRN_OFF {if((PlatinenVersion < 12) || PlatinenVersion == 25) PORTB &=~0x02; else PORTB |= 0x02;} |
//#define GRN_ON {if((PlatinenVersion < 12) || PlatinenVersion == 25) PORTB |= 0x02; else PORTB &=~0x02;} |
#define GRN_OFF {if(PlatinenVersion == 25) PORTB &=~0x02; else PORTB |= 0x02;} |
#define GRN_ON {if(PlatinenVersion == 25) PORTB |= 0x02; else PORTB &=~0x02;} |
#define GRN_FLASH PORTB ^= 0x02 |
#define SYSCLK F_CPU |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define J3High PORTD |= 0x20 |
#define J3Low PORTD &= ~0x20 |
#define J4High PORTD |= 0x10 |
#define J4Low PORTD &= ~0x10 |
#define J5High PORTD |= 0x08 |
#define J5Low PORTD &= ~0x08 |
extern volatile unsigned char SenderOkay; |
extern unsigned char BattLowVoltageWarning; |
extern unsigned char BattAutoLandingVoltage, BattComingHomeVoltage; |
extern unsigned char CosinusNickWinkel, CosinusRollWinkel; |
extern unsigned char PlatinenVersion; |
extern unsigned char FoundMotors,DisableRcOffBeeping; |
extern unsigned char JetiBeep; |
void LipoDetection(unsigned char print); |
extern unsigned int FlugMinuten,FlugMinutenGesamt,FlugSekunden; |
extern void PrintLine(void); // "=================================" |
extern unsigned char ActiveParamSet; |
extern unsigned int BL3_Current(unsigned char who); // in 0,1A |
extern unsigned char LipoCells; |
extern unsigned char RedundanceBlOperation; |
#include <avr/pgmspace.h> |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#endif |
#include <stdlib.h> |
#include <string.h> |
#include <avr/io.h> |
#include <avr/pgmspace.h> |
#include <avr/interrupt.h> |
#include <avr/eeprom.h> |
#include <avr/boot.h> |
#include <avr/wdt.h> |
#include "old_macros.h" |
#include "printf_P.h" |
#include "timer0.h" |
#include "uart.h" |
#include "analog.h" |
#include "twimaster.h" |
#include "menu.h" |
#include "rc.h" |
#include "fc.h" |
#include "gps.h" |
#include "spi.h" |
#include "led.h" |
#include "spektrum.h" |
#include "capacity.h" |
#include "eeprom.h" |
#include "libfc.h" |
#include "hottmenu.h" |
#include "debug.h" |
#include "sbus.h" |
#include "jeti_ex.h" |
#endif //_MAIN_H |
/tags/V2.06a/makefile |
---|
0,0 → 1,496 |
#-------------------------------------------------------------------- |
# MCU name |
MCU = atmega1284p |
#MCU = atmega644p |
F_CPU = 20000000 |
#------------------------------------------------------------------- |
VERSION_MAJOR = 2 |
VERSION_MINOR = 06 |
VERSION_PATCH = 0 |
VERSION_SERIAL_MAJOR = 11 # Serial Protocol to KopterTool -> do not change! |
VERSION_SERIAL_MINOR = 0 # Serial Protocol |
NC_SPI_COMPATIBLE = 68 # Navi-Kompatibilität |
LIB_FC_COMPATIBLE = 6 # Library |
#------------------------------------------------------------------- |
# ATMEGA644: 63487 is maximum |
#------------------------------------------------------------------- |
# 0 a |
# 1 b |
# 2 c |
# 3 d |
# 4 e |
# 5 f |
# 6 g |
# 7 h |
# 8 i |
# 9 j |
# 10 k |
# 11 L |
#------------------------------------------------------------------- |
# get SVN revision |
REV := $(shell sh -c "cat .svn/entries | sed -n '4p'") |
ifeq ($(MCU), atmega1284p) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
HEX_NAME = MEGA1284P |
LIBFC_EXT = 1284 |
endif |
ifeq ($(MCU), atmega644p) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
HEX_NAME = MEGA644 |
LIBFC_EXT = 644 |
endif |
ifeq ($(F_CPU), 16000000) |
QUARZ = 16MHZ |
endif |
ifeq ($(F_CPU), 20000000) |
QUARZ = 20MHZ |
endif |
# Output format. (can be srec, ihex, binary) |
FORMAT = ihex |
# Target file name (without extension). |
ifeq ($(VERSION_PATCH), 0) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)a_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 1) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)b_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 2) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)c_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 3) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)d_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 4) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)e_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 5) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)f_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 6) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)g_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 7) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)h_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 8) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)i_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 9) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)j_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 10) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)k_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 11) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)L_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 12) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)m_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 13) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)n_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 14) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)o_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 15) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)p_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 16) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)q_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 17) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)r_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 18) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)s_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 19) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)t_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 20) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)u_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 21) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)v_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 22) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)w_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 23) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)x_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 24) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)y_SVN$(REV) |
endif |
ifeq ($(VERSION_PATCH), 25) |
TARGET = Flight-Ctrl_$(HEX_NAME)_V$(VERSION_MAJOR)_$(VERSION_MINOR)z_SVN$(REV) |
endif |
# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. |
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) |
OPT = s |
#OPT = 2 |
########################################################################################################## |
# List C source files here. (C dependencies are automatically generated.) |
SRC = main.c uart.c timer0.c analog.c menu.c eeprom.c |
SRC += twimaster.c rc.c fc.c GPS.c spi.c led.c Spektrum.c |
SRC += mymath.c jetimenu.c capacity.c debug.c |
SRC += hottmenu.c sbus.c user_receiver.c |
SRC += jeti_ex.c |
########################################################################################################## |
# List Assembler source files here. |
# Make them always end in a capital .S. Files ending in a lowercase .s |
# will not be considered source files but generated files (assembler |
# output from the compiler), and will be deleted upon "make clean"! |
# Even though the DOS/Win* filesystem matches both .s and .S the same, |
# it will preserve the spelling of the filenames, and gcc itself does |
# care about how the name is spelled on its command-line. |
ASRC = isqrt.S |
# List any extra directories to look for include files here. |
# Each directory must be seperated by a space. |
EXTRAINCDIRS = |
# Optional compiler flags. |
# -g: generate debugging information (for GDB, or for COFF conversion) |
# -O*: optimization level |
# -f...: tuning, see gcc manual and avr-libc documentation |
# -Wall...: warning level |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create assembler listing |
CFLAGS = -O$(OPT) -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=$(<:%.c=%.lst) $(patsubst %,-I%,$(EXTRAINCDIRS)) |
# Set a "language standard" compiler flag. |
# Unremark just one line below to set the language standard to use. |
# gnu99 = C99 + GNU extensions. See GCC manual for more information. |
#CFLAGS += -std=c89 |
#CFLAGS += -std=gnu89 |
#CFLAGS += -std=c99 |
CFLAGS += -std=gnu99 |
# shrink code size |
CFLAGS += -mtiny-stack |
#CFLAGS += -fno-inline-functions |
CFLAGS += -mcall-prologues |
CFLAGS += -DF_CPU=$(F_CPU) -DVERSION_MAJOR=$(VERSION_MAJOR) -DVERSION_MINOR=$(VERSION_MINOR) -DVERSION_PATCH=$(VERSION_PATCH) -DVERSION_SERIAL_MAJOR=$(VERSION_SERIAL_MAJOR) -DVERSION_SERIAL_MINOR=$(VERSION_SERIAL_MINOR) -DNC_SPI_COMPATIBLE=$(NC_SPI_COMPATIBLE) -DLIB_FC_COMPATIBLE=$(LIB_FC_COMPATIBLE) |
# Optional assembler flags. |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create listing |
# -gstabs: have the assembler create line number information; note that |
# for use in COFF files, additional information about filenames |
# and function names needs to be present in the assembler source |
# files -- see avr-libc docs [FIXME: not yet described there] |
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs |
# Optional linker flags. |
# -Wl,...: tell GCC to pass this to linker. |
# -Map: create map file |
# --cref: add cross reference to map file |
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref |
# Additional libraries |
# Minimalistic printf version |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min |
# Floating point printf version (requires -lm below) |
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt |
# -lm = math library |
LDFLAGS += -lm |
LDFLAGS += libfc$(LIBFC_EXT).a |
##LDFLAGS += -T./linkerfile/avr5.x |
# Programming support using avrdude. Settings and variables. |
# Programming hardware: alf avr910 avrisp bascom bsd |
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 |
# |
# Type: avrdude -c ? |
# to get a full listing. |
# |
#AVRDUDE_PROGRAMMER = dt006 |
#AVRDUDE_PROGRAMMER = stk200 |
#AVRDUDE_PROGRAMMER = ponyser |
AVRDUDE_PROGRAMMER = avrispv2 |
#falls Ponyser ausgewählt wird, muss sich unsere avrdude-Configdatei im Bin-Verzeichnis des Compilers befinden |
#AVRDUDE_PORT = com1 # programmer connected to serial device |
#AVRDUDE_PORT = lpt1 # programmer connected to parallel port |
AVRDUDE_PORT = usb # programmer connected to USB |
#AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex |
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex $(FUSE_SETTINGS) |
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep |
#avrdude -c avrispv2 -P usb -p m32 -U flash:w:blink.hex |
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) |
# Uncomment the following if you want avrdude's erase cycle counter. |
# Note that this counter needs to be initialized first using -Yn, |
# see avrdude manual. |
#AVRDUDE_ERASE += -y |
# Uncomment the following if you do /not/ wish a verification to be |
# performed after programming the device. |
AVRDUDE_FLAGS += -V |
# Increase verbosity level. Please use this when submitting bug |
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> |
# to submit bug reports. |
#AVRDUDE_FLAGS += -v -v |
# --------------------------------------------------------------------------- |
# Define directories, if needed. |
DIRAVR = c:/winavr |
DIRAVRBIN = $(DIRAVR)/bin |
DIRAVRUTILS = $(DIRAVR)/utils/bin |
DIRINC = . |
DIRLIB = $(DIRAVR)/avr/lib |
# Define programs and commands. |
SHELL = sh |
CC = avr-gcc |
OBJCOPY = avr-objcopy |
OBJDUMP = avr-objdump |
SIZE = avr-size |
# Programming support using avrdude. |
AVRDUDE = avrdude |
REMOVE = rm -f |
COPY = cp |
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex |
ELFSIZE = $(SIZE) -x -A $(TARGET).elf |
LIMITS = $(SIZE) --mcu=$(MCU) -C $(TARGET).elf |
# Define Messages |
# English |
MSG_ERRORS_NONE = Errors: none |
MSG_BEGIN = -------- begin -------- |
MSG_END = -------- end -------- |
MSG_SIZE_BEFORE = Size before: |
MSG_SIZE_AFTER = Size after: |
MSG_COFF = Converting to AVR COFF: |
MSG_EXTENDED_COFF = Converting to AVR Extended COFF: |
MSG_FLASH = Creating load file for Flash: |
MSG_EEPROM = Creating load file for EEPROM: |
MSG_EXTENDED_LISTING = Creating Extended Listing: |
MSG_SYMBOL_TABLE = Creating Symbol Table: |
MSG_LINKING = Linking: |
MSG_COMPILING = Compiling: |
MSG_ASSEMBLING = Assembling: |
MSG_CLEANING = Cleaning project: |
# Define all object files. |
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) |
# Define all listing files. |
LST = $(ASRC:.S=.lst) $(SRC:.c=.lst) |
# Combine all necessary flags and optional flags. |
# Add target processor to flags. |
#ALL_CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -I. $(CFLAGS) |
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) |
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) |
# Default target. |
all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex sizeafter finished end |
# Eye candy. |
# AVR Studio 3.x does not check make's exit code but relies on |
# the following magic strings to be generated by the compile job. |
begin: |
@echo |
@echo $(MSG_BEGIN) |
finished: |
@echo $(MSG_ERRORS_NONE) |
end: |
@echo $(MSG_END) |
@echo |
# Display size of file. |
sizebefore: |
@if [ -f $(TARGET).elf ]; then echo Size before:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); echo; fi |
sizeafter: |
@if [ -f $(TARGET).elf ]; then echo Size after:; $(ELFSIZE); $(HEXSIZE); $(LIMITS); echo; fi |
# Display compiler version information. |
gccversion : |
@$(CC) --version |
# Convert ELF to COFF for use in debugging / simulating in |
# AVR Studio or VMLAB. |
COFFCONVERT=$(OBJCOPY) --debugging \ |
--change-section-address .data-0x800000 \ |
--change-section-address .bss-0x800000 \ |
--change-section-address .noinit-0x800000 \ |
--change-section-address .eeprom-0x810000 |
coff: $(TARGET).elf |
@echo |
@echo $(MSG_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof |
extcoff: $(TARGET).elf |
@echo |
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof |
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof |
# Program the device. |
program: $(TARGET).hex $(TARGET).eep |
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) |
# Create final output files (.hex, .eep) from ELF output file. |
%.hex: %.elf |
@echo |
@echo $(MSG_FLASH) $@ |
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ |
%.eep: %.elf |
@echo |
@echo $(MSG_EEPROM) $@ |
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@ |
# Create extended listing file from ELF output file. |
%.lss: %.elf |
@echo |
@echo $(MSG_EXTENDED_LISTING) $@ |
$(OBJDUMP) -h -S $< > $@ |
# Create a symbol table from ELF output file. |
%.sym: %.elf |
@echo |
@echo $(MSG_SYMBOL_TABLE) $@ |
avr-nm -n $< > $@ |
# Link: create ELF output file from object files. |
.SECONDARY : $(TARGET).elf |
.PRECIOUS : $(OBJ) |
%.elf: $(OBJ) |
@echo |
@echo $(MSG_LINKING) $@ |
$(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS) |
# Compile: create object files from C source files. |
%.o : %.c |
@echo |
@echo $(MSG_COMPILING) $< |
$(CC) -c $(ALL_CFLAGS) $< -o $@ |
# Compile: create assembler files from C source files. |
%.s : %.c |
$(CC) -S $(ALL_CFLAGS) $< -o $@ |
# Assemble: create object files from assembler source files. |
%.o : %.S |
@echo |
@echo $(MSG_ASSEMBLING) $< |
$(CC) -c $(ALL_ASFLAGS) $< -o $@ |
# Target: clean project. |
clean: begin clean_list finished end |
clean_list : |
@echo |
@echo $(MSG_CLEANING) |
$(REMOVE) Flight-Ctrl_*.hex |
$(REMOVE) Flight-Ctrl_*.eep |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).cof |
$(REMOVE) Flight-Ctrl_*.elf |
$(REMOVE) Flight-Ctrl_*.map |
$(REMOVE) $(TARGET).obj |
$(REMOVE) $(TARGET).a90 |
$(REMOVE) Flight-Ctrl_*.sym |
$(REMOVE) $(TARGET).lnk |
$(REMOVE) $(TARGET).lss |
$(REMOVE) $(OBJ) |
$(REMOVE) $(LST) |
$(REMOVE) $(SRC:.c=.s) |
$(REMOVE) $(SRC:.c=.d) |
$(REMOVE) $(SRC:.c=.o) |
# Automatically generate C source code dependencies. |
# (Code originally taken from the GNU make user manual and modified |
# (See README.txt Credits).) |
# |
# Note that this will work with sh (bash) and sed that is shipped with WinAVR |
# (see the SHELL variable defined above). |
# This may not work with other shells or other seds. |
# |
%.d: %.c |
set -e; $(CC) -MM $(ALL_CFLAGS) $< \ |
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \ |
[ -s $@ ] || rm -f $@ |
# Remove the '-' if you want to see the dependency files generated. |
-include $(SRC:%.c=%.d) |
# Listing of phony targets. |
.PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \ |
clean clean_list program |
/tags/V2.06a/menu.c |
---|
0,0 → 1,277 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#include "eeprom.h" |
char DisplayBuff[80]; |
unsigned char DispPtr = 0; |
unsigned char MaxMenue = 18; |
unsigned char MenuePunkt = 0; |
unsigned char RemoteKeys = 0; |
#define KEY1 0x01 |
#define KEY2 0x02 |
#define KEY3 0x04 |
#define KEY4 0x08 |
#define KEY5 0x10 |
void LcdClear(void) |
{ |
unsigned char i; |
for(i=0;i<80;i++) DisplayBuff[i] = ' '; |
} |
void Menu_Putchar(char c) |
{ |
if(DispPtr < 80) DisplayBuff[DispPtr++] = c; |
} |
void Menu(void) |
{ |
unsigned char i; |
if(RemoteKeys & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue;} |
if(RemoteKeys & KEY2) { if(MenuePunkt == MaxMenue) MenuePunkt = 0; else MenuePunkt++;} |
if((RemoteKeys & KEY1) && (RemoteKeys & KEY2)) MenuePunkt = 0; |
LcdClear(); |
if(MenuePunkt < 10) {LCD_printfxy(17,0,"[%i]",MenuePunkt);} |
else {LCD_printfxy(16,0,"[%i]",MenuePunkt);}; |
switch(MenuePunkt) |
{ |
case 0: |
LCD_printfxy(0,0,"+ MikroKopter +"); |
LCD_printfxy(0,1,"HW:V%d.%d SW:%d.%02d%c ",PlatinenVersion/10,PlatinenVersion%10, VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH +'a'); |
LCD_printfxy(0,2,"Setting:%d %s", ActiveParamSet,Mixer.Name); |
if(VersionInfo.HardwareError[1] & FC_ERROR1_MIXER) LCD_printfxy(0,3,"Mixer Error!") |
else |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(NC_ErrorCode) |
{ |
LCD_printfxy(0,3,"ERR%2d:",NC_ErrorCode); |
_printf_P(&Menu_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0); |
} |
else |
#endif |
if(VersionInfo.HardwareError[0]) LCD_printfxy(0,3,"Hardware Error 1:%d !!",VersionInfo.HardwareError[0]) |
else |
if(MissingMotor) LCD_printfxy(0,3,"Missing BL-Ctrl:%d !!",MissingMotor) |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#else |
else |
if(NC_ErrorCode) |
{ |
LCD_printfxy(0,3,"! NC-ERR: %2d ! ",NC_ErrorCode); |
} |
#endif |
// if(VersionInfo.HardwareError[1]) LCD_printfxy(0,3,"Error 2:%d !!",VersionInfo.HardwareError[1]) |
else |
if(I2CTimeout < 6) LCD_printfxy(0,3,"I2C ERROR!!!") |
else |
if(Capacity.MinOfMaxPWM < 30) LCD_printfxy(0,3,"BL-Selftest Err:%2d",Capacity.MinOfMaxPWM) |
break; |
case 1: |
LCD_printfxy(0,0,"Height: %5i",(int)(HoehenWert/5)); |
LCD_printfxy(0,1,"Setpoint:%5i",(int)(SollHoehe/5)); |
LCD_printfxy(0,2,"Pressure:%5i",MessLuftdruck); |
LCD_printfxy(0,3,"Offset: %5i",OCR0A); |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(ACC_AltitudeControl) |
{ |
LCD_printfxy(17,2,"(A)"); |
LCD_printfxy(17,3,"%i",CalAthmospheare); |
} |
#endif |
break; |
case 2: |
LCD_printfxy(0,0,"act. bearing"); |
LCD_printfxy(0,1,"Nick: %5i",IntegralNick/1024); |
LCD_printfxy(0,2,"Roll: %5i",IntegralRoll/1024); |
LCD_printfxy(0,3,"Compass: %5i",CompassCorrected); |
break; |
case 3: |
for(i=1;i<9;i+=2) LCD_printfxy(0,i/2,"K%i:%4i K%i:%4i ",i,PPM_in[i],i+1,PPM_in[i+1]); |
break; |
case 4: |
LCD_printfxy(0,0,"Ni:%4i Ro:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_NICK]],PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]); |
LCD_printfxy(0,1,"Gs:%4i Gi:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]); |
LCD_printfxy(0,2,"P1:%4i P2:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI1]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI2]]+127); |
LCD_printfxy(0,3,"P3:%4i P4:%4i ",PPM_in[EE_Parameter.Kanalbelegung[K_POTI3]]+127,PPM_in[EE_Parameter.Kanalbelegung[K_POTI4]]+127); |
break; |
case 5: |
LCD_printfxy(0,0,"Gyro - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i.%x)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16, (AdNeutralNick%16)/2); |
LCD_printfxy(0,2,"Roll %4i (%3i.%x)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16, (AdNeutralRoll%16)/2); |
// LCD_printfxy(0,1,"Nick %4i (%4i)",AdWertNickFilter, AdNeutralNick); |
// LCD_printfxy(0,2,"Roll %4i (%4i)",AdWertRollFilter, AdNeutralRoll); |
LCD_printfxy(0,3,"Yaw %4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2); |
/* |
// entfernt aus Platzmangel |
if(PlatinenVersion == 10) |
{ |
LCD_printfxy(0,1,"Nick%4i (%3i.%i)",AdWertNick - AdNeutralNick/8, AdNeutralNick/8, AdNeutralNick%8); |
LCD_printfxy(0,2,"Roll%4i (%3i.%i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/8, AdNeutralRoll%8); |
LCD_printfxy(0,3,"Gier%4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier); |
} |
else |
if((PlatinenVersion == 11) || (PlatinenVersion >= 20)) |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i.%x)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16, (AdNeutralNick%16)/2); |
LCD_printfxy(0,2,"Roll %4i (%3i.%x)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16, (AdNeutralRoll%16)/2); |
LCD_printfxy(0,3,"Yaw %4i (%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2); |
} |
else |
if(PlatinenVersion == 13) |
{ |
LCD_printfxy(0,1,"Nick %4i (%3i)(%3i)",AdWertNick - AdNeutralNick/8, AdNeutralNick/16,AnalogOffsetNick); |
LCD_printfxy(0,2,"Roll %4i (%3i)(%3i)",AdWertRoll - AdNeutralRoll/8, AdNeutralRoll/16,AnalogOffsetRoll); |
LCD_printfxy(0,3,"Yaw %4i (%3i)(%3i)",AdNeutralGier - AdWertGier, AdNeutralGier/2,AnalogOffsetGier); |
} |
*/ |
break; |
case 6: |
LCD_printfxy(0,0,"ACC - Sensor"); |
LCD_printfxy(0,1,"Nick %4i (%3i)",AdWertAccNick,NeutralAccX); |
LCD_printfxy(0,2,"Roll %4i (%3i)",AdWertAccRoll,NeutralAccY); |
LCD_printfxy(0,3,"Z %4i (%3i)",AdWertAccHoch,(int)NeutralAccZ); |
break; |
case 7: |
LCD_printfxy(0,0,"Voltage: %3i.%1iV",UBat/10, UBat%10); |
LCD_printfxy(0,1,"Current: %3i.%1iA",Capacity.ActualCurrent/10, Capacity.ActualCurrent%10); |
LCD_printfxy(0,2,"Power: %4iW",Capacity.ActualPower); |
LCD_printfxy(0,3,"Discharge: %5imAh", Capacity.UsedCapacity); |
break; |
case 8: |
LCD_printfxy(0,0,"Receiver"); |
LCD_printfxy(0,2,"RC-Quality: %4i", SenderOkay); |
LCD_printfxy(0,3,"RC-Channels:%4i", Channels-1); |
break; |
case 9: |
LCD_printfxy(0,0,"Undervoltages " ); |
LCD_printfxy(0,1,"Warn: %2d.%dV",BattLowVoltageWarning/10,BattLowVoltageWarning%10); |
LCD_printfxy(0,2,"Home: %2d.%dV",BattComingHomeVoltage/10,BattComingHomeVoltage%10); |
LCD_printfxy(0,3,"Land: %2d.%dV",BattAutoLandingVoltage/10,BattAutoLandingVoltage%10); |
break; |
case 10: |
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+1,Poti[i]); |
break; |
case 11: |
for(i=0;i<4;i++) LCD_printfxy(0,i,"Poti%i: %3i",i+5,Poti[i+4]); |
break; |
case 12: |
LCD_printfxy(0,0,"Flight-Time " ); |
LCD_printfxy(0,1,"Total:%5umin",FlugMinutenGesamt); |
LCD_printfxy(0,2,"Act: %5umin",FlugMinuten); |
LCD_printfxy(13,3,"(reset)"); |
if(RemoteKeys & KEY4) |
{ |
FlugMinuten = 0; |
SetParamWord(PID_FLIGHT_MINUTES, FlugMinuten); |
} |
break; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
case 13: |
LCD_printfxy(0,0,"Compass"); |
LCD_printfxy(0,1,"Magnet: %5i",KompassValue); |
LCD_printfxy(0,2,"Gyro: %5i",ErsatzKompassInGrad); |
LCD_printfxy(0,3,"True: %5i",CompassCorrected); |
break; |
case 14: |
LCD_printfxy(0,0,"Servo " ); |
LCD_printfxy(0,1,"Setpoint %3i",Parameter_ServoNickControl); |
LCD_printfxy(0,2,"Position: %3i",ServoNickValue/4); |
LCD_printfxy(0,3,"Range:%3i-%3i",EE_Parameter.ServoNickMin,EE_Parameter.ServoNickMax); |
break; |
case 15: |
LCD_printfxy(0,0,"BL-Ctrl Errors " ); |
for(i=0;i<3;i++) |
{ |
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+1].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+2].State & MOTOR_STATE_ERROR_MASK,Motor[i*4+3].State & MOTOR_STATE_ERROR_MASK); |
} |
break; |
case 16: |
LCD_printfxy(0,0,"BL Temperature" ); |
for(i=0;i<3;i++) |
{ |
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",Motor[i*4].Temperature,Motor[i*4+1].Temperature,Motor[i*4+2].Temperature,Motor[i*4+3].Temperature); |
} |
break; |
case 17: |
LCD_printfxy(0,0,"BL Current" ); |
LCD_printfxy(11,3,"(in 0.1A)" ); |
for(i=0;i<3;i++) |
{ |
LCD_printfxy(0,i+1,"%3d %3d %3d %3d ",BL3_Current(i*4),BL3_Current(i*4+1),BL3_Current(i*4+2),BL3_Current(i*4+3)); |
if(4 + i * 4 >= RequiredMotors) break; |
} |
break; |
case 18: |
LCD_printfxy(0,0,"BL-Ctrl found " ); |
LCD_printfxy(0,1," %c %c %c %c ",'-' + 4 * (Motor[0].State>>7),'-' + 5 * (Motor[1].State>>7),'-' + 6 * (Motor[2].State>>7),'-' + 7 * (Motor[3].State>>7)); |
LCD_printfxy(0,2," %c %c %c %c ",'-' + 8 * (Motor[4].State>>7),'-' + 9 * (Motor[5].State>>7),'-' + 10 * (Motor[6].State>>7),'-' + 11 * (Motor[7].State>>7)); |
LCD_printfxy(0,3," %c - - - ",'-' + 12 * (Motor[8].State>>7)); |
if(Motor[9].State>>7) LCD_printfxy(4,3,"10"); |
if(Motor[10].State>>7) LCD_printfxy(8,3,"11"); |
if(Motor[11].State>>7) LCD_printfxy(12,3,"12"); |
break; |
#endif |
default: |
if(MenuePunkt == MaxMenue) MaxMenue--; |
MenuePunkt = 0; |
break; |
} |
RemoteKeys = 0; |
} |
/tags/V2.06a/menu.h |
---|
0,0 → 1,17 |
#ifndef _MENU_H |
#define _MENU_H |
extern void Menu(void); |
extern void LcdClear(void); |
extern void Menu_Putchar(char c); |
extern char DisplayBuff[80]; |
extern unsigned char DispPtr; |
extern unsigned char MaxMenue; |
extern unsigned char MenuePunkt; |
extern unsigned char RemoteKeys; |
#define LCD_printfxy(x,y,format, args...) { DispPtr = (y) * 20 + (x); _printf_P(&Menu_Putchar,PSTR(format) , ## args);} |
#define LCD_printf(format, args...) { _printf_P(&Menu_Putchar, PSTR(format) , ## args);} |
#endif //_MENU_H |
/tags/V2.06a/mymath.c |
---|
0,0 → 1,41 |
#include <stdlib.h> |
#include <avr/pgmspace.h> |
#include "mymath.h" |
// discrete mathematics |
// Sinus with argument in degree at an angular resolution of 1 degree and a discretisation of 13 bit. |
const uint16_t pgm_sinlookup[91] PROGMEM = {0, 143, 286, 429, 571, 714, 856, 998, 1140, 1282, 1423, 1563, 1703, 1843, 1982, 2120, 2258, 2395, 2531, 2667, 2802, 2936, 3069, 3201, 3332, 3462, 3591, 3719, 3846, 3972, 4096, 4219, 4341, 4462, 4581, 4699, 4815, 4930, 5043, 5155, 5266, 5374, 5482, 5587, 5691, 5793, 5893, 5991, 6088, 6183, 6275, 6366, 6455, 6542, 6627, 6710, 6791, 6870, 6947, 7022, 7094, 7165, 7233, 7299, 7363, 7424, 7484, 7541, 7595, 7648, 7698, 7746, 7791, 7834, 7875, 7913, 7949, 7982, 8013, 8041, 8068, 8091, 8112, 8131, 8147, 8161, 8172, 8181, 8187, 8191, 8192}; |
int16_t c_sin_8192(int16_t angle) |
{ |
int8_t m,n; |
int16_t sinus; |
// avoid negative angles |
if (angle < 0) |
{ |
m = -1; |
angle = abs(angle); |
} |
else m = +1; |
// fold angle to intervall 0 to 359 |
angle %= 360; |
// check quadrant |
if (angle <= 90) n=1; // first quadrant |
else if ((angle > 90) && (angle <= 180)) {angle = 180 - angle; n = 1;} // second quadrant |
else if ((angle > 180) && (angle <= 270)) {angle = angle - 180; n = -1;} // third quadrant |
else {angle = 360 - angle; n = -1;} //fourth quadrant |
// get lookup value |
sinus = pgm_read_word(&pgm_sinlookup[angle]); |
// calculate sinus value |
return (sinus * m * n); |
} |
// Cosinus with argument in degree at an angular resolution of 1 degree and a discretisation of 13 bit. |
int16_t c_cos_8192(int16_t angle) |
{ |
return (c_sin_8192(90 - angle)); |
} |
/tags/V2.06a/mymath.h |
---|
0,0 → 1,10 |
#ifndef _MYMATH_H |
#define _MYMATH_H |
#include <inttypes.h> |
extern int16_t c_sin_8192(int16_t angle); |
extern int16_t c_cos_8192(int16_t angle); |
extern int16_t c_atan2(int16_t y, int16_t x); |
extern uint32_t c_sqrt(uint32_t a); |
#endif // _MYMATH_H |
/tags/V2.06a/old_macros.h |
---|
0,0 → 1,47 |
/* |
For backwards compatibility only. |
Ingo Busker ingo@mikrocontroller.com |
*/ |
#ifndef cbi |
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) |
#endif |
#ifndef sbi |
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) |
#endif |
#ifndef inb |
#define inb(sfr) _SFR_BYTE(sfr) |
#endif |
#ifndef outb |
#define outb(sfr, val) (_SFR_BYTE(sfr) = (val)) |
#endif |
#ifndef inw |
#define inw(sfr) _SFR_WORD(sfr) |
#endif |
#ifndef outw |
#define outw(sfr, val) (_SFR_WORD(sfr) = (val)) |
#endif |
#ifndef outp |
#define outp(val, sfr) outb(sfr, val) |
#endif |
#ifndef inp |
#define inp(sfr) inb(sfr) |
#endif |
#ifndef BV |
#define BV(bit) _BV(bit) |
#endif |
#ifndef PRG_RDB |
#define PRG_RDB pgm_read_byte |
#endif |
/tags/V2.06a/printf_P.h |
---|
0,0 → 1,69 |
// Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist nicht von der Lizenz für den MikroKopter-Teil unterstellt |
/* |
Copyright (C) 1993 Free Software Foundation |
This file is part of the GNU IO Library. This library is free |
software; you can redistribute it and/or modify it under the |
terms of the GNU General Public License as published by the |
Free Software Foundation; either version 2, or (at your option) |
any later version. |
This library is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this library; see the file COPYING. If not, write to the Free |
Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
As a special exception, if you link this library with files |
compiled with a GNU compiler to produce an executable, this does not cause |
the resulting executable to be covered by the GNU General Public License. |
This exception does not however invalidate any other reasons why |
the executable file might be covered by the GNU General Public License. */ |
/* |
* Copyright (c) 1990 Regents of the University of California. |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. [rescinded 22 July 1999] |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
*/ |
/******************************************************************************/ |
#ifndef _PRINTF_P_H_ |
#define _PRINTF_P_H_ |
#include <avr/pgmspace.h> |
// function pointer to external callback function |
typedef void (*pVoidFnctChar) (char ); |
typedef void (*pVoidFnct_pVoidFnctChar_const_fmt) (pVoidFnctChar, char const *fmt0, ...); |
extern pVoidFnct_pVoidFnctChar_const_fmt _printf_P; |
#endif //_PRINTF_P_H_ |
/tags/V2.06a/rc.c |
---|
0,0 → 1,285 |
/*####################################################################################### |
Decodieren eines RC Summen Signals |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "rc.h" |
#include "main.h" |
// Achtung: ACT_S3D_SUMMENSIGNAL wird in der Main.h gesetzt |
#define MAX_RC_IN 16+12+3+4 // 16ch + 12ser + 3stages + 4 reserved |
volatile int PPM_in[MAX_RC_IN]; |
volatile int PPM_diff[MAX_RC_IN]; // das differnzierte Stick-Signal |
volatile char Channels,tmpChannels = 0; |
volatile unsigned char NewPpmData = 1; |
unsigned int PPM_Neutral = 466; |
//############################################################################ |
// Clear the values |
void rc_sum_init(void) |
//############################################################################ |
{ |
unsigned char i; |
for(i=0;i<MAX_RC_IN;i++) |
{ |
if(i < 5) PPM_in[i] = 0; else PPM_in[i] = -127; |
PPM_diff[i] = 0; |
} |
PPM_in[PPM_IN_MAX] = +127; |
PPM_in[PPM_IN_OFF] = -127; |
PPM_in[PPM_IN_MID] = 0; |
AdNeutralGier = 0; |
AdNeutralRoll = 0; |
AdNeutralNick = 0; |
return; |
} |
#ifndef ACT_S3D_SUMMENSIGNAL |
//############################################################################ |
// Interrupt function for the PPM-Input |
ISR(TIMER1_CAPT_vect) |
//############################################################################ |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(!(EE_Parameter.ExtraConfig & CFG_SENSITIVE_RC)) |
#endif |
{ |
static unsigned int AltICR=0; |
signed int signal = 0,tmp; |
static int index; |
signal = (unsigned int) ICR1 - AltICR; |
AltICR = ICR1; |
//Syncronisationspause? (3.52 ms < signal < 25.6 ms) |
if((signal > 1100) && (signal < 8000)) |
{ |
Channels = index; |
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten |
index = 1; |
} |
else |
{ |
if(index < 13+4) |
{ |
if((signal > 250) && (signal < 687)) |
{ |
signal -= PPM_Neutral; |
// Stabiles Signal |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10; else SenderOkay = 200;} |
} |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
else PPM_diff[index] = 0; |
PPM_in[index] = tmp; |
} |
index++; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#else |
/* |
if(PlatinenVersion < 20) |
{ |
if(index == 5) J3High; else J3Low; // Servosignal an J3 anlegen |
if(index == 6) J4High; else J4Low; // Servosignal an J4 anlegen |
if(index == 7) J5High; else J5Low; // Servosignal an J5 anlegen |
} |
*/ |
#endif |
} |
} |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
else |
{ |
static unsigned int AltICR=0; |
static int ppm_in[13+4]; |
static int ppm_diff[13+4]; |
static int old_ppm_in[13+4]; |
static int old_ppm_diff[13+4]; |
signed int signal = 0,tmp; |
static unsigned char index, okay_cnt = 0; |
signal = (unsigned int) ICR1 - AltICR; |
AltICR = ICR1; |
//Syncronisationspause? (3.52 ms < signal < 25.6 ms) |
if((signal > 1100) && (signal < 8000)) |
{ |
tmpChannels = index; |
if(tmpChannels >= 4 && Channels == tmpChannels) |
{ |
if(okay_cnt > 10) |
{ |
NewPpmData = 0; // Null bedeutet: Neue Daten |
for(index = 0; index < 13+4; index++) |
{ |
if(okay_cnt > 30) |
{ |
old_ppm_in[index] = PPM_in[index]; |
old_ppm_diff[index] = PPM_diff[index]; |
} |
PPM_in[index] = ppm_in[index]; |
PPM_diff[index] = ppm_diff[index]; |
} |
} |
if(okay_cnt < 255) okay_cnt++; |
} |
else |
{ |
if(okay_cnt > 100) okay_cnt = 10; else okay_cnt = 0; |
ROT_ON; |
} |
index = 1; |
if(!MotorenEin) Channels = tmpChannels; |
} |
else |
{ |
if(index < 13+4) |
{ |
if((signal > 250) && (signal < 687)) |
{ |
signal -= PPM_Neutral; |
// Stabiles Signal |
if((abs(signal - ppm_in[index]) < 6)) |
{ |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(okay_cnt > 25) SenderOkay += 10; |
else |
if(okay_cnt > 10) SenderOkay += 2; |
if(SenderOkay > 200) SenderOkay = 200; |
} |
} |
tmp = (3 * (ppm_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 190) ppm_diff[index] = ((tmp - ppm_in[index]) / 3) * 3; |
else ppm_diff[index] = 0; |
ppm_in[index] = tmp; |
} |
else ROT_ON; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
#else |
if(PlatinenVersion < 20) |
{ |
if(index == 5) J3High; else J3Low; // Servosignal an J3 anlegen |
if(index == 6) J4High; else J4Low; // Servosignal an J4 anlegen |
if(index == 7) J5High; else J5Low; // Servosignal an J5 anlegen |
} |
#endif |
} |
if(index < 20) index++; |
else |
if(index == 20) |
{ |
unsigned char i; |
ROT_ON; |
index = 30; |
for(i=0;i<13+4;i++) // restore from older data |
{ |
PPM_in[i] = old_ppm_in[i]; |
PPM_diff[i] = 0; |
// okay_cnt /= 2; |
} |
} |
} |
} |
#endif |
} |
#else |
//############################################################################ |
// Interrupt function for the PPM-Input |
ISR(TIMER1_CAPT_vect) |
//############################################################################ |
{ |
static unsigned int AltICR=0; |
signed int signal = 0,tmp; |
static int index; |
signal = (unsigned int) ICR1 - AltICR; |
signal /= 2; |
AltICR = ICR1; |
//Syncronisationspause? |
if((signal > 1100*2) && (signal < 8000*2)) |
{ |
if(index >= 4) NewPpmData = 0; // Null bedeutet: Neue Daten |
index = 1; |
} |
else |
{ |
if(index < 13) |
{ |
if((signal > 250) && (signal < 687*2)) |
{ |
signal -= 962; |
// Stabiles Signal |
if(abs(signal - PPM_in[index]) < 6) { if(SenderOkay < 200) SenderOkay += 10;} |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
else PPM_diff[index] = 0; |
PPM_in[index] = tmp; |
} |
index++; |
} |
} |
} |
#endif |
/tags/V2.06a/rc.h |
---|
0,0 → 1,42 |
/*####################################################################################### |
Derkodieren eines RC Summen Signals |
#######################################################################################*/ |
#ifndef _RC_H |
#define _RC_H |
#if defined (__AVR_ATmega644__) |
#define TIMER_RELOAD_VALUE 250 |
#endif |
#if defined (__AVR_ATmega644P__) |
#define TIMER_RELOAD_VALUE 250 |
#endif |
#define MAX_RC_IN 16+12+3+4 // 16ch + 12ser + 3stages + 4 reserved |
extern void rc_sum_init (void); |
extern volatile int PPM_in[MAX_RC_IN]; |
extern volatile int PPM_diff[MAX_RC_IN]; // das diffenzierte Stick-Signal |
extern volatile unsigned char NewPpmData; |
extern volatile char Channels,tmpChannels; |
extern unsigned int PPM_Neutral; |
// 0 -> frei bzw. ACT rssi |
// 1 - 16 -> 1-16 |
// 17 - 28 -> 12 Serial channels |
// 29 -> WP-Event kanal |
// 30 -> -127 |
// 31 -> 0 |
// 32 -> 128 |
#define SERIAL_POTI_START 17 |
#define WP_EVENT_PPM_IN 29 |
#define PPM_IN_OFF 30 |
#define PPM_IN_MAX 31 |
#define PPM_IN_MID 32 |
#define FromNC_WP_EventChannel PPM_in[WP_EVENT_PPM_IN] // WP_EVENT-Channel-Value |
#endif //_RC_H |
/tags/V2.06a/sbus.c |
---|
0,0 → 1,199 |
/*####################################################################################### |
Decodes the sbus protocol |
#######################################################################################*/ |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "sbus.h" |
#include "main.h" |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
unsigned char NewSBusData = 0, sBusBuffer[25]; |
//############################################################################ |
// USART1 initialisation from killagreg |
void SbusUartInit(void) |
//############################################################################ |
{ |
// -- Start of USART1 initialisation for Spekturm seriell-mode |
// USART1 Control and Status Register A, B, C and baud rate register |
uint8_t sreg = SREG; |
uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 100000) - 1); |
// disable all interrupts before reconfiguration |
cli(); |
// disable RX-Interrupt |
UCSR1B &= ~(1 << RXCIE1); |
// disable TX-Interrupt |
UCSR1B &= ~(1 << TXCIE1); |
// disable DRE-Interrupt |
UCSR1B &= ~(1 << UDRIE1); |
/* |
// set direction of RXD1 and TXD1 pins |
// set RXD1 (PD2) as an input pin |
PORTD |= (1 << PORTD2); |
DDRD &= ~(1 << DDD2); |
// set TXD1 (PD3) as an output pin |
PORTD |= (1 << PORTD3); |
DDRD |= (1 << DDD3); |
*/ |
// USART0 Baud Rate Register |
// set clock divider |
UBRR1H = (uint8_t)(ubrr>>8); |
UBRR1L = (uint8_t)ubrr; |
// enable double speed operation |
UCSR1A |= (1 << U2X1); |
// enable receiver and transmitter |
//UCSR1B = (1<<RXEN1)|(1<<TXEN1); |
UCSR1B = (1<<RXEN1); |
// set asynchronous mode |
UCSR1C &= ~(1 << UMSEL11); |
UCSR1C &= ~(1 << UMSEL10); |
// parity |
UCSR1C <= (1 << UPM11); // even |
UCSR1C &= ~(1 << UPM10); |
// stop bit |
UCSR1C |= (1 << USBS1); // two |
// 8-bit |
UCSR1B &= ~(1 << UCSZ12); |
UCSR1C |= (1 << UCSZ11); |
UCSR1C |= (1 << UCSZ10); |
// flush receive buffer explicit |
while(UCSR1A & (1<<RXC1)) UDR1; |
// enable RX-interrupts at the end |
UCSR1B |= (1 << RXCIE1); |
// -- End of USART1 initialisation |
// restore global interrupt flags |
sBusBuffer[23] |= 4; // This Bit contains the 'Signal loss' |
SREG = sreg; |
return; |
} |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#define MIN_FRAMEGAP 68 // 7ms |
#define MAX_BYTEGAP 3 // 310us |
//############################################################################ |
// Is called by the uart RX interrupt |
//############################################################################ |
void SbusParser(unsigned char udr) |
{ |
static unsigned char ptr = 0; |
if(!SpektrumTimer && udr == 0x0f) // wait for the start |
{ |
ptr = 0; |
SpektrumTimer = 80; // 8ms gap |
} |
else |
{ |
if(++ptr == 24) // last byte |
{ |
NewSBusData = 1; |
} |
else |
if(ptr > 24) ptr = 25; |
else |
{ |
sBusBuffer[ptr] = udr; // collect all bytes |
} |
} |
} |
void ProcessSBus(void) |
{ |
static unsigned char load = 0; |
unsigned char bitmask8 = 1, sbyte = 2, i, index = 1, process; |
unsigned int bitmask11 = 256; |
signed int signal = 0,tmp; |
if(!(sBusBuffer[23] & 4)) // This Bit contains the 'Signal loss' |
{ |
TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input |
if(EE_Parameter.FailsafeChannel == 0 || PPM_in[EE_Parameter.FailsafeChannel] < 100) // forces Failsafe if the receiver doesn't have 'signal loss' on Failsafe |
{ |
if(SenderOkay < 200) SenderOkay += 20; else SenderOkay = 200; |
} |
signal = sBusBuffer[1]; |
if(!load--) { process = (16*11 - 8); load = 2;} else process = (4*11 - 8); // lowers the processor load |
for(i = 0; i < process; i++) // collect the single bits |
{ |
if(sBusBuffer[sbyte] & bitmask8) signal |= bitmask11; |
bitmask8 *= 2; |
if(!bitmask8) |
{ |
bitmask8 = 1; |
sbyte++; |
} |
bitmask11 *= 2; |
if(bitmask11 == 2048) |
{ |
bitmask11 = 1; |
signal = (signal-1024) / 5; // the resolution is higher than required |
tmp = (3 * (PPM_in[index]) + signal) / 4; |
if(tmp > signal+1) tmp--; else |
if(tmp < signal-1) tmp++; |
if(SenderOkay >= 195) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3; |
else PPM_diff[index] = 0; |
PPM_in[index] = tmp; |
signal = 0; |
index++; // next channel |
} |
} |
NewPpmData = 0; // Null bedeutet: Neue Daten |
} |
NewSBusData = 0; |
} |
#endif |
/tags/V2.06a/sbus.h |
---|
0,0 → 1,11 |
#ifndef _SBUS_H |
#define _SBUS_H |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
extern unsigned char NewSBusData, sBusBuffer[25]; |
extern void SbusParser(unsigned char); |
extern void SbusUartInit(void); |
extern void ProcessSBus(void); |
#endif |
#endif |
/tags/V2.06a/spi.c |
---|
0,0 → 1,416 |
// ######################## SPI - FlightCtrl ################### |
#include "main.h" |
#include "eeprom.h" |
//struct str_ToNaviCtrl_Version ToNaviCtrl_Version; |
//struct str_FromNaviCtrl_Version FromNaviCtrl_Version; |
struct str_ToNaviCtrl ToNaviCtrl; |
struct str_FromNaviCtrl FromNaviCtrl; |
struct str_FromNaviCtrl_Value FromNaviCtrl_Value; |
struct str_SPI_VersionInfo NC_Version; |
struct str_GPSInfo GPSInfo; |
unsigned char SPI_BufferIndex; |
unsigned char SPI_RxBufferIndex; |
signed char FromNC_Rotate_C = 32, FromNC_Rotate_S = 0; |
volatile unsigned char SPI_Buffer[sizeof(FromNaviCtrl)]; |
unsigned char *SPI_TX_Buffer; |
unsigned char SPITransferCompleted, SPI_ChkSum; |
unsigned char SPI_RxDataValid,NaviDataOkay = 250; |
unsigned char SPI_CommandSequence[] = { SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_PARAMETER1, |
SPI_FCCMD_STICK, SPI_FCCMD_VERSION, SPI_FCCMD_BL_ACCU, |
SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_MISC,SPI_FCCMD_SERVOS, |
SPI_FCCMD_STICK, SPI_FCCMD_PARAMETER2, SPI_FCCMD_BL_ACCU |
}; |
unsigned char SPI_CommandCounter = 0; |
unsigned char NC_ErrorCode = 0; |
unsigned char NC_GPS_ModeCharacter = ' '; |
unsigned char EarthMagneticField = 0; |
unsigned char EarthMagneticInclination = 0, EarthMagneticInclinationTheoretic = 0; |
unsigned char NC_To_FC_Flags = 0; |
//unsigned char NC_To_FC_MaxAltitude = 0; // this is a Parameter on the SD-card |
signed int POI_KameraNick = 0; // in 0,1° |
vector16_t MagVec = {0,0,0}; |
#ifdef USE_SPI_COMMUNICATION |
//------------------------------------------------------ |
void SPI_MasterInit(void) |
{ |
DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK); // Set MOSI and SCK output, all others input |
SLAVE_SELECT_DDR_PORT |= (1 << SPI_SLAVE_SELECT); |
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(0<<SPR0)|(0<<SPIE); // Enable SPI, Master, set clock rate fck/64 |
SPSR = 0;//(1<<SPI2X); |
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); |
SPITransferCompleted = 1; |
//SPDR = 0x00; // dummy write |
ToNaviCtrl.Sync1 = 0xAA; |
ToNaviCtrl.Sync2 = 0x83; |
ToNaviCtrl.Command = SPI_FCCMD_USER; |
ToNaviCtrl.IntegralNick = 0; |
ToNaviCtrl.IntegralRoll = 0; |
FromNaviCtrl_Value.SerialDataOkay = 0; |
SPI_RxDataValid = 0; |
} |
//------------------------------------------------------ |
unsigned char SPI_StartTransmitPacket(void) |
{ |
if(!SPITransferCompleted) return(0); |
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave |
SPI_TX_Buffer = (unsigned char *) &ToNaviCtrl; |
ToNaviCtrl.Command = SPI_CommandSequence[SPI_CommandCounter++]; |
if (SPI_CommandCounter >= sizeof(SPI_CommandSequence)) SPI_CommandCounter = 0; |
SPITransferCompleted = 0; |
UpdateSPI_Buffer(); // update buffer |
SPI_BufferIndex = 1; |
ToNaviCtrl.Chksum = ToNaviCtrl.Sync1; |
SPDR = ToNaviCtrl.Sync1; // Start transmission |
return(1); |
} |
//------------------------------------------------------ |
//SIGNAL(SIG_SPI) |
void SPI_TransmitByte(void) |
{ |
static unsigned char SPI_RXState = 0; |
unsigned char rxdata; |
static unsigned char rxchksum; |
if (SPITransferCompleted) return; |
if (!(SPSR & (1 << SPIF))) return; |
BytegapSPI = SPI_BYTEGAP; |
// _delay_us(30); |
SLAVE_SELECT_PORT |= (1 << SPI_SLAVE_SELECT); // DeselectSlave |
rxdata = SPDR; |
switch ( SPI_RXState) |
{ |
case 0: |
SPI_RxBufferIndex = 0; |
rxchksum = rxdata; |
if (rxdata == 0x81 ) { SPI_RXState = 1; } // 1. Syncbyte ok |
break; |
case 1: |
if (rxdata == 0x55) { rxchksum += rxdata; SPI_RXState = 2; } // 2. Syncbyte ok |
else SPI_RXState = 0; |
break; |
case 2: |
SPI_Buffer[SPI_RxBufferIndex++]= rxdata; // get data |
//DebugOut.Analog[19]++; |
if (SPI_RxBufferIndex >= sizeof(FromNaviCtrl)) |
{ |
if (rxdata == rxchksum) |
{ |
unsigned char *ptr = (unsigned char *)&FromNaviCtrl; |
memcpy(ptr, (unsigned char *) SPI_Buffer, sizeof(SPI_Buffer)); |
SPI_RxDataValid = 1; |
} |
else |
{ |
SPI_RxDataValid = 0; |
} |
SPI_RXState = 0; |
} |
else rxchksum += rxdata; |
break; |
} |
if (SPI_BufferIndex < sizeof(ToNaviCtrl)) |
{ |
SLAVE_SELECT_PORT &= ~(1 << SPI_SLAVE_SELECT); // SelectSlave |
asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); |
SPDR = SPI_TX_Buffer[SPI_BufferIndex]; |
ToNaviCtrl.Chksum += SPI_TX_Buffer[SPI_BufferIndex]; |
} |
else SPITransferCompleted = 1; |
SPI_BufferIndex++; |
} |
//------------------------------------------------------ |
void UpdateSPI_Buffer(void) |
{ |
signed int tmp; |
static unsigned char motorindex, oldcommand = SPI_NCCMD_VERSION; |
ToNaviCtrl.IntegralNick = (int) (IntegralNick / (long)(EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
ToNaviCtrl.IntegralRoll = (int) (IntegralRoll / (long)(EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
ToNaviCtrl.GyroCompass = (10 * ErsatzKompass) / GIER_GRAD_FAKTOR; |
ToNaviCtrl.GyroGier = (signed int) AdNeutralGier - AdWertGier; |
ToNaviCtrl.AccNick = ((int) ACC_AMPLIFY * (NaviAccNick / NaviCntAcc))/4; |
ToNaviCtrl.AccRoll = ((int) ACC_AMPLIFY * (NaviAccRoll / NaviCntAcc))/4; |
NaviCntAcc = 0; NaviAccNick = 0; NaviAccRoll = 0; |
// ToNaviCtrl.User8 = Parameter_UserParam8; |
// ToNaviCtrl.CalState = WinkelOut.CalcState; |
switch(ToNaviCtrl.Command) // |
{ |
case SPI_FCCMD_USER: |
ToNaviCtrl.Param.Byte[0] = Parameter_UserParam1; |
ToNaviCtrl.Param.Byte[1] = Parameter_UserParam2; |
ToNaviCtrl.Param.Byte[2] = Parameter_UserParam3; |
ToNaviCtrl.Param.Byte[3] = Parameter_UserParam4; |
ToNaviCtrl.Param.Byte[4] = Parameter_UserParam5; |
ToNaviCtrl.Param.Byte[5] = Parameter_UserParam6; |
ToNaviCtrl.Param.Byte[6] = Parameter_UserParam7; |
ToNaviCtrl.Param.Byte[7] = Parameter_UserParam8; |
ToNaviCtrl.Param.Byte[8] = FC_StatusFlags; |
//if(FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF) ToNaviCtrl.Param.Byte[8] &= ~FC_STATUS_FLY; |
FC_StatusFlags &= ~(FC_STATUS_CALIBRATE | FC_STATUS_START); |
ToNaviCtrl.Param.Byte[9] = ActiveParamSet; |
ToNaviCtrl.Param.Byte[10] = (unsigned char) UBat; // 0.1V |
ToNaviCtrl.Param.Byte[11] = FC_StatusFlags2; |
if(!(PORTC & (1<<PORTC2))) FC_StatusFlags2 &= ~FC_STATUS2_OUT1_ACTIVE; // Out1 (J16) |
break; |
case SPI_FCCMD_BL_ACCU: |
ToNaviCtrl.Param.Int[0] = Capacity.ActualCurrent; // 0.1A |
ToNaviCtrl.Param.Byte[2] = motorindex; |
ToNaviCtrl.Param.Byte[3] = Capacity.MinOfMaxPWM; |
ToNaviCtrl.Param.Byte[4] = GetChannelValue(EE_Parameter.NaviGpsModeChannel); // GPS-Mode control |
ToNaviCtrl.Param.Byte[5] = VarioCharacter; |
ToNaviCtrl.Param.Byte[6] = Motor[motorindex].NotReadyCnt; |
ToNaviCtrl.Param.Byte[7] = Motor[motorindex].Version; |
ToNaviCtrl.Param.Byte[8] = Motor[motorindex].MaxPWM; |
ToNaviCtrl.Param.Byte[9] = Motor[motorindex].State; |
ToNaviCtrl.Param.Byte[10] = Motor[motorindex].Temperature; |
ToNaviCtrl.Param.Byte[11] = Motor[motorindex].Current; |
if(Mixer.Motor[++motorindex][0] <= 0) // next motor is not used ? |
while(Mixer.Motor[motorindex][0] <= 0 && motorindex) motorindex = (motorindex + 1) % 13; |
break; |
case SPI_FCCMD_PARAMETER1: |
ToNaviCtrl.Param.Byte[0] = (unsigned char) BattLowVoltageWarning; //0.1V |
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviGpsGain; // Parameters for the Naviboard |
ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviGpsP; |
ToNaviCtrl.Param.Byte[3] = EE_Parameter.NaviGpsI; |
ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsD; |
ToNaviCtrl.Param.Byte[5] = EE_Parameter.NaviGpsA; |
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsMinSat; |
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviStickThreshold; |
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviMaxFlyingRange; |
ToNaviCtrl.Param.Byte[9] = EE_Parameter.NaviWindCorrection; |
ToNaviCtrl.Param.Byte[10] = EE_Parameter.NaviAccCompensation; |
ToNaviCtrl.Param.Byte[11] = EE_Parameter.NaviAngleLimitation; |
break; |
case SPI_FCCMD_PARAMETER2: |
ToNaviCtrl.Param.Byte[0] = EE_Parameter.AutoPhotoDistance; // Distance between Photo releases |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
// create the ToNC_SpeakHoTT |
if(EE_Parameter.Receiver != RECEIVER_HOTT) |
{ |
if(JetiBeep != 'B') JetiBeep = pgm_read_byte(&JETI_CODE[HoTT_Waring()]); |
else HoTT_Waring(); |
} |
ToNaviCtrl.Param.Byte[1] = ToNC_SpeakHoTT; |
#else |
ToNaviCtrl.Param.Byte[1] = 0; |
#endif |
ToNaviCtrl.Param.Byte[2] = EE_Parameter.LandingSpeed; |
ToNaviCtrl.Param.Byte[3] = EE_Parameter.ComingHomeAltitude; |
ToNaviCtrl.Param.Byte[4] = LowVoltageHomeActive; |
ToNaviCtrl.Param.Byte[5] = ToNC_Load_WP_List; |
ToNaviCtrl.Param.Byte[6] = ToNC_Load_SingePoint; |
ToNaviCtrl.Param.Byte[7] = ToNC_Store_SingePoint; |
ToNC_Load_WP_List = 0; |
ToNC_Load_SingePoint = 0; |
ToNC_Store_SingePoint = 0; |
ToNaviCtrl.Param.sInt[4] = KompassSollWert; // Pos. 8 & 9 |
ToNaviCtrl.Param.Byte[10] = EE_Parameter.AutoPhotoAtitudes; |
ToNaviCtrl.Param.Byte[11] = EE_Parameter.SingleWpSpeed; |
break; |
case SPI_FCCMD_STICK: |
cli(); |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
ToNaviCtrl.Param.Byte[0] = (char) tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
ToNaviCtrl.Param.Byte[1] = (char) tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
ToNaviCtrl.Param.Byte[2] = (char) tmp; |
tmp = PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127; |
sei(); |
ToNaviCtrl.Param.Byte[3] = (char) tmp; |
ToNaviCtrl.Param.Byte[4] = (unsigned char) Poti[0]; |
ToNaviCtrl.Param.Byte[5] = (unsigned char) Poti[1]; |
ToNaviCtrl.Param.Byte[6] = (unsigned char) Poti[2]; |
ToNaviCtrl.Param.Byte[7] = (unsigned char) Poti[3]; |
ToNaviCtrl.Param.Byte[8] = (unsigned char) Poti[4]; |
ToNaviCtrl.Param.Byte[9] = (unsigned char) Poti[5]; |
ToNaviCtrl.Param.Byte[10] = (unsigned char) Poti[6]; |
ToNaviCtrl.Param.Byte[11] = (unsigned char) Poti[7]; |
break; |
case SPI_FCCMD_MISC: |
if(WinkelOut.CalcState >= 5) |
{ |
WinkelOut.CalcState = 0; |
ToNaviCtrl.Param.Byte[0] = 5; |
} |
else ToNaviCtrl.Param.Byte[0] = WinkelOut.CalcState; |
ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviPH_LoginTime; |
ToNaviCtrl.Param.Int[1] = (int)(HoehenWert/5); |
ToNaviCtrl.Param.Int[2] = (int)(SollHoehe/5); |
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsPLimit; |
ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviGpsILimit; |
ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviGpsDLimit; |
ToNaviCtrl.Param.Byte[9] = (unsigned char) SenderOkay; |
ToNaviCtrl.Param.Byte[10] = NC_Wait_for_LED; |
ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[7] / 4; //GasMischanteil |
break; |
case SPI_FCCMD_VERSION: |
ToNaviCtrl.Param.Byte[0] = VERSION_MAJOR; |
ToNaviCtrl.Param.Byte[1] = VERSION_MINOR; |
ToNaviCtrl.Param.Byte[2] = VERSION_PATCH; |
ToNaviCtrl.Param.Byte[3] = NC_SPI_COMPATIBLE; |
ToNaviCtrl.Param.Byte[4] = PlatinenVersion; |
ToNaviCtrl.Param.Byte[5] = VersionInfo.HardwareError[0]; |
ToNaviCtrl.Param.Byte[6] = VersionInfo.HardwareError[1]; |
VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE; // VersionInfo.HardwareError[0] = 0; |
VersionInfo.HardwareError[1] &= FC_ERROR1_MIXER; |
ToNaviCtrl.Param.Byte[7] = EE_Parameter.CompassOffset; |
ToNaviCtrl.Param.Byte[8] = Parameter_GlobalConfig; |
ToNaviCtrl.Param.Byte[9] = Parameter_ExtraConfig; |
ToNaviCtrl.Param.Byte[10] = EE_Parameter.OrientationAngle; |
ToNaviCtrl.Param.Byte[11] = EE_Parameter.GlobalConfig3; |
break; |
case SPI_FCCMD_SERVOS: |
ToNaviCtrl.Param.Int[0] = Capacity.UsedCapacity; // mAh |
ToNaviCtrl.Param.Byte[2] = Parameter_ServoNickControl; |
ToNaviCtrl.Param.Byte[3] = Parameter_ServoRollControl; |
ToNaviCtrl.Param.Byte[4] = DebugOut.Analog[28]; // I2C-Error counter |
ToNaviCtrl.Param.Byte[5] = RedundanceBlOperation; |
ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviDescendRange; // in 10m |
ToNaviCtrl.Param.Byte[7] = Parameter_MaximumAltitude; |
ToNaviCtrl.Param.Int[4] = FlugMinutenGesamt; // 8 & 9 |
/* |
ToNaviCtrl.Param.Byte[10] = 0; |
ToNaviCtrl.Param.Byte[11] = 0; |
*/ |
break; |
} |
if(SPI_RxDataValid) |
{ |
if(FromNaviCtrl.Command != oldcommand) NaviDataOkay = 250; |
oldcommand = FromNaviCtrl.Command; |
CalculateCompassTimer = 1; |
if(abs(FromNaviCtrl.GPS_Nick) < 512 && abs(FromNaviCtrl.GPS_Roll) < 512 && (EE_Parameter.GlobalConfig & CFG_GPS_AKTIV)) |
{ |
GPS_Nick = FromNaviCtrl.GPS_Nick; |
GPS_Roll = FromNaviCtrl.GPS_Roll; |
} |
// update compass readings |
// MagVec.x = FromNaviCtrl.MagVecX; |
// MagVec.y = FromNaviCtrl.MagVecY; |
// MagVec.z = FromNaviCtrl.MagVecZ; |
if(FromNaviCtrl.CompassValue <= 360) KompassValue = FromNaviCtrl.CompassValue; |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
if(FromNaviCtrl.BeepTime > beeptime && !DisableRcOffBeeping) beeptime = FromNaviCtrl.BeepTime; |
switch (FromNaviCtrl.Command) |
{ |
case SPI_NCCMD_KALMAN: |
FromNaviCtrl_Value.Kalman_K = FromNaviCtrl.Param.sByte[0]; |
FromNaviCtrl_Value.Kalman_MaxFusion = FromNaviCtrl.Param.sByte[1]; |
FromNaviCtrl_Value.Kalman_MaxDrift = FromNaviCtrl.Param.sByte[2]; |
KompassFusion = FromNaviCtrl.Param.sByte[3]; |
FromNaviCtrl_Value.GpsZ = FromNaviCtrl.Param.Byte[4]; |
FromNC_Rotate_C = FromNaviCtrl.Param.Byte[5]; |
FromNC_Rotate_S = FromNaviCtrl.Param.Byte[6]; |
GPS_Aid_StickMultiplikator = FromNaviCtrl.Param.Byte[7]; |
if(CareFree && FromNaviCtrl.Param.sInt[4] >= 0) |
{ |
KompassSollWert = FromNaviCtrl.Param.sInt[4]; // bei Carefree kann NC den Kompass-Sollwinkel vorgeben |
if(EE_Parameter.CamOrientation) // Kamera angle is not front |
{ |
KompassSollWert += 360 - ((unsigned int) EE_Parameter.CamOrientation * 15); |
KompassSollWert %= 360; |
} |
} |
POI_KameraNick = (POI_KameraNick + FromNaviCtrl.Param.sInt[5]) / 2; // FromNaviCtrl.Param.sInt[5]; // Nickwinkel |
break; |
case SPI_NCCMD_VERSION: |
NC_Version.Major = FromNaviCtrl.Param.Byte[0]; |
NC_Version.Minor = FromNaviCtrl.Param.Byte[1]; |
NC_Version.Patch = FromNaviCtrl.Param.Byte[2]; |
NC_Version.Compatible = FromNaviCtrl.Param.Byte[3]; |
NC_Version.Hardware = FromNaviCtrl.Param.Byte[4]; |
DebugOut.Status[0] |= FromNaviCtrl.Param.Byte[5]; |
DebugOut.Status[1] = (DebugOut.Status[1] & (0x01|0x02)) | (FromNaviCtrl.Param.Byte[6] & (0x04 | 0x08)); |
NC_ErrorCode = FromNaviCtrl.Param.Byte[7]; |
NC_GPS_ModeCharacter = FromNaviCtrl.Param.Byte[8]; |
FromNaviCtrl_Value.SerialDataOkay = FromNaviCtrl.Param.Byte[9]; |
NC_To_FC_Flags = FromNaviCtrl.Param.Byte[10]; |
//NC_To_FC_MaxAltitude = FromNaviCtrl.Param.Byte[11]; |
break; |
case SPI_NCCMD_GPSINFO: |
GPSInfo.Flags = FromNaviCtrl.Param.Byte[0]; |
GPSInfo.NumOfSats = FromNaviCtrl.Param.Byte[1]; |
GPSInfo.SatFix = FromNaviCtrl.Param.Byte[2]; |
GPSInfo.Speed = FromNaviCtrl.Param.Byte[3]; |
GPSInfo.HomeDistance = FromNaviCtrl.Param.Int[2]; |
GPSInfo.HomeBearing = FromNaviCtrl.Param.sInt[3]; |
PPM_in[WP_EVENT_PPM_IN] = (signed char) FromNaviCtrl.Param.Byte[8]; // WP_EVENT-Channel-Value (FromNC_WP_EventChannel) |
FromNC_AltitudeSpeed = FromNaviCtrl.Param.Byte[9]; |
FromNC_AltitudeSetpoint = (long) FromNaviCtrl.Param.sInt[5] * 10; // in cm |
break; |
case SPI_MISC: |
EarthMagneticField = FromNaviCtrl.Param.Byte[0]; |
EarthMagneticInclination = FromNaviCtrl.Param.Byte[1]; |
EarthMagneticInclinationTheoretic = FromNaviCtrl.Param.Byte[2]; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(FromNaviCtrl.Param.Byte[3]) |
if(!SpeakHoTT || (SpeakHoTT >= SPEAK_GPS_HOLD && SpeakHoTT <= SPEAK_GPS_OFF)) SpeakHoTT = FromNaviCtrl.Param.Byte[3]; |
NaviData_TargetDistance = FromNaviCtrl.Param.Int[3]; |
#endif |
NaviData_WaypointIndex = FromNaviCtrl.Param.Byte[4]; |
NaviData_WaypointNumber = FromNaviCtrl.Param.Byte[5]; |
NaviData_TargetHoldTime = FromNaviCtrl.Param.Byte[8]; |
NaviData_MaxWpListIndex = FromNaviCtrl.Param.Byte[9]; |
CompassCorrected = FromNaviCtrl.Param.sInt[5]; // Bytes 10 & 11 |
break; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
case SPI_NCCMD_HOTT_DATA: |
//if(EE_Parameter.Receiver == RECEIVER_HOTT) |
NC_Fills_HoTT_Telemety(); |
break; |
#endif |
// 0 = 0,1 |
// 1 = 2,3 |
// 2 = 4,5 |
// 3 = 6,7 |
// 4 = 8,9 |
// 5 = 10,11 |
default: |
break; |
} |
} |
else |
{ |
// KompassValue = 0; |
// KompassRichtung = 0; |
GPS_Nick = 0; |
GPS_Roll = 0; |
} |
} |
#endif |
/tags/V2.06a/spi.h |
---|
0,0 → 1,197 |
// ######################## SPI - FlightCtrl ################### |
#ifndef _SPI_H |
#define _SPI_H |
#include <util/delay.h> |
#include "vector.h" |
#define USE_SPI_COMMUNICATION |
#define SPI_BYTEGAP 5 |
//----------------------------------------- |
#define DDR_SPI DDRB |
#define SLAVE_SELECT_DDR_PORT DDRC |
#define SLAVE_SELECT_PORT PORTC |
#if defined(__AVR_ATmega1284P__) |
#define DD_SS PORTB4 |
#define DD_SCK PORTB7 |
#define DD_MOSI PORTB5 |
#define DD_MISO PORTB6 |
#define SPI_SLAVE_SELECT PORTC5 |
#else |
#define DD_SS PB4 |
#define DD_SCK PB7 |
#define DD_MOSI PB5 |
#define DD_MISO PB6 |
#define SPI_SLAVE_SELECT PC5 |
#endif |
// for compatibility reasons gcc3.x <-> gcc4.x |
#ifndef SPCR |
#define SPCR SPCR0 |
#endif |
#ifndef SPE |
#define SPE SPE0 |
#endif |
#ifndef MSTR |
#define MSTR MSTR0 |
#endif |
#ifndef SPR1 |
#define SPR1 SPR01 |
#endif |
#ifndef SPR0 |
#define SPR0 SPR00 |
#endif |
#ifndef SPIE |
#define SPIE SPIE0 |
#endif |
#ifndef SPDR |
#define SPDR SPDR0 |
#endif |
#ifndef SPIF |
#define SPIF SPIF0 |
#endif |
#ifndef SPSR |
#define SPSR SPSR0 |
#endif |
// ------------------------- |
#define SPI_FCCMD_USER 10 |
#define SPI_FCCMD_STICK 11 |
#define SPI_FCCMD_MISC 12 |
#define SPI_FCCMD_PARAMETER1 13 |
#define SPI_FCCMD_VERSION 14 |
#define SPI_FCCMD_SERVOS 15 |
#define SPI_FCCMD_BL_ACCU 16 |
#define SPI_FCCMD_PARAMETER2 17 |
struct str_ToNaviCtrl |
{ |
unsigned char Sync1, Sync2; |
unsigned char Command; |
signed int IntegralNick; |
signed int IntegralRoll; |
signed int AccNick; |
signed int AccRoll; |
signed int GyroCompass; |
signed int GyroNick; |
signed int GyroRoll; |
signed int GyroGier; |
unsigned int FCStatus; |
union |
{ |
unsigned char Byte[12]; |
char sByte[12]; |
unsigned int Int[6]; |
int sInt[6]; |
unsigned long Long[3]; |
long sLong[3]; |
float Float[3]; |
} Param; |
unsigned char Chksum; |
}; |
#define SPI_NCCMD_KALMAN 103 |
#define SPI_NCCMD_VERSION 104 |
#define SPI_NCCMD_GPSINFO 105 |
#define SPI_NCCMD_HOTT_DATA 106 |
#define SPI_MISC 107 |
struct str_FromNaviCtrl |
{ |
unsigned char Command; |
signed int GPS_Nick; |
signed int GPS_Roll; |
signed int MagVecX; |
signed int CompassValue; |
signed int AccErrorN; |
signed int AccErrorR; |
signed int MagVecY; |
signed int MagVecZ; |
unsigned int BeepTime; |
union |
{ |
unsigned char Byte[12]; |
char sByte[12]; |
unsigned int Int[6]; |
int sInt[6]; |
unsigned long Long[3]; |
long sLong[3]; |
float Float[3]; |
} Param; |
unsigned char Chksum; |
}; |
struct str_FromNaviCtrl_Value |
{ |
signed char Kalman_K; |
signed char Kalman_MaxDrift; |
signed char Kalman_MaxFusion; |
unsigned char SerialDataOkay; |
signed char GpsZ; |
}; |
struct str_SPI_VersionInfo |
{ |
unsigned char Major; |
unsigned char Minor; |
unsigned char Patch; |
unsigned char Compatible; |
unsigned char Hardware; |
}; |
// Satfix types for GPSData.SatFix |
#define SATFIX_NONE 0x00 |
#define SATFIX_DEADRECKOING 0x01 |
#define SATFIX_2D 0x02 |
#define SATFIX_3D 0x03 |
#define SATFIX_GPS_DEADRECKOING 0x04 |
#define SATFIX_TIMEONLY 0x05 |
// Flags for interpretation of the GPSData.Flags |
#define FLAG_GPSFIXOK 0x01 // (i.e. within DOP & ACC Masks) |
#define FLAG_DIFFSOLN 0x02 // (is DGPS used) |
#define FLAG_WKNSET 0x04 // (is Week Number valid) |
#define FLAG_TOWSET 0x08 // (is Time of Week valid) |
#define FLAG_GPS_NAVIGATION_ACTIVE 0x10 // NC to FC -> NC is ready to navigate |
struct str_GPSInfo |
{ |
unsigned char Flags; // Status Flags |
unsigned char NumOfSats; // number of satelites |
unsigned char SatFix; // type of satfix |
unsigned char Speed; // m/sek |
unsigned int HomeDistance; // distance to Home in dm |
int HomeBearing; // bearing to home in deg |
}; |
#ifdef USE_SPI_COMMUNICATION |
extern struct str_GPSInfo GPSInfo; |
extern struct str_SPI_VersionInfo NC_Version; |
extern struct str_FromNaviCtrl_Value FromNaviCtrl_Value; |
extern struct str_ToNaviCtrl ToNaviCtrl; |
extern struct str_FromNaviCtrl FromNaviCtrl; |
extern unsigned char SPI_CommandCounter,NaviDataOkay; |
extern signed char FromNC_Rotate_C, FromNC_Rotate_S; |
extern unsigned char NC_ErrorCode; |
extern void SPI_MasterInit(void); |
extern unsigned char SPI_StartTransmitPacket(void); |
extern void UpdateSPI_Buffer(void); |
extern void SPI_TransmitByte(void); |
extern signed int POI_KameraNick; |
extern unsigned char NC_GPS_ModeCharacter, NC_To_FC_Flags, NC_To_FC_MaxAltitude; |
extern vector16_t MagVec; |
extern unsigned char EarthMagneticField; |
extern unsigned char EarthMagneticInclination,EarthMagneticInclinationTheoretic; |
#else |
// -------------------------------- Dummy ----------------------------------------- |
#define SPI_MasterInit() ; |
//#define SPI_StartTransmitPacket() ; |
#define UpdateSPI_Buffer() ; |
#define SPI_TransmitByte() ; |
#endif |
#endif |
/tags/V2.06a/timer0.c |
---|
0,0 → 1,490 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include "main.h" |
#define MULTIPLYER 4 |
volatile unsigned int CountMilliseconds = 0; |
volatile unsigned int tim_main; |
volatile unsigned char UpdateMotor = 0; |
volatile unsigned int cntKompass = 0; |
volatile unsigned int beeptime = 0; |
volatile unsigned char BytegapSPI = 0, ServoActive = 0, CalculateServoSignals = 1; |
unsigned char JustMK3MagConnected = 0; |
uint16_t RemainingPulse = 0; |
volatile int16_t ServoNickOffset = (255 / 2) * MULTIPLYER * 16; // initial value near center positon |
volatile int16_t ServoRollOffset = (255 / 2) * MULTIPLYER * 16; // initial value near center positon |
unsigned int BeepMuster = 0xffff; |
signed int NickServoValue = 128 * MULTIPLYER * 16; |
volatile int16_t ServoNickValue = 0; |
volatile int16_t ServoRollValue = 0; |
enum { |
STOP = 0, |
CK = 1, |
CK8 = 2, |
CK64 = 3, |
CK256 = 4, |
CK1024 = 5, |
T0_FALLING_EDGE = 6, |
T0_RISING_EDGE = 7 |
}; |
ISR(TIMER0_OVF_vect) // 9,7kHz |
{ |
static unsigned char cnt_1ms = 1,cnt = 0; |
unsigned char pieper_ein = 0; |
if(BytegapSPI) BytegapSPI--; |
if(SpektrumTimer) SpektrumTimer--; |
if(!cnt--) |
{ |
cnt = 9; |
CountMilliseconds++; |
cnt_1ms++; |
cnt_1ms %= 2; |
if(!cnt_1ms) if(UpdateMotor < 4) UpdateMotor++; |
if(!(PINC & 0x10)) JustMK3MagConnected = 1; |
if(beeptime) |
{ |
if(beeptime > 10) beeptime -= 10; else beeptime = 0; |
if(beeptime & BeepMuster) |
{ |
pieper_ein = 1; |
} |
else pieper_ein = 0; |
} |
else |
{ |
pieper_ein = 0; |
BeepMuster = 0xffff; |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(pieper_ein) PORTC |= (1<<7); // Speaker an PORTC.7 |
else PORTC &= ~(1<<7); |
#else |
if(pieper_ein) |
{ |
// if(PlatinenVersion == 10) PORTD |= (1<<2); // Speaker an PORTD.2 |
// else |
PORTC |= (1<<7); // Speaker an PORTC.7 |
} |
else |
{ |
// if(PlatinenVersion == 10) PORTD &= ~(1<<2); |
// else |
PORTC &= ~(1<<7); |
} |
#endif |
} |
if(JustMK3MagConnected && !NaviDataOkay && Parameter_GlobalConfig & CFG_KOMPASS_AKTIV) |
{ |
if(PINC & 0x10) |
{ |
if(++cntKompass > 1000) JustMK3MagConnected = 0; |
} |
else |
{ |
if((cntKompass) && (cntKompass < 362)) |
{ |
cntKompass += cntKompass / 41; |
if(cntKompass > 10) KompassValue = cntKompass - 10; else KompassValue = 0; |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
} |
cntKompass = 0; |
} |
} |
} |
// ----------------------------------------------------------------------- |
unsigned int SetDelay(unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(CountMilliseconds + t + 1); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
char CheckDelay(unsigned int t) |
{ |
// TIMSK0 &= ~_BV(TOIE0); |
return(((t - CountMilliseconds) & 0x8000) >> 9); |
// TIMSK0 |= _BV(TOIE0); |
} |
// ----------------------------------------------------------------------- |
void Delay_ms(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)); |
} |
void Delay_ms_Mess(unsigned int w) |
{ |
unsigned int akt; |
akt = SetDelay(w); |
while (!CheckDelay(akt)) if(AdReady) {AdReady = 0; ANALOG_ON;} |
} |
/*****************************************************/ |
/* Initialize Timer 2 */ |
/*****************************************************/ |
// The timer 2 is used to generate the PWM at PD7 (J7) |
// to control a camera servo for nick compensation. |
void TIMER2_Init(void) |
{ |
uint8_t sreg = SREG; |
// disable all interrupts before reconfiguration |
cli(); |
PORTD &= ~(1<<PORTD7); // set PD7 to low |
DDRC |= (1<<DDC6); // set PC6 as output (Reset for HEF4017) |
HEF4017Reset_ON; |
// Timer/Counter 2 Control Register A |
// Timer Mode is FastPWM with timer reload at OCR2A (Bits: WGM22 = 1, WGM21 = 1, WGM20 = 1) |
// PD7: Normal port operation, OC2A disconnected, (Bits: COM2A1 = 0, COM2A0 = 0) |
// PD6: Normal port operation, OC2B disconnected, (Bits: COM2B1 = 0, COM2B0 = 0) |
TCCR2A &= ~((1<<COM2A1)|(1<<COM2A0)|(1<<COM2B1)|(1<<COM2B0)); |
TCCR2A |= (1<<WGM21)|(1<<WGM20); |
// Timer/Counter 2 Control Register B |
// Set clock divider for timer 2 to SYSKLOCK/32 = 20MHz / 32 = 625 kHz |
// The timer increments from 0x00 to 0xFF with an update rate of 625 kHz or 1.6 us |
// hence the timer overflow interrupt frequency is 625 kHz / 256 = 2.44 kHz or 0.4096 ms |
// divider 32 (Bits: CS022 = 0, CS21 = 1, CS20 = 1) |
TCCR2B &= ~((1<<FOC2A)|(1<<FOC2B)|(1<<CS22)); |
TCCR2B |= (1<<CS21)|(1<<CS20)|(1<<WGM22); |
// Initialize the Timer/Counter 2 Register |
TCNT2 = 0; |
// Initialize the Output Compare Register A used for PWM generation on port PD7. |
OCR2A = 255; |
TCCR2A |= (1<<COM2A1); // set or clear at compare match depends on value of COM2A0 |
// Timer/Counter 2 Interrupt Mask Register |
// Enable timer output compare match A Interrupt only |
TIMSK2 &= ~((1<<OCIE2B)|(1<<TOIE2)); |
TIMSK2 |= (1<<OCIE2A); |
SREG = sreg; |
} |
//---------------------------- |
void Timer_Init(void) |
{ |
tim_main = SetDelay(10); |
TCCR0B = CK8; |
// TCCR0A = (1<<COM0A1)|(1<<COM0B1)|3;//fast PWM |
TCCR0A = (1<<COM0A1)|(1<<COM0B1)|(1<<COM0B0)|3;//fast PWM |
OCR0B = 255; |
OCR0A = 180; |
TCNT0 = (unsigned char)-TIMER_RELOAD_VALUE; // reload |
//OCR1 = 0x00; |
TIMSK0 |= _BV(TOIE0); |
} |
/*****************************************************/ |
/* Control Servo Position */ |
/*****************************************************/ |
void CalcNickServoValue(void) |
{ |
signed int max, min; |
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) // relative moving of the servo value |
{ |
max = ((unsigned int) EE_Parameter.ServoNickMax * MULTIPLYER * 15); |
min = ((unsigned int) EE_Parameter.ServoNickMin * MULTIPLYER * 20); |
NickServoValue -= ((signed char) (Parameter_ServoNickControl - 128) / 4) * 6; |
LIMIT_MIN_MAX(NickServoValue,min, max); |
} |
else NickServoValue = (int16_t)Parameter_ServoNickControl * (MULTIPLYER*16); // direct poti control |
} |
void CalculateServo(void) |
{ |
signed char cosinus, sinus; |
signed long nick, roll; |
cosinus = sintab[EE_Parameter.CamOrientation + 6]; |
sinus = sintab[EE_Parameter.CamOrientation]; |
if(CalculateServoSignals == 1) |
{ |
if(EE_Parameter.GlobalConfig3 & CFG3_SERVO_NICK_COMP_OFF) nick = 0; |
else nick = (cosinus * IntegralNick) / 128L - (sinus * IntegralRoll) / 128L; |
nick -= POI_KameraNick * 7; |
nick = ((long)Parameter_ServoNickComp * nick) / 512L; |
// offset (Range from 0 to 255 * 3 = 765) |
if(EE_Parameter.ServoCompInvert & SERVO_RELATIVE) ServoNickOffset = NickServoValue; |
else ServoNickOffset += (NickServoValue - ServoNickOffset) / EE_Parameter.ServoManualControlSpeed; |
if(EE_Parameter.ServoCompInvert & SERVO_NICK_INV) // inverting movement of servo |
{ |
nick = ServoNickOffset / 16 + nick; |
} |
else |
{ // inverting movement of servo |
nick = ServoNickOffset / 16 - nick; |
} |
if(EE_Parameter.ServoFilterNick) ServoNickValue = ((ServoNickValue * EE_Parameter.ServoFilterNick) + nick) / (EE_Parameter.ServoFilterNick + 1); |
else ServoNickValue = nick; |
// limit servo value to its parameter range definition |
if(ServoNickValue < ((int16_t)EE_Parameter.ServoNickMin * MULTIPLYER)) |
{ |
ServoNickValue = (int16_t)EE_Parameter.ServoNickMin * MULTIPLYER; |
} |
else |
if(ServoNickValue > ((int16_t)EE_Parameter.ServoNickMax * MULTIPLYER)) |
{ |
ServoNickValue = (int16_t)EE_Parameter.ServoNickMax * MULTIPLYER; |
} |
// if(PlatinenVersion < 20) CalculateServoSignals = 0; else |
CalculateServoSignals++; |
} |
else |
{ |
roll = (cosinus * IntegralRoll) / 128L + (sinus * IntegralNick) / 128L; |
roll = ((long)Parameter_ServoRollComp * roll) / 512L; |
ServoRollOffset += ((int16_t)Parameter_ServoRollControl * (MULTIPLYER*16) - ServoRollOffset) / EE_Parameter.ServoManualControlSpeed; |
if(EE_Parameter.ServoCompInvert & SERVO_ROLL_INV) |
{ // inverting movement of servo |
roll = ServoRollOffset / 16 + roll; |
} |
else |
{ // inverting movement of servo |
roll = ServoRollOffset / 16 - roll; |
} |
if(EE_Parameter.ServoFilterRoll) ServoRollValue = ((ServoRollValue * EE_Parameter.ServoFilterRoll) + roll) / (EE_Parameter.ServoFilterRoll + 1); |
else ServoRollValue = roll; |
// limit servo value to its parameter range definition |
if(ServoRollValue < ((int16_t)EE_Parameter.ServoRollMin * MULTIPLYER)) |
{ |
ServoRollValue = (int16_t)EE_Parameter.ServoRollMin * MULTIPLYER; |
} |
else |
if(ServoRollValue > ((int16_t)EE_Parameter.ServoRollMax * MULTIPLYER)) |
{ |
ServoRollValue = (int16_t)EE_Parameter.ServoRollMax * MULTIPLYER; |
} |
CalculateServoSignals = 0; |
} |
} |
ISR(TIMER2_COMPA_vect) |
{ |
// frame len 22.5 ms = 14063 * 1.6 us |
// stop pulse: 0.3 ms = 188 * 1.6 us |
// min servo pulse: 0.6 ms = 375 * 1.6 us |
// max servo pulse: 2.4 ms = 1500 * 1.6 us |
// resolution: 1500 - 375 = 1125 steps |
#define IRS_RUNTIME 127 |
#define PPM_STOPPULSE 188 |
#define PPM_FRAMELEN (1757 * EE_Parameter.ServoNickRefresh) |
#define MINSERVOPULSE 375 |
#define MAXSERVOPULSE 1500 |
#define SERVORANGE (MAXSERVOPULSE - MINSERVOPULSE) |
static uint8_t PulseOutput = 0; |
static uint16_t ServoFrameTime = 0; |
static uint8_t ServoIndex = 0; |
/* |
if(PlatinenVersion < 20) |
{ |
//--------------------------- |
// Nick servo state machine |
//--------------------------- |
if(!PulseOutput) // pulse output complete |
{ |
if(TCCR2A & (1<<COM2A0)) // we had a low pulse |
{ |
TCCR2A &= ~(1<<COM2A0);// make a high pulse |
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms |
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position |
// range servo pulse width |
if(RemainingPulse > MAXSERVOPULSE ) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit |
else if(RemainingPulse < MINSERVOPULSE ) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit |
// accumulate time for correct update rate |
ServoFrameTime = RemainingPulse; |
} |
else // we had a high pulse |
{ |
TCCR2A |= (1<<COM2A0); // make a low pulse |
RemainingPulse = PPM_FRAMELEN - ServoFrameTime; |
CalculateServoSignals = 1; |
} |
// set pulse output active |
PulseOutput = 1; |
} |
} // EOF Nick servo state machine |
else |
*/ |
{ |
//----------------------------------------------------- |
// PPM state machine, onboard demultiplexed by HEF4017 |
//----------------------------------------------------- |
if(!PulseOutput) // pulse output complete |
{ |
if(TCCR2A & (1<<COM2A0)) // we had a low pulse |
{ |
TCCR2A &= ~(1<<COM2A0);// make a high pulse |
if(ServoIndex == 0) // if we are at the sync gap |
{ |
RemainingPulse = PPM_FRAMELEN - ServoFrameTime; // generate sync gap by filling time to full frame time |
ServoFrameTime = 0; // reset servo frame time |
HEF4017Reset_ON; // enable HEF4017 reset |
} |
else // servo channels |
if(ServoIndex > EE_Parameter.ServoNickRefresh) |
{ |
RemainingPulse = 10; // end it here |
} |
else |
{ |
RemainingPulse = MINSERVOPULSE + SERVORANGE/2; // center position ~ 1.5ms |
switch(ServoIndex) // map servo channels |
{ |
case 1: // Nick Compensation Servo |
RemainingPulse += ServoNickValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position |
break; |
case 2: // Roll Compensation Servo |
RemainingPulse += ServoRollValue - (256 / 2) * MULTIPLYER; // shift ServoNickValue to center position |
break; |
case 3: |
RemainingPulse += ((int16_t)Parameter_Servo3 * MULTIPLYER) - (256 / 2) * MULTIPLYER; |
break; |
case 4: |
RemainingPulse += ((int16_t)Parameter_Servo4 * MULTIPLYER) - (256 / 2) * MULTIPLYER; |
break; |
case 5: |
RemainingPulse += ((int16_t)Parameter_Servo5 * MULTIPLYER) - (256 / 2) * MULTIPLYER; |
break; |
default: // other servo channels |
RemainingPulse += 2 * PPM_in[ServoIndex]; // add channel value, factor of 2 because timer 1 increments 3.2µs |
break; |
} |
// range servo pulse width |
if(RemainingPulse > MAXSERVOPULSE) RemainingPulse = MAXSERVOPULSE; // upper servo pulse limit |
else if(RemainingPulse < MINSERVOPULSE) RemainingPulse = MINSERVOPULSE; // lower servo pulse limit |
// substract stop pulse width |
RemainingPulse -= PPM_STOPPULSE; |
// accumulate time for correct sync gap |
ServoFrameTime += RemainingPulse; |
} |
} |
else // we had a high pulse |
{ |
TCCR2A |= (1<<COM2A0); // make a low pulse |
// set pulsewidth to stop pulse width |
RemainingPulse = PPM_STOPPULSE; |
// accumulate time for correct sync gap |
ServoFrameTime += RemainingPulse; |
if((ServoActive && SenderOkay) || ServoActive == 2) HEF4017Reset_OFF; // disable HEF4017 reset |
else HEF4017Reset_ON; |
ServoIndex++; |
if(ServoIndex > EE_Parameter.ServoNickRefresh+1) |
{ |
CalculateServoSignals = 1; |
ServoIndex = 0; // reset to the sync gap |
} |
} |
// set pulse output active |
PulseOutput = 1; |
} |
} // EOF PPM state machine |
// General pulse output generator |
if(RemainingPulse > (255 + IRS_RUNTIME)) |
{ |
OCR2A = 255; |
RemainingPulse -= 255; |
} |
else |
{ |
if(RemainingPulse > 255) // this is the 2nd last part |
{ |
if((RemainingPulse - 255) < IRS_RUNTIME) |
{ |
OCR2A = 255 - IRS_RUNTIME; |
RemainingPulse -= 255 - IRS_RUNTIME; |
} |
else // last part > ISR_RUNTIME |
{ |
OCR2A = 255; |
RemainingPulse -= 255; |
} |
} |
else // this is the last part |
{ |
OCR2A = RemainingPulse; |
RemainingPulse = 0; |
PulseOutput = 0; // trigger to stop pulse |
} |
} // EOF general pulse output generator |
} |
/tags/V2.06a/timer0.h |
---|
0,0 → 1,25 |
#define TIMER_TEILER CK8 |
#define TIMER_RELOAD_VALUE 250 |
#define HEF4017Reset_ON PORTC |= (1<<PORTC6) |
#define HEF4017Reset_OFF PORTC &= ~(1<<PORTC6) |
void Timer_Init(void); |
void TIMER2_Init(void); |
void Delay_ms(unsigned int); |
void Delay_ms_Mess(unsigned int); |
unsigned int SetDelay (unsigned int t); |
char CheckDelay (unsigned int t); |
void CalculateServo(void); |
void CalcNickServoValue(void); |
extern volatile unsigned int CountMilliseconds; |
extern volatile unsigned char UpdateMotor; |
extern volatile unsigned int beeptime; |
extern volatile unsigned int cntKompass; |
extern unsigned int BeepMuster; |
extern volatile unsigned char BytegapSPI, ServoActive, CalculateServoSignals; |
extern volatile int16_t ServoNickValue; |
extern volatile int16_t ServoRollValue; |
extern signed int NickServoValue; |
extern unsigned char JustMK3MagConnected; |
/tags/V2.06a/twimaster.c |
---|
0,0 → 1,497 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <util/twi.h> |
#include "eeprom.h" |
#include "twimaster.h" |
#include "fc.h" |
#include "analog.h" |
#include "uart.h" |
#include "timer0.h" |
#include "main.h" |
volatile uint8_t twi_state = TWI_STATE_MOTOR_TX; |
volatile uint8_t dac_channel = 0; |
volatile uint8_t motor_write = 0; |
volatile uint8_t motor_read = 0; |
volatile uint8_t I2C_TransferActive = 0; |
uint8_t Max_I2C_Packets = 12; |
volatile uint16_t I2CTimeout = 100; |
uint8_t MissingMotor = 0; |
volatile uint8_t BLFlags = 0; |
MotorData_t Motor[MAX_MOTORS]; |
RedundantBl_t RedundantMotor[MAX_MOTORS]; |
// bit mask for witch BL the configuration should be sent |
volatile uint16_t BLConfig_WriteMask = 0; |
// bit mask for witch BL the configuration should be read |
volatile uint16_t BLConfig_ReadMask = 0; |
// buffer for BL Configuration |
BLConfig_t BLConfig; |
#define I2C_WriteByte(byte) {TWDR = byte; TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);} |
#define I2C_ReceiveByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) | (1<<TWEA);} |
#define I2C_ReceiveLastByte() {TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);} |
#define SCL_CLOCK 200000L |
#define I2C_TIMEOUT 30000 |
#define TWI_BASE_ADDRESS 0x52 |
/**************************************************/ |
/* Initialize I2C (TWI) */ |
/**************************************************/ |
void I2C_Init(char clear) |
{ |
uint8_t i; |
uint8_t sreg = SREG; |
cli(); |
// SDA is INPUT |
DDRC &= ~(1<<DDC1); |
// SCL is output |
DDRC |= (1<<DDC0); |
// pull up SDA |
PORTC |= (1<<PORTC0)|(1<<PORTC1); |
// TWI Status Register |
// prescaler 1 (TWPS1 = 0, TWPS0 = 0) |
TWSR &= ~((1<<TWPS1)|(1<<TWPS0)); |
// set TWI Bit Rate Register |
TWBR = ((F_CPU/SCL_CLOCK)-16)/2; |
twi_state = TWI_STATE_MOTOR_TX; |
motor_write = 0; |
motor_read = 0; |
if(clear) for(i=0; i < MAX_MOTORS; i++) |
{ |
Motor[i].Version = 0; |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
Motor[i].State = 0; |
Motor[i].ReadMode = BL_READMODE_STATUS; |
Motor[i].Current = 0; |
Motor[i].MaxPWM = 0; |
Motor[i].Temperature = 0; |
Motor[i].NotReadyCnt = 0; |
} |
sei(); |
SREG = sreg; |
} |
void I2C_Reset(void) |
{ |
// stop i2c bus |
I2C_Stop(TWI_STATE_MOTOR_TX); |
TWCR = (1<<TWINT); // reset to original state incl. interrupt flag reset |
TWAMR = 0; |
TWAR = 0; |
TWDR = 0; |
TWSR = 0; |
TWBR = 0; |
I2C_TransferActive = 0; |
I2C_Init(0); |
I2C_WriteByte(0); |
BLFlags |= BLFLAG_READ_VERSION; |
} |
/****************************************/ |
/* I2C ISR */ |
/****************************************/ |
ISR (TWI_vect) |
{ |
static uint8_t missing_motor = 0, motor_read_temperature = 0; |
static uint8_t *pBuff = 0; |
static uint8_t BuffLen = 0; |
static uint8_t max_packets = 0; |
switch (twi_state++) |
{ |
// Master Transmit |
case 0: // TWI_STATE_MOTOR_TX |
I2C_TransferActive = 1; |
// skip motor if not used in mixer |
while((Mixer.Motor[motor_write][MIX_GAS] <= 0) && (motor_write < MAX_MOTORS)) motor_write++; |
motor_write %= MAX_MOTORS; |
if(++max_packets > Max_I2C_Packets) // writing finished, read now |
{ |
max_packets = 0; |
BLConfig_WriteMask = 0; // reset configuration bitmask |
//motor_write = 0; // reset motor write counter for next cycle |
twi_state = TWI_STATE_MOTOR_RX; |
I2C_WriteByte(TWI_BASE_ADDRESS + TW_READ + (motor_read<<1) ); // select slave address in rx mode |
} |
else I2C_WriteByte(TWI_BASE_ADDRESS + TW_WRITE + (motor_write<<1) ); // select slave address in tx mode |
break; |
case 1: // Send Data to Slave |
I2C_WriteByte(Motor[motor_write].SetPoint); // transmit setpoint |
// if old version has been detected |
if(!(Motor[motor_write].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) |
{ |
twi_state = 4; //jump over sending more data |
} |
// the new version has been detected |
else if(!( (Motor[motor_write].SetPointLowerBits && (RequiredMotors < 7)) || BLConfig_WriteMask || BLConfig_ReadMask ) ) |
{ // or LowerBits are zero and no BlConfig should be sent (saves round trip time) |
twi_state = 4; //jump over sending more data |
} |
break; |
case 2: // lower bits of setpoint (higher resolution) |
if ((0x0001<<motor_write) & BLConfig_ReadMask) |
{ |
Motor[motor_write].ReadMode = BL_READMODE_CONFIG; // configuration request |
} |
else |
{ |
Motor[motor_write].ReadMode = BL_READMODE_STATUS; // normal status request |
} |
// send read mode and the lower bits of setpoint |
I2C_WriteByte((Motor[motor_write].ReadMode<<3)|(Motor[motor_write].SetPointLowerBits & 0x07)); |
// configuration tranmission request? |
if((0x0001<<motor_write) & BLConfig_WriteMask) |
{ // redirect tx pointer to configuration data |
pBuff = (uint8_t*)&BLConfig; // select config for motor |
BuffLen = sizeof(BLConfig_t); |
} |
else |
{ // jump to end of transmission for that motor |
twi_state = 4; |
} |
break; |
case 3: // send configuration |
I2C_WriteByte(*pBuff); |
pBuff++; |
if(--BuffLen > 0) twi_state = 3; // if there are some bytes left |
break; |
case 4: // repeat case 0-4 for all motors |
if(TWSR == TW_MT_DATA_NACK) // Data transmitted, NACK received |
{ |
if(!missing_motor) missing_motor = motor_write + 1; |
if((Motor[motor_write].State & MOTOR_STATE_ERROR_MASK) < MOTOR_STATE_ERROR_MASK) Motor[motor_write].State++; // increment error counter and handle overflow |
} |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2CTimeout = 10; |
motor_write++; // next motor |
I2C_Start(TWI_STATE_MOTOR_TX); // Repeated start -> switch slave or switch Master Transmit -> Master Receive |
break; |
// Master Receive Data |
case 5: // TWI_STATE_MOTOR_RX |
if(TWSR != TW_MR_SLA_ACK) // SLA+R transmitted but no ACK received |
{ // no response from the addressed slave received |
Motor[motor_read].State &= ~MOTOR_STATE_PRESENT_MASK; // clear present bit |
if(++motor_read >= MAX_MOTORS) |
{ // all motors read |
motor_read = 0; // restart from beginning |
BLConfig_ReadMask = 0; // reset read configuration bitmask |
if(++motor_read_temperature >= MAX_MOTORS) |
{ |
motor_read_temperature = 0; |
BLFlags &= ~BLFLAG_READ_VERSION; |
} |
} |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2C_TransferActive = 0; |
} |
else |
{ // motor successfully addressed |
Motor[motor_read].State |= MOTOR_STATE_PRESENT_MASK; // set present bit |
if(Motor[motor_read].Version & MOTOR_STATE_NEW_PROTOCOL_MASK) |
{ |
// new BL found |
switch(Motor[motor_read].ReadMode) |
{ |
case BL_READMODE_CONFIG: |
pBuff = (uint8_t*)&BLConfig; |
BuffLen = sizeof(BLConfig_t); |
Motor[motor_read].ReadMode = BL_READMODE_STATUS; // only once |
break; |
case BL_READMODE_STATUS: |
pBuff = (uint8_t*)&(Motor[motor_read].Current); |
if(motor_read == motor_read_temperature) BuffLen = 3; // read Current, MaxPwm & Temp |
else BuffLen = 1;// read Current only |
break; |
} |
} |
else // old BL version |
{ |
pBuff = (uint8_t*)&(Motor[motor_read].Current); |
if((BLFlags & BLFLAG_READ_VERSION) || (motor_read == motor_read_temperature)) BuffLen = 2; // Current & MaxPwm |
else BuffLen = 1; // read Current only |
} |
if(BuffLen == 1) |
{ |
I2C_ReceiveLastByte(); // read last byte |
} |
else |
{ |
I2C_ReceiveByte(); // read next byte |
} |
} |
MissingMotor = missing_motor; |
missing_motor = 0; |
break; |
case 6: // receive bytes |
*pBuff = TWDR; |
pBuff++; // set Pointer to next element : Motor[].Current,Motor[].Temperature |
BuffLen--; |
if(BuffLen>1) |
{ |
I2C_ReceiveByte(); // read next byte |
} |
else if (BuffLen == 1) |
{ |
I2C_ReceiveLastByte(); // read last byte |
} |
else // nothing left -> ready |
{ |
if(BLFlags & BLFLAG_READ_VERSION) |
{ |
if(!(FC_StatusFlags & FC_STATUS_MOTOR_RUN)) |
{ |
if((Motor[motor_read].MaxPWM & 252) == 248) Motor[motor_read].Version |= MOTOR_STATE_NEW_PROTOCOL_MASK; |
else Motor[motor_read].Version = 0; |
if(Motor[motor_read].MaxPWM == 248) Motor[motor_read].Version |= (MOTOR_STATE_FAST_MODE | MOTOR_STATE_BL30); |
else |
if(Motor[motor_read].MaxPWM == 249) Motor[motor_read].Version |= MOTOR_STATE_BL30; |
} |
} |
if(FC_StatusFlags & FC_STATUS_FLY) |
{ |
// Starting -> 40 |
// I2C-Setpoint is zero -> 250 |
// 255 -> Running and no Redundancy |
// 254 -> Running and active Redundancy |
if(Motor[motor_read].MaxPWM < 254) |
{ |
Motor[motor_read].NotReadyCnt++; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
SpeakHoTT = SPEAK_ERR_MOTOR; |
#endif |
} |
} |
if(++motor_read >= MAX_MOTORS) |
{ |
motor_read = 0; // restart from beginning |
BLConfig_ReadMask = 0; // reset read configuration bitmask |
if(++motor_read_temperature >= MAX_MOTORS) |
{ |
motor_read_temperature = 0; |
BLFlags &= ~BLFLAG_READ_VERSION; |
} |
} |
I2C_Stop(TWI_STATE_MOTOR_TX); |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2C_TransferActive = 0; |
return; |
} |
twi_state = 6; // if there are some bytes left |
break; |
/* |
// writing Gyro-Offsets |
case 18: |
I2C_WriteByte(0x98); // Address the DAC |
break; |
case 19: |
I2C_WriteByte(0x10 + (dac_channel * 2)); // Select DAC Channel (0x10 = A, 0x12 = B, 0x14 = C) |
break; |
case 20: |
switch(dac_channel) |
{ |
case 0: |
I2C_WriteByte(AnalogOffsetNick); // 1st byte for Channel A |
break; |
case 1: |
I2C_WriteByte(AnalogOffsetRoll); // 1st byte for Channel B |
break; |
case 2: |
I2C_WriteByte(AnalogOffsetGier); // 1st byte for Channel C |
break; |
} |
break; |
case 21: |
I2C_WriteByte(0x80); // 2nd byte for all channels is 0x80 |
break; |
case 22: |
I2C_Stop(TWI_STATE_MOTOR_TX); |
I2C_TransferActive = 0; |
I2CTimeout = 10; |
// repeat case 18...22 until all DAC Channels are updated |
if(dac_channel < 2) |
{ |
dac_channel ++; // jump to next channel |
I2C_Start(TWI_STATE_GYRO_OFFSET_TX); // start transmission for next channel |
} |
else |
{ |
dac_channel = 0; // reset dac channel counter |
BLFlags |= BLFLAG_TX_COMPLETE; |
} |
break; |
*/ |
default: |
I2C_Stop(TWI_STATE_MOTOR_TX); |
BLFlags |= BLFLAG_TX_COMPLETE; |
I2CTimeout = 10; |
motor_write = 0; |
motor_read = 0; |
I2C_TransferActive = 0; |
break; |
} |
} |
uint8_t I2C_WriteBLConfig(uint8_t motor) |
{ |
uint8_t i; |
uint16_t timer; |
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running! |
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(motor) |
{ |
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL! |
} |
// check BL configuration to send |
if((BLConfig.Revision & 0x0B) != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison |
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1); |
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum |
timer = SetDelay(2000); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
// prepare the bitmask |
if(!motor) // 0 means all |
{ |
BLConfig_WriteMask = 0xFF; // all motors at once with the same configuration |
} |
else //only one specific motor |
{ |
BLConfig_WriteMask = 0x0001<<(motor-1); |
} |
for(i = 0; i < MAX_MOTORS; i++) |
{ |
if((0x0001<<i) & BLConfig_WriteMask) |
{ |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
} |
} |
motor_write = 0; |
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms) |
do |
{ |
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
}while(BLConfig_WriteMask && !CheckDelay(timer)); // repeat until the BL config has been sent |
if(BLConfig_WriteMask) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); |
return(BLCONFIG_SUCCESS); |
} |
uint8_t I2C_ReadBLConfig(uint8_t motor) |
{ |
uint8_t i; |
uint16_t timer; |
if(MotorenEin || PC_MotortestActive) return(BLCONFIG_ERR_MOTOR_RUNNING); // not when motors are running! |
if(motor > MAX_MOTORS) return (BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(motor == 0) return (BLCONFIG_ERR_READ_NOT_POSSIBLE); |
if(!(Motor[motor-1].State & MOTOR_STATE_PRESENT_MASK)) return(BLCONFIG_ERR_MOTOR_NOT_EXIST); // motor does not exist! |
if(!(Motor[motor-1].Version & MOTOR_STATE_NEW_PROTOCOL_MASK)) return(BLCONFIG_ERR_HW_NOT_COMPATIBLE); // not a new BL! |
timer = SetDelay(2000); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
// prepare the bitmask |
BLConfig_ReadMask = 0x0001<<(motor-1); |
for(i = 0; i < MAX_MOTORS; i++) |
{ |
if((0x0001<<i) & BLConfig_ReadMask) |
{ |
Motor[i].SetPoint = 0; |
Motor[i].SetPointLowerBits = 0; |
} |
} |
motor_read = 0; |
BLConfig.Revision = 0; // bad revision |
BLConfig.crc = 0; // bad checksum |
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms) |
do |
{ |
I2C_Start(TWI_STATE_MOTOR_TX); // start an i2c transmission |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
}while(BLConfig_ReadMask && !CheckDelay(timer)); // repeat until the BL config has been received from all motors |
// validate result |
if((BLConfig.Revision & 0x0B) != BLCONFIG_REVISION) return (BLCONFIG_ERR_SW_NOT_COMPATIBLE); // bad revison |
i = RAM_Checksum((uint8_t*)&BLConfig, sizeof(BLConfig_t) - 1); |
if(i != BLConfig.crc) return(BLCONFIG_ERR_CHECKSUM); // bad checksum |
return(BLCONFIG_SUCCESS); |
} |
/tags/V2.06a/twimaster.h |
---|
0,0 → 1,120 |
#ifndef _I2C_MASTER_H |
#define _I2C_MASTER_H |
+ |
+#include <inttypes.h> |
+ |
+#define TWI_STATE_MOTOR_TX 0 |
+#define TWI_STATE_MOTOR_RX 5 |
+//#define TWI_STATE_GYRO_OFFSET_TX 18 |
+ |
+extern volatile uint8_t twi_state; |
+extern volatile uint8_t motor_write; |
+extern volatile uint8_t motor_read; |
+extern volatile uint8_t I2C_TransferActive; |
+extern uint8_t Max_I2C_Packets; |
+extern uint8_t MissingMotor; |
+ |
+#define MAX_MOTORS 12 |
+#define MOTOR_STATE_PRESENT_MASK 0x80 |
+#define MOTOR_STATE_ERROR_MASK 0x7F |
+ |
+//Motor[x].Version |
+#define MOTOR_STATE_NEW_PROTOCOL_MASK 0x01 |
+#define MOTOR_STATE_FAST_MODE 0x02 |
+#define MOTOR_STATE_BL30 0x04 // extended Current measurement -> 200 = 20A 201 = 21A 255 = 75A (20+55) |
+ |
+#define BLFLAG_TX_COMPLETE 0x01 |
+#define BLFLAG_READ_VERSION 0x02 |
+ |
+extern volatile uint8_t BLFlags; |
+ |
+#define BL_READMODE_STATUS 0 |
+#define BL_READMODE_CONFIG 16 |
+ |
+typedef struct |
+{ |
+ uint8_t Version; // the version of the BL (0 = old) |
+ uint8_t SetPoint; // written by attitude controller |
+ uint8_t SetPointLowerBits; // for higher Resolution of new BLs |
+ uint8_t State; // 7 bit for I2C error counter, highest bit indicates if motor is present |
+ uint8_t ReadMode; // select data to read |
+ // the following bytes must be exactly in that order! |
+ uint8_t Current; // in 0.1 A steps, read back from BL |
+ uint8_t MaxPWM; // read back from BL -> is less than 255 if BL is in current limit, not running (250) or starting (40) |
+ int8_t Temperature; // old BL-Ctrl will return a 255 here, the new version the temp. in °C |
+ uint8_t NotReadyCnt; // Counts up is the Motor is not ready during flight -> MotorRestart etc. |
+} __attribute__((packed)) MotorData_t; |
+ |
+extern MotorData_t Motor[MAX_MOTORS]; |
+ |
+// BitSate |
+#define BL_BIT_STATE_I2C_OK 0x01 |
+#define BL_BIT_STATE_I2C_VALUE 0x02 |
+#define BL_BIT_STATE_I2C_BAD 0x04 |
+#define BL_BIT_STATE_PPM_OK 0x08 |
+#define BL_BIT_STATE_MOTOR_RUN 0x10 |
+ |
+typedef struct |
+{ |
+ unsigned char BitSate; |
+ unsigned char Current; |
+ unsigned char State; |
+ unsigned char TemperatureInDeg; |
+ unsigned char Voltage80; |
+} __attribute__((packed)) RedundantBl_t; |
+extern RedundantBl_t RedundantMotor[MAX_MOTORS]; |
+ |
+#define BLCONFIG_REVISION 2 |
+ |
+#define MASK_SET_PWM_SCALING 0x01 |
+#define MASK_SET_CURRENT_LIMIT 0x02 |
+#define MASK_SET_TEMP_LIMIT 0x04 |
+#define MASK_SET_CURRENT_SCALING 0x08 |
+#define MASK_SET_BITCONFIG 0x10 |
+#define MASK_SET_STARTPWM 0x20 |
+#define MASK_SET_DEFAULT_PARAMS 0x40 |
+#define MASK_SET_SAVE_EEPROM 0x80 |
+ |
+#define BITCONF_REVERSE_ROTATION 0x01 |
+#define BITCONF_STARTGAS1 0x02 |
+#define BITCONF_STARTGAS2 0x04 |
+#define BITCONF_STARTGAS3 0x08 |
+#define BITCONF_RES4 0x10 |
+#define BITCONF_RES5 0x20 |
+#define BITCONF_RES6 0x40 |
+#define BITCONF_RES7 0x80 |
+ |
+typedef struct |
+{ |
+ uint8_t Revision; // must be BL_REVISION |
+ uint8_t SetMask; // settings mask |
+ uint8_t PwmScaling; // maximum value of control pwm, acts like a thrust limit |
+ uint8_t CurrentLimit; // current limit in A |
+ uint8_t TempLimit; // in °C |
+ uint8_t CurrentScaling; // scaling factor for current measurement |
+ uint8_t BitConfig; // see defines above |
+ uint8_t crc; // checksum |
+} __attribute__((packed)) BLConfig_t; |
+ |
+extern BLConfig_t BLConfig; |
+ |
+extern volatile uint16_t I2CTimeout; |
+ |
+void I2C_Init(char); // Initialize I2C |
+#define I2C_Start(start_state) {twi_state = start_state; BLFlags &= ~BLFLAG_TX_COMPLETE; TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE);} |
+#define I2C_Stop(start_state) {twi_state = start_state; TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT);} |
+void I2C_Reset(void); // Reset I2C |
+ |
+#define BLCONFIG_SUCCESS 0 |
+#define BLCONFIG_ERR_MOTOR_RUNNING 1 |
+#define BLCONFIG_ERR_MOTOR_NOT_EXIST 2 |
+#define BLCONFIG_ERR_HW_NOT_COMPATIBLE 3 |
+#define BLCONFIG_ERR_SW_NOT_COMPATIBLE 4 |
+#define BLCONFIG_ERR_CHECKSUM 5 |
+#define BLCONFIG_ERR_READ_NOT_POSSIBLE 6 |
+ |
+uint8_t I2C_WriteBLConfig(uint8_t motor); |
+uint8_t I2C_ReadBLConfig(uint8_t motor); |
+ |
+#endif |
/tags/V2.06a/uart.c |
---|
0,0 → 1,849 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + www.MikroKopter.com |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software Nutzungsbedingungen (english version: see below) |
// + der Fa. HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland - nachfolgend Lizenzgeber genannt - |
// + Der Lizenzgeber räumt dem Kunden ein nicht-ausschließliches, zeitlich und räumlich* unbeschränktes Recht ein, die im den |
// + Mikrocontroller verwendete Firmware für die Hardware Flight-Ctrl, Navi-Ctrl, BL-Ctrl, MK3Mag & PC-Programm MikroKopter-Tool |
// + - nachfolgend Software genannt - nur für private Zwecke zu nutzen. |
// + Der Einsatz dieser Software ist nur auf oder mit Produkten des Lizenzgebers zulässig. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Die vom Lizenzgeber gelieferte Software ist urheberrechtlich geschützt. Alle Rechte an der Software sowie an sonstigen im |
// + Rahmen der Vertragsanbahnung und Vertragsdurchführung überlassenen Unterlagen stehen im Verhältnis der Vertragspartner ausschließlich dem Lizenzgeber zu. |
// + Die in der Software enthaltenen Copyright-Vermerke, Markenzeichen, andere Rechtsvorbehalte, Seriennummern sowie |
// + sonstige der Programmidentifikation dienenden Merkmale dürfen vom Kunden nicht verändert oder unkenntlich gemacht werden. |
// + Der Kunde trifft angemessene Vorkehrungen für den sicheren Einsatz der Software. Er wird die Software gründlich auf deren |
// + Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Die Haftung des Lizenzgebers wird - soweit gesetzlich zulässig - begrenzt in Höhe des typischen und vorhersehbaren |
// + Schadens. Die gesetzliche Haftung bei Personenschäden und nach dem Produkthaftungsgesetz bleibt unberührt. Dem Lizenzgeber steht jedoch der Einwand |
// + des Mitverschuldens offen. |
// + Der Kunde trifft angemessene Vorkehrungen für den Fall, dass die Software ganz oder teilweise nicht ordnungsgemäß arbeitet. |
// + Er wird die Software gründlich auf deren Verwendbarkeit zu dem von ihm beabsichtigten Zweck testen, bevor er diese operativ einsetzt. |
// + Der Kunde wird er seine Daten vor Einsatz der Software nach dem Stand der Technik sichern. |
// + Der Kunde ist darüber unterrichtet, dass der Lizenzgeber seine Daten im zur Vertragsdurchführung erforderlichen Umfang |
// + und auf Grundlage der Datenschutzvorschriften erhebt, speichert, verarbeitet und, sofern notwendig, an Dritte übermittelt. |
// + *) Die räumliche Nutzung bezieht sich nur auf den Einsatzort, nicht auf die Reichweite der programmierten Software. |
// + #### ENDE DER NUTZUNGSBEDINGUNGEN ####' |
// + Hinweis: Informationen über erweiterte Nutzungsrechte (wie z.B. Nutzung für nicht-private Zwecke) sind auf Anfrage per Email an info(@)hisystems.de verfügbar. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Software LICENSING TERMS |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + of HiSystems GmbH, Flachsmeerstrasse 2, 26802 Moormerland, Germany - the Licensor - |
// + The Licensor grants the customer a non-exclusive license to use the microcontroller firmware of the Flight-Ctrl, Navi-Ctrl, BL-Ctrl, and MK3Mag hardware |
// + (the Software) exclusively for private purposes. The License is unrestricted with respect to time and territory*. |
// + The Software may only be used with the Licensor's products. |
// + The Software provided by the Licensor is protected by copyright. With respect to the relationship between the parties to this |
// + agreement, all rights pertaining to the Software and other documents provided during the preparation and execution of this |
// + agreement shall be the property of the Licensor. |
// + The information contained in the Software copyright notices, trademarks, other legal reservations, serial numbers and other |
// + features that can be used to identify the program may not be altered or defaced by the customer. |
// + The customer shall be responsible for taking reasonable precautions |
// + for the safe use of the Software. The customer shall test the Software thoroughly regarding its suitability for the |
// + intended purpose before implementing it for actual operation. The Licensor's liability shall be limited to the extent of typical and |
// + foreseeable damage to the extent permitted by law, notwithstanding statutory liability for bodily injury and product |
// + liability. However, the Licensor shall be entitled to the defense of contributory negligence. |
// + The customer will take adequate precautions in the case, that the software is not working properly. The customer will test |
// + the software for his purpose before any operational usage. The customer will backup his data before using the software. |
// + The customer understands that the Licensor collects, stores and processes, and, where required, forwards, customer data |
// + to third parties to the extent necessary for executing the agreement, subject to applicable data protection and privacy regulations. |
// + *) The territory aspect only refers to the place where the Software is used, not its programmed range. |
// + #### END OF LICENSING TERMS #### |
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de. |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
#include <stdarg.h> |
#include <string.h> |
#include <avr/pgmspace.h> |
#include "main.h" |
#include "uart.h" |
#include "libfc.h" |
#include "eeprom.h" |
#define FC_ADDRESS 1 |
#define NC_ADDRESS 2 |
#define MK3MAG_ADDRESS 3 |
#define BL_CTRL_ADDRESS 5 |
#define ABO_TIMEOUT 4000 // disable abo after 4 seconds |
#define MAX_SENDE_BUFF 220 |
#define MAX_EMPFANGS_BUFF 220 |
#define BLPARAM_REVISION 1 |
#define MASK_SET_PWM_SCALING 0x01 |
#define MASK_SET_CURRENT_LIMIT 0x02 |
#define MASK_SET_TEMP_LIMIT 0x04 |
#define MASK_SET_CURRENT_SCALING 0x08 |
#define MASK_SET_BITCONFIG 0x10 |
#define MASK_RESET_CAPCOUNTER 0x20 |
#define MASK_SET_DEFAULT_PARAMS 0x40 |
#define MASK_SET_SAVE_EEPROM 0x80 |
unsigned char GetExternalControl = 0,DebugDisplayAnforderung1 = 0, DebugDisplayAnforderung = 0,DebugDataAnforderung = 0,GetVersionAnforderung = 0, GetPPMChannelAnforderung = 0; |
unsigned char DisplayLine = 0; |
unsigned volatile char SioTmp = 0; |
unsigned volatile char NeuerDatensatzEmpfangen = 0; |
unsigned volatile char NeueKoordinateEmpfangen = 0; |
unsigned volatile char UebertragungAbgeschlossen = 1; |
unsigned volatile char CntCrcError = 0; |
unsigned volatile char AnzahlEmpfangsBytes = 0; |
unsigned volatile char TxdBuffer[MAX_SENDE_BUFF]; |
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF]; |
unsigned char *pRxData = 0; |
unsigned char RxDataLen = 0; |
unsigned volatile char PC_DebugTimeout = 0; |
unsigned volatile char PC_MotortestActive = 0; |
unsigned char DebugTextAnforderung = 255; |
unsigned char PcZugriff = 100; |
unsigned char MotorTest[16]; |
unsigned char MeineSlaveAdresse = 1; // Flight-Ctrl |
unsigned char ConfirmFrame; |
struct str_DebugOut DebugOut; |
struct str_ExternControl ExternControl; |
struct str_VersionInfo VersionInfo; |
struct str_WinkelOut WinkelOut; |
struct str_Data3D Data3D; |
int Display_Timer, Debug_Timer,Kompass_Timer,Timer3D; |
unsigned int DebugDataIntervall = 0, Intervall3D = 0, Display_Interval = 0; |
unsigned int AboTimeOut = 0; |
unsigned volatile char ReceiverUpdateModeActive = 0; // 1 = Update 2 = JetiBox-Simulation |
const unsigned char ANALOG_TEXT[32][16] PROGMEM = |
{ |
//1234567890123456 |
"AngleNick ", //0 |
"AngleRoll ", |
"AccNick ", |
"AccRoll ", |
"YawGyro ", |
"Altitude [0.1m] ", //5 |
"AccZ ", |
"Gas ", |
"Compass Value ", |
"Voltage [0.1V] ", |
"Receiver Level ", //10 |
"Gyro Compass ", |
"Motor 1 ", |
"Motor 2 ", |
"Motor 3 ", |
"Motor 4 ", //15 |
"16 ", |
"17 ", |
"18 ", |
"19 ", |
"Servo ", //20 |
"Hovergas ", |
"Current [0.1A] ", |
"Capacity [mAh] ", |
"Height Setpoint ", |
"25 ", //25 |
"26 ", //"26 CPU OverLoad ", |
"27 ", |
"I2C-Error ", |
"BL Limit ", |
"GPS_Nick ", //30 |
"GPS_Roll " |
}; |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Sende-Part der Datenübertragung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
ISR(USART0_TX_vect) |
{ |
static unsigned int ptr = 0; |
unsigned char tmp_tx; |
if(!UebertragungAbgeschlossen) |
{ |
ptr++; // die [0] wurde schon gesendet |
tmp_tx = TxdBuffer[ptr]; |
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF)) |
{ |
ptr = 0; |
UebertragungAbgeschlossen = 1; |
} |
UDR0 = tmp_tx; |
} |
else ptr = 0; |
} |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
ISR(USART0_RX_vect) |
{ |
static unsigned int crc; |
static unsigned char crc1,crc2,buf_ptr; |
static unsigned char UartState = 0; |
unsigned char CrcOkay = 0; |
if (ReceiverUpdateModeActive == 1) { UDR1 = UDR0; return; } // 1 = Update |
if (ReceiverUpdateModeActive == 2) { RxdBuffer[0] = UDR0; return; } // 2 = JetiBox-Simulation |
SioTmp = UDR0; |
if(buf_ptr >= MAX_SENDE_BUFF) UartState = 0; |
if(SioTmp == '\r' && UartState == 2) |
{ |
UartState = 0; |
crc -= RxdBuffer[buf_ptr-2]; |
crc -= RxdBuffer[buf_ptr-1]; |
crc %= 4096; |
crc1 = '=' + crc / 64; |
crc2 = '=' + crc % 64; |
CrcOkay = 0; |
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;}; |
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet |
{ |
NeuerDatensatzEmpfangen = 1; |
AnzahlEmpfangsBytes = buf_ptr + 1; |
RxdBuffer[buf_ptr] = '\r'; |
if(RxdBuffer[2] == 'R' && !MotorenEin) |
{ |
LcdClear(); |
wdt_enable(WDTO_250MS); // Reset-Commando |
ServoActive = 0; |
} |
} |
} |
else |
switch(UartState) |
{ |
case 0: |
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet |
buf_ptr = 0; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc = SioTmp; |
break; |
case 1: // Adresse auswerten |
UartState++; |
RxdBuffer[buf_ptr++] = SioTmp; |
crc += SioTmp; |
break; |
case 2: // Eingangsdaten sammeln |
RxdBuffer[buf_ptr] = SioTmp; |
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++; |
else UartState = 0; |
//if(DebugOut.Analog[] < buf_ptr) DebugOut.Analog[] = buf_ptr; |
crc += SioTmp; |
break; |
default: |
UartState = 0; |
break; |
} |
} |
// -------------------------------------------------------------------------- |
void AddCRC(unsigned int wieviele) |
{ |
unsigned int tmpCRC = 0,i; |
for(i = 0; i < wieviele;i++) |
{ |
tmpCRC += TxdBuffer[i]; |
} |
// if(i > MAX_SENDE_BUFF - 3) tmpCRC += 11; |
tmpCRC %= 4096; |
TxdBuffer[i++] = '=' + tmpCRC / 64; |
TxdBuffer[i++] = '=' + tmpCRC % 64; |
TxdBuffer[i++] = '\r'; |
UebertragungAbgeschlossen = 0; |
UDR0 = TxdBuffer[0]; |
//if(DebugOut.Analog[] < i) DebugOut.Analog[] = i; |
} |
// -------------------------------------------------------------------------- |
void SendOutData(unsigned char cmd,unsigned char address, unsigned char BufferAnzahl, ...) //unsigned char *snd, unsigned char len) |
{ |
va_list ap; |
unsigned int pt = 0; |
unsigned char a,b,c; |
unsigned char ptr = 0; |
unsigned char *snd = 0; |
int len = 0; |
TxdBuffer[pt++] = '#'; // Startzeichen |
TxdBuffer[pt++] = 'a' + address; // Adresse (a=0; b=1,...) |
TxdBuffer[pt++] = cmd; // Commando |
va_start(ap, BufferAnzahl); |
if(BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
while(len) |
{ |
if(len) |
{ |
a = snd[ptr++]; |
len--; |
if((!len) && BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
} |
else a = 0; |
if(len) |
{ |
b = snd[ptr++]; |
len--; |
if((!len) && BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
} |
else b = 0; |
if(len) |
{ |
c = snd[ptr++]; |
len--; |
if((!len) && BufferAnzahl) |
{ |
snd = va_arg(ap, unsigned char*); |
len = va_arg(ap, int); |
ptr = 0; |
BufferAnzahl--; |
} |
} |
else c = 0; |
TxdBuffer[pt++] = '=' + (a >> 2); |
TxdBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
TxdBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
TxdBuffer[pt++] = '=' + ( c & 0x3f); |
} |
va_end(ap); |
AddCRC(pt); |
} |
// -------------------------------------------------------------------------- |
void Decode64(void) // die daten werden im rx buffer dekodiert, das geht nur, weil aus 4 byte immer 3 gemacht werden. |
{ |
unsigned char a,b,c,d; |
unsigned char x,y,z; |
unsigned char ptrIn = 3; // start at begin of data block |
unsigned char ptrOut = 3; |
unsigned char len = AnzahlEmpfangsBytes - 6; // von der Gesamtbytezahl eines Frames gehen 3 Bytes des Headers ('#',Addr, Cmd) und 3 Bytes des Footers (CRC1, CRC2, '\r') ab. |
while(len) |
{ |
a = RxdBuffer[ptrIn++] - '='; |
b = RxdBuffer[ptrIn++] - '='; |
c = RxdBuffer[ptrIn++] - '='; |
d = RxdBuffer[ptrIn++] - '='; |
x = (a << 2) | (b >> 4); |
y = ((b & 0x0f) << 4) | (c >> 2); |
z = ((c & 0x03) << 6) | d; |
if(len--) RxdBuffer[ptrOut++] = x; else break; |
if(len--) RxdBuffer[ptrOut++] = y; else break; |
if(len--) RxdBuffer[ptrOut++] = z; else break; |
} |
pRxData = (unsigned char*)&RxdBuffer[3]; // decodierte Daten beginnen beim 4. Byte |
RxDataLen = ptrOut - 3; // wie viele Bytes wurden dekodiert? |
} |
// -------------------------------------------------------------------------- |
void BearbeiteRxDaten(void) |
{ |
if(!NeuerDatensatzEmpfangen) return; |
unsigned char tempchar1, tempchar2; |
Decode64(); // dekodiere datenblock im Empfangsbuffer |
switch(RxdBuffer[1]-'a') // check for Slave Address |
{ |
case FC_ADDRESS: // FC special commands |
switch(RxdBuffer[2]) |
{ |
case 'K':// Kompasswert |
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue)); |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
break; |
case 't':// Motortest |
if(AnzahlEmpfangsBytes > 20) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest)); |
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4); |
PC_MotortestActive = 240; |
//while(!UebertragungAbgeschlossen); |
//SendOutData('T', MeineSlaveAdresse, 0); |
PcZugriff = 255; |
break; |
case 'n':// "Get Mixer |
while(!UebertragungAbgeschlossen); |
SendOutData('N', FC_ADDRESS, 1, (unsigned char *) &Mixer, sizeof(Mixer) - 1); |
Debug("Mixer lesen"); |
break; |
case 'm':// "Write Mixer |
if(pRxData[0] == EEMIXER_REVISION) |
{ |
memcpy(&Mixer, (unsigned char *)pRxData, sizeof(Mixer) - 1); |
MixerTable_WriteToEEProm(); |
tempchar1 = 1; |
VersionInfo.HardwareError[1] &= ~FC_ERROR1_MIXER; |
} |
else |
{ |
tempchar1 = 0; |
} |
while(!UebertragungAbgeschlossen); |
SendOutData('M', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1)); |
break; |
case 'p': // get PPM Channels |
GetPPMChannelAnforderung = 1; |
PcZugriff = 255; |
break; |
case 'q':// "Get"-Anforderung für Settings |
// Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
if(!MotorenEin) |
{ |
if((10 <= pRxData[0]) && (pRxData[0] < 20)) |
{ |
tempchar1 = pRxData[0] - 10; |
if(tempchar1< 1) tempchar1 = 1; // limit to 1 |
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5 |
SetDefaultParameter(tempchar1, 1); |
} |
else if((20 <= pRxData[0]) && (pRxData[0] < 30)) |
{ |
tempchar1 = pRxData[0] - 20; |
if(tempchar1< 1) tempchar1 = 1; // limit to 1 |
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5 |
SetDefaultParameter(tempchar1, 0); |
} |
else |
{ |
tempchar1 = pRxData[0]; |
if(tempchar1 == 0xFF) |
{ |
tempchar1 = GetActiveParamSet(); |
} |
if(tempchar1< 1) tempchar1 = 1; // limit to 1 |
else if(tempchar1 > 5) tempchar1 = 5; // limit to 5 |
// load requested parameter set |
ParamSet_ReadFromEEProm(tempchar1); |
} |
LipoDetection(0); |
} else tempchar1 = GetActiveParamSet(); |
while(!UebertragungAbgeschlossen); |
SendOutData('Q', FC_ADDRESS, 2, &tempchar1, sizeof(tempchar1), (unsigned char *) &EE_Parameter, sizeof(EE_Parameter) - 1); |
Debug("Lese Setting %d", tempchar1); |
break; |
case 's': // Parametersatz speichern |
if((1 <= pRxData[0]) && (pRxData[0] <= 5) && (pRxData[1] == EEPARAM_REVISION) && MotorenEin == 0) // check for setting to be in range |
{ |
memcpy(&EE_Parameter, (uint8_t*)&pRxData[1], sizeof(EE_Parameter) - 1); |
ParamSet_WriteToEEProm(pRxData[0]); |
Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L; |
Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L; |
tempchar1 = GetActiveParamSet(); |
} |
else |
{ |
tempchar1 = 0; // mark in response an invlid setting |
} |
while(!UebertragungAbgeschlossen); |
SendOutData('S', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1)); |
if(!MotorenEin) |
{ |
Piep(tempchar1,110); |
LipoDetection(0); |
} |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
break; |
case 'f': // auf anderen Parametersatz umschalten |
if(MotorenEin) break; |
if((1 <= pRxData[0]) && (pRxData[0] <= 5)) ParamSet_ReadFromEEProm(pRxData[0]); |
tempchar1 = GetActiveParamSet(); |
while(!UebertragungAbgeschlossen); |
SendOutData('F', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1)); |
if(!MotorenEin) |
{ |
Piep(tempchar1,110); |
LipoDetection(0); |
} |
LIBFC_ReceiverInit(EE_Parameter.Receiver); |
break; |
case 'y':// serial Potis |
for(tempchar1 = 0; tempchar1 < 12; tempchar1++) PPM_in[SERIAL_POTI_START + tempchar1] = (signed char) pRxData[tempchar1]; |
break; |
case 'u': // request BL parameter |
Debug("Reading BL %d", pRxData[0]); |
// try to read BL configuration |
tempchar2 = I2C_ReadBLConfig(pRxData[0]); |
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1; |
else tempchar1 = 0; |
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent |
SendOutData('U', FC_ADDRESS, 4, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2), &pRxData[0], 1, &BLConfig, sizeof(BLConfig_t)); |
break; |
case 'w': // write BL parameter |
Debug("Writing BL %d", pRxData[0]); |
if(RxDataLen >= 1+sizeof(BLConfig_t)) |
{ |
memcpy(&BLConfig, (uint8_t*)(&pRxData[1]), sizeof(BLConfig_t)); |
tempchar2 = I2C_WriteBLConfig(pRxData[0]); |
if(tempchar2 == BLCONFIG_SUCCESS) tempchar1 = 1; |
else tempchar1 = 0; // indicate error |
while(!UebertragungAbgeschlossen); // wait for previous frame to be sent |
SendOutData('W', FC_ADDRESS,2, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2)); |
} |
break; |
case 'j': |
if(MotorenEin) break; |
tempchar1 = LIBFC_GetCPUType(); |
if((tempchar1 == CPU_ATMEGA644P) || (tempchar1 == CPU_ATMEGA1284P)) |
{ |
uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 38400L) - 1); |
cli(); |
// UART0 & UART1 disable RX and TX-Interrupt |
UCSR0B &= ~((1 << RXCIE0)|(1 << TXCIE0)); |
UCSR1B &= ~((1 << RXCIE1)|(1 << TXCIE1)); |
// UART0 & UART1 disable receiver and transmitter |
UCSR0B &= ~((1 << TXEN0) | (1 << RXEN0)); |
UCSR1B &= ~((1 << TXEN1) | (1 << RXEN1)); |
// UART0 & UART1 flush receive buffer explicit |
while ( UCSR1A & (1<<RXC1) ) UDR1; |
while ( UCSR0A & (1<<RXC0) ) UDR0; |
if(pRxData[0] == 1) ReceiverUpdateModeActive = 2; |
else |
{ // Jeti or HoTT update |
//#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(pRxData[0] == 100) ubrr = (uint16_t) ((uint32_t) F_CPU/ (8 * 19200L) - 1); // HoTT |
//#endif |
ReceiverUpdateModeActive = 1; |
// UART0 & UART1 set baudrate |
UBRR1H = (uint8_t)(ubrr>>8); |
UBRR1L = (uint8_t)ubrr; |
UBRR0H = UBRR1H; |
UBRR0L = UBRR1L; |
// UART1 no parity |
UCSR1C &= ~(1 << UPM11); |
UCSR1C &= ~(1 << UPM10); |
// UART1 8-bit |
UCSR1B &= ~(1 << UCSZ12); |
UCSR1C |= (1 << UCSZ11); |
UCSR1C |= (1 << UCSZ10); |
} |
// UART0 & UART1 1 stop bit |
UCSR1C &= ~(1 << USBS1); |
UCSR0C &= ~(1 << USBS0); |
// UART1 clear 9th bit |
UCSR1B &= ~(1<<TXB81); |
// enable receiver and transmitter for UART0 and UART1 |
UCSR0B |= (1 << TXEN0) | (1 << RXEN0); |
UCSR1B |= (1 << TXEN1) | (1 << RXEN1); |
// enable RX-Interrupt for UART0 and UART1 |
UCSR0B |= (1 << RXCIE0); |
UCSR1B |= (1 << RXCIE1); |
// disable other Interrupts |
TIMSK0 = 0; |
TIMSK1 = 0; |
TIMSK2 = 0; |
sei(); |
} |
break; |
} // case FC_ADDRESS: |
default: // any Slave Address |
switch(RxdBuffer[2]) |
{ |
#ifdef REDUNDANT_FC_SLAVE |
static unsigned int clear_I; |
case '?':// Serielle Antwort eines BL-Reglers |
tempchar1 = RxdBuffer[1] - ('a'+11); |
if(tempchar1 >= MAX_MOTORS) break; |
memcpy((unsigned char *)&RedundantMotor[tempchar1], (unsigned char *)pRxData, sizeof(RedundantBl_t)); |
if(RedundantMotor[tempchar1].BitSate & BL_BIT_STATE_I2C_OK && clear_I) clear_I--; |
if(!(RedundantMotor[tempchar1].BitSate & BL_BIT_STATE_I2C_OK)) ROT_FLASH; |
GRN_FLASH; |
if(RedundantMotor[tempchar1].BitSate & BL_BIT_STATE_I2C_BAD) |
{ |
ROT_ON; |
if(clear_I == 0) |
{ |
SummeNick = 0; |
SummeRoll = 0; |
Mess_Integral_Gier = 0; |
} |
clear_I = 500; |
} |
//DebugOut.Analog[16] = RedundantMotor[tempchar1].BitSate; |
//DebugOut.Analog[17]++; |
//DebugOut.Analog[18] = tempchar1; |
break; |
#endif |
// 't' comand placed here only for compatibility to BL |
case 't':// Motortest |
if(AnzahlEmpfangsBytes >= sizeof(MotorTest)) memcpy(&MotorTest[0], (unsigned char *)pRxData, sizeof(MotorTest)); |
else memcpy(&MotorTest[0], (unsigned char *)pRxData, 4); |
while(!UebertragungAbgeschlossen); |
SendOutData('T', MeineSlaveAdresse, 0); |
PC_MotortestActive = 250; |
PcZugriff = 255; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
break; |
// 'K' comand placed here only for compatibility to old MK3MAG software, that does not send the right Slave Address |
case 'K':// Kompasswert |
memcpy((unsigned char *)&KompassValue , (unsigned char *)pRxData, sizeof(KompassValue)); |
// KompassRichtung = ((540 + KompassValue - KompassSollWert) % 360) - 180; |
break; |
case 'a':// Texte der Analogwerte |
DebugTextAnforderung = pRxData[0]; |
if (DebugTextAnforderung > 31) DebugTextAnforderung = 31; |
PcZugriff = 255; |
break; |
case 'b': |
memcpy((unsigned char *)&ExternControl, (unsigned char *)pRxData, sizeof(ExternControl)); |
ConfirmFrame = ExternControl.Frame; |
PcZugriff = 255; |
break; |
case 'c': // Poll the 3D-Data |
if(!Intervall3D) { if(pRxData[0]) Timer3D = SetDelay(pRxData[0] * 10);} |
Intervall3D = pRxData[0] * 10; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
break; |
case 'd': // Poll the debug data |
PcZugriff = 255; |
DebugDataIntervall = (unsigned int)pRxData[0] * 10; |
if(DebugDataIntervall > 0) DebugDataAnforderung = 1; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
break; |
case 'h':// x-1 Displayzeilen |
PcZugriff = 255; |
if((pRxData[0] & 0x80) == 0x00) // old format |
{ |
DisplayLine = 2; |
Display_Interval = 0; |
} |
else // new format |
{ |
RemoteKeys |= ~pRxData[0]; |
Display_Interval = (unsigned int)pRxData[1] * 10; |
DisplayLine = 4; |
AboTimeOut = SetDelay(ABO_TIMEOUT); |
} |
DebugDisplayAnforderung = 1; |
break; |
case 'l':// x-1 Displayzeilen |
PcZugriff = 255; |
MenuePunkt = pRxData[0]; |
DebugDisplayAnforderung1 = 1; |
break; |
case 'v': // Version-Anforderung und Ausbaustufe |
GetVersionAnforderung = 1; |
break; |
case 'g':// |
GetExternalControl = 1; |
break; |
default: |
//unsupported command received |
break; |
} |
break; // default: |
} |
NeuerDatensatzEmpfangen = 0; |
pRxData = 0; |
RxDataLen = 0; |
} |
//############################################################################ |
//Routine für die Serielle Ausgabe |
void uart_putchar (char c) |
//############################################################################ |
{ |
//Warten solange bis Zeichen gesendet wurde |
loop_until_bit_is_set(UCSR0A, UDRE0); |
//Ausgabe des Zeichens |
UDR0 = c; |
} |
//############################################################################ |
//INstallation der Seriellen Schnittstelle |
void UART_Init (void) |
//############################################################################ |
{ |
unsigned int ubrr = (unsigned int) ((unsigned long) F_CPU/(8 * USART0_BAUD) - 1); |
//Enable TXEN im Register UCR TX-Data Enable & RX Enable |
UCSR0B = (1 << TXEN0) | (1 << RXEN0); |
// UART Double Speed (U2X) |
UCSR0A |= (1 << U2X0); |
// RX-Interrupt Freigabe |
UCSR0B |= (1 << RXCIE0); |
// TX-Interrupt Freigabe |
UCSR0B |= (1 << TXCIE0); |
// USART0 Baud Rate Register |
// set clock divider |
UBRR0H = (uint8_t)(ubrr >> 8); |
UBRR0L = (uint8_t)ubrr; |
Debug_Timer = SetDelay(DebugDataIntervall); |
Kompass_Timer = SetDelay(220); |
VersionInfo.SWMajor = VERSION_MAJOR; |
VersionInfo.SWMinor = VERSION_MINOR; |
VersionInfo.SWPatch = VERSION_PATCH; |
VersionInfo.ProtoMajor = VERSION_SERIAL_MAJOR; |
VersionInfo.reserved1 = 0; |
VersionInfo.reserved2 = 0; |
VersionInfo.HWMajor = PlatinenVersion; |
pRxData = 0; |
RxDataLen = 0; |
} |
//--------------------------------------------------------------------------------------------- |
void DatenUebertragung(void) |
{ |
if(!UebertragungAbgeschlossen) return; |
if(CheckDelay(AboTimeOut)) |
{ |
Display_Interval = 0; |
DebugDataIntervall = 0; |
Intervall3D = 0; |
} |
if(((Display_Interval>0 && CheckDelay(Display_Timer)) || DebugDisplayAnforderung) && UebertragungAbgeschlossen) |
{ |
if(DisplayLine > 3)// new format |
{ |
Menu(); |
SendOutData('H', FC_ADDRESS, 1, (uint8_t *)DisplayBuff, 80); |
} |
else // old format |
{ |
LCD_printfxy(0,0,"!!! INCOMPATIBLE !!!"); |
SendOutData('H', FC_ADDRESS, 2, &DisplayLine, sizeof(DisplayLine), (uint8_t *)DisplayBuff, 20); |
if(DisplayLine++ > 3) DisplayLine = 0; |
} |
Display_Timer = SetDelay(Display_Interval); |
DebugDisplayAnforderung = 0; |
} |
if(DebugDisplayAnforderung1 && UebertragungAbgeschlossen) |
{ |
Menu(); |
SendOutData('L', FC_ADDRESS, 3, &MenuePunkt, sizeof(MenuePunkt), &MaxMenue, sizeof(MaxMenue), DisplayBuff, sizeof(DisplayBuff)); |
DebugDisplayAnforderung1 = 0; |
} |
if(GetVersionAnforderung && UebertragungAbgeschlossen) |
{ |
SendOutData('V', FC_ADDRESS, 1, (unsigned char *) &VersionInfo, sizeof(VersionInfo)); |
GetVersionAnforderung = 0; |
Debug_OK("Version gesendet"); |
} |
if(GetExternalControl && UebertragungAbgeschlossen) // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
{ |
SendOutData('G',MeineSlaveAdresse, 1, (unsigned char *) &ExternControl, sizeof(ExternControl)); |
GetExternalControl = 0; |
} |
if(((DebugDataIntervall>0 && CheckDelay(Debug_Timer)) || DebugDataAnforderung) && UebertragungAbgeschlossen) |
{ |
CopyDebugValues(); |
SendOutData('D', FC_ADDRESS, 1, (unsigned char *) &DebugOut,sizeof(DebugOut)); |
DebugDataAnforderung = 0; |
if(DebugDataIntervall>0) Debug_Timer = SetDelay(DebugDataIntervall); |
} |
if(Intervall3D > 0 && CheckDelay(Timer3D) && UebertragungAbgeschlossen) |
{ |
Data3D.Winkel[0] = ToNaviCtrl.IntegralNick;//(int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
Data3D.Winkel[1] = ToNaviCtrl.IntegralRoll;//(int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
Data3D.Winkel[2] = (int) ((10 * ErsatzKompass) / GIER_GRAD_FAKTOR); |
Data3D.Centroid[0] = SummeNick >> 9; |
Data3D.Centroid[1] = SummeRoll >> 9; |
Data3D.Centroid[2] = Mess_Integral_Gier >> 9; |
SendOutData('C', FC_ADDRESS, 1, (unsigned char *) &Data3D,sizeof(Data3D)); |
Timer3D = SetDelay(Intervall3D); |
} |
if(DebugTextAnforderung != 255) // Texte für die Analogdaten |
{ |
unsigned char label[16]; // local sram buffer |
memcpy_P(label, ANALOG_TEXT[DebugTextAnforderung], 16); // read lable from flash to sra |
SendOutData('A', FC_ADDRESS, 2, (unsigned char *)&DebugTextAnforderung, sizeof(DebugTextAnforderung),label, 16); |
DebugTextAnforderung = 255; |
} |
if(ConfirmFrame && UebertragungAbgeschlossen) // Datensatz bestätigen |
{ |
SendOutData('B', FC_ADDRESS, 1, (uint8_t*)&ConfirmFrame, sizeof(ConfirmFrame)); |
ConfirmFrame = 0; |
} |
if(GetPPMChannelAnforderung && UebertragungAbgeschlossen) |
{ |
SendOutData('P', FC_ADDRESS, 1, (unsigned char *) &PPM_in, sizeof(PPM_in)); |
GetPPMChannelAnforderung = 0; |
} |
#ifndef REDUNDANT_FC_SLAVE |
if((CheckDelay(Kompass_Timer)) && UebertragungAbgeschlossen) |
{ |
if(!NaviDataOkay) // no external compass needed |
{ |
WinkelOut.Winkel[0] = ToNaviCtrl.IntegralNick;//(int) (IntegralNick / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
WinkelOut.Winkel[1] = ToNaviCtrl.IntegralRoll;//(int) (IntegralRoll / (EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad |
WinkelOut.UserParameter[0] = Parameter_UserParam1; |
WinkelOut.UserParameter[1] = Parameter_UserParam2; |
SendOutData('k', MK3MAG_ADDRESS, 1, (unsigned char *) &WinkelOut,sizeof(WinkelOut)); |
} |
if(WinkelOut.CalcState > 4) WinkelOut.CalcState = 6; // wird dann in SPI auf Null gesetzt |
if(JustMK3MagConnected) Kompass_Timer = SetDelay(99); |
else Kompass_Timer = SetDelay(999); |
} |
#endif |
#ifdef REDUNDANT_FC_SLAVE |
if(UebertragungAbgeschlossen || MotorenEin) |
{ |
static unsigned char who; |
unsigned char SendRedundantMotor[MAX_MOTORS], i; |
who = (who+1) % RequiredMotors; |
for(i=0; i<RequiredMotors; i++) |
{ |
SendRedundantMotor[0] = who+1; |
if(PC_MotortestActive) SendRedundantMotor[0] |= 0x80; |
SendRedundantMotor[i+1] = Motor[i].SetPoint; |
} |
SendOutData('!', FC_ADDRESS, 1, (unsigned char *) &SendRedundantMotor, RequiredMotors+1); |
} |
#endif |
#ifdef DEBUG // only include functions if DEBUG is defined |
if(SendDebugOutput && UebertragungAbgeschlossen) |
{ |
SendOutData('0', FC_ADDRESS, 1, (unsigned char *) &tDebug, sizeof(tDebug)); |
SendDebugOutput = 0; |
} |
#endif |
} |
/tags/V2.06a/uart.h |
---|
0,0 → 1,117 |
#ifndef _UART_H |
#define _UART_H |
#define printf_P(format, args...) _printf_P(&uart_putchar, format , ## args) |
#define printf(format, args...) _printf_P(&uart_putchar, PSTR(format) , ## args) |
void BearbeiteRxDaten(void); |
extern unsigned char DebugGetAnforderung; |
extern unsigned volatile char ReceiverUpdateModeActive; |
extern unsigned volatile char UebertragungAbgeschlossen; |
extern unsigned volatile char PC_DebugTimeout; |
extern unsigned volatile char NeueKoordinateEmpfangen; |
extern unsigned volatile char PC_MotortestActive; |
extern unsigned char MeineSlaveAdresse; |
extern unsigned char PcZugriff; |
extern unsigned char RemotePollDisplayLine; |
extern unsigned volatile char RxdBuffer[]; |
extern int Debug_Timer,Kompass_Timer; |
extern void UART_Init (void); |
extern void uart_putchar (char c); |
//extern void boot_program_page (uint32_t page, uint8_t *buf); |
extern void DatenUebertragung(void); |
extern void Uart1Init(void); |
extern void BearbeiteRxDaten(void); |
extern unsigned char MotorTest[16]; |
struct str_DebugOut |
{ |
unsigned char Status[2]; |
signed int Analog[32]; // Debugwerte |
}; |
extern struct str_DebugOut DebugOut; |
struct str_WinkelOut |
{ |
signed int Winkel[2]; |
unsigned char UserParameter[2]; |
unsigned char CalcState; |
unsigned char Orientation; |
}; |
extern struct str_WinkelOut WinkelOut; |
struct str_Data3D |
{ |
signed int Winkel[3]; // nick, roll, compass in 0,1° |
signed char Centroid[3]; |
signed char reserve[5]; |
}; |
extern struct str_Data3D Data3D; |
struct str_ExternControl |
{ |
unsigned char Digital[2]; |
unsigned char RemoteTasten; |
signed char Nick; |
signed char Roll; |
signed char Gier; |
unsigned char Gas; |
signed char Hight; |
unsigned char free; |
unsigned char Frame; |
unsigned char Config; |
}; |
extern struct str_ExternControl ExternControl; |
// FC hardware errors |
// bitmask for UART_VersionInfo_t.HardwareError[0] |
#define FC_ERROR0_GYRO_NICK 0x01 |
#define FC_ERROR0_GYRO_ROLL 0x02 |
#define FC_ERROR0_GYRO_YAW 0x04 |
#define FC_ERROR0_ACC_NICK 0x08 |
#define FC_ERROR0_ACC_ROLL 0x10 |
#define FC_ERROR0_ACC_TOP 0x20 |
#define FC_ERROR0_PRESSURE 0x40 |
#define FC_ERROR0_CAREFREE 0x80 |
// bitmask for UART_VersionInfo_t.HardwareError[1] |
#define FC_ERROR1_I2C 0x01 |
#define FC_ERROR1_BL_MISSING 0x02 |
#define FC_ERROR1_SPI_RX 0x04 |
#define FC_ERROR1_PPM 0x08 |
#define FC_ERROR1_MIXER 0x10 |
#define FC_ERROR1_RES1 0x20 |
#define FC_ERROR1_RES2 0x40 |
#define FC_ERROR1_RES3 0x80 |
// for FlightCtrl |
//VersionInfo.Flags |
#define FC_VERSION_FLAG_NC_PRESENT 0x01 |
// for NaviCtrl |
#define NC_VERSION_FLAG_MK3MAG_PRESENT 0x01 |
struct str_VersionInfo |
{ |
unsigned char SWMajor; |
unsigned char SWMinor; |
unsigned char ProtoMajor; |
unsigned char reserved1; |
unsigned char SWPatch; |
unsigned char HardwareError[2]; |
unsigned char HWMajor; |
unsigned char reserved2; |
unsigned char Flags; |
}; |
extern struct str_VersionInfo VersionInfo; |
//#define USART0_BAUD 9600 |
//#define USART0_BAUD 14400 |
//#define USART0_BAUD 28800 |
//#define USART0_BAUD 38400 |
#define USART0_BAUD 57600 |
#endif //_UART_H |
/tags/V2.06a/user_receiver.c |
---|
0,0 → 1,23 |
//############################################################################ |
// Implement your own RC-decoding routines here |
//############################################################################ |
//############################################################################ |
// Initialize the UART here |
//############################################################################ |
void User_Receiver_Init(void) |
{ |
// SpektrumUartInit(); // or use an existing routine like this |
}; |
//############################################################################ |
// Is called by the uart RX interrupt |
// UDR contains the received byte |
//############################################################################ |
void User_RX_Parser(unsigned char udr) |
{ |
}; |
/tags/V2.06a/user_receiver.h |
---|
0,0 → 1,4 |
// for own implementations |
void User_Receiver_Init(void); |
void User_RX_Parser(unsigned char); |
/tags/V2.06a/vector.h |
---|
0,0 → 1,19 |
#ifndef _VECTOR_H |
#define _VECTOR_H |
typedef struct |
{ |
int32_t x; |
int32_t y; |
int32_t z; |
} __attribute__((packed)) vector32_t; |
typedef struct |
{ |
int16_t x; |
int16_t y; |
int16_t z; |
} __attribute__((packed)) vector16_t; |
#endif //_VECTOR_H |
/tags/V2.06a/version.txt |
---|
0,0 → 1,714 |
------- |
V0.53 27.04.2007 H.Buss |
- erste öffentliche Version |
V0.53b 29.04.2007 H.Buss |
- der FAKTOR_I war versehentlich auf Null, dann liegt der MikroKopter nicht so hart in der Luft |
V0.53c 29.04.2007 H.Buss |
- es gib ein Menü, in dem die Werte der Kanäle nach Nick, Roll, Gas,... sortiert sind. |
Die angezeigten Werte waren nicht die Werte der Funke |
V0.54 01.05.2007 H.Buss |
- die Paramtersätze können jetzt vor dem Start ausgewählt werden |
Dazu wird beim Kalibrieren der Messwerte (Gashebel oben links) der Nick-Rollhebel abgefragt: |
2 3 4 |
1 x 5 |
- - - |
Bedeutet: Nick-Rollhebel Links Mitte = Setting:1 Links Oben = Setting:2 usw. |
- der Faktor_I für den Hauptregler ist hinzugekommen. Im Heading-Hold-Modus sollte er vergössert werden, was Stabilität bringt |
V0.55 14.05.2007 H.Buss |
- es können nun Servos an J3,J4,J5 mit den Kanälen 5-7 gesteuert werden |
V0.56 14.05.2007 H.Buss |
- es gab Probleme mit Funken, die mehr als 8 Kanäle haben, wenn mehrere Kanäle dann auf Null waren |
- Funken, die nicht bis +-120 aussteuern können, sollten jetzt auch gehen |
V0.57 24.05.2007 H.Buss |
- Der Höhenregler kann nun auch mittels Schalter bedient werden |
- Bug im Gier-Algorithmus behoben; Schnelles Gieren fürhrte dazu, dass der MK zu weit gedreht hat |
- Kompass-Einfluss dämpfen bei Neigung |
- Man kann zwischen Kompass FIX (Richtung beim Kalibrieren) und Variabel (einstellbar per Gier) wählen |
- Der Motortest vom Kopter-Tool geht jetzt |
- Man kann den Parametersätzen einen Namen geben |
- Das Kamerasetting ist unter Setting 2 defaultmässig integriert |
V0.58 30.05.2007 H.Buss |
- Der Höhenregler-Algorithmus wird nun umgangen, wenn der Höhenreglerschalter aus ist |
V0.60 17.08.2007 H.Buss |
- "Schwindel-Bug" behoben |
- Die Poti-Werte werden jetzt auf Unterlauf (<0) überprüft |
- Poti4 zugefügt |
- Es werden jetzt 8 Kanäle ausgewertet |
- Kamera-Servo (an J7) |
- Die Settings müssen überschrieben werden |
V0.61 - V0.63 H.Buss 27.09.2007 |
- Poti 4 und Kanal 8 werden im Menü angezeigt |
- ein paar Kleinigkeiten bei den DefaultKonstanten2 bereinigt |
- Analog.c: Aktuell_ax korrigiert |
- auf 32 Debug-Kanäle erweitert |
- Loopings sind jetzt möglich und einzeln im KopterTool freischaltbar |
- leichte Anpassungen im Gier - Geschwindigkeit und Drift |
- die Hardwareversion V1.1 wird erkannt und das Programm stellt sich auf die geänderte Gyroverstärkung und die geänderten Portpins ein |
- die Software startet nach dem Einschalten schneller, weil der Luftdruckoffset schneller gefunden wird |
- die PPM-Ausgänge liegen wieder an den Pins an |
- Details an der Sensordatenverarbeitung -> es fliegt sich geringfügig anders |
- der MK ist bei wenig Gas nicht mehr so giftig -> soll das Landen vereinfachen |
- I2C-Bus läuft jetzt sicher nach einer Störung wieder an |
- Sticksignale werden präziser ausgewertet |
- Stick-Kanäle werden ans Kopter-Tool übertragen |
- Es muss die Version V1.47 des Kopter-Tool verwendet werden |
- Die Settings werden auf Default zurückgesetzt |
- am Piepen kann man die Fehlerart unterscheiden |
1. einzelnes Piepen beim Einschalten und Kalibrieren |
2. langsames Intervall mindestens 1 Sek -> Empfangsausfall |
3. schnelleres Intervall mindestens 1 Sek -> Akku |
4. sehr schnelles Intervall mindestens 1 Sek -> Kommunikation zu den Reglern gestört |
V0.64 H.Buss 30.09.2007 |
- beim Gieren wurden die Achsen nicht hart genug geregelt |
V0.65a H.Buss 15.10.2007 |
- Integral im Mischer wieder integriert |
- Feinabstimmung im ACC/Gyro Abgleich -> 1/32 & 100 |
- ACC/Gyro Abgleich auch bei HH |
V0.66a H.Buss 3.11.2007 |
- Messwertverarbeitung aus dem Analog-Interrupt entfernt |
- Analogmessung hängt jetzt am FC-Timing |
- Looping-Stick-Hysterese eingebaut |
- Looping-180°-Umschlag einstellbar |
- Achsenkopplung: Gierbewegung verkoppelt Nick und Roll |
- Lageregelung nach ACC-Sensor verbessert |
- zusätzlicher I-Anteil in der Lageregelung verbessert die Neutrallage |
- Gyrodriftkompensation überarbeitet |
- Bug in der Gier-Stick-Berechnung behoben |
- Gyro-Messung auf 1kHz beschleunigt |
V0.67a H.Buss 16.11.2007 |
- der Hauptregler-I-Anteil wirkt jetzt nur noch auf den Winkel (ausser im HH-Mode) |
- Gyro-Acc-Abgleich jetzt wieder in jedem Zyklus |
- Feinabstimmung |
- Beim HH-Modus gab es noch Bugs |
V0.67e H.Buss 29.11.2007 |
- Parameter: Dynamic Stability und Driftfaktor eingeführt |
- Die Namen der Analogwerte werden jetzt zum Koptertool übertragen |
- Kompatibilität zum Koptertool erhöht |
V0.67f H.Buss 04.12.2007 |
- Das Integral des Hauptreglers wird jetzt linear entladen und nicht mehr proportional |
- Schub für Gier wird jetzt auf den Gaswert begrenzt, dadurch steigt der MK nicht mehr beim Gieren. Gier ist allerdings nicht mehr so agressiv |
- Die ACC-Nullwerte können jetzt dauerhaft im EEPROM gespeichert werden (Stick:Vollgas und Gier rechts) |
V0.68a I.Busker 28.12.2007 |
- SPI.c & SPI.h ins Projekt aufgenommen |
SPI-Kommuikation kann in SPI.h aktiviert/deaktivert werden |
V0.68c H.Buss 05.01.2008 |
- Stickauswertung verbessert -> träger und präziser |
- Alle Settings angepasst |
V0.69e H.Buss 05.05.2008 |
- kleinere Bugs beseitigt |
- Schneller Sinkflug jetzt möglich |
- Min- und Maxgas in den Settings geändert |
- Lagewinkel wird jetzt in 0,1 Grad an Kompass und Navi gesendet |
- Kalibrierung für MK3Mag -> Nick unten beim Kalibrieren |
- Kompassroutine um den Ersatzkompass (Gyro unterstützt Kompasswert) erweitert |
V0.69h H.Buss 21.05.2008 |
- STICK_GAIN = 4 eingeführt. Das erhöht die Auflösung der Sollwerte. Stick_P und Stick_I müssen nun um Faktor 4 erhöht werden |
- SenderOkay auch an das Naviboard übertragen |
- Bessere Parameter bei Senderausfall |
V0.69j H.Buss 30.05.2008 |
- Höhere Präzision der Achsenkopplung |
V0.69k H.Buss 31.05.2008 |
- Bug in SPI.C behoben |
- in 0.69h war ein Bug, der zu ungewollten Loopings führen konnte |
V0.69L H.Buss 14.06.2008 |
- feinere Cam-Servo-Auflösung |
V0.70a H.Buss 01.07.2008 |
- Unterstützung der V1.3-Hardware mit automatischem Hardware-Gyro-Abgleich |
V0.70b H.Buss 14.07.2008 |
- flexible Einstellungsmöglichkeit von J16 und J17 (Transistorausgänge) |
- eigene Parameter für GPS-Naviboard |
- eigener Parameter für ExternalControl (war vorher UserParameter1 bzw. 8) |
- neue Parameter im EEPROM-Datensatz: J16Bitmask, J16Timing, ExternalControl, Navi... |
- MikroKopterFlags eingeführt, damit das Navi den Status des MKs kennt |
- KopterTool-Kompatibilität auf 8 erhöht |
V0.70c H.Buss 30.07.2008 |
- Parameter der Datenfusion leicht modifiziert |
- EEPROM-Parameter für Looping-Umschlag angepasst (von 100 auf 85) |
- MaxStick wird auf 100 begrenzt |
V0.70d H.Buss 02.08.2008 |
- Transistorausgänge: das oberste Bit der Blinkmaske (im KopterTool linkes Bit) gibt nun den Zustand des Ausgangs im Schalterbetrieb an |
0.71b: H.Buss 19.10.2008 |
Kommunikation zum Navi erweitert: |
- Beeptime jetzt 32Bit |
- Datenfusion und Driftkopensation wird durch NaviBoard unterstützt |
0.71c: H.Buss 20.10.2008 |
- LoopConfig heisst jetzt BitConfig |
- 3-Fach-Schalter für Höhensteuerung möglich -> kann man mit GPS-Schalter zusammenlegen |
- bei den Settings wurde Setting[0] mit abgespeichert, welches es nicht gab. |
- in Zukunft werden bei neuen EEPROM-Settings die Kanäle von Setting 1 übernommen |
- Variablen NaviWindCorrection, NaviSpeedCompensation, NaviOperatingRadius eingeführt |
0.71f: H.Buss 15.11.2008 |
- Ausschalten der Höhenregelung per Schalter um 0,3 sek verzögert |
- bei der seriellen Übertragung hat die FC jetzt als SlaveAdresse die 1 |
- VersionInfo.NaviKompatibel eingeführt |
- wenn manuell gegiert wird, wird der GyroKompass-Wert auf den Kompasswert gesetzt |
- Luftdruckwert wird an das Navi übertragen |
- Der Baro-Offset wird jetzt nachgeführt, um den Messbereich zu erweitern. Geht nur bei Höhenregler mit Schalter |
- Debugdaten können jetzt mit 'f' gepollt werden |
0.71g: Gregor 09.12.2008 |
- Kommunikation überarbeitet |
Infos hier: http://www.mikrokopter.de/ucwiki/en/SerialCommands |
0.71h: H.Buss 15.12.2008 |
- Freigegebene Version |
- NaviAngleLimitation als Parameter zum Navi implementiert |
- Antwort auf CMD: 't' entfernt |
0.72d: H.Buss 22.01.2009 |
- OCTO als Compilerschalter |
- Unterstützung der FC 2.0 (ME) |
- GYRO_D eingeführt |
- Achsenkopplung jetzt auch auf Nick/Roll-Bewegung |
0.72e: H.Buss 27.01.2009 |
- die 0.72d hatte kein Integral im Gier |
- Parameter eingeführt: |
EE_Parameter.NaviGpsPLimit |
EE_Parameter.NaviGpsILimit |
EE_Parameter.NaviGpsDLimit |
EE_Parameter.NaviPH_LoginTime |
EE_Parameter.AchsKopplung2 |
EE_Parameter.CouplingYawCorrection |
0.72f: H.Buss 28.01.2009 |
- Bug im Ersatzkompass entfernt |
0.72h: H.Buss 05.02.2009 |
- Algorithmen beschleunigt -> Floats durch Fixkomma ersetzt |
- Achsentkopplung weiter verbessert |
- Nick- und Roll im Octo-Mischer auf jeweils vier Motoren aufgeteilt |
0.72i: H.Buss 07.02.2009 |
- Abtastrate von 1kHz auf 2kHz erhöht |
0.72j: H.Buss 09.02.2009 |
- neue Implementierung der Servoausgänge |
0.72k: H.Buss 10.02.2009 |
- Abtastrate auf 5kHz erhöht |
0.72L: H.Buss 13.02.2009 |
- Signalfilterung überarbeitet |
- OCTO2 implementiert |
0.72M: H.Buss 13.02.2009 |
- Code Cleanup |
0.72o: H.Buss 24.02.2009 |
- Abtastrate auf 2kHz |
- HW-Version an Navi |
- neuer Datensatz 'c' -> Lagedaten für 3D-Grafik |
- Auswerteroutine für Spectrum-Satteliten implementiert |
- Kanalsettings werden beim Parameterreset nicht mehr gelöscht |
- die Driftkompensation wird jetzt feiner aufgelöst --> EE_Parameter.Driftkomp muss mal 8 genommen werden |
- die Integrale und ACC-Werte werden jetzt im Scope in ca. 0,1° angezeigt (wie beim NaviBrd) |
0.72p: H.Buss 01.03.2009 |
- Octo3 erstellt |
- Analogwerte umbenannt |
0.73a-d: H.Buss 05.04.2009 |
- MixerTabelle implementiert |
- I2C-Bus auf bis zu 12 Motoren erweitert |
- die Busfehler der BL-Regler werden im Menü angezeigt |
- Revision der MixerTabelle eingeführt |
- MixerTabelle wird bei Parameterreset neu initialisiert |
- Motortest auf [12] erweitert |
- Motorschalter nicht mehr 3-Stufig |
0.74a |
- Datenfusion im Flug auch, wenn ACC-Z < 512 |
- Wert für die Luftdruck-Messbereichserweiterung abgefangen |
0.74d |
- Die Driftkompensation ist jetzt dreistufig -> 0,5% pro sekunde zusätzlich eingeführts |
0.75a G.Stobrawa 22.5.2009 |
- Extern Control also received from NC via SPI |
0.75b H.Buss 27.05.2009 |
- Spektrum-Singale schalten den PPM-Eingang aus |
- max. 2 Sekunden nach dem Start auf die BL-Regler warten |
- Automatische Zellenerkennung, wenn Spannungswarnung < 5,0V |
- Bei automatischer Zellenerkennung piept es je nach Zellenzahl |
- EE_DATENREVISION auf 76 erhöht |
- Servo: |
- Roll-Servo für FC ME implementiert |
- Update-Cmd stoppt Servos |
- Servos werden erst nach dem ersten Kalibrieren aktiviert |
0.75c G.Stobrawa 25.7.2009 |
- Übertragung der Servo-Settings zur NC |
- RSSI wird an NC gesendet, derzeit wird der Wert nicht gesetzt |
- Bugfix Messbereichsumschaltung des Luftdrucksensors springt |
- Auflösung des Luftdrucks nun bis auf 1 cm (5mal feiner) zur genaueren Berechnung des D-Anteils |
- Unterstützung von Warnings-Bitmasks für die J16, J17-Outputs bei Unterspannung |
- Unterspannung für einzelne Zelle´n von 3.2V auf 3.3V angehoben (9.6V --> 9.9V für 3S) |
0.75d H.Buss 13.8.2009 |
- RC-Routine: Empfangsausfall soll sicherer erkannt werden |
- Zellenerkennung nun auch beim Speichern der Settings |
- Warnungs-Blinkmaske auch bei Empfangsausfall |
0.75e H.Buss 18.8.2009 |
- LED-Blinken kann an die Motoren gekoppelt werden |
- Feinabstimmung des Höhenreglers |
0.75f H.Buss 27.8.2009 |
- D-Anteil des Höhenreglers jetzt mit Quadratischer Komponente |
- Lagewinkel wirkt jetzt mit 1/Cos(x) mit in den Höhenregler |
- leichte Modifikation der RC-Empfangroutine |
0.75g H.Buss 31.08.2009 |
- die Akkuspannung geht jetzt antiproportional ins Gas ein |
0.75h H.Buss 3.09.2009 |
- im Höhenregler werden jetzt die Stellwerte begrenzt --> max +- 16% vom geschätzten Schwebegas |
0.75i H.Buss 7.09.2009 |
- GpsZ vom Navi zur FC für den Höhenregler |
- "hoovergas-Variation" als Parameter |
- Kompatibilität zu NC und PC erhöht |
0.75j H.Buss 17.09.2009 |
- Laufzeitzähler eingebaut |
0.75k H.Buss 22.09.2009 |
- zweite Variante (Gregor) der Höhenregelung implementiert |
- umschaltbare RC-Routine |
0.75L H.Buss 23.09.2009 |
- SollHoehe und Gas geht nun auch an die NC |
0.75M H.Buss 29.09.2009 |
- Spektrum-Timing wird nun überwacht |
- die FC kann nun stand-Alone als Kamera-Stabilizer eingesetzt werden, weil die Servos aktiviert werden, wenn I2C fehlt |
0.75N H.Buss 29.09.2009 |
- Hoover-Stickpunkt wird bei aktivem Höhenregler nicht nachgeführt |
- Hoover-Stickpunkt kann per Parameter fest eingestellt werden |
- Baro-Messbereichserweiterung auch bei aktiviertem Höhenregler |
- Gyro_Gier_P und Gyro_Gier_I eingeführt |
- I2C_fehler-Zähler jetzt in den Analogdaten |
0.75o H.Buss 01.10.2009 |
- der Höhenregler wird jetzt nur alle 10ms bearbeitet |
- Baro-Messbereichserweiterung auch bei Poti als Sollwert |
0.76d H.Buss 10.10.2009 |
- bei aktiver Messbereichserweiterung wird die aktuelle Höhe übernommen |
0.76e H.Buss 27.10.2009 |
- es werden beim Start einmal alle BL-Regler angesprochen, damit BL-Regler#8 auch einen Selbsttest macht |
- S3D-ACT-Summensignal als Compilerschalter |
0.76f H.Buss 05.11.2009 |
- untere Spannungsgrenze der Unterspannungswarnung (9,3V) entfernt |
0.76g H.Buss 10.11.2009 |
- Casting-Fehler in der Gas-Berechnung |
0.77a H.Buss 11.11.2009 |
- Erweiterung auf 12 Kanäle |
- Bei Koptertool-Kanalabfrage kein Empfangsausfall-Piepsen |
- serielle Kanalerweiterung eingebaut -> PPM_in auf 25 erweitert |
- Servos3-5 einstellbar |
- neues Kommando "f" -> schaltet auf anderen Parametersatz um |
0.77b H.Buss 09.12.2009 |
- JetiBox: Menü wird übertragen |
- neu: FCFlags |= FCFLAG_I2CERR; |
- LED-Warn-Blinken nun mit festem Timing und abschaltbar |
0.77c H.Buss 07.01.2010 |
- zwei weitere Spektrum-Varianten implementiert |
0.77d H.Buss 25.01.2010 |
- Strom-Messung eingebaut |
0.78a H.Buss 03.02.2010 |
- Bugfix: Settingsumschaltung im Flug |
0.78b H.Buss |
- veröffentlichte Version |
0.78c H.Buss + G.Stobrawa 22.2.2010 |
- Bewegungsbegrenzung an Servo 3 to 5 der FC 2.0 |
- Theoretischer Variablenüberlauf bei Vario-Höhenregler |
- Anzeige des "SPI RX communication error" wenn GPS Option nicht aktiv |
- LED-Schwellwerte fürs Blinken waren unterschiedlich |
0.78c H.Buss + G.Stobrawa 04.3.2010 |
- Code cosmetics |
0.78f H.Buss + I.Busker 23.3.2010 |
- Unterstützung für Jeti-Expander |
- Begrenzung des Vario-Höhenreglers auf ein 10m-Fenster um Überläufe zu verhindern |
- Einführung eines Vario-Zeichens (+/-/ ) auf der Jetibox |
- BL-Timeout beim Start erhöht |
0.80a-d H. Buss + G.Stobrawa 20.5.2010 - 22.7.2010 |
- Motoren Starten nicht ohne Kalibrierung |
- Unterstützung der BL2.0-Regler |
- statt 8 nun 10 Bit Auflösung der Lageregekung |
- Unterstützung der BL2.0-Regler Konfiguration via MK-Tool |
- Parametersätze werden per I2C an die BL-Regler durchgereicht |
- "Care-Free" implementiert |
- Freie Belegung der "Vorne"-Richtung |
- nur wenn Motoren laufen: Beepen, wenn Carefree ohne Navi oder ohne gültigen MK3Mag-Wert |
- nur wenn Motoren laufen: Beepen wenn NC plötzlich ausfällt |
- #define RECEIVER_SPEKTRUM_EXP eingeführt |
- #define SWITCH_LEARNS_CAREFREE eingeführt |
- Schwerpunktanzeige in den 3D-Daten |
- Checksummen gesicherte Datenablage im EEProm |
- Fehlerdiagnose implementiert (Wiki: ErrorCodes) |
- ErrorCode aufs Jeti-Display |
- JetiMenü: bis acht Temperaturen der BL-Regler |
- GPSInfo.Speed im Jeti-Display |
- Compass-Richtung nun im Jeti-menü |
- diverse Änderungen im Höhenregler |
- P wirkt schwächer |
- D wirkt stärker |
- Anpassung der Höhenregelung auf Level des Hoovergases |
- AccZ schneller nachführen |
Parameter modifiziert: |
- EEPROM-Kompatibilität auf 84 -> Parameter werden resettet |
- EE_Parameter.Hoehe_ACC_Wirkung = 0; // war 30 |
- EE_Parameter.Hoehe_HoverBand = 8; // war 5 |
- Notgas = 45 |
- NotgasZeit = 90 |
- Beginnersetting: EE_Parameter.DynamicStability = 70; |
- Neu: GyroStability = 6 |
- GPS-Login-Time auf 2 reduziert |
0.80e H.Buss 02.08.2010 |
- MK3Mag ohne NC ging nicht |
0.80f H.Buss 04.08.2010 |
- Beim Höhenregler "Deckel" wird das Gas wieder wie in der alten Version behandelt und der D-Anteil auf das alte Verhalten (um Faktor 8) reduziert |
0.80g H.Buss 11.08.2010 |
- erweitetern Messbereich für Luftdruck bei der FC2.1 aktiviert |
0.80h H.Buss 30.08.2010 |
- bei I2C-Fehlern wurden die Counter zurück gesetzt und für einige ms die Interrupts angehalten - das ist jetzt behoben |
- Nur I2C-Daten senden, wenn das alte Paket komplett raus ist |
0.82a H.Buss 08.11.2010 |
- MotorSafetySwitch - Verriegelt das Ein/Ausschalten |
- ServoManualControlSpeed - Verlangsamt das Cam-Servo |
- CamOrientation - für verdrehte Kamera-Servos |
- Position der Status-Bits verändert |
- "Zucken" der Servos bei kurzen Empfangsausfällen behoben |
- jeti update command 'j' added |
- Poti-Auswertung nach ParameterZuordnung() verschoben -> FC-Code schneller |
- Waypont-Events z.B. zum Triggern der Kamera |
- Gyro-Sytbility: Werte bis 16 möglich |
0.82b H.Buss 08.12.2010 |
- Unterstützung von 3,3V-Referenzspannung (nur ATMEGA128) |
0.84a H.Buss 21.03.2011 (Release: 30.03.2011) |
- nur starten, wenn NC_ErrorCode = 0 |
- Beeptime von NC auch beim Kalibrieren durchlassen |
- Varible "JetiBeep" eingeführt |
- Kompass-Winkelvorgabe von NaviControl -> POI |
- Piepen beim Umschalten von CareFree |
- Compass-Routinen überarbeitet |
- Dafaultvalues Servo-Min/MAx an MKDS18 angepasst |
- Defaultreceiver ist RECEIVER_JETI |
- GPS-Operation-Radius per default auf 245m bzw. 100% |
- Höhenvorgabe im Vario-Mode durch Waypoints |
- bei laufenden Motoren keine neuen Settings annehmen |
- immer einmal Carefree Beepen nach dem Kalibrieren |
- Kanaloffset für Potis von 110 auf 127 erhöht, damit es gleich ist mit allen anderen Kanälen |
- POI-Richtung (Soll-Himmelsrichtung) bezieht sich auf den Kamera-Winkel |
0.86a H.Buss 13.09.2011 |
- Variable "JetiBeep" wird gelöscht, wenn an den Empfänger gesendet wurde |
- wenn GPS deaktiviert ist, keinen Fehler bringen, wenn GPS fehlt. Auch dann nicht piepsen |
- GPS-Sollwertverschiebung |
- Empfangs-Piepen unterdrücken -> einstellbar |
- MotorSmooth einstellbar |
- Höhenregler: keine 'harte' IstWert-Übernahme bei Bewegen des Sticks in die Hoover-Position |
- Coming Home mit Höhenvorgabe |
- Coming Home als Failsafe |
- Einführung des GPS-Characters (- / W H D P) |
- Klartext bei den Jeti-Fehlermeldungen |
- Jeti-Beep "3*kurz" bei NC-Errors |
- Jeti-LCD-Aufruf nur noch alle 300ms, weil die Werte zu unruhig waren |
- Mixer-Settings werden nicht gelöscht, wenn sich die Parameter-Revision ändert |
- GPS-Angle limit von 100 auf 140 |
- GPS-I-Limit von 75 auf 85 |
- GAS-Offset von 120 auf 127 erhöht, damit es für alle Kanäle gleich ist |
- EE_Parameter.Hoehe_StickNeutralPoint auf Werte zwischen 80 und 180 begrenzt |
- PPM_Neutral eingeführt, um den Offset bei HoTT auszugleichen; |
- LED_Update() nun nur noch alle 20ms, weil die schnellste Ausgabe (bei Potivorgabe) ohnehin nur 40ms sind |
- Jeti & HoTT: Nur beim Fehler auch JetiBeep, wenn die Motoren laufen -> sonst nervt das bei der Fehlerbehebung (Compass-Kalibrieren usw.) |
- Error-Text auch im virtuellen Display des Koptertools |
- virtuelles LCD-Menü: |
- "ExternControl" aus Platzgründen aus dem virtuellen LCD-Menü entfernt. |
- keine BL-Temperaturen und I2C-Fehler anzeigen, wenn die BL-Regler nicht verwendet werden |
- nach dem Gieren nicht den Ersatzkompass auf den Kompasswert stellen, die Umschaltung war zu hart |
- ACC Correction eingeführt |
- I2C Fehler kamen nicht bei der NC an, weil die zu kurz waren - jetzt meldet die NC die Fehler mind. 8 Sekunden |
- Fehlermeldungen stehen jetzt mind. so lange an, bis sie an die Nc ge sendet wurden |
- neue Fehlermeldungen: |
"No NC communicat", // 9 |
"GPS Fix lost ", // 21 |
"Magnet Error ", // 22 |
"Motor restart ", // 23 |
"BL Limitation " // 24 |
- LED: Schaltfläche "nur bei Motor start" bei beiden getrennt |
- Ausbau der HoTT-Telemetrie |
- Variable "KompassRichtung" entfernt |
- ErsatzKompassInGrad sinvoll genutzt |
- HoTT-Update per Uart-Durchschleifen |
- AltitudeSetpointTrimming eingeführt |
- Vario-Anzeige für HoTT |
- Verhindern eines Überlaufs im Vario |
- echter Varioton auch ohne Vario-Höhenregler |
- Flugminuten laufen jetzt bei (FC_StatusFlags & FC_STATUS_FLY) los, weil sonst die Zeit zur NC verschieden war |
- KompassFusion wird jetzt getrennt von der NC berechnet |
- Sport-Setting entfernt und ein "Easy-Setting" eingeführt (leicht reduzierte Sticks); "Beginner" ist jetzt "Normal" |
- MagnetError kann man in der Startphase ignorieren |
- BL-Temperaturen, I2C-Fehler und BL-MaxPWM zum Loggen an NC |
- Einzelströme nun auch bei HoTT angezeigt |
0.86b H.Buss 20.09.2011 |
- Höhenbegrenzung bewirkt nur, dass im Vario-Mode der Sollwert nicht weiter nach oben geschoben werden kann |
- grüne LED ging aus - gefixt |
- K1-K8 wurden im LCD mit 0-7 bezeichnet |
0.86c H.Buss 22.09.2011 |
- Neue Anzeige: Magnetfeld und Inklination bei HoTT und Jeti |
- Neuer SPI-Block 'SPI_MISC' |
- Kompass-Fusions-Dämpfung bei Neigung leicht verringert |
- '.' im Vario-Höhenregler |
0.86d H.Buss 26.09.2011 |
- Analog.c: Vario Überlauf anders verhinden |
- Poti1-6 auch im HoTT-Display |
0.88 H.Buss 12.12.2011 - 26.03.2012 |
- Failsafe-Kanal |
- Failsafe: 5 Sekunden warten & Höhe ändern (macht die NC) |
- Option: Failsafe-Sinkflug xx% Schwebegas |
- Stopp der Motoren wenn bei Failsafe ein Motor blockiert |
- von 30 auf 60 Sekunden Failsafe-Zeit verlängert |
- Höhenwert auf cm kalibriert (zeigte ca. 10% zu viel an) |
- Neue Error-Codes: "No SD-Card", "Flying range!" und "Error SD-Logging" |
- Wenn die Motoren aus sind, den Luftduckwert langsam nachführen |
- das sbus-protokoll implementiert (nur FC2.1) |
- Schaltkanal auf Servo-Ausgang |
- Filter auf den Ausgängen der Servos |
- Option: Failsafe-Sinkflug xx% Schwebegas |
- "Max Altitude" als Parameter auf der SD-Karte im Navi -> Beeinflusst "Parameter_MaximumAltitude" (das niedrigste gilt) und es gibt eine Fehlermeldung "ERR:Max Altitude" |
- SPI-Protokoll: BL.Status eingefügt und Parameter.GlobalConfig & Parameter.ExtraConfig verschoben |
- Senden der Out1 & Out2-Zustände an die NC, damit es in der OSD-Darstellung angezeigt werden kann |
- Kompassrichtung neu merken, wenn CF geschaltet wird |
- "I" aus dem Hott-Menü entfernt und durch ":" ersetzt, weil das nur auf der mx-20 gut aussah |
- Höhenregler-Settings: GPS-Z von 64 auf 20 reduziert |
0.88M H.Buss 15.05.2012 |
- HoTT V4 |
- Kamera-Servo beim Kalibrieren weiter laufen lassen. |
- Error 30: no GPS fix bei Start |
- echter MotorSchalter |
0.88n H.Buss 06.07.2012 |
- Bugfix: Der letzte angesteuerte Servo-Puls war zu kurz |
0.90 H.Buss 04.03.2013 |
- Anzeige WP x/Y in der HoTT-Telemetrie |
- Schalter und WP-Event gleichzeitig |
- Photo-Auslösung als Entfernungsintervalle |
- Jeti + |
- Kamera-Neitung als Integral |
- RC-Lost am Startpunkt macht kein Failsafe, wenn GAS auf Null für 1,5sek war |
- Auswahl:Speak-All nun in der KopterTool-Config |
0.90e H.Buss 04.03.2013 |
- Parameter_ServoRollComp jetzt auf Poti /Kompatibilität auf 93 erhöht) |
0.90f (26.04.2013) |
- disable Yawing when Gas-Stick is to Zero |
- calibration must be within 20° Tilt angle |
- Hold I-Parts of the attitude control to zero when the MK is still on the ground |
- ACC-Altitude sensor data fusion implemented to the altitude controller (HW-Update from FC2.1 to 2.2 needed) |
- MK must be within 20° tilt angle when calibrating sensors |
- Parameter Reset, if the HW-Version changes (FC2.1 to 2.2) |
0.90g (29.04.2013) |
- No ACC-Z error if the MK is tilted after switching on |
- ATMEGA644 (until FC2.0): Sensitive RC-Signal validation removed -> that was only nessecary for old 35MHz receivers |
0.90h (14.05.2013) |
- Auto Start and landing for Waypoints |
- back to old eeprom-compatiblity to remain compatible to other Tools |
- HoTT-Bugfix: no speech while vario tone |
- Bugfix: Wrong error speech in JetiEX ("Error calibration") |
0.90j (27.05.2013) |
- Changes for better EEPROM-Safety |
- variable ActiveParamSet instead of the direct EEPROM-Reading (faster) |
- Checking the ACC-Z value in flight and report ACC-Z if out of range |
- disable Altitude hold in case of ACC-Z error |
2.00a (after public Beta test 0.91) |
- show SW-Version in Hot Display |
- GPS-Parameter changed (P = 90->100; I = 90->90; D = 90->120; A = 40) |
- Move NICK/Roll Sticks for switching on / off |
- Move the Stick > 100 instead > 75 for switch on / off |
- Failsafe active if ACC-Upgarde |
- AltitudeMode, GPS_Mode & Carefree_Mode are now direct channels instead of Poti-Values (NaviGpsModeChannel,CareFreeChannel,HoeheChannel) |
- NC-SPI communication from 25Hz to 41Hz |
- MotorTemperature and GPS-Mode-Switch more often to NC |
- Auto-Start/Landing |
- JetiEX: Name set to 'MK' |
- if(CareFree) Parameter_AchsKopplung1 += 30; removed |
- StickNeutral setting per default 127 |
- UART-Buffer increased from 175 to 220 Bytes |
- show name of active parameter set in the HoTT/Jeti display |
- fixed in 0.91L: if "ServoRelative" is used, it coud happen that the servo moves a wide range in the first second after the first calibration |
- Servo3-5 Limit to 24-255 |
- no. of channels increased from 12 to 16 |
// 0 -> frei bzw. ACT rssi (or zero if unsigned) |
// 1 - 16 -> 1-16 |
// 17 - 28 -> 12 Serial channels |
// 29 -> WP-Event kanal |
// 30 Fix -> -127 |
// 31 Fix -> 0 |
// 32 Fix -> 128 |
2.00b |
- default Camera-Position after calibration changed if Inverted |
- some changes in ACC-Altitude hold to reduce climbing in fast foreward fly |
- UserParameter1 > 100 disables camera nick control (for BL-Gimbals with self-alignments) |
- Beep at motor off (1sek) |
2.00d |
- Do not start if MK is moving |
- Full Range of altitude measure expansion (3000m flight instead of 950m) |
- compensation of the atmospheric altitude error |
- Measure the exact influence of the barometric range extender |
- Reduce Nick/Roll if Gas is Zero -> avoids MK to turn over during switch-off sequence |
- Tell NC to wait at the Waypoint until Out1 Pattern is over |
- virtual menu: single BL-Currents (FC2.1) |
- per default active: NO_GPSFIX_NO_START and CFG_NO_RCOFF_BEEPING |
- Servo-Nick-Refres reduced from 4 to 3 in default setting -> makes the camera servos faster |
- No undervoltage Beeping if the FC is only supplied by MKUSB (the Voltage measurement is zero) |
- Reset I2C-Error counter when calibrating the Sensors |
- HOTT & Jeti bugfix: The temperatures were sometimes wrong |
- HoTT: |
- GPS coordiante now in Degree + Minutes.Decimalminutes (like in original Graupner-Receivers) |
- added the MK Status in Transmitter Logfile -> General->Fuel |
- added the MK Speach in Transmitter Logfile -> General->Alt3Sek |
2.02a |
- code too big for MEGA644 -> only ATMEGA1284 supported |
- Jeti:GPS-Koordinate |
- Don't accept Reset-Command if Motor running |
- 'Idle' Bit in Output-Mask |
- Option: DisableServoNick |
- Bugfix Maximum Altitude -> New: SpeakHoTT Errormessage = "MaximumAltitude" and VarioCharacter goes to '=' |
- New Error code 32 "ERR:BL Selftest" |
- prepared for current measurements up to 75A per ESC |
- reduced speed of capacity-calculation() from 10ms to 50ms - that should be fast enough |
- Timing correction for NC-Data (41Hz) |
- Autolanding if undervoltage |
- Compass offset angle |
- 0.2V hysteresis in undervoltage warning |
- Fixed: Bug in LED-Output |
- Autolanding per default at 3,1V |
2.02b |
- Bugfix: Data reading for Dodecas (12 motors) |
2.04a (12.03.2014 after public betatest 2.03) |
- No support for FC 1.x |
- Bugfix: set ChannelYaw to zero in case of RC lost |
- Bugfix: Max 6 cells in lipo-detection instead of 7 |
- Bugfix: Compass-Calibration: At the second comdass calibration, the Calibration started in step 2 and not in step 1 |
- increase the allowed band for Auto-Middele-Point of the AltitudeStick to 70-175 |
- Dodeca: reduced I2C Packet lenght to 8 |
- Auto-ComingHome at Undervoltage |
- Voltage measurement was 3% too high |
- allowed band for ACC-Z increased to: 652 - 717 |
- send 'K' command only if JustMK3MagConnected |
- Redundant operation supported |
- Loading Waypoints from SD-Card: |
- menu by HoTT and Jeti added |
- Show the name of the WP-List |
- do not load points if no stafix |
- Version for FC 2.0 with ATMEGA644 |
Not Supported in FC 2.0: |
- ACC-Upgrade for better ACC-Altitude control |
- Hott |
- Jeti-EX |
- Auto-Start & Landing |
- WP-List Name |
2.04b |
- Bugfix: Poti Values were wrong after calibration |
- Redundant Slave: LED-Binking: Green: UART Data & Red:I2C error |
- CompassCorrected (True-Compass) in HoTT- and Jeti-Display |
- "True Compass" in virtual menu |
- Jeti: Indicator "R" for redundancy |
2.04c |
- S.Bus extended to 16 Channels |
2.06a (09.04.2013 after public beta 2.05) |
- Load/Store Single Point |
- Photo-Releases on Altitudes |
- Voltage warning set to 3,2V, because the Voltage measurement was lower than before |
- new Parameter: SinglePoint Speed |
- Counter for Motor-Restarts for each single motor |
- Servo-Signals can be configured if mapped to output |
- Speak "Error_Motor" as soon as one Motor reports a restart |
- EE_Parameter.NaviDescendRange now as Parameter in EEPROM |
- EE_Parameter.NaviMaxFlyingRange now as Parameter in EEPROM |
- Maximum Altitude is also used in the NC instead of "ABSOLUTE_FLYING_ALTITUDE" from SD-Card |
/tags/V2.06a/. |
---|
Property changes: |
Added: tsvn:logminsize |
+8 |
\ No newline at end of property |