/tags/V2.06f/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.06f/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.06f/Hex-Files/Flight-Ctrl_MEGA1284p_V2_06f_SVN871.hex |
---|
0,0 → 1,5575 |
:100000000C941F0C0C94790C0C94790C0C94790CB6 |
:100010000C94790C0C94790C0C94790C0C94790C4C |
:100020000C94790C0C949D200C94790C0C94790C04 |
:100030000C94B43B0C94790C0C94790C0C94790CC2 |
:100040000C94790C0C94790C0C94C01C0C94790CC5 |
:100050000C9415130C94790C0C94DF120C94790CFD |
:100060000C94AB220C94790C0C94CB360C94790C38 |
:100070000C94BBA90C94790C0C94F99E0C94790CFB |
:100080000C94790C0C94790C0C94790CD422D92210 |
:10009000DE22E722FE22152325233523A323FB2579 |
:1000A0001523BF24D024E524042521256C25B8255B |
:1000B0006B285129F4296D2AA52A552B0F2C782C51 |
:1000C000F32C252D912DBF2DEC2D4C2EA52E0A2F76 |
:1000D000552F972FFB2FF73012752E76B376B67506 |
:1000E000077738775175E575498AEA8A6F8BCA8B2D |
:1000F0001B8C858C309A068D3A8D3A8D3A8D3A8DCF |
:100100003A8D3A8D3A8D3A8D3A8D6E8DEA8D7B8E91 |
:10011000A18EE58E3F8FCE8FD8903C913C913C9143 |
:100120003C913C913C913C913C913C916F918491EC |
:10013000A49100923C929792C4925A93309AAF93B2 |
:10014000AF93AF93AF93AF93AF93AF93AF93B8A782 |
:10015000BBA7BBA7BBA7C4A7C7A7CAA7DCA7D9A72C |
:100160000A0D3D3D3D3D3D3D3D3D3D3D3D3D3D3D22 |
:100170003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3DAF |
:100180003D3D3D3D3D000A0D426174743A0020251D |
:10019000642043656C6C732000204C6F772077617E |
:1001A000726E696E673A2025642E25645600202001 |
:1001B0004175746F2D43483A2025642E25645600FE |
:1001C00020204175746F6C616E64696E673A2025FA |
:1001D000642E256456000A0D4F6C64204643204867 |
:1001E00061726477617265206E6F742073757070D0 |
:1001F0006F7274656420627920746869732046693F |
:10020000726D7761726521000A0D466F756E64200C |
:10021000424C2D4374726C3A20002564000A0D0A8A |
:100220000D2121204D495353494E4720424C2D4327 |
:1002300054524C3A202564202121000A0D424C2DB5 |
:100240004669726D776172652025642E25303264AF |
:10025000003C2D2D207761726E696E67206F6C6493 |
:100260002056657273696F6E21000A0D43616C69D7 |
:1002700062726174696E67207072657373757265FE |
:100280002073656E736F722E2E004F4B0A0D000A9D |
:100290000D466C696768742D74696D65202575203D |
:1002A0006D696E20546F74616C3A2575206D696EAE |
:1002B00000416E676C654E69636B20202020202012 |
:1002C00020416E676C65526F6C6C202020202020CE |
:1002D000204163634E69636B202020202020202072 |
:1002E00020416363526F6C6C20202020202020204E |
:1002F000205961774779726F20202020202020200C |
:1003000020416C746974756465205B302E316D5DBD |
:10031000204163635A2020202020202020202020FC |
:100320002047617320202020202020202020202012 |
:1003300020436F6D706173732056616C756520206A |
:1003400020566F6C74616765205B302E31565D20DE |
:10035000205265636569766572204C6576656C2010 |
:10036000204779726F20436F6D7061737320202076 |
:10037000204D6F746F7220312020202020202020FB |
:10038000204D6F746F7220322020202020202020EA |
:10039000204D6F746F7220332020202020202020D9 |
:1003A000204D6F746F7220342020202020202020C8 |
:1003B0002031362020202020202020202020202016 |
:1003C0002031372020202020202020202020202005 |
:1003D00020313820202020202020202020202020F4 |
:1003E00020313920202020202020202020202020E3 |
:1003F00020536572766F202020202020202020208E |
:1004000020486F76657267617320202020202020AD |
:100410002043757272656E74205B302E31415D2011 |
:10042000204361706163697479205B6D41685D2070 |
:100430002048656967687420536574706F696E74CD |
:100440002032352020202020202020202020202085 |
:100450002032362020202020202020202020202074 |
:100460002032372020202020202020202020202063 |
:10047000204932432D4572726F72202020202020A7 |
:1004800020424C204C696D697420202020202020BF |
:10049000204750535F4E69636B202020202020208E |
:1004A000204750535F526F6C6C202020202020206A |
:1004B0002021212120494E434F4D50415449424C67 |
:1004C0004520212121002E005B25695D005B256907 |
:1004D0005D002B204D696B726F4B6F7074657220DD |
:1004E0002B0048573A5625642E25642053573A2549 |
:1004F000642E253032642563200053657474696E60 |
:10050000673A2564202573004D697865722045722D |
:10051000726F7221004552522532643A004861726E |
:100520006477617265204572726F7220313A25647A |
:10053000202121004D697373696E6720424C2D4361 |
:1005400074726C3A256420212100493243204552BF |
:10055000524F5221212100424C2D53656C66746527 |
:100560007374204572723A25326400486569676881 |
:10057000743A202025356900536574706F696E7474 |
:100580003A2535690050726573737572653A253581 |
:1005900069004F66667365743A2020253569002826 |
:1005A0004129002569006163742E206265617269CA |
:1005B0006E67004E69636B3A20202020202025358D |
:1005C0006900526F6C6C3A2020202020202535696C |
:1005D00000436F6D706173733A20202025356900E8 |
:1005E0004B25693A25346920204B25693A25346921 |
:1005F00020004E693A2534692020526F3A2534692B |
:10060000200047733A253469202047693A25346928 |
:10061000200050313A253469202050323A2534697F |
:10062000200050333A253469202050343A2534696B |
:1006300020004779726F202D2053656E736F720012 |
:100640004E69636B2025346920282533692E25786F |
:100650002900526F6C6C2025346920282533692EBF |
:1006600025782900596177202025346920282533F1 |
:10067000692900414343202D2053656E736F72003A |
:100680004E69636B2025346920282533692900527F |
:100690006F6C6C20253469202825336929005A2085 |
:1006A00020202025346920282533692900566F6CC5 |
:1006B000746167653A2020202533692E25316956FB |
:1006C0000043757272656E743A2020202533692EBE |
:1006D0002531694100506F7765723A202020202033 |
:1006E00025346957004469736368617267653A200D |
:1006F0002535696D416800526563656976657200EC |
:1007000052432D5175616C6974793A202534690022 |
:1007100052432D4368616E6E656C733A25346900EF |
:10072000556E646572766F6C746167657320200026 |
:100730005761726E3A202532642E25645600486F48 |
:100740006D653A202532642E256456004C616E6436 |
:100750003A202532642E25645600506F746925694D |
:100760003A202025336900506F746925693A2020AA |
:1007700025336900466C696768742D54696D65207E |
:100780002000546F74616C3A2535756D696E0041B7 |
:1007900063743A20202535756D696E002872657383 |
:1007A00065742900436F6D70617373004D61676EEE |
:1007B00065743A202020253569004779726F3A2008 |
:1007C0002020202025356900547275653A202020AC |
:1007D000202025356900536572766F20200053650F |
:1007E00074706F696E74202025336900506F7369CF |
:1007F00074696F6E3A202533690052616E67653AFD |
:100800002533692D25336900424C2D4374726C20C9 |
:100810004572726F72732000253364202533642083 |
:10082000253364202533642000424C2054656D70CC |
:100830006572617475726500253364202533642008 |
:10084000253364202533642000424C2043757272A6 |
:10085000656E740028696E20302E314129002533E1 |
:10086000642025336420253364202533642000422E |
:100870004C2D4374726C20666F756E6420002025C9 |
:10088000632020202563202020256320202025634D |
:1008900020002025632020202563202020256320A0 |
:1008A0002020256320002025632020202D202020CB |
:1008B0002D2020202D200031300031310031320038 |
:1008C000424C2056657273696F6E73002531642E39 |
:1008D00025303264202531642E25303264202531C4 |
:1008E000642E25303264202531642E253032640098 |
:1008F0000A0D2D2D3E204861726477617265205685 |
:10090000657273696F6E2042797465204368616E09 |
:10091000676564203C2D2D000A0D47656E65726188 |
:1009200074696E672064656661756C7420506172CD |
:10093000616D6574657220536574202564000A0D2D |
:100940005573696E6720506172616D6574657220C0 |
:10095000536574202564000A0D47656E65726174E5 |
:10096000696E672064656661756C74204D69786591 |
:1009700072205461626C65000A0D4D697865722DB4 |
:10098000436F6E6669673A202725732720282575EF |
:10099000204D6F746F727329000A0D414343206E1E |
:1009A0006F742063616C69627261746564210D0A01 |
:1009B0000000008F001E01AD013B02CA025803E691 |
:1009C00003740402058F051B06A7063307BE0748FC |
:1009D00008D2085B09E3096B0AF20A780BFD0B8168 |
:1009E0000C040D860D070E870E060F840F00107B7A |
:1009F00010F5106E11E5115B12CF124213B31323E1 |
:100A0000149214FE146A15D3153B16A11605176728 |
:100A100017C81727188318DE1837198E19E31936E7 |
:100A20001A871AD61A231B6E1BB61BFD1B411C838B |
:100A30001CC31C001D3C1D751DAB1DE01D121E427C |
:100A40001E6F1E9A1EC31EE91E0D1F2E1F4D1F690D |
:100A50001F841F9B1FB01FC31FD31FE11FEC1FF577 |
:100A60001FFB1FFF1F0020080100008D7C000201FA |
:100A700001E97D010302026D7E02040303DD8203AE |
:100A8000050409157F0406050A407F0507060B6B60 |
:100A90007F0608070C807F07000806CA7E04090944 |
:100AA000091C81050A0A0AF481060B0B0B52800708 |
:100AB0000C0C0C957F2532692E25316956002533A3 |
:100AC00064256320253033646D256300537461749D |
:100AD0007573004552524F523A202532642000531C |
:100AE000657425643A257320200025346920253259 |
:100AF000693A25303269002534696D25630052005A |
:100B00002533692025336920253369202533690081 |
:100B10002533692025336920253369202533690071 |
:100B200054656D7065726174757265732020202044 |
:100B3000002563432020202020002532692E253106 |
:100B40006956202533692E253169410025346957BE |
:100B5000202536696D4168004D61676E65743A25E0 |
:100B60003369252520253369256300496E636C6947 |
:100B70002E3A2533692563202825692920004C6FEA |
:100B8000616420576179706F696E747300284669DB |
:100B900078656429202020202020004C6F6164208B |
:100BA000576179706F696E7473002852656C617457 |
:100BB00069766529202020004C6F61642073696E7E |
:100BC000676C2E506F696E7400536176652073698F |
:100BD0006E676C2E506F696E74005361766520509D |
:100BE0006F696E743A006E6F2053442D43617264D6 |
:100BF000006E6F204750532D4669780025326400FF |
:100C00004469723A25336420416C743A2533646D2B |
:100C1000002D3E002020004C6F616420506F696EF3 |
:100C200074006E6F2053442D43617264002532645A |
:100C300000446973743A25336420416C743A253357 |
:100C40006420002020202020202020202020202080 |
:100C5000202020002D3E00202000464958205761CA |
:100C600079706F696E7473004649583A2573006E47 |
:100C70006F2053442D436172640023253264205752 |
:100C8000503A002532642F256420002D2D2F2D2D64 |
:100C9000002D3E0020200052656C6174697665204D |
:100CA000575073200052656C3A2573006E6F2053C5 |
:100CB000442D43617264006E6F204750532D466986 |
:100CC000780023253264205750733A002532642F70 |
:100CD000256420002D2D2F2D2D002D3E00202000DD |
:100CE0002532756D2F73205361743A2564200020DE |
:100CF000203344004E6F4678004447505300486FFD |
:100D00006D653A2533646D202533642563202563A2 |
:100D1000004E6F204E6176694374726C21000000B2 |
:100D20000500050004010601080006010200040098 |
:100D3000040007000700070007000700070007007E |
:100D400003010301050017010F01060009010A0153 |
:100D500019010501050119011A010F01010009001E |
:100D6000060006004E6F204572726F722020202010 |
:100D700020202020004E6F7420636F6D70617469B5 |
:100D8000626C652020004D4B334D6167206E6F749F |
:100D900020636F6D7061004E6F20464320636F6D5E |
:100DA0006D756E6963617400436F6D70617373205C |
:100DB000636F6D6D756E69630047505320636F6D8F |
:100DC0006D756E69636174696F00636F6D706173D7 |
:100DD000732076616C756520202000524320536992 |
:100DE000676E616C206C6F73742020004643207323 |
:100DF0007069207278206572726F7220004E6F20C9 |
:100E00004E4320636F6D6D756E6963617400464378 |
:100E1000204E69636B204779726F202020200046A6 |
:100E20004320526F6C6C204779726F202020200085 |
:100E3000464320596177204779726F202020202077 |
:100E4000004643204E69636B20414343202020200D |
:100E50002000464320526F6C6C20414343202020E9 |
:100E60002020004643205A2D4143432020202020AB |
:100E70002020200050726573737572652073656E53 |
:100E8000736F7220004932432046432D3E424C2D61 |
:100E90004374726C2000426C204D697373696E67F5 |
:100EA000202020202020004D697865722045727234 |
:100EB0006F72202020202000436172656672656594 |
:100EC000204572726F722020004750532046697887 |
:100ED000206C6F737420202020004D61676E657454 |
:100EE000204572726F7220202020004D6F746F7247 |
:100EF000207265737461727420202000424C204C73 |
:100F0000696D69746174696F6E20202000475053C9 |
:100F10002052616E676520202020202020004E6F27 |
:100F20002053442D43617264202020202020005350 |
:100F3000442D4C6F6767696E67206572726F72002F |
:100F4000466C79696E672072616E6765212020208A |
:100F5000004D617820416C746974756465212020AE |
:100F600020004E6F204750532066697820202020B3 |
:100F7000202000636F6D70617373206E6F74206347 |
:100F8000616C2E00424C2D53656C66746573742041 |
:100F900020202020006E6F206578742E20636F6DF6 |
:100FA000706173732000636F6D706173732073657C |
:100FB0006E736F7220200053657420203A00202148 |
:100FC000212020204C414E44494E47202020202102 |
:100FD00021202000202121204C69506F20766F6C49 |
:100FE0007461676520212120200020202020204DD1 |
:100FF000696B726F4B6F7074657220202020200027 |
:1010000020202020202020202020202020202020E0 |
:1010100020202020200020202532692E25316956ED |
:1010200020200020202532692E25316956202000FD |
:10103000414C543A2534696D20256300414C543AA3 |
:101040002534696D202000414C543A2D2D2D2D2042 |
:101050000020202532693A253032692020002020E6 |
:101060002532693A253032692020004449523A201D |
:1010700025336425630043002000202025356920A6 |
:1010800020002020253569202000493A2532692E8C |
:101090002531694120003A003A003A002D2D2D2DCE |
:1010A0002D2D2D2D2D2B2D2D2D2D2D2D2D2D2D2D72 |
:1010B0002D002D2D2D2D2D2D2D2D2D2D2D2D2D2D8D |
:1010C0002D2D2D2D2D2D2D003A005341543A253232 |
:1010D000642000444953543A2533646D0044200091 |
:1010E0003344002121004D41473A25337525252001 |
:1010F00000484D3A253364256320256300696E63FB |
:101100006C3A253264256328253269290020202085 |
:10111000202532756D2F733A2020484D3A253364CF |
:101120002563202563004552523A20253264202150 |
:10113000004552523A20002121204C69506F207600 |
:101140006F6C7461676520212100207777772E4DC1 |
:10115000696B726F4B6F707465722E64652020002E |
:10116000202532693A2530326920202532692E2522 |
:10117000316956202534696D416800202532693A6D |
:101180002530326920202532692E253169562025E7 |
:1011900034696D4168004449523A2533642563003F |
:1011A000414C543A2534696D00414C543A25346918 |
:1011B0006D00414C543A2D2D2D2D20002563004803 |
:1011C0004D3A25336425632020444953543A25334E |
:1011D000646D202563005057523A2532692E25311F |
:1011E0006941202825695729200043460020200016 |
:1011F0004750533A2532756D2F73205341543A2589 |
:101200006420002020334420004E4F4649580044BB |
:1012100047505320002020204E6F204E61766943B6 |
:1012200074726C20202020202020002532692E2579 |
:1012300069202532692E2569202532692E256920ED |
:101240002532692E2569410025336920253369201F |
:1012500025336920253369256343002532692E250E |
:1012600069202532692E256941002532692E2569BC |
:10127000202532692E2569202532692E25692025F1 |
:1012800032692E256941002533692025336925639C |
:1012900043202020202020202000253369202533D2 |
:1012A000692025336920253369256343004552525F |
:1012B0003A202532642021004552523A2000212153 |
:1012C000204C69506F20766F6C7461676520212116 |
:1012D00000207777772E4D696B726F4B6F70746556 |
:1012E000722E646520200053657474696E673A2518 |
:1012F0007520257320004D696E3A2532692E2531FF |
:1013000069562025732000414C543A00504F5449EF |
:101310003A2533752000284F4E29202000284F46BB |
:10132000462920004C494D495400564152494F002E |
:1013300044495341424C45440043463A00444953D2 |
:1013400041424C45440020284F4E29200020284F80 |
:1013500046462900205445414348004750533A002F |
:1013600044495341424C45440028465245452900D2 |
:1013700028484F4D45290028414944292000284844 |
:101380004F4C4429002046533A257573656B200065 |
:10139000484F4D4520414C543A0025756D00484F4B |
:1013A0004C4420004E693A25346920526F3A253466 |
:1013B0006920433A2533690047733A253469205937 |
:1013C000613A253469200050313A25346920503281 |
:1013D0003A25346920333A2533690050343A2534AC |
:1013E000692050353A25346920363A25336900435F |
:1013F0004F55504C494E47204F46462120004C4FF8 |
:101400004F50494E472120004848212000434F4D6E |
:1014100050415353204F46462120004C6F616420B9 |
:10142000576179706F696E7473002852656C6174CE |
:1014300069766520506F736974696F6E7329004116 |
:1014400063746976652057503A2532642F256420ED |
:10145000004E6F20575073206163746976652020B9 |
:10146000202020002532692E253169562000257361 |
:101470000020202000253269202020004C6F61646C |
:10148000206C6973743A004C6F6164206C697374EA |
:101490003A202D2D20004E6F2053442D436172645D |
:1014A0002020200028536574202D3E204C6F61645D |
:1014B0002900202020202020202020202020200063 |
:1014C000214E6F204750532D4669782120004C6FE4 |
:1014D000616420576179706F696E74730028466982 |
:1014E00078656420506F736974696F6E7329004169 |
:1014F00063746976652057503A2532642F2564203D |
:10150000004E6F2057507320616374697665202008 |
:101510002020002532692E253169562000257300D0 |
:101520004C6F6164206C6973743A002020200025A0 |
:10153000326420284649582900202D2D004E6F2066 |
:1015400053442D4361726420202000285365742089 |
:101550002D3E204C6F616429002020202020202077 |
:101560002020202020200053746F72652073696E44 |
:10157000676C6520506F736974696F6E0020253247 |
:10158000692E253169562000202532693A253032EE |
:10159000692000414C543A2534696D004449523A5F |
:1015A0002025336425630043616D3A2025336900AB |
:1015B00053746F726520706F696E743A002020203A |
:1015C0000025326420002D2D004E6F2053442D4302 |
:1015D0006172642020200028536574202D3E205322 |
:1015E000746F72652900214E6F204750532D466954 |
:1015F000782120004C6F61642073696E676C6520F0 |
:10160000506F736974696F6E00202532692E253121 |
:1016100069562000202532693A253032692000576A |
:10162000503A2532642F256420446973743A253377 |
:10163000646D2000414C543A2534692F25696D2092 |
:1016400000414C543A2534696D2020202000444943 |
:10165000523A2025336425630043616D3A202533D7 |
:1016600069006C6F616420706F696E743A002020AD |
:101670002000253264002D2D004E6F2053442D4351 |
:101680006172642020200028536574202D3E204C78 |
:101690006F61642900257300004F50515253545319 |
:1016A000565748005859005A554546474841004941 |
:1016B000424A4A0000000000000000000000444CC4 |
:1016C0004D00000000004E0000004B00430A0D7763 |
:1016D00077772E4D696B726F4B6F707465722E64E5 |
:1016E000652028632920486953797374656D7320D8 |
:1016F000476D6248000A0D74686520757365206F38 |
:1017000066207468697320736F66747761726520F0 |
:101710006973206F6E6C79207065726D6974746581 |
:1017200064200A0D6F6E206F726967696E616C20AC |
:101730004D696B726F4B6F707465722D4861726486 |
:1017400077617265005573657200486F5454205676 |
:1017500034004143542044534C004A65746900539B |
:1017600070656B7472756D0050504D000A0D5265B6 |
:101770006365697665723A2000532E427573007571 |
:101780006E6B6E6F776E2E205573696E67205050AA |
:101790004D2E2E2E006E6F7420737570706F7274E4 |
:1017A00065642062792068617264776172652100E6 |
:1017B0000A0D202D204C4942204E4F5420434F4DBE |
:1017C00050415449424C452021212121000A0D0A53 |
:1017D0000D212120426F6F746C6F61646572206E01 |
:1017E0006F7420636F6D70617469626C6520746FD3 |
:1017F000204861726477617265203E20322E32206B |
:1018000021210A0D0A0D000A0D466C6967687443B0 |
:101810006F6E74726F6C0A0D4861726477617265E5 |
:101820003A25642E25640A0D536F667477617265DC |
:101830003A5625642E253032642563200000112499 |
:101840001FBECFEFD0E4DEBFCDBF12E0A0E0B1E01D |
:10185000E8E5FAE501E00BBF02C007900D92A03F5A |
:10186000B107D9F71DE0A0EFB2E001C01D92AF387B |
:10187000B107E1F77AEAE2E0F0E081E28093570015 |
:10188000149120EF37EF41E050E0CEEBD5E06FE070 |
:10189000DA01C9012F5F3F4F4F4F5F4FABBFFC01D4 |
:1018A00087918993615067FFF3CF84EE8ABD809161 |
:1018B000C60580939205893138F086E08093140143 |
:1018C00087E0809313017BEAEEEBF5E06EE0819117 |
:1018D00078277095615067FFFACF8091CD05781712 |
:1018E00021F0173911F40000FECF0E94AE0D0C94C8 |
:1018F0002BAD0C94000080E691E09F938F938FE9CD |
:1019000099E19F938F93E091D105F091D2050995CC |
:101910000F900F900F900F90089580917608E82F08 |
:10192000FF27EE0FFF1FEB5BF54F808191818D5EEE |
:101930009F4F14F010920401808191818A5B9F4F28 |
:10194000CCF4809104018823A9F481E08093040100 |
:10195000809105068F5F80930506853038F088EE0C |
:1019600093E09093290380932803089566E970E03B |
:101970000E94DA3E0895CF93DF93C82F882311F198 |
:1019800086E891E09F938F938FE999E19F938F93DE |
:10199000E091D105F091D2050995809126019091B1 |
:1019A00027016BE270E00E949EACCB018F5F8093B9 |
:1019B00000010F900F900F900F90873018F086E085 |
:1019C0008093000180919908823328F5909100015D |
:1019D000989F802D112480930201CC23F1F068ECB4 |
:1019E00070E0892F0E94DA3E8091000199279F9331 |
:1019F0008F938EE891E09F938F938FE999E19F9366 |
:101A00008F93E091D105F091D20509958DB79EB7DE |
:101A100006968DBF02C0809302019091E90892332F |
:101A200040F480910001899F802D11248093FA0257 |
:101A300002C09093FA023091EA08323340F4809168 |
:101A40000001839F802D11248093F90202C03093FE |
:101A5000F9028091FA0290910201981720F49150B6 |
:101A60009093FA029F5F8091F902891720F09150BC |
:101A70009093F9029F5F8091FA022091F9028217F8 |
:101A800028F0332319F021502093FA02CC2309F4D3 |
:101A900062C0892F6AE00E947EAC892F99279F93AC |
:101AA0008F93809102010E947EAC99279F938F9320 |
:101AB00089E991E09F938F93CFE9D9E1DF93CF93A9 |
:101AC000E091D105F091D20509958DB79EB70896A2 |
:101AD0008DBF8091F9028823E9F06AE00E947EAC14 |
:101AE000892F99279F938F938091F9020E947EAC52 |
:101AF00099279F938F938EEA91E09F938F93DF9323 |
:101B0000CF93E091D105F091D20509958DB79EB79D |
:101B100008968DBF8091FA028823E9F06AE00E945E |
:101B20007EAC892F99279F938F938091FA020E9410 |
:101B30007EAC99279F938F9380EC91E09F938F9336 |
:101B4000DF93CF93E091D105F091D20509958DB740 |
:101B50009EB708968DBFDF91CF910895CFEFD0E467 |
:101B6000DEBFCDBF88249924C1E07C2E14B815B8FF |
:101B70008AE08AB98FE58BB9B7EECB2EB3E0DB2EC6 |
:101B80002EEC3FEFC20ED31ED7FEFACF6624199B70 |
:101B900008C04C9B04C085E18093030108C086E126 |
:101BA00001C089E18093030181E080931F0481E8F3 |
:101BB00087B93E9A8FEF88B98BE184B981E085B906 |
:101BC000469A84B7877F84BF809160008861809344 |
:101BD00060001092600084EC99E090932903809358 |
:101BE000280310926D0410926C0410924A0A10920D |
:101BF000490A10926F0410926E04109271041092B0 |
:101C0000700420910301243128F084EC94E0A0E0DA |
:101C1000B0E004C08BE095E0A0E0B0E08093440128 |
:101C200090934501A0934601B0934701289829312C |
:101C300011F4299A01C029980E94111E0E94E21DE8 |
:101C40000E94A7190E947B3B0E94CD2181E00E9447 |
:101C500078360E94B8730E94D98386E00E9430A82B |
:101C600080910301893111F4299A01C0299878944F |
:101C70000E945F35809103018431E8F488E190E0AF |
:101C80002CE00FB6F894A895809360000FBE2093C7 |
:101C9000600086ED91E09F938F938FE999E19F9388 |
:101CA0008F93E091D105F091D20509950F900F9097 |
:101CB0000F900F90EECF80917F03826080937F031F |
:101CC00010928203C0E0D0E00E948E4A85E090E04E |
:101CD0000E94A81D6C0180917F0380FD05C0C60194 |
:101CE0000E94B11D8823B9F3219631E0C43FD30788 |
:101CF00058F388E092E09F938F93AFE9AA2EA9E171 |
:101D0000BA2EBF92AF92E091D105F091D20509951C |
:101D1000C0E0D0E00F900F900F900F9000E919E015 |
:101D2000FBE0EF2EF9E0FF2EF701808124E030E0A8 |
:101D3000E20EF31E1816ACF40BC00E948E4A80917E |
:101D40007F0380FD05C0C6010E94B11D8823B9F341 |
:101D5000C6010E94B11D882321F4F80183818823E4 |
:101D600064F7F801838187FF2CC0CE0101966AE0F9 |
:101D700070E00E948AAC9F938F938AE192E09F93D8 |
:101D80008F93BF92AF92E091D105F091D205099562 |
:101D90008091F2028F5F8093F202F801948584E6CD |
:101DA000989FC00111242585280F8DB79EB70696F0 |
:101DB0008DBF222331F08091ED05281710F4209378 |
:101DC000ED052196015F1F4FCC30D10508F4ACCF53 |
:101DD000C0E0D0E000E919E0EBE0EE2EE9E0FE2EF5 |
:101DE000F801838187FD1DC0F70180811816CCF4AE |
:101DF0002196DF93CF9321978DE192E09F938F936C |
:101E00008FE999E19F938F93E091D105F091D205ED |
:101E1000099582E0809326032DB73EB72A5F3F4F96 |
:101E20002DBFF801838180788383219624E030E000 |
:101E3000E20EF31E015F1F4FCC30D10588F2809176 |
:101E4000ED058F3F99F164E60E947EAC892F9927BA |
:101E50009F938F938091ED050E947EAC99279F936D |
:101E60008F938BE392E09F938F93CFE9D9E1DF9338 |
:101E7000CF93E091D105F091D20509958091ED05C0 |
:101E80008456EDB7FEB73896EDBF833078F481E520 |
:101E900092E09F938F93DF93CF93E091D105F091E0 |
:101EA000D20509950F900F900F900F900E947B0C18 |
:101EB000909174088091F202981728F48091EB05B4 |
:101EC00080618093EB05993020F088E080933E019B |
:101ED00002C090933E018AE692E09F938F93CFE9F0 |
:101EE000D9E1DF93CF93E091D105F091D205099527 |
:101EF00088EE93E00E94A81D6C010E940B220F90B7 |
:101F00000F900F900F90C6010E94B11D8823D9F346 |
:101F10008AE892E09F938F93DF93CF93E091D1056E |
:101F2000F091D205099580E00E948F3F289880EDBE |
:101F300097E0909329038093280385E58093070613 |
:101F40008EE090E00E947F339927182F00278FE0C2 |
:101F500090E00E947F33080F111D1093F802009348 |
:101F6000F7028AE090E00E947F339927182F00271C |
:101F70008BE090E00E947F33080F111D1093F60252 |
:101F80000093F5020F900F900F900F900F5F1F4F6F |
:101F900039F08091F7029091F8028F5F9F4F41F4E2 |
:101FA0001092F8021092F7021092F6021092F502C7 |
:101FB0008091F5029091F6029F938F938091F702A2 |
:101FC0009091F8029F938F938FE892E09F938F9365 |
:101FD000DF93CF93E091D105F091D20509950E944E |
:101FE000E32788E893E190933D0180933C01C1E0B1 |
:101FF000C09306068C2F0E94BB0C80919C080E9407 |
:102000007CA70E947B0C80ED97E00E94A81D6C01CC |
:102010008AEF90E00E94A81D93E09093CE07109263 |
:10202000F1028091EF08EDB7FEB73896EDBF84FF5F |
:1020300002C0C093FB0290933F0112BC11BC80917F |
:10204000FD02882311F04798FECF80912C0388234E |
:1020500009F4A4C280911801882309F49FC2F8945E |
:1020600080912C03815080932C03789480910506F5 |
:10207000882319F00E948D0C02C00E944A4E0E94D3 |
:102080008E4A289880916004882331F08091600402 |
:102090008150809360040EC080916F0080628093B5 |
:1020A0006F001092460A1092450A8091EB058860F5 |
:1020B0008093EB0580913C0190913D0101979093B5 |
:1020C0003D0180933C0180913C0190913D01892B21 |
:1020D00021F0809180038823C9F180913C01909187 |
:1020E0003D01892BD9F40E94A93685E090E09093B8 |
:1020F0003D0180933C018091080890910908019668 |
:1021000090930908809308088091EB058160809383 |
:10211000EB058091CF0782608093CF0780910B0100 |
:1021200090910C018F5F9F4F91F480915F04882301 |
:1021300071F088EA91E6909329038093280380E860 |
:1021400090E090930C0180930B0101C028980E94AD |
:102150002EA980912C03882309F01EC280918D0541 |
:10216000882319F00E94B09A17C280912703882310 |
:1021700011F40E94D97380911101882311F00E94FB |
:102180006B1E0E94F3190E946A15C6010E94B11DC0 |
:10219000882309F4FDC124E130E0C20ED31E0E9461 |
:1021A000291E80919C08863019F40E94EA8904C097 |
:1021B000843011F40E94809B80911F04882331F1A8 |
:1021C00080911508909116088C52914074F080917E |
:1021D000DE079091DF0780509240C4F4809115088B |
:1021E00090911608835593408CF0639422E3261552 |
:1021F00070F480915F04882331F08091EA05806259 |
:102200008093EA0504C080934B0401C0662480914A |
:102210008003882329F48091BF0B8E3150F405C0D0 |
:102220008091EB0582608093EB058091CF078260FF |
:102230000FC08091280390912903892B59F4809134 |
:102240003C0190913D01079728F08091CF078D7F49 |
:102250008093CF078091FB02882361F08091600416 |
:10226000873940F01092FB0288E893E190932903AC |
:102270008093280380910601882321F08150809368 |
:1022800006012EC08093110610923304109232047E |
:10229000109231041092300410922F0410922E04E8 |
:1022A000809160048823E1F480910B0190910C01EE |
:1022B0008F5F9F4FA9F42091FB02223089F088E9BB |
:1022C0009AE3909329038093280380E09CE0909305 |
:1022D0000C0180930B01222319F082E08093FB0212 |
:1022E0008091A601893C70F081508093A601809175 |
:1022F000EB058B7F8093EB058091EE0581608093E9 |
:10230000EE0551C080914C0B8823F9F08091EB05CC |
:1023100084608093EB0589E08093400580910B01F8 |
:1023200090910C018F5F9F4F81F480915F0488230F |
:1023300061F088E99AE3909329038093280380E071 |
:1023400098EA90930C0180930B0110923305109240 |
:102350003205109231051092300510922F0510921F |
:102360003F0B8FEF8093B40B10927E0B10927D0B7E |
:102370001092800B10927F0B8FEF9FEF90937C0B4E |
:1023800080937B0B10924F041092500410925104D2 |
:1023900010925204109253048091EE058E7F809328 |
:1023A000EE051092A60160910201262F332780913D |
:1023B00026019091270128173907F4F0809127040E |
:1023C00080628093270480910B0190910C018F5FB4 |
:1023D0009F4F91F480912601909127010B9764F013 |
:1023E00080E797E1909329038093280380E093E0AE |
:1023F00090930C0180930B018091FC028F5F80937E |
:10240000FC02813309F07BC01092FC0280916D05C3 |
:10241000882319F0815080936D058091270481FFF6 |
:102420000AC08091F3029091F40201969093F40215 |
:102430008093F30204C05AEA852E55E0952E8091D0 |
:102440002804909129048050944008F049C02091BC |
:102450001708309118084091190850911A08809176 |
:102460001E0190911F01A0912001B0912101281718 |
:1024700039074A075B0764F48091170890911808A0 |
:10248000A0911908B0911A080596A11DB11D20C090 |
:1024900020911708309118084091190850911A0896 |
:1024A00080911E0190911F01A0912001B091210106 |
:1024B00082179307A407B5079CF4809117089091A1 |
:1024C0001808A0911908B0911A080597A109B10937 |
:1024D0008093170890931808A0931908B0931A08CE |
:1024E000862F992701962091260130912701821786 |
:1024F00093072CF4809127048F7D80932704089400 |
:10250000811C911C32E783163BE0930609F040C022 |
:10251000882499242091F7023091F8022F5F3F4FD1 |
:102520003093F8022093F7028091F5029091F60221 |
:1025300001969093F6028093F502832F9927682FD6 |
:102540008EE090E00E9487338091F7029091F8022C |
:102550009070682F8FE090E00E9487338091F502A1 |
:102560009091F602892F9927682F8AE090E00E94C7 |
:1025700087338091F5029091F6029070682F8BE07E |
:1025800090E00E94873384E190E00E94A81D6C01D6 |
:102590000E9422790E94138471107A94772039F472 |
:1025A0000E94E678882319F08CE0782E46CD809141 |
:1025B0002703882309F041CD0E94D9733ECD1F9295 |
:1025C0000F920FB60F9211248F939F93EF93FF9367 |
:1025D000809108018823E1F48091170390911803FA |
:1025E00001969093180380931703FC01EE50F94F66 |
:1025F000E081ED3019F08C3D910539F4109218030B |
:102600001092170381E080930801E093C60004C094 |
:102610001092180310921703FF91EF919F918F91E1 |
:102620000F900FBE0F901F9018951F920F920FB62C |
:102630000F9211242F933F934F935F936F937F9348 |
:102640008F939F93AF93BF93CF93EF93FF9390E0BC |
:102650008091FD02813029F48091C6008093CE00E4 |
:10266000D1C08091FD02823029F48091C600809310 |
:102670001406C8C08091C60080930F0350911D03BB |
:102680005C3D10F090931E0380910F038D3009F094 |
:102690006AC080911E03823009F065C090931E03CA |
:1026A000852F99278C5E994FFC01329740812091AC |
:1026B000190330911A03241B3109DC0111978C9105 |
:1026C000281B3109C9019F7090931A038093190345 |
:1026D00046E0969587954A95E1F7982F935C9093FD |
:1026E0001B032F733070235C20931C038081981789 |
:1026F00029F48C91281711F491E006C090E08091A4 |
:102700000C038F5F80930C0380910E03882309F0E4 |
:1027100079C0992309F476C081E080930E03580FA5 |
:1027200050930B035150E52FFF27EC5EF94F8DE0DE |
:10273000808380911606823509F064C0C0915F04E1 |
:10274000CC2309F05FC00E94E32788E190E02CE0F1 |
:102750000FB6F894A895809360000FBE2093600098 |
:10276000C09326034FC020911E03822F99278130EA |
:102770009105F9F0823091051CF4892B21F040C0BD |
:10278000029711F13DC080910F03833239F480919B |
:102790000E03882319F481E080931E0380910F03B8 |
:1027A0008093140681E080931D0380910F03992785 |
:1027B00022C02F5F20931E03E52FFF27EC5EF94F09 |
:1027C00080910F03808309C0E52FFF27EC5EF94F4E |
:1027D00080910F0380835C3D20F45F5F50931D0365 |
:1027E00002C010921E0320910F0380911903909153 |
:1027F0001A03820F911D90931A038093190302C04C |
:1028000010921E03FF91EF91CF91BF91AF919F91D5 |
:102810008F917F916F915F914F913F912F910F9089 |
:102820000FBE0F901F901895AC01A0E0B0E09D0185 |
:10283000A817B90748F4E2EFF6E08191280F311D9F |
:102840001196A417B507C8F33F70FD01EE50F94F7C |
:10285000C90156E0969587955A95E1F7835C808388 |
:102860001196FD01EE50F94F2F733070822F835C6B |
:102870008083AD50B94F8DE08C9310920801809108 |
:10288000F2068093C6000895A0E0B0E0EAE4F4E127 |
:102890000C94F7AC2C859D850E85BB2483E2809338 |
:1028A000F2069F599093F3062093F40633E0E32E4B |
:1028B000F12C002309F49EC0CF84D888BE016D5E40 |
:1028C0007F4FA989BA890150109709F493C01097D6 |
:1028D000B9F0F601EB0DF11DB3949081119791F4CD |
:1028E000002349F1FB016E5F7F4FDB01C080D18087 |
:1028F0006E5F7F4F0D90BC91A02DBB24015002C094 |
:1029000090E019C01097B9F0F601EB0DF11DB394EA |
:102910004081119791F4002341F1FB016E5F7F4FDD |
:10292000DB01C080D1806E5F7F4F0D90BC91A02DE8 |
:10293000BB24015002C040E018C01097B1F0F6016E |
:10294000EB0DF11DB3941081119781F4002371F008 |
:10295000FB013296DB01CD90DC90BF016E5F7F4FB3 |
:10296000A081B181BB24015001C010E0F701EE50FD |
:10297000F94F892F86958695835C80830894E11CA6 |
:10298000F11CF701EE50F94F892F99278370907051 |
:1029900024E0880F991F2A95E1F755279A0194E0C2 |
:1029A000369527959A95E1F7822B835C808308946E |
:1029B000E11CF11CF701EE50F94F4F705070440FBD |
:1029C000551F440F551F812F992726E0969587950F |
:1029D0002A95E1F7842B835C80830894E11CF11C29 |
:1029E000F701EE50F94F1F73135C10830894E11C3C |
:1029F000F11C6ACFC7010E941414E9E00C9413ADD6 |
:102A0000A3E07A2F40910B034650442309F458C0A9 |
:102A1000E72FFF27EC5EF94F80818D537F5FE72F13 |
:102A2000FF27EC5EF94F20812D537F5FE72FFF27B3 |
:102A3000EC5EF94F30813D537F5FE72FFF27EC5E5F |
:102A4000F94F60816D537F5F9927880F991F880F19 |
:102A5000991F522F52955F70582B822F99278F7094 |
:102A60009070F4E0880F991FFA95E1F7232F2695CF |
:102A70002695282B832F992783709070E6E0880F86 |
:102A8000991FEA95E1F7682B41504F3FC9F0EA2FB3 |
:102A9000FF27EC5EF94F5083AF5F41504F3F81F00D |
:102AA000EA2FFF27EC5EF94F2083AF5F41504F3F85 |
:102AB00039F0EA2FFF27EC5EF94F6083AF5FA5CFB7 |
:102AC00087E196E090930A0380930903A350A093B3 |
:102AD00008030895A2E0B0E0E0E7F5E10C94FDAC56 |
:102AE00080910E03882309F426C40E94001580916A |
:102AF0001506823609F0E4C28091160699278037C0 |
:102B0000910509F4AFC081379105C4F48A36910567 |
:102B100009F441C28B36910544F48B34910571F16F |
:102B20008636910509F46AC1CBC28D36910509F448 |
:102B300069C08E36910509F44DC0C2C28437910533 |
:102B400041F1853791054CF48137910509F491C025 |
:102B50008337910509F4EAC0B3C28737910509F4B8 |
:102B6000DCC1883791052CF48537910509F498C1AB |
:102B7000A7C28937910509F47DC1A2C2E09109037A |
:102B8000F0910A0380819181909393018093920147 |
:102B900097C280910B03A0910903B0910A0385317C |
:102BA00040F080E1EFEEF5E00D9001928A95E1F7BB |
:102BB0000DC08D919D910D90BC91A02D8093EF053E |
:102BC0009093F005A093F105B093F20580EF809308 |
:102BD00006034BC0809108018823E1F38DE490E067 |
:102BE0009F938F938EEF98E09F938F9381E08F93C5 |
:102BF0008F938EE48F930E9444148DB79EB70796EF |
:102C00008DBF5EC2A0910903B0910A031C911130DF |
:102C100081F48DE4EEEFF8E00D9001928A95E1F7F2 |
:102C20000E949A3419838091EB058F7E8093EB0587 |
:102C300001C01982809108018823E1F381E090E0CE |
:102C40009F938F93CE0101969F938F9381E08F93F3 |
:102C50008F938DE48F930E944414ADB7BEB717963F |
:102C6000ADBF2EC281E0809311038FEF80930601E8 |
:102C700027C280915F048823E1F5E0910903F09178 |
:102C80000A03E0818E2F8A508A3058F48983882382 |
:102C900011F481E003C0863010F085E0898361E0A3 |
:102CA0000EC08E2F84518A3070F48983882311F4EA |
:102CB00081E003C0863010F085E0898360E089817F |
:102CC0000E941C3512C0E983EF3F19F40E94FD34C5 |
:102CD00089838981882311F481E003C0863010F054 |
:102CE00085E0898389810E949D3380E00E94BB0C2E |
:102CF00003C00E94FD348983809108018823E1F399 |
:102D000088E890E09F938F9385E798E09F938F9357 |
:102D100081E090E09F938F93CE0101969F938F93D4 |
:102D200082E08F9381E08F9381E52DC1209109038B |
:102D300030910A03D9018C918150853008F045C04B |
:102D4000F9018181863609F040C080915F048823B3 |
:102D5000E1F52F5F3F4F88E8E5E7F8E0D9010D90F6 |
:102D600001928A95E1F7F90182910E940A348091DB |
:102D7000B6089927AA27BB27BC01CD0124EC39E06E |
:102D800040E050E00E945FACDC01CB0180938A01FF |
:102D900090938B01A0938C01B0938D018091B70823 |
:102DA0009927AA27BB27BC01CD010E945FACDC019B |
:102DB000CB018093860190938701A0938801B09303 |
:102DC00089010E94FD34898301C019828091080124 |
:102DD0008823E1F381E090E09F938F93CE010196E9 |
:102DE0009F938F9381E08F938F9383E58F930E94BE |
:102DF00044148DB79EB707968DBF2BC080915F049A |
:102E0000882309F05DC1E0910903F0910A03E08194 |
:102E10008E2F8150853018F48E2F0E949D330E9492 |
:102E2000FD348983809108018823E1F381E090E0FB |
:102E30009F938F93CE0101969F938F9381E08F9301 |
:102E40008F9386E48F930E944414ADB7BEB7179654 |
:102E5000ADBF10915F04112341F46EE670E08981EB |
:102E60000E94DA3E812F0E94BB0C80919C080E9438 |
:102E70007CA726C119822981A0910903B0910A0378 |
:102E8000E5E4FAE08D91992787FD909593A382A3BD |
:102E9000822F8F5F8983282F32968C3098F310C150 |
:102EA000E0910903F0910A0380810E94EB3A8A8342 |
:102EB000882319F481E0898301C019828091080177 |
:102EC0008823E1F388E090E09F938F9388E899E06E |
:102ED0009F938F9321E030E03F932F9380910903DC |
:102EE00090910A039F938F933F932F93CE01029665 |
:102EF0009F938F933F932F93CE01820F931F9F93A6 |
:102F00008F9384E08F9381E08F9385E58F930E9468 |
:102F10004414EDB7FEB773963CC080910803893026 |
:102F200008F4CEC02091090330910A032F5F3F4F70 |
:102F300088E0A8E8B9E0F90101900D928A95E1F7DF |
:102F4000D9018E910E94453A8A83882319F481E041 |
:102F5000898301C01982809108018823E1F321E06F |
:102F600030E03F932F93CE0102969F938F933F9330 |
:102F70002F93CE01820F931F9F938F9382E08F93A5 |
:102F800081E08F9387E58F930E944414EDB7FEB7DD |
:102F90003B96EDBF95C080915F04882309F090C0F7 |
:102FA0000E9433A78983823019F0843009F088C0E9 |
:102FB00020E430E0F8948091C1008F738093C100C9 |
:102FC0008091C9008F738093C9008091C100877E72 |
:102FD0008093C1008091C900877E8093C900809151 |
:102FE000C80087FF03C08091CE00F9CF8091C00058 |
:102FF00087FF03C08091C600F9CFE0910903F091EB |
:103000000A03E081E13021F482E08093FD022EC0CA |
:10301000E43611F421E830E081E08093FD02832F53 |
:1030200099278093CD002093CC008091CD00809390 |
:10303000C5008091CC008093C4008091CA008F7D30 |
:103040008093CA008091CA008F7E8093CA008091CD |
:10305000C9008B7F8093C9008091CA0084608093EF |
:10306000CA008091CA0082608093CA008091CA0021 |
:10307000877F8093CA008091C200877F8093C200BF |
:103080008091C9008E7F8093C9008091C1008861C2 |
:103090008093C1008091C90088618093C9008091AC |
:1030A000C10080688093C1008091C90080688093CE |
:1030B000C90010926E0010926F0010927000789408 |
:1030C0008091160699278436910509F4BBC0853690 |
:1030D0009105ACF48136910509F46FC082369105F3 |
:1030E0002CF48B34910509F45DC01DC18236910525 |
:1030F00009F470C08336910509F47FC014C18C3681 |
:10310000910509F4EDC08D3691054CF48736910593 |
:1031100009F406C18836910509F4B2C004C18437A8 |
:10312000910529F08637910509F4E8C0FCC080912B |
:103130000B03A0910903B0910A03803140F080E1B4 |
:10314000EFEEF5E00D9001928A95E1F70DC08D91BB |
:103150009D910D90BC91A02D8093EF059093F0056B |
:10316000A093F105B093F205809108018823E1F363 |
:103170001F92809105018F9384E58F930E944414E0 |
:103180008AEF809306038FEF8093060180EA9FE029 |
:103190000E94A81D9093FF028093FE020F900F9053 |
:1031A0000F90C1C0E0910903F0910A0380819181E1 |
:1031B0009093930180939201B6C0E0910903F0913E |
:1031C0000A03808180930701803298F08FE1809319 |
:1031D00007010FC0A0910903B0910A038BE0E7E05B |
:1031E000F6E00D9001928A95E1F7809110068093A8 |
:1031F00010088FEF8093060196C080910203909192 |
:103200000303892B89F4E0910903F0910A03E0811B |
:10321000EE2351F08AE0E89FC00111240E94A81D0E |
:103220009093E2058093E105E0910903F0910A0390 |
:1032300090818AE0989FC0011124909303038093AA |
:10324000020315C08FEF80930601E0910903F0910E |
:103250000A0390818AE0989FC0011124909305038E |
:1032600080930403892B19F081E08093130380EA93 |
:103270009FE00E94A81D9093FF028093FE0253C01E |
:103280008FEF80930601E0910903F0910A0390818A |
:1032900097FD08C082E08093100310920103109202 |
:1032A00000031AC0909580917803892B809378034E |
:1032B00091818AE0989FC00111249093010380932B |
:1032C000000384E08093100380EA9FE00E94A81D21 |
:1032D0009093FF028093FE0281E08093140323C049 |
:1032E0008FEF80930601E0910903F0910A0380813A |
:1032F0008093790381E08093150315C080910803C2 |
:10330000882351F0E0910903F0910A03E081E23053 |
:1033100019F4E093120307C081E08093120303C005 |
:1033200081E08093160310920E0310920A0310920C |
:10333000090310920803E3E0CE5F0C9419AD982FB7 |
:103340008091C00085FFFCCF9093C60008950F9335 |
:103350001F9388E18093C1008091C00082608093B8 |
:10336000C0008091C10080688093C1008091C1003D |
:1033700080648093C10000E010E00093C5008AE201 |
:1033800090E08093C40080910403909105030E9413 |
:10339000A81D9093E4058093E3058CED90E00E94D6 |
:1033A000A81D909313068093120682E08093E50592 |
:1033B00086E08093E60585E08093E9058BE08093C5 |
:1033C000E7051092E8058FEF8093ED0580910301EA |
:1033D0008093EC0510930A030093090310920803ED |
:1033E0001F910F910895AAE1B0E0E9EFF9E10C9483 |
:1033F000FCAC80910801882309F4BEC28091FE02D2 |
:103400009091FF020E94B11D882361F01092010388 |
:10341000109200031092050310920403109203030C |
:10342000109202038091000390910103892B41F0D7 |
:103430008091F0069091F1060E94B11D882329F435 |
:1034400080911403882309F460C0809108018823C7 |
:1034500009F45BC08091100304E218E08430A8F006 |
:103460000E94F92780E590E09F938F931F930F931D |
:1034700081E08F938F9388E48F930E9444142DB73B |
:103480003EB7295F3F4F2DBF34C010927A0381EBC6 |
:1034900094E09F938F938CEE97E29F938F93E091AC |
:1034A000D105F091D205099584E190E09F938F9327 |
:1034B0001F930F9381E090E09F938F9380E193E0BF |
:1034C0009F938F9382E08F9381E08F9388E48F9313 |
:1034D0000E94441480911003982F8F5F80931003F3 |
:1034E0002DB73EB7215F3F4F2DBF943010F01092A3 |
:1034F000100380910003909101030E94A81D9093F6 |
:10350000F1068093F006109214038091150388232E |
:1035100051F180910801882331F10E94F92780E55B |
:1035200090E09F938F9384E298E09F938F9321E0A4 |
:1035300030E03F932F9388E291E09F938F933F93E6 |
:103540002F9389E793E09F938F9383E08F9381E09C |
:103550008F938CE48F930E944414109215038DB7BF |
:103560009EB70F968DBF90911203992309F44AC01C |
:1035700080910801882309F445C0923071F580914B |
:10358000490B898380914A0B8A8380914B0B8D83F1 |
:1035900080914D0B88878FEF8E838F838091E70515 |
:1035A0008B838091ED0589878091EE058A871C8247 |
:1035B0008AE090E09F938F93CE0101969F938F9323 |
:1035C00081E08F938F9386E58F930E9444142DB7EB |
:1035D0003EB7295F3F4F2DBF13C08AE090E09F9315 |
:1035E0008F9385EE95E09F938F9381E08F938F93D8 |
:1035F00086E58F930E9444148DB79EB707968DBFC2 |
:1036000010921203809116038823E1F08091080143 |
:103610008823C1F08BE090E09F938F9387E096E042 |
:103620009F938F9381E08F93809105018F9387E41F |
:103630008F930E944414109216032DB73EB7295F52 |
:103640003F4F2DBF8091040390910503892B41F0DA |
:103650008091E3059091E4050E94B11D882321F437 |
:1036600080911303882339F180910801882319F18F |
:103670000E94EC3D82E490E09F938F938EEC97E064 |
:103680009F938F9381E08F938F9384E48F930E9415 |
:103690004414109213038DB79EB707968DBF809187 |
:1036A000040390910503009731F00E94A81D9093A8 |
:1036B000E4058093E3058091020390910303892B35 |
:1036C00009F498C08091E1059091E2050E94B11D36 |
:1036D000882309F48FC080910801882309F48AC0E7 |
:1036E0008091520B9091530B9093D4058093D30506 |
:1036F0008091540B9091550B9093D6058093D505EE |
:103700002091340B3091350B4091360B5091370B93 |
:10371000DA01C90163E0880F991FAA1FBB1F6A95D0 |
:10372000D1F7820F931FA41FB51F820F931FA41FF1 |
:10373000B51F2091440130914501409146015091BF |
:103740004701BC01CD010E94D3AC3093D805209332 |
:10375000D7058091820490918304A0918404B09154 |
:10376000850449E0B595A795979587954A95D1F732 |
:103770008093D90580917E0490917F04A09180046C |
:10378000B091810439E0B595A795979587953A95BD |
:10379000D1F78093DA0580918A0490918B04A091EF |
:1037A0008C04B0918D0429E0B595A79597958795E0 |
:1037B0002A95D1F78093DB058EE090E09F938F935D |
:1037C00083ED95E09F938F9381E08F938F9383E4B4 |
:1037D0008F930E94441480910203909103030E94EE |
:1037E000A81D9093E2058093E1052DB73EB7295FB0 |
:1037F0003F4F2DBF809107018F3F71F1992704E062 |
:10380000880F991F0A95E1F78F549D4F8E01055F30 |
:103810001F4F40E150E0BC01C8010E94A9AA80E10D |
:1038200090E09F938F931F930F9381E090E09F937D |
:103830008F9387E091E09F938F9382E08F9381E055 |
:103840008F9381E48F930E9444148FEF809307013C |
:103850008DB79EB70B968DBF809110088823D1F04D |
:10386000809108018823B1F081E090E09F938F93CD |
:1038700080E198E09F938F9381E08F938F9382E410 |
:103880008F930E944414109210082DB73EB7295F01 |
:103890003F4F2DBF809111038823C9F0809108010B |
:1038A0008823A9F086E490E09F938F9385E49AE0C3 |
:1038B0009F938F9381E08F938F9380E58F930E94E6 |
:1038C0004414109211038DB79EB707968DBF809157 |
:1038D0001206909113060E94B11D882309F44CC072 |
:1038E00080910801882309F447C08091A6018823AC |
:1038F00069F58091520B9091530B90930006809341 |
:10390000FF058091540B9091550B90930206809384 |
:10391000010680913C048093030680913B048093D0 |
:10392000040688E090E09F938F938FEF95E09F933C |
:103930008F9381E08F9383E08F938BE68F930E9428 |
:1039400044142DB73EB7295F3F4F2DBF8091050628 |
:10395000853018F086E08093050680912503882342 |
:1039600019F083E690E002C087EE93E00E94A81D64 |
:103970009093130680931206E4E0C65E0C9418AD93 |
:103980001F920F920FB60F9211242F933F935F93C4 |
:103990006F937F938F939F93AF93BF93EF93FF9317 |
:1039A00080912703882329F08091270381508093F9 |
:1039B000270380915305882319F081508093530584 |
:1039C00080912F03815080932F038F3F09F051C0C6 |
:1039D00089E080932F0380912D0390912E0301960F |
:1039E00090932E0380932D03809112018F5F81703D |
:1039F00080931201882349F480912C03843028F4A9 |
:103A000080912C038F5F80932C03349903C081E055 |
:103A1000809325038091280390912903892B11F12C |
:103A200080912803909129030B9750F080912803EF |
:103A3000909129030A97909329038093280304C047 |
:103A40001092290310922803809128039091290352 |
:103A500020910B0130910C0182239323892B41F09B |
:103A6000479A07C08FEF9FEF90930C0180930B0153 |
:103A7000479880912503882309F45AC02091A60114 |
:103A8000222309F055C08091220B83FF51C086B1DB |
:103A90009927FC01E071F07084FF13C080912A0324 |
:103AA00090912B03019690932B0380932A0380918E |
:103AB0002A0390912B03895E9340D0F12093250334 |
:103AC00037C080912A0390912B03892B69F1809153 |
:103AD0002A0390912B038A56914030F580912A0356 |
:103AE00090912B0369E270E00E948AAC80912A03D6 |
:103AF00090912B03860F971F90932B0380932A039B |
:103B000080912A0390912B030B9750F080912A0308 |
:103B100090912B030A97909393018093920104C094 |
:103B2000F0939301E093920110922B0310922A03D9 |
:103B3000FF91EF91BF91AF919F918F917F916F9185 |
:103B40005F913F912F910F900FBE0F901F9018958E |
:103B500020912D0330912E03280F391FC9010196A2 |
:103B6000089520912D0330912E03821B930B892FF2 |
:103B700099278695807490700895CF93DF930E9463 |
:103B8000A81DEC01CE010E94B11D8823D9F3DF915D |
:103B9000CF910895CF93DF930E94A81DEC0109C037 |
:103BA00080911801882329F0909318018FEC80935D |
:103BB0007A00CE010E94B11D982F882389F3DF91EE |
:103BC000CF9108959FB7F8945F983E9A469A809156 |
:103BD000B0008F708093B0008091B00083608093BC |
:103BE000B0008091B1008B738093B1008091B100DF |
:103BF0008B608093B1001092B2008FEF8093B3007E |
:103C00008091B00080688093B000809170008A7FBE |
:103C100080937000809170008260809370009FBFDD |
:103C200008958AE090E00E94A81D90931208809366 |
:103C3000110882E085BD83EB84BD8FEF88BD84EBE6 |
:103C400087BD86E086BD80916E00816080936E00A6 |
:103C500008958091EE082091710182FF30C090910B |
:103C6000A5088CE3989FB00111249091A40880E5E9 |
:103C7000989FA0011124922F905897FD9D5F9595D4 |
:103C8000959586E09802C001112420910901309198 |
:103C90000A01281B390B30930A01209309014217AE |
:103CA00053072CF050930A014093090108952617F9 |
:103CB000370784F070930A01609309010895822FF9 |
:103CC000992736E0880F991F3A95E1F790930A01FA |
:103CD000809309010895EF92FF920F931F93CF9362 |
:103CE000DF938091AC08E82FFF27E65BFE4F9681BB |
:103CF000C08180911101813009F021C18091F008CB |
:103D000087FF05C0C0E0D0E0E0E0F0E046C0892FCA |
:103D1000992787FD9095A92FB92F2091BA0430914A |
:103D2000BB044091BC045091BD04BC01CD010E9474 |
:103D30005FAC97FF04C061587F4F8F4F9F4F7B014F |
:103D40008C0187E015950795F794E7948A95D1F74C |
:103D50008C2F992787FD9095A92FB92F2091B20418 |
:103D60003091B3044091B4045091B504BC01CD012D |
:103D70000E945FAC97FF04C061587F4F8F4F9F4FE9 |
:103D8000B7E09595879577956795BA95D1F7F8013E |
:103D9000E701C61BD70BE80BF90B20913A053091D0 |
:103DA0003B05C901A3E0880F991FAA95E1F7821B83 |
:103DB000930BAA2797FDA095BA2FC81BD90BEA0B26 |
:103DC000FB0B80916F019927AA27BB27BC01CD016E |
:103DD0009E01AF010E945FAC97FF04C061507E4F0F |
:103DE0008F4F9F4FFC01EB0179E0F595E795D79553 |
:103DF000C7957A95D1F71091EE08609109017091FD |
:103E00000A0112FF05C07093100160930F0118C0E2 |
:103E100040910F01509110018091AB08282F33275A |
:103E2000CB01841B950BB9010E949EAC80910F01C0 |
:103E300090911001860F971F9093100180930F01AE |
:103E400010FF14C080910F019091100197FD0F9603 |
:103E500064E0959587956A95E1F7AA2797FDA09567 |
:103E6000BA2FC80FD91FEA1FFB1F15C080910F0181 |
:103E70009091100197FD0F9654E0959587955A956E |
:103E8000E1F7AA2797FDA095BA2F8C1B9D0BAE0BCF |
:103E9000BF0BFD01EC012091E008222321F1332723 |
:103EA0008091210390912203829FA001839F500D56 |
:103EB000929F500D1124CA01AA2797FDA095BA2FF1 |
:103EC0008C0F9D1FAE1FBF1F2F5F3F4F442737FD35 |
:103ED0004095542FBC01CD010E94D3AC30932203F6 |
:103EE0002093210304C0D0932203C0932103809127 |
:103EF000A408282F3327220F331F220F331F80914E |
:103F0000210390912203821793077CF08091A508EA |
:103F1000282F3327220F331F220F331F80912103B5 |
:103F2000909122032817390724F430932203209319 |
:103F30002103809111018F5F80931101F9C0892FB6 |
:103F4000992787FD9095A92FB92F2091B204309120 |
:103F5000B3044091B4045091B504BC01CD010E945A |
:103F60005FAC97FF04C061587F4F8F4F9F4F7B011D |
:103F70008C0187E015950795F794E7948A95D1F71A |
:103F80008C2F992787FD9095A92FB92F2091BA04DE |
:103F90003091BB044091BC045091BD04BC01CD01E3 |
:103FA0000E945FAC9B01AC0197FF04C021583F4FBA |
:103FB0004F4F5F4FC7E05595479537952795CA9561 |
:103FC000D1F72E0D3F1D401F511F80916E01992783 |
:103FD000AA27BB27BC01CD010E945FAC97FF04C09C |
:103FE00061507E4F8F4F9F4FFC01EB01B9E0F5957B |
:103FF000E795D795C795BA95D1F780917001992724 |
:10400000A6E0880F991FAA95E1F740910D01509104 |
:104010000E012091AB083327841B950BB9010E9438 |
:104020009EAC80910D0190910E01860F971F909389 |
:104030000E0180930D018091EE0881FF14C08091E4 |
:104040000D0190910E0197FD0F9674E0959587955F |
:104050007A95E1F7AA2797FDA095BA2FC80FD91F27 |
:10406000EA1FFB1F15C080910D0190910E0197FD75 |
:104070000F9664E0959587956A95E1F7AA2797FDD5 |
:10408000A095BA2F8C1B9D0BAE0BBF0BFD01EC0155 |
:104090002091E108222321F1332780911F03909181 |
:1040A0002003829FA001839F500D929F500D1124E9 |
:1040B000CA01AA2797FDA095BA2F8C0F9D1FAE1F8E |
:1040C000BF1F2F5F3F4F442737FD4095542FBC0142 |
:1040D000CD010E94D3AC3093200320931F0304C072 |
:1040E000D0932003C0931F038091A808282F332763 |
:1040F000220F331F220F331F80911F039091200343 |
:10410000821793077CF08091A908282F3327220F6C |
:10411000331F220F331F80911F0390912003281714 |
:10412000390724F43093200320931F0310921101C8 |
:10413000E6E0CDB7DEB70C9416AD1F920F920FB626 |
:104140000F9211242F933F934F935F938F939F93DD |
:10415000EF93FF9380913003882309F0DDC08091B5 |
:10416000B00086FF9FC08091B0008F7B8093B0002D |
:10417000E09133032091AA08EE23D9F433278DED83 |
:1041800096E0289FA001299F500D389F500D1124C3 |
:10419000CA012091310330913203821B930B90931B |
:1041A0002403809323031092320310923103469A22 |
:1041B000B0C02E1738F48AE090E0909324038093E7 |
:1041C0002303A7C089EA93E09093240380932303F9 |
:1041D0008E2F992783309105D9F08430910534F4DE |
:1041E0008130910549F0029761F020C0843091053B |
:1041F00091F0059799F01AC08091210390912203C4 |
:1042000004C080911F039091200387559E4F1DC0CD |
:104210008091FE0A05C08091D70A02C08091070BE9 |
:104220009927880F991F880F991FEFCFFF27EE0F4F |
:10423000FF1FEB5BF54F20813181220F331F8091EF |
:10424000230390912403820F931F90932403809360 |
:104250002303809123039091240355E08D3D95071E |
:1042600018F08CED95E005C08757914030F487E752 |
:1042700091E09093240380932303209123033091B2 |
:1042800024032C5B3040309324032093230380913C |
:10429000310390913203820F931F909332038093E6 |
:1042A000310337C08091B00080648093B0008CEB04 |
:1042B00090E09093240380932303809131039091A5 |
:1042C000320384549F4F9093320380933103809143 |
:1042D0002603882321F080916004882321F48091B3 |
:1042E0002603823011F4469801C0469A8091330328 |
:1042F0008F5F80933303282F33278091AA08992753 |
:104300000196821793072CF481E08093110110929B |
:10431000330381E080933003209123033091240301 |
:1043200041E02F37340730F08FEF8093B3002F5FD9 |
:1043300030400FC02F3F3105C9F0C0F0A9014F5FD9 |
:1043400050404F37510550F480E88093B300205817 |
:104350003040309324032093230312C08FEF8093C7 |
:10436000B30050932403409323030AC08091230396 |
:104370008093B30010922403109223031092300311 |
:10438000FF91EF919F918F915F914F913F912F916D |
:104390000F900FBE0F901F90189510927C008FEC1D |
:1043A00080937A00089580911F04609116017091A6 |
:1043B000170120914803882379F0CB01AA27BB2756 |
:1043C000332727FD3095432F532FBC01CD010E9489 |
:1043D0005FACDC01CB0116C084E0660F771F8A95C5 |
:1043E000E1F7CB01AA27BB27332727FD3095432FC1 |
:1043F000532FBC01CD010E945FACDC01CB010497BF |
:10440000A109B1098093400390934103A093420313 |
:10441000B09343030895CF93DF93109248030E9413 |
:10442000D32183E090E00E947F33C82FDD27C03F77 |
:10443000D10508F42A96C7BD8C2F809588BD86E9E2 |
:1044400090E00E94CA1D80911C0190911D01815233 |
:10445000934010F0C0EFD0E0C630D10510F1C7BDD9 |
:104460008C2F809588BD84E690E00E94CA1D86EC62 |
:1044700094E09F938F938FE999E19F938F93E091BD |
:10448000D105F091D205099580911C0190911D01F3 |
:104490000F900F900F900F908152934010F421973E |
:1044A000DBCFC09321086C2F83E090E00E9487331C |
:1044B0008091820880FF0AC0809121088A508C3D3B |
:1044C00028F08091EA0580648093EA0580E180937A |
:1044D000150180911F048823E9F080910301873141 |
:1044E00050F4CC38D105B0F480EA90E08C1B9D0BE1 |
:1044F0006AE170E009C0CA3AD10560F48CEB90E043 |
:104500008C1B9D0B63E170E00E948AACCB01805F45 |
:104510008093150180911501282F332780911C016C |
:1045200090911D01829FA001839F500D929F500D7D |
:104530001124CA01AA27BB2780931E0190931F0153 |
:10454000A0932001B09321018CE291E00E94CA1D4A |
:10455000DF91CF9108951F920F920FB60F92112401 |
:10456000EF92FF920F931F932F933F934F935F937D |
:104570006F937F938F939F93AF93BF93CF93DF936B |
:10458000EF93FF9380916003282F3327442755270B |
:104590008F5F80936003F9012231310508F0ECC48C |
:1045A000EA5BFF4F0C9425AD8091780090917900E3 |
:1045B00046C08091780090917900EBC1809178009D |
:1045C000909179009093640380936303FBC1809181 |
:1045D000C4049091C5042091780030917900821B29 |
:1045E000930B909314088093130880911308909173 |
:1045F000140890936E0380936D0303C2809178003A |
:10460000909179002091C6043091C704821B930BCE |
:104610009093200880931F0880911F089091200894 |
:104620009093700380936F03A9C480916703909166 |
:1046300068032091780030917900820F931F909346 |
:1046400068038093670381E09AC480916503909129 |
:1046500066032091780030917900820F931F909328 |
:1046600066038093650384E08AC48091EF0883FF2A |
:1046700026C080912601909127019C01220F331FB3 |
:10468000280F391F40917800509179008BE090E01D |
:10469000489FB001499F700D589F700D1124CB01A8 |
:1046A0006EE170E00E948AAC260F371F3695279581 |
:1046B00036952795309327012093260142C080919B |
:1046C000760390917703892B91F4209178003091B3 |
:1046D0007900C90153E0880F991F5A95E1F7820FBD |
:1046E000931F820F931F90937703809376032091FB |
:1046F000780030917900C90143E0880F991F4A95ED |
:10470000E1F7820F931F820F931F20917603309160 |
:1047100077038217930718F02E5F3F4F02C0225095 |
:104720003040309377032093760380917603909105 |
:1047300077036FE170E00E948AAC70932701609369 |
:10474000260185E01CC480917800909179009093B7 |
:1047500016088093150880911508909116084091CD |
:10476000C0045091C104841B950B6091BF04262F97 |
:10477000332727FD3095821B930B90934E03809334 |
:104780004D0380911F04882309F071C080914D036F |
:1047900090914E0302977CF172E04E3E57070CF069 |
:1047A000A7C020916103309162032B5F3F4F30938C |
:1047B000620320936103255030408091280490913A |
:1047C0002904845F914030F4215F3F4F30936203AE |
:1047D0002093610380916103909162038536910576 |
:1047E0000CF486C04F5F5F4F5093C1044093C004E8 |
:1047F0008456904037C080914D0390914E038F5F57 |
:104800009F4F0CF075C082E0473258070CF470C01F |
:104810002091610330916203255030403093620350 |
:10482000209361032B5F3F4F8091280490912904CE |
:10483000845F914030F42F503040309362032093D6 |
:10484000610380916103909162037FEF8C39970738 |
:104850000CF04EC0415050405093C1044093C004EE |
:104860008C599F4F909362038093610341C0809164 |
:10487000F30A9091F40A8F5C9F41D4F180914D032B |
:1048800090914E030297ACF0209161033091620346 |
:10489000C901019690936203809361038958934103 |
:1048A0003CF166301CF46F5F6093BF0427583341BE |
:1048B0001BC080914D0390914E038F5F9F4FC4F4B6 |
:1048C0002091610330916203C901019790936203C3 |
:1048D0008093610388579C4E5CF46B3F1CF06150E1 |
:1048E0006093BF0429573C4E3093620320936103C9 |
:1048F00080914D0390914E039C01442737FD4095D4 |
:10490000542F80917A0490917B04A0917C04B09103 |
:104910007D04820F931FA41FB51F80937A04909388 |
:104920007B04A0937C04B0937D0420917A043091A1 |
:104930007B0440917C0450917D0457FF04C02150BA |
:104940003C4F4F4F5F4F9AE05595479537952795C8 |
:104950009A95D1F780917A0490917B04A0917C0480 |
:10496000B0917D04821B930BA40BB50B80937A044A |
:1049700090937B04A0937C04B0937D04F7C0809156 |
:104980006503909166032091780030917900820F41 |
:10499000931F909366038093650310925F03F1C2A7 |
:1049A00020917800309179008091630390916403A5 |
:1049B000280F391F8FEF97E0821B930B90935403BE |
:1049C0008093530380911401DAC28091C4049091C2 |
:1049D000C5042091780030917900821B930B90934D |
:1049E0001408809313088091130890911408209163 |
:1049F0006D0330916E03820F931F90935203809347 |
:104A0000510380911301BBC280917800909179008D |
:104A10002091C6043091C704821B930B9093200809 |
:104A200080931F0880911F089091200820916F03A8 |
:104A300030917003820F931F9093500380934F0324 |
:104A40009DC2209167033091680380917800909116 |
:104A50007900280F391F220F331F220F331F309385 |
:104A6000680320936703C90137FD079603E0959516 |
:104A700087950A95E1F790935803809357038091A7 |
:104A8000690390916A03820F931F97FD0196959594 |
:104A9000879590936A03809369032091D0043091A5 |
:104AA000D104821B930B90932501809324012091C4 |
:104AB0005D0330915E038091240190912501280FC0 |
:104AC000391F37FF02C02F5F3F4F35952795309331 |
:104AD0005E0320935D03B7CD20916503309166039B |
:104AE0008091780090917900280F391F220F331F91 |
:104AF000220F331F3093660320936503C90137FDEE |
:104B00000796A3E095958795AA95E1F790935603AC |
:104B10008093550380916B0390916C03820F931FD8 |
:104B200097FD01969595879590936C0380936B0301 |
:104B30002091CE043091CF04821B930B90932301DC |
:104B40008093220120915B0330915C0380912201CC |
:104B500090912301280F391F37FF02C02F5F3F4F6D |
:104B60003595279530935C0320935B0383E007C260 |
:104B700080911F04882309F180E00E94B4A59B0165 |
:104B8000AC0120503F4F4F4F5F4F57FF06C09B0176 |
:104B9000AC0121503D4F4F4F5F4F79E05595479500 |
:104BA000379527957A95D1F72093340330933503C1 |
:104BB000409336035093370310C080915A0490916C |
:104BC0005B04A0915C04B0915D04809334039093E6 |
:104BD0003503A0933603B09337031092600381E04E |
:104BE000809318018091440390914503019690931E |
:104BF00045038093440380917800909179009093CD |
:104C00001D0180931C0180911F04882309F472C048 |
:104C100080911C0190911D017C010027112780913A |
:104C2000400390914103A0914203B0914303E81ADD |
:104C3000F90A0A0B1B0BE0927103F09272030093C6 |
:104C400073031093740380911501282F3327442791 |
:104C5000552780911E0190911F01A0912001B091D4 |
:104C60002101BC01CD010E94D3AC80911E01909125 |
:104C70001F01A0912001B0912101821B930BA40B75 |
:104C8000B50B80931E0190931F01A0932001B09358 |
:104C9000210180911E0190911F01A0912001B091EE |
:104CA00021018E0D9F1DA01FB11F80931E019093A7 |
:104CB0001F01A0932001B0932101809117089091CA |
:104CC0001808A0911908B0911A0820911E0130917E |
:104CD0001F014091200150912101821B930BA40BD5 |
:104CE000B50B8093380390933903A0933A03B093A4 |
:104CF0003B0344C180911C0190911D01AA27BB2751 |
:104D0000C0917103D0917203E0917303F091740329 |
:104D1000C80FD91FEA1FFB1FC0937103D093720302 |
:104D2000E0937303F0937403809175038F5F809316 |
:104D30007503803108F422C180911E0190911F01FA |
:104D4000A0912001B09121019C01AD0163E0220FEF |
:104D5000331F441F551F6A95D1F7281B390B4A0B87 |
:104D60005B0B2C0F3D1F4E1F5F1F809140039091E6 |
:104D70004103A0914203B0914303281B390B4A0B16 |
:104D80005B0B57FF04C0295F3F4F4F4F5F4F03E05E |
:104D900055954795379527950A95D1F720931E018C |
:104DA00030931F014093200150932101C0911708B7 |
:104DB000D0911808E0911908F0911A0880911E010D |
:104DC00090911F01A0912001B0912101C81BD90B26 |
:104DD000EA0BFB0BC0933803D0933903E0933A03FB |
:104DE000F0933B032091490330914A0340914B03D8 |
:104DF00050914C0357FF04C0215F3F4F4F4F5F4F0F |
:104E000014E055954795379527951A95D1F78091D8 |
:104E1000490390914A03A0914B03B0914C03821B2C |
:104E2000930BA40BB50B8093490390934A03A09373 |
:104E30004B03B0934C038091490390914A03A09196 |
:104E40004B03B0914C038C0F9D1FAE1FBF1F80936F |
:104E5000490390934A03A0934B03B0934C03809172 |
:104E6000490390914A03A0914B03B0914C03B7FFC3 |
:104E700003C00F96A11DB11DC4E0B595A7959795E8 |
:104E80008795CA95D1F72091380330913903281BB3 |
:104E9000390B64E0213036071CF020E034E006C016 |
:104EA0007CEF2030370714F420E03CEF809146037C |
:104EB00090914703809146039091470397FF03C069 |
:104EC000909581959F4FA901F3E0440F551FFA95E6 |
:104ED000E1F78D5B9240C4F08091460390914703C7 |
:104EE0009C01E4E0220F331FEA95E1F7281B390B00 |
:104EF000240F351F37FF02C0215F3F4F74E0359507 |
:104F000027957A95E1F717C0809146039091470362 |
:104F10009C0165E0220F331F6A95E1F7281B390BCE |
:104F2000240F351F37FF02C0215E3F4F45E0359506 |
:104F300027954A95E1F730934703209346038091E4 |
:104F4000710390917203A0917303B0917403B7FF42 |
:104F500003C00196A11DB11DB595A795979587959D |
:104F60008093710390937203A0937303B0937403BF |
:104F700088E08093750302C01092600382E0809302 |
:104F80005F0380915F0380937C008091600388239E |
:104F900019F08FEC80937A00FF91EF91DF91CF9120 |
:104FA000BF91AF919F918F917F916F915F914F9141 |
:104FB0003F912F911F910F91FF90EF900F900FBE97 |
:104FC0000F901F90189590E2E4E2F8E08FE491933F |
:104FD000815087FFFCCF089590917A03903540F47B |
:104FE000E92FFF27EC5DF74F80839F5F90937A0353 |
:104FF0000895A0E0B0E0EFEFF7E20C94F6AC20915A |
:10500000780320FF0AC080917903882311F0815032 |
:1050100002C0809128018093790321FF0CC09091F8 |
:10502000790380912801981719F41092790303C02D |
:105030009F5F90937903822F992780FF04C081FF9F |
:1050400002C0109279030E94E32780917903282FF0 |
:1050500033270CEE17E2C091D105D091D2058A30EA |
:1050600098F481E180937A033F932F9388EC94E046 |
:105070009F938F931F930F93FE0109952DB73EB712 |
:105080002A5F3F4F2DBF12C080E180937A033F9388 |
:105090002F938DEC94E09F938F931F930F93FE01BA |
:1050A00009954DB75EB74A5F5F4F4DBF20917903B9 |
:1050B000822F9927AA27BB27FC01449710F00C9454 |
:1050C0005831E85AFF4F0CEE17E2C091D105D0914C |
:1050D000D2050C9425AD10927A0382ED94E09F9353 |
:1050E0008F935CEEE52E57E2F52E1F930F93FE0192 |
:1050F000099584E180937A030F900F900F900F90A1 |
:1051000086E690E09F938F9386E090E09F938F9345 |
:1051100082E090E09F938F93809103016AE00E9468 |
:105120007EAC892F99279F938F93809103010E94D2 |
:105130007EAC99279F938F9382EE94E09F938F93F9 |
:105140001F930F93E091D105F091D205099588E264 |
:1051500080937A038DB79EB70E968DBF8FEF98E040 |
:105160009F938F938091010199279F938F938AEF4B |
:1051700094E09F938F931F930F93E091D105F0914B |
:10518000D20509958091EB059927EDB7FEB73896C2 |
:10519000EDBFEC01C071D07084FF0BC08CE3809335 |
:1051A0007A0388E095E09F938F931F930F930C945D |
:1051B000ED3090914005992351F18CE380937A036F |
:1051C000892F99279F938F9385E195E09F938F93E4 |
:1051D000FF92EF92E091D105F091D2050995DF930E |
:1051E000CF939091400581E1989FC00111248C5983 |
:1051F000924F9F938F93FF92EF92E091D105F091A0 |
:10520000D20509952DB73EB7245F3F4F01C6909157 |
:10521000EA05992371F08CE380937A03892F99270B |
:105220009F938F938DE195E09F938F93FF92EF92E1 |
:1052300081C5909180039923C1F08CE380937A0318 |
:10524000892F99279F938F9384E395E09F938F9362 |
:10525000FF92EF92E091D105F091D20509958DB7BB |
:105260009EB706968DBF0C94613180913C01909160 |
:105270003D01069730F48CE380937A038AE495E04D |
:10528000A8C79091BF0B9E3110F00C9461318CE354 |
:1052900080937A03892F99279F938F9387E595E0D1 |
:1052A00017C110927A0380915A0490915B04A091E7 |
:1052B0005C04B0915D04BC01CD0125E030E040E02C |
:1052C00050E00E94D3AC3F932F938BE695E09F93E1 |
:1052D0008F931F930F93FE01099584E180937A03C6 |
:1052E0002DB73EB72A5F3F4F2DBF80915604909156 |
:1052F0005704A0915804B0915904BC01CD0125E098 |
:1053000030E040E050E00E94D3AC3F932F9388E719 |
:1053100095E09F938F931F930F93E091D105F091A8 |
:10532000D205099588E280937A034DB75EB74A5F4C |
:105330005F4F4DBF80911C0190911D019F938F93F2 |
:1053400085E895E09F938F931F930F93E091D1058C |
:10535000F091D20509958CE380937A038DB79EB7BF |
:1053600006968DBF87B599279F938F9382E995E025 |
:105370009F938F931F930F93E091D105F091D205E6 |
:105380000995EDB7FEB73696EDBF80911F048823CF |
:1053900009F497C789E380937A038FE995E09F9397 |
:1053A0008F931F930F93E091D105F091D20509954A |
:1053B0008DE480937A030F900F900F900F9080915F |
:1053C000150199279F938F9383EA95E09F938F937D |
:1053D0001F930F93E091D105F091D20509952DB758 |
:1053E0003EB72A5F3F4F14C510927A0386EA95E0D4 |
:1053F0009F938F934CEEE42E47E2F42E1F930F936E |
:10540000FE01099584E180937A030F900F900F902D |
:105410000F908091BA049091BB04A091BC04B0910C |
:10542000BD04B7FF04C081509C4FAF4FBF4F3AE05F |
:10543000B595A795979587953A95D1F7BF93AF9373 |
:105440009F938F9383EB95E09F938F93FF92EF92BF |
:10545000E091D105F091D205099588E280937A0315 |
:105460004DB75EB7485F5F4F4DBF8091B2049091DA |
:10547000B304A091B404B091B504B7FF04C0815047 |
:105480009C4FAF4FBF4F2AE0B595A795979587954D |
:105490002A95D1F7BF93AF939F938F9382EC95E0BA |
:1054A0009F938F93FF92EF92E091D105F091D205F7 |
:1054B00009958CE380937A038DB79EB708968DBFCC |
:1054C00080912B0B90912C0B9F938F9381ED95E006 |
:1054D0009F938F93FF92EF927CC291E0F92EC1E0EF |
:1054E000D0E007E41AE09F2D969584E1989FC001D3 |
:1054F000112480937A03F801828193819F938F9383 |
:105500002196DF93CF932197808191819F938F93F1 |
:10551000DF93CF9380EE95E09F938F938CEE97E28D |
:105520009F938F93E091D105F091D20509952DB706 |
:105530003EB7245F3F4F2DBF32E0F30E22960C5F43 |
:105540001F4F48E04F1578F6BCC610927A03809141 |
:105550007708E82FFF27EE0FFF1FEB5BF54F8081E9 |
:1055600091819F938F9380917608E82FFF27EE0F0C |
:10557000FF1FEB5BF54F808191819F938F9382EFAB |
:1055800095E09F938F931F930F93FE01099584E1FC |
:1055900080937A038DB79EB708968DBF8091790866 |
:1055A000E82FFF27EE0FFF1FEB5BF54F8081918106 |
:1055B0009F938F9380917808E82FFF27EE0FFF1FAE |
:1055C000EB5BF54F8081918181589F4F9F938F9323 |
:1055D00082E096E09F938F931F930F93E091D10504 |
:1055E000F091D205099588E280937A03EDB7FEB772 |
:1055F0003896EDBF80917B08E82FFF27EE0FFF1F45 |
:10560000EB5BF54F8081918181589F4F9F938F93E2 |
:1056100080917A08E82FFF27EE0FFF1FEB5BF54F15 |
:105620008081918181589F4F9F938F9382E196E073 |
:105630009F938F931F930F93E091D105F091D20523 |
:1056400009958CE380937A032DB73EB7285F3F4FCF |
:105650002DBF80917D08E82FFF27EE0FFF1FEB5B2A |
:10566000F54F8081918181589F4F9F938F938091B7 |
:105670007C08E82FFF27EE0FFF1FEB5BF54F8081C3 |
:10568000918181589F4F9F938F9382E296E09F93E1 |
:105690008F931F930F93E091D105F091D205099557 |
:1056A0004DB75EB7485F5F4F4EC310927A0382E3F7 |
:1056B00096E09F938F938CEEE82E87E2F82E1F934F |
:1056C0000F93FE01099584E180937A030F900F9068 |
:1056D0000F900F908091D0049091D1049C0197FF7E |
:1056E00002C0215F3F4F207F821B930B97FD0196E5 |
:1056F000959587959F938F938091D0049091D10435 |
:1057000097FD0F96B4E095958795BA95E1F79F932D |
:105710008F932091D0043091D10437FF02C0295FCC |
:105720003F4FA3E035952795AA95E1F78091570360 |
:1057300090915803821B930B9F938F9380E496E084 |
:105740009F938F93FF92EF92E091D105F091D20554 |
:10575000099588E280937A038DB79EB70A968DBF2C |
:105760008091CE049091CF049C0197FF02C0215FED |
:105770003F4F207F821B930B97FD01969595879550 |
:105780009F938F938091CE049091CF0497FD0F96B5 |
:10579000E4E095958795EA95E1F79F938F932091A3 |
:1057A000CE043091CF0437FF02C0295F3F4F73E032 |
:1057B000359527957A95E1F7809155039091560399 |
:1057C000821B930B9F938F9382E596E09F938F9319 |
:1057D000FF92EF92E091D105F091D20509958CE30B |
:1057E00080937A03EDB7FEB73A96EDBF8091CC0473 |
:1057F0009091CD0497FD0196959587959F938F93F2 |
:105800008091CC049091CD042091530330915403A6 |
:10581000821B930B9F938F9384E696E0ECC21092C9 |
:105820007A0383E796E09F938F931F930F93FE0174 |
:10583000099584E180937A030F900F900F900F9059 |
:105840008091C6049091C7049F938F9380914F03DA |
:10585000909150039F938F9380E896E09F938F934E |
:105860001F930F93E091D105F091D205099588E23D |
:1058700080937A034DB75EB7485F5F4F4DBF80910D |
:10588000C4049091C5049F938F938091510390918C |
:1058900052039F938F938FE896E09F938F931F936C |
:1058A0000F93E091D105F091D20509958CE3809397 |
:1058B0007A038DB79EB708968DBF8091C0049091F2 |
:1058C000C1049F938F9380914D0390914E039F93BA |
:1058D0008F938EE996E09F938F931F930F93E091A0 |
:1058E000D105F091D2050995EDB7FEB7389679C08C |
:1058F00010927A0380912601909127016AE070E06E |
:105900000E949EAC9F938F938091260190912701D6 |
:105910006AE070E00E949EAC7F936F938DEA96E000 |
:105920009F938F931F930F93FE01099584E18093BA |
:105930007A032DB73EB7285F3F4F2DBF8091B90B3B |
:105940009091BA0B6AE070E00E948AAC9F938F93AB |
:105950008091B90B9091BA0B6AE070E00E948AAC1A |
:105960007F936F9381EC96E09F938F931F930F9398 |
:10597000E091D105F091D205099588E280937A03F0 |
:105980004DB75EB7485F5F4F4DBF8091BB0B9091A5 |
:10599000BC0B9F938F9385ED96E09F938F931F93FE |
:1059A0000F93E091D105F091D20509958CE3809396 |
:1059B0007A038DB79EB706968DBF8091BD0B9091EF |
:1059C000BE0B9F938F9385EE96E09F938F931F93CB |
:1059D0000F93E091D105F091D2050995EDB7FEB78F |
:1059E0003696EDBF6EC410927A0387EF96E09F93D0 |
:1059F0008F931F930F93FE01099588E280937A039A |
:105A00000F900F900F900F908091600499279F93B3 |
:105A10008F9380E097E09F938F931F930F93E09174 |
:105A2000D105F091D20509958CE380937A032DB7C7 |
:105A30003EB72A5F3F4F2DBF8091440A99270197B7 |
:105A40009F938F9380E197E071C110927A0380E277 |
:105A500097E09F938F931F930F93FE01099584E125 |
:105A600080937A030F900F900F900F908091020116 |
:105A70006AE00E947EAC892F99279F938F93809133 |
:105A800002010E947EAC99279F938F9380E397E059 |
:105A90009F938F931F930F93E091D105F091D205BF |
:105AA000099588E280937A038DB79EB708968DBFDB |
:105AB0008091F9026AE00E947EAC892F99279F931A |
:105AC0008F938091F9020E947EAC99279F938F93C8 |
:105AD0008EE397E09F938F931F930F93E091D105EF |
:105AE000F091D20509958CE380937A03EDB7FEB768 |
:105AF0003896EDBF8091FA026AE00E947EAC892F51 |
:105B000099279F938F938091FA020E947EAC9927E8 |
:105B10009F938F938CE497E09F938F931F930F93A2 |
:105B20006EC151E6C52E54E0D52E20E030E0E901EB |
:105B300043E0F42EC0937A03F60181916F01992717 |
:105B40009F938F9389010F5F1F4F1F930F938AE5D8 |
:105B500097E09F938F938CEE97E29F938F93E091C2 |
:105B6000D105F091D20509952DB73EB7285F3F4F7B |
:105B70002DBFFA9464969801F7FEDCCFA2C395E698 |
:105B8000C92E94E0D92EC0E0D0E08E0183E0F82E3B |
:105B900000937A03F60181916F0199279F938F9368 |
:105BA0002596DF93CF9387E697E09F938F938CEEB4 |
:105BB00097E29F938F93E091D105F091D2050995DB |
:105BC0002DB73EB7285F3F4F2DBFFA940C5E1F4F95 |
:105BD0002497F7FEDDCF75C310927A0384E797E030 |
:105BE0009F938F931F930F93FE01099584E18093F8 |
:105BF0007A030F900F900F900F908091F502909183 |
:105C0000F6029F938F9382E897E09F938F931F9361 |
:105C10000F93E091D105F091D205099588E2809328 |
:105C20007A034DB75EB74A5F5F4F4DBF8091F70271 |
:105C30009091F8029F938F938FE897E09F938F93B3 |
:105C40001F930F93E091D105F091D205099589E456 |
:105C500080937A038DB79EB706968DBF8CE997E047 |
:105C60009F938F931F930F93E091D105F091D205ED |
:105C70000995809178030F900F900F900F9083FFFC |
:105C800020C31092F8021092F70260E070E08EE0FC |
:105C900090E00E94983315C310927A0384EA97E04B |
:105CA0009F938F931F930F93FE01099584E1809337 |
:105CB0007A030F900F900F900F9080919201909126 |
:105CC00093019F938F938CEA97E09F938F931F93F9 |
:105CD0000F93E091D105F091D205099588E2809368 |
:105CE0007A03EDB7FEB73696EDBF8091DF0A90914B |
:105CF000E00A9F938F938AEB97E09F938F931F9374 |
:105D00000F93E091D105F091D20509958CE3809332 |
:105D10007A032DB73EB72A5F3F4F2DBF80912B0BE3 |
:105D200090912C0B9F938F9388EC97E09F938F9388 |
:105D30001F930F93E091D105F091D20509954DB7CE |
:105D40005EB74A5F5F4F4DBFBCC210927A0386EDCB |
:105D500097E09F938F93BCEEEB2EB7E2FB2E1F9341 |
:105D60000F93FE01099584E180937A030F900F90C1 |
:105D70000F900F908091710199279F938F938EEDD3 |
:105D800097E09F938F931F930F93E091D105F0912C |
:105D9000D205099588E280937A038DB79EB706965F |
:105DA0008DBF809121039091220397FD03969595D5 |
:105DB0008795959587959F938F938CEE97E09F930A |
:105DC0008F93FF92EF92E091D105F091D205099562 |
:105DD0008CE380937A03EDB7FEB73696EDBF8091E2 |
:105DE000A50899279F938F938091A40899279F9343 |
:105DF0008F938AEF97E09F938F93FF92EF92E091BA |
:105E0000D105F091D20509952DB73EB7285F3F4FD8 |
:105E10002DBF57C210927A0388E098E09F938F932A |
:105E2000FCEECF2EF7E2DF2E1F930F93FE010995B4 |
:105E30000F900F900F900F90C0E9D9E000E010E0B4 |
:105E4000E2E0FE2E802F8C5E80937A0388A999274A |
:105E50008F7790709F938F9389A199278F779070F8 |
:105E60009F938F938A8999278F7790709F938F93B1 |
:105E70008B8199278F7790709F938F9388E198E01B |
:105E80009F938F93DF92CF92E091D105F091D2054D |
:105E900009954DB75EB7445F5F4F4DBFFA940C5EF6 |
:105EA0001F4FEC96F7FECECF0CC210927A0389E218 |
:105EB00098E09F938F937CEEC72E77E2D72E1F93A7 |
:105EC0000F93FE0109950F900F900F900F90C0E96E |
:105ED000D9E000E010E062E0F62E802F8C5E809327 |
:105EE0007A038CA999279F938F938DA199279F93CC |
:105EF0008F938E8999279F938F938F8199279F9353 |
:105F00008F9388E398E09F938F93DF92CF92E091F5 |
:105F1000D105F091D20509958DB79EB70C968DBF2E |
:105F2000FA940C5E1F4FEC96F7FED7CFCAC11092C1 |
:105F30007A0389E498E09F938F935CEEC52E57E235 |
:105F4000D52E1F930F93FE01099587E480937A0362 |
:105F50000F900F900F900F9084E598E09F938F9390 |
:105F60001F930F93E091D105F091D2050995FF247D |
:105F70000F900F900F900F90C0E0D0E08E01802F17 |
:105F80008C5E80937A038C2F8D5F0E94F0839F93A9 |
:105F90008F938C2F8E5F0E94F0839F938F938C2F13 |
:105FA0008F5F0E94F0839F938F938C2F0E94F083CA |
:105FB0009F938F938EE598E09F938F93DF92CF927C |
:105FC000E091D105F091D20509959E012C5F3F4FDC |
:105FD000809174089927EDB7FEB73C96EDBF28175E |
:105FE00039070CF06EC1F3940C5E1F4FE901F2E02B |
:105FF000FF1528F666C110927A038FE698E09F930A |
:106000008F934CEEE42E47E2F42E1F930F93FE0184 |
:10601000099584E180937A030F900F900F900F9071 |
:106020008091C009881F8827881F97E0899FC00139 |
:1060300011248D969F938F938091B109881F882793 |
:10604000881F96E0899FC00111248D969F938F939E |
:106050008091A209881F8827881F95E0899FC00129 |
:1060600011248D969F938F9380919309881F882781 |
:10607000881F9927880F991F880F991F8D969F93C6 |
:106080008F938EE798E09F938F931F930F93E091E8 |
:10609000D105F091D205099588E280937A032DB756 |
:1060A0003EB7245F3F4F2DBF8091FC09881F882792 |
:1060B000881F9BE0899FC00111248D969F938F9329 |
:1060C0008091ED09881F8827881F9AE0899FC00169 |
:1060D00011248D969F938F938091DE09881F8827C6 |
:1060E000881F99E0899FC00111248D969F938F93FB |
:1060F0008091CF09881F8827881F992723E0880F60 |
:10610000991F2A95E1F78D969F938F9382E998E0E6 |
:106110009F938F931F930F93E091D105F091D20538 |
:1061200009958CE380937A034DB75EB7445F5F4F68 |
:106130004DBF80910B0A881F8827881F9CE0899F8C |
:10614000C00111248D969F938F9386EA98E09F93C8 |
:106150008F931F930F93E091D105F091D20509958C |
:1061600080911A0AEDB7FEB73696EDBF87FF12C0D1 |
:1061700080E480937A0387EB98E09F938F931F933B |
:106180000F93E091D105F091D20509950F900F90F2 |
:106190000F900F908091290A87FF12C084E48093AA |
:1061A0007A038AEB98E09F938F93FF92EF92E091AE |
:1061B000D105F091D20509950F900F900F900F9097 |
:1061C0008091380A87FF7DC088E480937A038DEB45 |
:1061D00098E09F938F93FF92EF92E091D105F09119 |
:1061E000D20509950F900F900F900F906AC01092F2 |
:1061F0007A0380EC98E09F938F939CEEA92E97E210 |
:10620000B92E1F930F93FE010995FF240F900F9055 |
:106210000F900F9084E0C82ED12CC0E9D9E000E0A7 |
:1062200010E0802F8C5E80937A038AAD99279F932C |
:106230008F9389AD99279F938F938BA599279F93D0 |
:106240008F938AA599279F938F938C8D99279F93DE |
:106250008F938B8D99279F938F938D8599279F93EC |
:106260008F938C8599279F938F938CEC98E09F93C5 |
:106270008F93BF92AF92E091D105F091D20509952D |
:106280008091740899272DB73EB72C5E3F4F2DBFE4 |
:10629000C816D906B4F4F3940C5E1F4FEC9644E094 |
:1062A00050E0C40ED51E52E05F1508F0BACF09C009 |
:1062B00080912801281719F4215020932801109269 |
:1062C000790310927803EAE0CDB7DEB70C9412ADF3 |
:1062D000F999FECF92BD81BDF89A80B599270895AE |
:1062E000F999FECF1FBA92BD81BD60BD0FB6F8947B |
:1062F000FA9AF99A0FBE08954AEA20E030E026178C |
:10630000370740F4FC018191480F2F5F3F4F26175C |
:106310003707C8F3842F99270895EAEA40E050E050 |
:106320004617570778F49C01F999FECF32BD21BD7D |
:10633000F89A80B5E80F4F5F5F4F2F5F3F4F4617CA |
:10634000570790F38E2F9927089581E0809378085E |
:1063500082E08093770883E08093760884E08093DE |
:10636000790885E080937A0886E080937B0887E04F |
:1063700080937C0888E080937D0889E080937E0884 |
:106380008AE080937F088BE0809380088CE0809384 |
:106390008108089586E6809375088CE0E1EFF8E0C7 |
:1063A00011928A95E9F78AE0809395081092B908CE |
:1063B0008BE1809391088EE48093B6088093B708B0 |
:1063C00080E28093B8081092ED088AE680938208F4 |
:1063D00082E78093EF0880E58093F00886E0809361 |
:1063E0009C081092DA081092D70838E030938F0892 |
:1063F00086EE8093900880E48093920885E08093F5 |
:1064000085082EE12093830890911F04992399F029 |
:1064100084E18093860888E280938408209388082A |
:1064200081E08093890810928A088FE780938B0817 |
:106430002093DD0810C08FE08093860820938408A5 |
:10644000909388083093890884E180938A08909318 |
:106450008B089093DD088FE0809387081092E60800 |
:106460008CE08093E70810929E0810929F0810928B |
:10647000A0081092A1081092BB081092BC081092BC |
:10648000BD081092BE0890E89093A20842E34093A2 |
:10649000A308E2E0E093EE0888E18093A40886EE8A |
:1064A0008093A50883E08093AA085DE75093AD0828 |
:1064B0005093AE085093AF089093A60875E570937B |
:1064C000A70866E46093A8088CED8093A9088CE384 |
:1064D0008093AB081092AC089AEA9093BF088CECBA |
:1064E0008093C1081092C3089093C40898E29093D7 |
:1064F000C0089093C2081092C5081092EB08409310 |
:10650000EC084093B0082AE52093B1084093B20804 |
:1065100036E03093C60884E68093C7088093C808A5 |
:106520002093C90888E78093CA089093CE088BE42B |
:106530008093CB087093CC088093CD083093CF081C |
:1065400088E08093D0084093D1088AE28093D208F3 |
:106550001092D3081092D6089CE89093D408E09348 |
:10656000D5081092D8081092D90881E480939A082F |
:1065700020939B081092DB081092DC0886E9809338 |
:10658000DE085093B30884E38093B4081092DF08C8 |
:106590001092E0081092E1089093E2086093E308FB |
:1065A0009093E4086093E5081092E80880E28093F5 |
:1065B00099088FE18093EA088EE18093E9080895B5 |
:1065C0000E94CA318AE080938C0880E180938D0814 |
:1065D00026E020938E089AE59093930888E78093AD |
:1065E000940890939608809397082093980880E2E7 |
:1065F00080939D088CE38093B5088BE48093BA0860 |
:1066000086E491E6A3E7B4E78093F1089093F2085B |
:10661000A093F308B093F40868E870E085E798E089 |
:106620000E947C318093FD080895CF93DF930E94F0 |
:10663000CA3188E080938C0830E130938D0826E0E1 |
:1066400020938E0894E69093930888E780939408AB |
:1066500090939608809397082093980830939D080C |
:1066600086E48093B5088093BA08A1EFB8E085E08E |
:10667000E9E2F1E0ED01019009928A95E1F768E81D |
:1066800070E0CD018C5790400E947C318093FD08D2 |
:10669000DF91CF9108950E94CA3126E020938C08A3 |
:1066A0008AE080938D0884E080938E0894E690932E |
:1066B000930888E7809394089093960880939708AE |
:1066C0002093980880E180939D0886E48093B50824 |
:1066D0008093BA0885E491E6A3E7B9E78093F108CF |
:1066E0009093F208A093F308B093F40868E870E080 |
:1066F00085E798E00E947C318093FD080895F99920 |
:10670000FECF92BD81BDF89A80B599270895F99979 |
:10671000FECF1FBA92BD81BD60BD0FB6F894FA9A44 |
:10672000F99A0FBE089568E671E30E94EDAA0895F4 |
:1067300040E751E30E9427AB0895EF92FF920F9339 |
:106740001F93CF93C82F8150853008F0C3E089E8AC |
:10675000C89F800111248BEDE82E8FEFF82EE00EFC |
:10676000F11E68E870E0C7010E948D31682F980122 |
:106770002D593F4F8FB39927AC014270507081FD66 |
:10678000F9CF32BD21BDF89A80B5861711F0CA0144 |
:1067900023C08FB399279C012270307081FDF9CFFF |
:1067A000F2BCE1BCF89A80B5863611F0C90114C07C |
:1067B00089E8C89FC0011124859728E631E349E89C |
:1067C00050E0BC0185E798E00E94C8AA0E941379B6 |
:1067D0000E944EA481E090E0CF911F910F91FF9015 |
:1067E000EF900895282F863010F025E003C088230D |
:1067F00009F421E020930101F999FECF1FBA82E04C |
:1068000090E092BD81BD20BD0FB6F894FA9AF99A36 |
:106810000FBE0895CF93C82F80917508863609F072 |
:1068200051C0C63010F0C5E003C0CC2309F44AC003 |
:106830000E9418A98091F00882FF07C080919A08F1 |
:10684000843618F080E580939A0868E870E085E760 |
:1068500098E00E947C318093FD0889E8C89FC001C0 |
:10686000112420E731E349E850E065E778E08597B7 |
:106870000E9405AB20E731E34CE050E066E778E0AA |
:1068800080E590E00E9405AB6CE070E086E798E060 |
:106890000E947C31282FF999FECF1FBA8CE590E039 |
:1068A00092BD81BD20BD0FB6F894FA9AF99A0FBE39 |
:1068B0008C2F0E94F2330E9413790E944EA481E033 |
:1068C00090E002C080E090E0CF9108956DE470E028 |
:1068D00088EE93E00E948D31482F8FB399279C0159 |
:1068E0002270307081FDF9CF85E394E092BD81BDC7 |
:1068F000F89A80B5841779F48FB399279C01227098 |
:10690000307081FDF9CF88EE93E092BD81BDF89A99 |
:1069100080B5813011F0C901089528E631E34EE4D5 |
:1069200050E068EE73E08EEF98E00E94C8AA81E024 |
:1069300090E008958091FE088130A9F46DE470E044 |
:106940008EEF98E00E947C3180934B0920E731E381 |
:106950004EE450E06EEF78E088EE93E00E9405ABE5 |
:1069600081E090E0089580E090E00895CF93DF9378 |
:1069700081E08093FE08EEEFF8E08FE01586168642 |
:106980001786108A8150349687FFF8CF80E4809371 |
:106990000B0980930C0910920D0980930E098093C6 |
:1069A0000F0990EC9093100910921109809312092D |
:1069B0008093130910921409909315099093160966 |
:1069C00080931709109218098093190990931A0956 |
:1069D000AFEFB8E08CE0EFE2F1E0ED010190099259 |
:1069E0008A95E1F76DE470E0CD0101970E947C315A |
:1069F00080934B09DF91CF910895F999FECF82E002 |
:106A000090E092BD81BDF89A80B5282F863078F04D |
:106A100023E0322FF999FECF1FBA82E090E092BDB9 |
:106A200081BD30BD0FB6F894FA9AF99A0FBE209343 |
:106A30000101822F992708951F93CF93C82F162FF6 |
:106A4000863010F0C5E003C0882309F4C1E08C2F24 |
:106A500099278230910541F08330910544F40197E4 |
:106A600031F40E94E03205C00E94153302C00E943A |
:106A70004B331123E1F06CE070E080E590E00E9480 |
:106A80008D31282FF999FECF8CE590E092BD81BD24 |
:106A9000F89A80B5821759F428E631E34CE050E0CB |
:106AA00060E570E086E798E00E94C8AA02C00E94F4 |
:106AB000A5318C2F0E940A34CF911F910895DF9247 |
:106AC000EF92FF920F931F93CF93FF24DF2CEF2CB5 |
:106AD00081E190E00E947F3390910301981791F13A |
:106AE000963169F481E190E00E947F33853139F479 |
:106AF0004C9905C06F2D81E090E00E948733609132 |
:106B0000030181E190E00E94873388E190E028E072 |
:106B10000FB6F894A895809360000FBE2093600094 |
:106B200080EF98E09F938F938FE999E19F938F93E4 |
:106B3000E091D105F091D20509950F900F900F903B |
:106B40000F90FFCF81E090E00E947F33863611F0F6 |
:106B500031E0E32E6CE070E080E590E00E948D3142 |
:106B6000C82FF999FECF8CE590E092BD81BDF89ACF |
:106B700080B58C1711F421E0D22EC1E001E010E0C5 |
:106B8000EE2029F48C2F0E949D338823B9F591E0E3 |
:106B9000F92E1F930F9388E199E09F938F938FE9CC |
:106BA00099E19F938F93E091D105F091D2050995DA |
:106BB0002DB73EB72A5F3F4F2DBF0130110521F0A1 |
:106BC0000230110521F006C00E94E03205C00E948B |
:106BD000153302C00E944B33DD2059F028E631E323 |
:106BE0004CE050E060E570E086E798E00E94C8AABB |
:106BF00002C00E94A5318C2F0E940A34CF5F0F5F24 |
:106C00001F4FC63008F4BCCFFF2019F083E00E946C |
:106C1000F2330E94FD34C82F0E949D338C2F992798 |
:106C20009F938F938EE399E09F938F930FE919E1E0 |
:106C30001F930F93E091D105F091D205099581E062 |
:106C400090E00E947F332DB73EB72A5F3F4F2DBFA4 |
:106C50008F3F21F00E946634882399F487E599E0FC |
:106C60009F938F931F930F93E091D105F091D205DD |
:106C700009950E94B6340E949A340F900F900F909D |
:106C80000F90EE2029F066E681E090E00E948733C5 |
:106C90001092740890E0EBE0F9E0CFE08081349648 |
:106CA00018160CF49F5FC150C7FFF8CF909374087B |
:106CB000892F99279F938F938FEF98E09F938F93BE |
:106CC00088E799E09F938F931F930F93E091D105ED |
:106CD000F091D20509950E947B0C8DB79EB708965E |
:106CE0008DBFCF911F910F91FF90EF90DF9008958E |
:106CF000982F2FB7F8943998389A88B1836088B95B |
:106D00008091B9008C7F8093B9008AE28093B800AB |
:106D10001092850310928303109282039923B1F09D |
:106D2000E0E9F9E08BE01082118212821382148272 |
:106D30001582168217821686108611861286138691 |
:106D40001486158681503F9687FFEDCF78942FBF2C |
:106D500008951092850384E98093BC0080E88093B5 |
:106D6000BC001092BD001092BA001092BB001092AD |
:106D7000B9001092B8001092810380E00E9478362A |
:106D80001092BB0085E88093BC0080917F038260F5 |
:106D900080937F0308951F920F920FB60F921124D4 |
:106DA0002F933F936F937F938F939F93EF93FF93D3 |
:106DB00080918503282F33278F5F809385032330AD |
:106DC000310509F41CC1243031055CF42130310552 |
:106DD00009F454C0223031050CF099C0232B71F016 |
:106DE00031C32530310509F470C1253031050CF46B |
:106DF0001EC12630310509F434C224C381E08093DA |
:106E0000810309C0809183038C3090F480918303C7 |
:106E10008F5F8093830380918303E82FFF27EE0F1A |
:106E2000FF1FEE0FFF1FE250F74F8585181654F72E |
:106E3000809183036CE00E947EAC909383038091E9 |
:106E40008B038F5F80938B0390913E01981770F4B2 |
:106E500010928B0310927E0310927D0385E0809345 |
:106E6000850380918203880F8D5A04C0809183032B |
:106E7000880F8E5A8093BB0085E824C180918303DC |
:106E80009927FC0124E0EE0FFF1F2A95E1F7E81B8C |
:106E9000F90BE057F64F81818093BB0085E8809322 |
:106EA000BC00809183039927FC01E295F295F07F65 |
:106EB000FE27E07FFE27E81BF90BE057F64F8081A5 |
:106EC00080FF9BC0809183039927FC01E295F29596 |
:106ED000F07FFE27E07FFE27E81BF90BE057F64F17 |
:106EE0008281882329F080917408873008F4C0C219 |
:106EF00080917D0390917E03892B09F0B9C2809126 |
:106F00007B0390917C03892B09F0B2C276C08091FB |
:106F1000830321E030E002C0220F331F8A95E2F79D |
:106F200080917B0390917C0328233923232B81F0CC |
:106F3000809183039927FC0174E0EE0FFF1F7A957F |
:106F4000E1F7E81BF90BE057F64F80E184830EC0B0 |
:106F5000809183039927FC0164E0EE0FFF1F6A957F |
:106F6000E1F7E81BF90BE057F64F14828091830399 |
:106F70009927FC01E295F295F07FFE27E07FFE273E |
:106F8000E81BF90BE057F64F8481282F3327220F97 |
:106F9000331F220F331F220F331F80918303992742 |
:106FA000FC0134E0EE0FFF1F3A95E1F7E81BF90B07 |
:106FB000E057F64F82818770822B8093BB0085E873 |
:106FC0008093BC002091830381E090E002C0880F91 |
:106FD000991F2A95E2F720917D0330917E03822349 |
:106FE0009323892B51F088E899E09093890380934B |
:106FF000880388E080938A033BC284E020C2E0914A |
:107000008803F091890381918093BB0085E8809388 |
:10701000BC00F0938903E093880380918A03815038 |
:1070200080938A03882309F423C283E008C28091F5 |
:10703000B900803379F580918603882329F4809103 |
:1070400083038F5F80938603809183039927FC01DC |
:10705000E295F295F07FFE27E07FFE27E81BF90B13 |
:10706000E057F64F838199278F7790708F3791057E |
:107070008CF4809183039927FC01E295F295F07FCF |
:10708000FE27E07FFE27E81BF90BE057F64F8381D0 |
:107090008F5F83831092850384E98093BC008AE02C |
:1070A00090E090933D0180933C01809183038F5F3A |
:1070B000809383031092850380917F038E7F80935A |
:1070C0007F0385EA8093BC00D3C18091B9008034EE |
:1070D000D1F1809182039927FC0174E0EE0FFF1F2C |
:1070E0007A95E1F7E81BF90BE057F64F83818F772C |
:1070F0008383809182038F5F8093820380918203D8 |
:107100008C30A0F01092820310927C0310927B03CB |
:10711000809187038F5F809387038C3038F01092C3 |
:10712000870380917F038D7F80937F0380917F030E |
:10713000816080937F031092850384E98093BC0073 |
:107140001092810387C0809182039927FC0164E03B |
:10715000EE0FFF1F6A95E1F7E81BF90BE057F64FBA |
:10716000838180688383809182039927FC01E29563 |
:10717000F295F07FFE27E07FFE27E81BF90BE05732 |
:10718000F64F808180FF42C0809182039927FC01E5 |
:10719000E295F295F07FFE27E07FFE27E81BF90BD2 |
:1071A000E057F64F848199270097D9F0409709F06E |
:1071B00048C088E899E0909389038093880388E029 |
:1071C00080938A03809182039927FC0134E0EE0FBB |
:1071D000FF1F3A95E1F7E81BF90BE057F64F1482D1 |
:1071E00030C0909182038FE0989FC00111248B568C |
:1071F000964F9093890380938803909182038091A6 |
:1072000087039817D9F480913F0119C090918203A8 |
:107210008FE0989FC00111248B56964F909389035D |
:107220008093880380917F0381FD06C09091820343 |
:1072300080918703981711F482E001C081E0809368 |
:107240008A0380918A03813011F485E801C085ECBE |
:107250008093BC0080918603809380031092860304 |
:1072600007C1E0918803F09189038091BB0080837E |
:10727000809188039091890301969093890380936C |
:10728000880380918A03815080938A03823010F0B2 |
:1072900085ECD2C0813011F485E8CEC080917F03A7 |
:1072A00081FF7BC08091270480FD77C0809182039D |
:1072B0009927FC0124E0EE0FFF1F2A95E1F7E81B58 |
:1072C000F90BE057F64F868199278C7F9070883FA5 |
:1072D000910591F4809182039927FC01E295F29542 |
:1072E000F07FFE27E07FFE27E81BF90BE057F64F03 |
:1072F0008081816080830FC0809182039927FC0187 |
:10730000E295F295F07FFE27E07FFE27E81BF90B60 |
:10731000E057F64F1082809182039927FC0174E0B8 |
:10732000EE0FFF1F7A95E1F7E81BF90BE057F64FD8 |
:107330008681883F81F4809182039927FC0164E073 |
:10734000EE0FFF1F6A95E1F7E81BF90BE057F64FC8 |
:107350008081866021C0809182039927FC01E2959B |
:10736000F295F07FFE27E07FFE27E81BF90BE05740 |
:10737000F64F8681893F89F4809182039927FC0129 |
:10738000E295F295F07FFE27E07FFE27E81BF90BE0 |
:10739000E057F64F8081846080838091270481FFCD |
:1073A00023C0809182039927FC0134E0EE0FFF1F78 |
:1073B0003A95E1F7E81BF90BE057F64F86818E3FCF |
:1073C00098F4809182039927FC0124E0EE0FFF1FBF |
:1073D0002A95E1F7E81BF90BE057F64F86858F5F9A |
:1073E000868789E08093B201809182038F5F8093CA |
:1073F0008203809182038C30A0F01092820310925D |
:107400007C0310927B03809187038F5F80938703B7 |
:107410008C3038F01092870380917F038D7F8093AA |
:107420007F031092850384E98093BC0080917F03E1 |
:10743000816080937F031AC08093BC0086E08093B4 |
:10744000850316C01092850384E98093BC00809167 |
:107450007F03816080937F038AE090E090933D01F9 |
:1074600080933C0110928303109282031092810357 |
:10747000FF91EF919F918F917F916F913F912F910C |
:107480000F900FBE0F901F9018950F931F93CF93DF |
:10749000DF93182F80915F04882321F480910603E5 |
:1074A000882319F081E090E091C01D3008F08CC075 |
:1074B0001123C9F0812F9927FC0144E0EE0FFF1F33 |
:1074C0004A95E1F7E81BF90BE057F64F3C978081AE |
:1074D0003C9688230CF078C03F97808180FD03C0E4 |
:1074E00083E090E073C08091880999278B70907039 |
:1074F000029719F084E090E069C067E070E088E8E6 |
:1075000099E00E947C3190918F09891719F085E0EC |
:1075100090E05CC000913E018CE080933E0184E6E7 |
:1075200090E090933D0180933C010E94A81DEC01E6 |
:1075300080917F0380FD05C0CE010E94B11D88238C |
:10754000B9F3112319F48FEF9FE00BC0212F3327DC |
:107550002150304081E090E002C0880F991F2A95A9 |
:10756000E2F790937E0380937D0310928303109241 |
:10757000820388EE93E00E94A81DEC01109285031F |
:1075800080917F038E7F80937F0385EA8093BC0088 |
:1075900080917F0380FD05C0CE010E94B11D88232C |
:1075A000B9F380917D0390917E03892B29F0CE0160 |
:1075B0000E94B11D882311F300933E0180917D0349 |
:1075C00090917E03009711F082E090E0DF91CF91DF |
:1075D0001F910F9108950F931F93CF93DF93982FCF |
:1075E00080915F04882321F480910603882319F099 |
:1075F00081E090E07BC09D30B0F4992319F486E0DF |
:1076000090E074C0C92FDD27FE0154E0EE0FFF1F8C |
:107610005A95E1F7EC1BFD0BE057F64F3C97808144 |
:107620003C9687FD03C082E090E060C03F97808178 |
:1076300080FD03C083E090E059C088EE93E00E9493 |
:10764000A81D8C0180917F0380FD05C0C8010E94A8 |
:10765000B11D8823B9F3219781E090E002C0880F23 |
:10766000991FCA95E2F790937C0380937B03109255 |
:107670008303109282031092880910928F0910924E |
:10768000850380917F038E7F80937F0385EA8093BB |
:10769000BC0080917F0380FD05C0C8010E94B11D20 |
:1076A0008823B9F380917B0390917C03892B29F087 |
:1076B000C8010E94B11D882311F380918809992780 |
:1076C0008B709070029719F084E090E00FC067E033 |
:1076D00070E088E899E00E947C3190918F098917C9 |
:1076E00019F085E090E002C080E090E0DF91CF915A |
:1076F0001F910F910895CF93DF9380E021E83FEF32 |
:10770000CBE8DAE0E5E4FAE0DF01853020F4119619 |
:107710001C921E9202C03183208319821882229605 |
:107720008F5F12963296833280F38FE790E09093CA |
:10773000840A8093830A81E89FEF9093820A809362 |
:10774000810A1092860A1092850A1092CD04109236 |
:10775000CC041092CF041092CE041092D104109257 |
:10776000D004DF91CF9108951F920F920FB60F9220 |
:1077700011240F931F932F933F934F935F936F9316 |
:107780007F938F939F93AF93BF93CF93DF93EF93A9 |
:10779000FF938091EF0882FDC2C040918600509116 |
:1077A000870080918D0390918E03481B590B809127 |
:1077B00086009091870090938E0380938D03CA0179 |
:1077C0008D549440A0918F03B0919003835F9A41B0 |
:1077D00058F480918F038093440A149714F0109208 |
:1077E000420181E090E096C0A131B1050CF0DFC10B |
:1077F000CA018B5F9040845B914008F086C0809105 |
:10780000400190914101481B590BE091DF08EE23A4 |
:1078100051F0FF27EE0FFF1FEB5BF54F8081918149 |
:1078200084369105ECF4FD01EA0FFB1FEB5BF54F8D |
:1078300080819181FA01E81BF90BCF01F7FF03C0AA |
:10784000909581959F4F06975CF480916004883CE9 |
:1078500020F480916004865F01C088EC809360040E |
:10786000FD01EA0FFB1FEB5BF54F808191819C01CD |
:10787000220F331F280F391F240F351F37FF02C077 |
:107880002D5F3F4FE901D595C795D595C795CA019D |
:1078900001968C179D0714F4219706C04150504063 |
:1078A000C417D5070CF4219680916004833CE0F066 |
:1078B0008D010A0F1B1FF801EB5BF54F8081918151 |
:1078C0009E01281B390BC90163E070E00E949EAC49 |
:1078D000CB01880F991F860F971F0557154FD801A9 |
:1078E00011969C938E9307C0AA0FBB1FA557B54F47 |
:1078F00011961C921E92E0918F03F0919003EE0F6F |
:10790000FF1FEB5BF54FD183C08380918F03909174 |
:10791000900301969093900380938F0348C1409108 |
:107920008600509187008091910390919203481BAB |
:10793000590B8091860090918700909392038093D9 |
:107940009103CA018D54944060911B04835F9A4156 |
:1079500008F072C060938C0380918C03843008F42B |
:1079600053C09091440A80918C03981709F04CC041 |
:1079700050911C045B3008F43FC0109242011092F9 |
:107980001B0440E05F31C0F0E42FFF27EE0FFF1F24 |
:107990009F0129523C4FDF01AB5BB54F8D919C910C |
:1079A000D9018D939C93DF01A557B54F8D919C9183 |
:1079B000E750FC4F91838083E42FFF27EE0FFF1FDA |
:1079C0009F012B5B354FDF01AD56BC4F8D919C91D4 |
:1079D000D90111969C938E93DF01AB54BC4F8D91CE |
:1079E0009C91E557F54F91838083842F8F5F482FBB |
:1079F000813140F280931B0480911C048F3F79F009 |
:107A00008F5F80931C040BC080911C04853620F08E |
:107A10008AE080931C0402C010921C04289A81E022 |
:107A200080931B0480915F04882309F0C0C080917B |
:107A30008C038093440ABBC0613108F098C0CA012E |
:107A40008B5F9040845B914008F090C08091400132 |
:107A500090914101481B590BE62FFF27EE0FFF1FA6 |
:107A6000ED56FC4F80819181FA01E81BF90BCF01A3 |
:107A700005960B9720F5E091DF08EE2351F0FF27E4 |
:107A8000EE0FFF1FEB5BF54F8081918184369105EE |
:107A9000B4F480911C048A3120F080916004865FE8 |
:107AA00005C08B3028F0809160048E5F8093600465 |
:107AB00080916004893C18F088EC80936004E62F84 |
:107AC000FF27EE0FFF1FED56FC4F808191819C0137 |
:107AD000220F331F280F391F240F351F37FF02C015 |
:107AE0002D5F3F4FE901D595C795D595C795CA013B |
:107AF00001968C179D0714F4219706C04150504001 |
:107B0000C417D5070CF42196809160048E3BD8F001 |
:107B1000E62FFF27EE0FFF1FDF01AD56BC4F8D9103 |
:107B20009C919E01281B390BC90163E070E00E9403 |
:107B30009EACCB01880F991F860F971FEB54FC4F0B |
:107B40009183808308C0E62FFF27EE0FFF1FEB54C1 |
:107B5000FC4F1182108280911B04E82FFF27EE0F4B |
:107B6000FF1FED56FC4FD183C08301C0289A80913E |
:107B70001B04843120F48F5F80931B0418C0843170 |
:107B8000B1F4289A8EE180931B0420E1CBE8DAE07F |
:107B9000A7EDB3E0E5E4FAE08D919D9191838083B8 |
:107BA0003296198218822296215027FFF5CFFF9135 |
:107BB000EF91DF91CF91BF91AF919F918F917F9185 |
:107BC0006F915F914F913F912F911F910F910F9066 |
:107BD0000FBE0F901F9018958091520B9091530BF0 |
:107BE0009093D1078093D0078091540B9091550BBF |
:107BF0009093D3078093D2078091260B9091270B07 |
:107C000097FD039695958795959587959093D507BC |
:107C10008093D4078091380B9091390B97FD039690 |
:107C200095958795959587959093D7078093D607D7 |
:107C30008091CC049091CD04209153033091540352 |
:107C4000821B930B9093D9078093D80780915A0495 |
:107C500090915B04A0915C04B0915D04BC01CD01E6 |
:107C60002AE030E040E050E00E94D3AC3093DB07E4 |
:107C70002093DA0780911508909116089093DD07FC |
:107C80008093DC0780919201909193019093E1079A |
:107C90008093E00780912601909127019093E3075C |
:107CA0008093E2078091600499279093E507809381 |
:107CB000E4078091DF0A9091E00A9093E7078093B0 |
:107CC000E6078091910999279093E9078093E80747 |
:107CD0008091A00999279093EB078093EA07809100 |
:107CE000AF0999279093ED078093EC078091BE0927 |
:107CF00099279093EF078093EE078091210390914D |
:107D000022039093F9078093F8078091440490919F |
:107D100045049093FB078093FA078091B90B9091EB |
:107D2000BA0B9093FD078093FC078091BD0B909157 |
:107D3000BE0B9093FF078093FE07809156049091AD |
:107D40005704A0915804B0915904BC01CD012AE018 |
:107D500030E040E050E00E94D3AC30930108209323 |
:107D600000088091BF0B992790930B0880930A0815 |
:107D7000809132059091330590930D0880930C0803 |
:107D8000809130059091310590930F0880930E08F3 |
:107D90008091EA05882321F48091EB05882321F066 |
:107DA0008091CF07816003C08091CF078E7F809341 |
:107DB000CF070895EF92FF921F93CF93DF93182F71 |
:107DC0007B0180915F04882371F5809103018931E3 |
:107DD00011F4299801C0299A11501F3FE9F0F0923F |
:107DE0002903E0922803E701809128039091290359 |
:107DF000892B11F4209781F380912C038823A1F320 |
:107E000010922C038091280390912903892B09F467 |
:107E100021970E942EA9E8CF80910301893111F4A6 |
:107E2000299A01C02998DF91CF911F91FF90EF907F |
:107E30000895EF92FF920F931F9310927A00809112 |
:107E40005703909158039093EA0A8093E90A80912E |
:107E50005503909156039093DB0A8093DA0A809140 |
:107E600053039091540390932E0B80932D0B2091EC |
:107E70004F0330915003C901880F991F880F991F34 |
:107E8000820F931F820F931F9093270B8093260BD3 |
:107E90002091510330915203C901880F991F880F17 |
:107EA000991F820F931F820F931F9093390B80931A |
:107EB000380B8FEC80937A008091B6089927AA2717 |
:107EC000BB2744ECE42E49E0F42E012D112DBC011A |
:107ED000CD01A80197010E945FACDC01CB0180932A |
:107EE0008A0190938B01A0938C01B0938D018091B6 |
:107EF000B7089927AA27BB27BC01CD010E945FAC18 |
:107F0000DC01CB018093860190938701A0938801C7 |
:107F1000B09389011F910F91FF90EF900895A0E019 |
:107F2000B0E0E5E9FFE30C94F2AC782E91E0692E25 |
:107F3000EE24FF2457014701E7011092EA05F09271 |
:107F4000C704E092C604F092C504E092C404F09223 |
:107F5000C104E092C0041092BF04F092D104E092F8 |
:107F6000D004F092CF04E092CE04F092CD04E092DF |
:107F7000CC0410926C0110926B01109248030E9485 |
:107F8000193F84E690E00E94CA1D0E94193F80912B |
:107F9000820880FF14C080911C0190911D01875BB5 |
:107FA000934058F480911C0190911D018E5E924087 |
:107FB00020F080914803882311F00E940B22009149 |
:107FC0001C0110911D0187B58B5F87BD87B580951A |
:107FD00088BD8FE1C82E8AE090E00E94CA1D809182 |
:107FE000530390915403E80EF91E8091570390912A |
:107FF0005803A80EB91E8091550390915603880E20 |
:10800000991E8091150890911608C80FD91FCA941F |
:10801000C7FEE1CF80911C0190911D01825F9340CA |
:1080200080F480911C0190911D01459750F0809142 |
:108030001C0190911D01081B190B1093170100934F |
:10804000160187B5855087BD87B5809588BD950198 |
:10805000205F3F4F36952795369527953093D1046D |
:108060002093D004C4014096969587959695879560 |
:108070009093CF048093CE0440E150E0E40EF51ECF |
:10808000B5E0F694E794BA95E1F7F092CD04E0926A |
:10809000CC04C40FD51FA5E0D695C795AA95E1F7E6 |
:1080A000D093C104C093C0049093CB048093CA04BE |
:1080B0003093C9042093C80452E07516C9F5809125 |
:1080C000260B9091270B97FF03C0909581959F4FAA |
:1080D0006CE070E00E949EAC9B017093C7046093BB |
:1080E000C6048091380B9091390B97FF03C090958F |
:1080F00081959F4F6CE070E00E949EAC7093C50428 |
:108100006093C404B90184E090E00E9498336091C8 |
:10811000C4047091C50486E090E00E949833609199 |
:10812000C0047091C10488E090E00E9498334FC071 |
:1081300084E090E00E9493339093C7048093C60438 |
:1081400086E090E00E9493339C019093C504809355 |
:10815000C4048091C6049091C7048150984018F4DB |
:1081600021503840A0F189E999E09F938F938FE9DE |
:1081700099E19F938F93E091D105F091D2050995F4 |
:108180008091260B9091270B97FF03C090958195C6 |
:108190009F4F6CE070E00E949EAC7093C7046093A8 |
:1081A000C6048091380B9091390B97FF03C09095CE |
:1081B00081959F4F6CE070E00E949EAC7093C50467 |
:1081C0006093C40466240F900F900F900F9012BC20 |
:1081D00011BC1092EA0A1092E90A1092DB0A10927E |
:1081E000DA0A10922E0B10922D0B88EC90E00E9470 |
:1081F000CA1D80914F03909150039C01220F331FA1 |
:10820000220F331F280F391F280F391F3093270BD8 |
:108210002093260B80915103909152038C01000F03 |
:10822000111F000F111F080F191F080F191F10939E |
:10823000390B0093380B80919108C82EDD24EE2471 |
:10824000FF24442737FD4095542FC701B6010E94F3 |
:108250005FAC4B015C016093BA047093BB048093E4 |
:10826000BC049093BD049801442737FD4095542FDA |
:10827000C701B6010E945FACDC01CB018093B20460 |
:108280009093B304A093B404B093B50480929A047D |
:1082900090929B04A0929C04B0929D0480939204BF |
:1082A00090939304A0939404B093950410928A043D |
:1082B00010928B0410928C0410928D040091920104 |
:1082C00010919301109379040093780484E690E070 |
:1082D00090938F0180938E018091B6089927AA27E9 |
:1082E000BB27BC01CD0124EC39E040E050E00E9406 |
:1082F0005FACDC01CB018856954CAF4FBF4F8093EC |
:108300008A0190938B01A0938C01B0938D01809191 |
:10831000B7089927AA27BB27BC01CD010E945FACF3 |
:10832000DC01CB018856954CAF4FBF4F809386013F |
:1083300090938701A0938801B0938901109249011D |
:1083400010924801C801AA2797FDA095BA2F209145 |
:108350004401309145014091460150914701BC01D3 |
:10836000CD010E945FACDC01CB018093340B909374 |
:10837000350BA093360BB093370B10927504109207 |
:1083800074040E941379772029F080912704846077 |
:10839000809327048FEF8093B40B1092B50B80E28B |
:1083A0008093B60B84E68093600480912603882333 |
:1083B00011F0579A17C08091EE08992780FF05C0E9 |
:1083C00082FF03C080EE9EE202C080E091E19093C4 |
:1083D0000A018093090181E0809311010E946B1EC4 |
:1083E0000E946B1E8091BA049091BB04A091BC04C2 |
:1083F000B091BD04E0904401F09045010091460128 |
:1084000010914701BC01CD01A80197010E94D3AC96 |
:1084100059016A018091B2049091B304A091B4040F |
:10842000B091B504BC01CD01A80197010E94D3AC65 |
:10843000B901C5010E947FAA8C010E94857C9C0124 |
:108440009093F40A8093F30A8091C0049091C10440 |
:10845000AA2797FDA095BA2F7DE0880F991FAA1F24 |
:10846000BB1F7A95D1F78050904FAF43B04044275F |
:1084700037FD4095542FBC01CD010E94D3ACC901FA |
:1084800080509E4F9093C1048093C0040531110524 |
:108490000CF06624772081F080911F04882361F01E |
:1084A000C9018C5890408234910530F08091EA05E2 |
:1084B00080628093EA0566248091D0049091D10473 |
:1084C00080569940815C9B4228F08091EA0581604A |
:1084D0008093EA058091CE049091CF048056994014 |
:1084E000815C9B4228F08091EA0582608093EA05D6 |
:1084F0008091CC049091CD048C5291408957954045 |
:1085000028F08091EA0584608093EA058091C60492 |
:108510009091C7048C529140835C914028F08091E7 |
:10852000EA0588608093EA058091C4049091C504AF |
:108530008C529140835C914028F08091EA058061E3 |
:108540008093EA058091C0049091C10480509240CC |
:108550008355914028F08091EA0580628093EA0576 |
:108560008091EA058111662486E4809381010E944E |
:108570004EA482E00E94B4A580911E0190911F013B |
:10858000A0912001B09121018093170890931808C1 |
:10859000A0931908B0931A0810924703109246034B |
:1085A0001092490310924A0310924B0310924C030D |
:1085B00010927A0410927B0410927C0410927D0435 |
:1085C00010920908109208080E94D321862D99273D |
:1085D000EEE0CDB7DEB70C940EADA3E1B0E0E3EF73 |
:1085E000F2E40C94EEAC8091CC049091CD042091F7 |
:1085F000530330915403821B930B90932E0B809363 |
:108600002D0B80915D0390915E0397FD07969C0171 |
:1086100053E0359527955A95E1F73093EA0A209370 |
:10862000E90A80915B0390915C0397FD079643E014 |
:10863000959587954A95E1F79093DB0A8093DA0A3E |
:108640003093F60A2093F50A9093ED0A8093EC0A92 |
:108650008091260B9091270BAC01440F551F480FBA |
:10866000591F20914F0330915003C901880F991F62 |
:10867000880F991F820F931F820F931F480F591F56 |
:1086800057FF02C04D5F5F4F5595479555954795EC |
:108690005093270B4093260B8091380B9091390B08 |
:1086A000AC01440F551F480F591F209151033091C1 |
:1086B0005203C901880F991F880F991F820F931FBA |
:1086C000820F931F480F591F57FF02C04D5F5F4F26 |
:1086D00055954795559547955093390B4093380BD1 |
:1086E00020914F0330915003C901880F991F880FC3 |
:1086F000991F820F931F820F931F9C01442737FD00 |
:108700004095542F8091AA049091AB04A091AC04A1 |
:10871000B091AD04820F931FA41FB51F8093AA04CC |
:108720009093AB04A093AC04B093AD04209151039B |
:1087300030915203C901880F991F880F991F820F2A |
:10874000931F820F931F9C01442737FD4095542FA0 |
:108750008091A6049091A704A091A804B091A904C7 |
:10876000820F931FA41FB51F8093A6049093A704A4 |
:10877000A093A804B093A9048091FF0A9091000BE4 |
:1087800020914F0330915003820F931F9093000B61 |
:108790008093FF0A8091300B9091310B209151030F |
:1087A00030915203820F931F9093310B8093300BC3 |
:1087B0008091C2049091C30401969093C304809366 |
:1087C000C20480911508909116082091C004309140 |
:1087D000C104821B930B9C01442737FD4095542F05 |
:1087E0008091A2049091A304A091A404B091A50447 |
:1087F000820F931FA41FB51F8093A2049093A3041C |
:10880000A093A404B093A5048091380390913903F8 |
:10881000A0913A03B0913B0380935A0490935B0478 |
:10882000A0935C04B0935D04809134039091350370 |
:10883000A0913603B091370380933C0390933D039E |
:10884000A0933E03B0933F038FEC80937A00109285 |
:108850001801209192043091930440919404509116 |
:10886000950429873A874B875C8729543B464140CA |
:1088700050402CF028E43BE641E050E00DC08985F3 |
:108880009A85AB85BC85885B9449AE4FBF4F4CF44D |
:1088900028EB34E94EEF5FEF2D833E834F835887FB |
:1088A00008C089859A85AB85BC858D839E83AF83FF |
:1088B000B88720919A0430919B0440919C04509178 |
:1088C0009D042D873E874F87588B29543B46414056 |
:1088D00050402CF028E43BE641E050E00DC08D858F |
:1088E0009E85AF85B889885B9449AE4FBF4F4CF4E5 |
:1088F00028EB34E94EEF5FEF29833A834B835C83A7 |
:1089000008C08D859E85AF85B88989839A83AB839E |
:10891000BC83A0912D0BB0912E0BBB8BAA8BFD01BC |
:10892000CF01AA2797FDA095BA2FA0908A04B090F6 |
:108930008B04C0908C04D0908D04A80EB91ECA1E62 |
:10894000DB1EA0928A04B0928B04C0928C04D09259 |
:108950008D04E090340BF090350B0091360B1091A4 |
:10896000370BE80EF91E0A1F1B1FE092340BF09222 |
:10897000350B0093360B1093370BF0914304F98BB2 |
:10898000FF2309F098C180914204882309F093C124 |
:108990008091220B86FF8FC18091DA0A9091DB0AC9 |
:1089A000AA2797FDA095BA2FBC01CD0129813A8154 |
:1089B0004B815C810E945FAC9B01AC0197FF04C0BE |
:1089C0002150384F4F4F5F4F6BE055954795379586 |
:1089D00027956A95D1F780916B01682E77248824BA |
:1089E0009924CA01B901A40193010E945FACDC0182 |
:1089F000CB018093DC049093DD04A093DE04B0935C |
:108A0000DF04B7FF04C08150904FAF4FBF4F1C0130 |
:108A10002D013CE055944794379427943A95D1F72B |
:108A20002092DC043092DD044092DE045092DF0498 |
:108A30008091E90A9091EA0AAA2797FDA095BA2F9A |
:108A4000BC01CD012D813E814F8158850E945FACD4 |
:108A500097FF04C06150784F8F4F9F4F2BE0959543 |
:108A60008795779567952A95D1F7A40193010E9480 |
:108A70005FACDC01CB018093E0049093E104A09310 |
:108A8000E204B093E304B7FF04C08150904FAF4FAE |
:108A9000BF4F9C01AD018CE05595479537952795C3 |
:108AA0008A95D1F72093E0043093E1044093E204E7 |
:108AB0005093E3048091DC049091DD049093D20AFA |
:108AC0008093D10A8091E0049091E1049093D60ABA |
:108AD0008093D50A22193309440955092093E004EB |
:108AE0003093E1044093E2045093E304E20EF31E5A |
:108AF000041F151FE092340BF092350B0093360BD8 |
:108B00001093370B80916A018823B1F457FF04C09A |
:108B10002F5F3F4F4F4F5F4F55954795379527959F |
:108B2000A21AB30AC40AD50AA0928A04B0928B048E |
:108B3000C0928C04D0928D042A893B897901002748 |
:108B4000F7FC0095102F8091E0049091E104A09132 |
:108B5000E204B091E304E80EF91E0A1F1B1FC801CE |
:108B6000B70129813A814B815C810E945FAC9B01F6 |
:108B7000AC0197FF04C02150384F4F4F5F4FBBE00F |
:108B80005595479537952795BA95D1F780916C0102 |
:108B9000A82EBB24CC24DD24CA01B901A60195016D |
:108BA0000E945FACDC01CB018093D4049093D50488 |
:108BB000A093D604B093D704B7FF04C08150904F60 |
:108BC000AF4FBF4F3C014D01ACE095948794779433 |
:108BD0006794AA95D1F76092D4047092D5048092DC |
:108BE000D6049092D704C801B7012D813E814F81F0 |
:108BF00058850E945FAC97FF04C06150784F8F4F3B |
:108C00009F4FFBE09595879577956795FA95D1F7F6 |
:108C1000A60195010E945FACDC01CB018093D804D2 |
:108C20009093D904A093DA04B093DB04B7FF04C097 |
:108C30008150904FAF4FBF4FAC01BD01ECE0759537 |
:108C4000679557954795EA95D1F74093D804509387 |
:108C5000D9046093DA047093DB042A893B8937FFD7 |
:108C600003C0309521953F4F21343105E4F1D40103 |
:108C7000C30197FE07C0B095A095909581959F4F31 |
:108C8000AF4FBF4F81389105A105B10584F4DB01D9 |
:108C9000CA0177FF07C0B095A095909581959F4F29 |
:108CA000AF4FBF4F81389105A105B105E4F081E0D8 |
:108CB0008093760418C01092D60A1092D50A1092AA |
:108CC000D20A1092D10A1092D8041092D9041092AC |
:108CD000DA041092DB041092D4041092D50410929E |
:108CE000D6041092D7048091D8049091D904A09111 |
:108CF000DA04B091DB04BC01CD0124E630E040E0B1 |
:108D000050E00E94D3ACE090D404F090D504E21A75 |
:108D1000F30AF092E80AE092E70A8091D404909175 |
:108D2000D504A091D604B091D704BC01CD0124E6AE |
:108D300030E040E050E00E94D3ACDA01C90120915C |
:108D4000D8043091D9048C01021B130B1093DD0A57 |
:108D50000093DC0A8091440190914501A091460165 |
:108D6000B0914701BC01CD0128E631E040E050E080 |
:108D70000E945FAC2091340B3091350B4091360B43 |
:108D80005091370B261737074807590764F0261B01 |
:108D9000370B480B590B2093340B3093350B409312 |
:108DA000360B5093370B2091340B3091350B40919B |
:108DB000360B5091370B57FF0CC0260F371F481F3B |
:108DC000591F2093340B3093350B4093360B50933F |
:108DD000370B6091DA0A7091DB0A6E0D7F1D9B01E3 |
:108DE000442737FD4095542F80918E0490918F0435 |
:108DF000A0919004B0919104820F931FA41FB51FFE |
:108E000080938E0490938F04A0939004B093910468 |
:108E10008091480490914904681B790BCB01AA27E3 |
:108E200097FDA095BA2F29853A854B855C85820FE1 |
:108E3000931FA41FB51F8093920490939304A09353 |
:108E40009404B0939504C0908601D0908701E0907F |
:108E50008801F0908901C816D906EA06FB06C4F419 |
:108E600088EA91E6A0E0B0E08C199D09AE09BF093F |
:108E70008093920490939304A0939404B0939504E8 |
:108E800080938E0490938F04A0939004B0939104E8 |
:108E900022273327A9012C193D094E095F0980912A |
:108EA000920490919304A0919404B0919504821738 |
:108EB0009307A407B507B4F4D701C601885A9146B1 |
:108EC000A040B0408093920490939304A0939404A4 |
:108ED000B093950480938E0490938F04A093900494 |
:108EE000B09391046091E90A7091EA0A600F711FD2 |
:108EF0009B01442737FD4095542F80919604909113 |
:108F00009704A0919804B0919904820F931FA41F15 |
:108F1000B51F8093960490939704A0939804B09300 |
:108F200099048091460490914704681B790BCB010A |
:108F3000AA2797FDA095BA2F2D853E854F85588984 |
:108F4000820F931FA41FB51F80939A0490939B04D4 |
:108F5000A0939C04B0939D04E0908A01F0908B0153 |
:108F600000918C0110918D01E816F9060A071B0784 |
:108F7000C4F488EA91E6A0E0B0E08E199F09A00B46 |
:108F8000B10B80939A0490939B04A0939C04B0939C |
:108F90009D048093960490939704A0939804B093B3 |
:108FA000990422273327A9012E193F09400B510BA1 |
:108FB00080919A0490919B04A0919C04B0919D048F |
:108FC00082179307A407B507B4F4D801C701885ADC |
:108FD0009146A040B04080939A0490939B04A09344 |
:108FE0009C04B0939D048093960490939704A0935F |
:108FF0009804B093990480918A0490918B04A09175 |
:109000008C04B0918D0480939E0490939F04A09350 |
:10901000A004B093A10480919A0490919B04A09124 |
:109020009C04B0919D048093BA049093BB04A093D8 |
:10903000BC04B093BD048091920490919304A091DC |
:109040009404B09195048093B2049093B304A093D8 |
:10905000B404B093B5048091960490919704A091C4 |
:109060009804B09199048093B6049093B704A093A8 |
:10907000B804B093B90480918E0490918F04A091AC |
:109080009004B09191048093AE049093AF04A093A8 |
:10909000B004B093B104809124019091250197FD13 |
:1090A000079633E0959587953A95E1F79093EA0A0C |
:1090B0008093E90A809122019091230197FD079600 |
:1090C00023E0959587952A95E1F79093DB0A8093A5 |
:1090D000DA0A80915703909158030F9734F488E18E |
:1090E0009CEF9093EA0A8093E90A8091570390914C |
:1090F0005803079734F480E398EF9093EA0A80933B |
:10910000E90A8091570390915803815D974034F0AC |
:1091100088EE93E09093EA0A8093E90A80915703DE |
:1091200090915803805E974034F080ED97E09093E3 |
:10913000EA0A8093E90A80915503909156030F97AC |
:1091400034F488E19CEF9093DB0A8093DA0A8091F3 |
:10915000550390915603079734F480E398EF90936A |
:10916000DB0A8093DA0A8091550390915603815D62 |
:10917000974034F088EE93E09093DB0A8093DA0A0C |
:109180008091550390915603805E974034F080EDB6 |
:1091900097E09093DB0A8093DA0A60917901662365 |
:1091A00009F4AEC040912401509125018091E4045E |
:1091B0009091E504481B590B5093EB044093EA044B |
:1091C0002091240130912501280F391F37FF02C05B |
:1091D0002F5F3F4F359527953093E5042093E404A6 |
:1091E000413851051CF080E890E005C040585F4FC1 |
:1091F00034F480E89FEF9093EB048093EA0440916D |
:109200002201509123018091E6049091E704481BCC |
:10921000590B5093E9044093E804209122013091C6 |
:109220002301280F391F37FF02C02F5F3F4F3595AD |
:1092300027953093E7042093E604413851051CF04C |
:1092400080E890E005C040585F4F34F480E89FEF1D |
:109250009093E9048093E804462F55278091EA040F |
:109260009091EB04849FB001859F700D949F700DC9 |
:1092700011249B0177FF02C0215F3F4FB4E0359579 |
:109280002795BA95E1F78091E90A9091EA0A820F51 |
:10929000931F9093EA0A8093E90A8091E8049091E1 |
:1092A000E904849F9001859F300D949F300D112417 |
:1092B000A90137FF02C0215F3F4FA4E035952795F4 |
:1092C000AA95E1F78091DA0A9091DB0A820F931F49 |
:1092D0009093DB0A8093DA0A809124019091250112 |
:1092E000860F971F9093250180932401809122017E |
:1092F00090912301840F951F909323018093220165 |
:109300000091EC0A1091ED0A8091D10A9091D20A55 |
:10931000101611065CF59C0197FF04C02227332725 |
:10932000281B390BC901AA2797FDA095BA2F2091B8 |
:109330006A01332744275527BC01CD010E945FAC49 |
:109340009B01AC0197FF04C0215C3F4F4F4F5F4F23 |
:10935000F6E05595479537952795FA95D1F7809181 |
:10936000E70A9091E80A820F931F27C097FF03C076 |
:10937000909581959F4FAA2797FDA095BA2F209190 |
:109380006A01332744275527BC01CD010E945FACF9 |
:109390009B01AC0197FF04C0215C3F4F4F4F5F4FD3 |
:1093A000E6E05595479537952795EA95D1F7809151 |
:1093B000E70A9091E80A821B930B9093E80A809346 |
:1093C000E70AE090F50AF090F60A8091D50A9091AC |
:1093D000D60A1E141F045CF59C0197FF04C02227C7 |
:1093E0003327281B390BC901AA2797FDA095BA2F4F |
:1093F00020916A01332744275527BC01CD010E94E3 |
:109400005FAC9B01AC0197FF04C0215C3F4F4F4F05 |
:109410005F4F76E055954795379527957A95D1F723 |
:109420008091DC0A9091DD0A820F931F27C097FF7D |
:1094300003C0909581959F4FAA2797FDA095BA2FBD |
:1094400020916A01332744275527BC01CD010E9492 |
:109450005FAC9B01AC0197FF04C0215C3F4F4F4FB5 |
:109460005F4F66E055954795379527956A95D1F7F3 |
:109470008091DC0A9091DD0A821B930B9093DD0AA8 |
:109480008093DC0A8091220B87FF44C03989332303 |
:1094900009F040C0809142048823E1F541E0E416E0 |
:1094A00041E0F4064CF08091E90A9091EA0A8E0DB1 |
:1094B0009F1D805091400DC050E0E5165FEFF5060E |
:1094C00064F48091E90A9091EA0A8E0D9F1D805004 |
:1094D0009F4F9093EA0A8093E90A81E001301807D0 |
:1094E0004CF08091DA0A9091DB0A800F911F805036 |
:1094F00091400CC09FEF0030190764F48091DA0AA4 |
:109500009091DB0A800F911F80509F4F9093DB0A50 |
:109510008093DA0AE2E1CD5E0C940AAD80915F049B |
:10952000882329F5809127048C7F809327048091DC |
:1095300026048F7D80932604AFEEB5E0E0E9F9E0E4 |
:109540009BE080910603882309F48C938D9181839D |
:10955000128291503F9697FFF4CF809106038823A3 |
:1095600059F08091060381508093060305C08091D5 |
:10957000270481608093270480918103882319F058 |
:109580001092810308958093850380917F038E7FDD |
:1095900080937F0385EA8093BC000895882319F4A3 |
:1095A00080E090E00895E82FFF27EE0FFF1FEB5BB0 |
:1095B000F54F8081918181589F4F8F3F910521F018 |
:1095C0001CF08FEF90E004C097FF02C080E090E0B5 |
:1095D00099270895CF93DF93A1E6B4E0CAE7D8E0D6 |
:1095E00057E08991E82FFF27EE0FFF1FEB5BF54F48 |
:1095F0000190F081E02DE158FF4FEF3FF10521F0A0 |
:109600001CF0EFEFF0E004C0F7FF02C0E0E0F0E094 |
:10961000893111F4EC931BC04C91242F3327E217AE |
:10962000F307A9F0CF01821B930B97FD0396959545 |
:10963000879595958795242F280F2C93822F99270E |
:10964000E817F90714F4215001C02F5F2C935150F3 |
:10965000119657FFC6CF80918408883F38F0EFEF0E |
:10966000F0E0E81BF109EF59FB4F808180937E0108 |
:1096700080917E01882329F0843618F084E6809357 |
:109680007E0180918608883F38F0EFEFF0E0E81B1C |
:10969000F109EF59FB4F808180937D0180917D011D |
:1096A000882329F0843618F084E680937D01809128 |
:1096B0009308883F38F0EFEFF0E0E81BF109EF592D |
:1096C000FB4F808180937801809178018B3010F47A |
:1096D0008AE002C08F3F11F4809378018091C00826 |
:1096E000883F38F0EFEFF0E0E81BF109EF59FB4F4E |
:1096F00080818093010B8091010B863010F485E00E |
:1097000002C08F3F11F48093010B8091C208883F03 |
:1097100038F0EFEFF0E0E81BF109EF59FB4F8081E3 |
:109720008093290B8091290B863010F485E002C0CC |
:109730008F3F11F48093290B8091AD08873F19F476 |
:10974000429905C007C0863F41F4439B03C0809106 |
:10975000E20816C08091E30813C0883F38F0EFEFAD |
:10976000F0E0E81BF109EF59FB4F80818093FE0A7E |
:109770008091FE0A893110F488E102C08F3F11F414 |
:109780008093FE0A8091AE08873F19F4429905C084 |
:1097900007C0863F41F4439B03C08091E40816C094 |
:1097A0008091E50813C0883F38F0EFEFF0E0E81B48 |
:1097B000F109EF59FB4F80818093D70A8091D70A36 |
:1097C000893110F488E102C08F3F11F48093D70AE9 |
:1097D0008091AF08883F38F0EFEFF0E0E81BF10927 |
:1097E000EF59FB4F80818093070B8091070B8931E4 |
:1097F00010F488E102C08F3F11F48093070B809131 |
:1098000085080E94CE4A80933D0480918808883F55 |
:1098100038F0EFEFF0E0E81BF109EF59FB4F8081E2 |
:1098200080937C0180918A08883F38F0EFEFF0E068 |
:10983000E81BF109EF59FB4F808180937A018091F9 |
:109840009208883F38F0EFEFF0E0E81BF109EF599C |
:10985000FB4F808180937B0180919408883F38F092 |
:10986000EFEFF0E0E81BF109EF59FB4F80818093A7 |
:10987000770180919508883F38F0EFEFF0E0E81B22 |
:10988000F109EF59FB4F808180937901809196080F |
:10989000883F38F0EFEFF0E0E81BF109EF59FB4F9C |
:1098A00080818093760180919708883F38F0EFEFB0 |
:1098B000F0E0E81BF109EF59FB4F808180937501BF |
:1098C00080919D08883F38F0EFEFF0E0E81BF10948 |
:1098D000EF59FB4F80818093730180919E08883FF0 |
:1098E00038F0EFEFF0E0E81BF109EF59FB4F808112 |
:1098F00080933C0480919F08883F38F0EFEFF0E0C0 |
:10990000E81BF109EF59FB4F808180933B04809164 |
:10991000A008883F38F0EFEFF0E0E81BF109EF59BD |
:10992000FB4F808180933A048091A108883F38F0F2 |
:10993000EFEFF0E0E81BF109EF59FB4F80818093D6 |
:1099400039048091BB08883F38F0EFEFF0E0E81B66 |
:10995000F109EF59FB4F8081809338048091BC0856 |
:10996000883F38F0EFEFF0E0E81BF109EF59FB4FCB |
:109970008081809337048091BD08883F38F0EFEFF5 |
:10998000F0E0E81BF109EF59FB4F8081809336042A |
:109990008091BE08883F38F0EFEFF0E0E81BF10956 |
:1099A000EF59FB4F8081809335048091A208883F56 |
:1099B00038F0EFEFF0E0E81BF109EF59FB4F808141 |
:1099C000809371018091A608883F38F0EFEFF0E0B6 |
:1099D000E81BF109EF59FB4F808180937001809162 |
:1099E000A308883F38F0EFEFF0E0E81BF109EF59EA |
:1099F000FB4F808180936F018091A708883F38F0EA |
:109A0000EFEFF0E0E81BF109EF59FB4F8081809305 |
:109A10006E018091B008883F38F0EFEFF0E0E81B6E |
:109A2000F109EF59FB4F808180936D018091B3085C |
:109A3000883F38F0EFEFF0E0E81BF109EF59FB4FFA |
:109A4000808180936C018091B408883F38F0EFEFFB |
:109A5000F0E0E81BF109EF59FB4F808180936B0127 |
:109A60008091B508883F38F0EFEFF0E0E81BF1098E |
:109A7000EF59FB4F808180936A018091DE08883F17 |
:109A800038F0EFEFF0E0E81BF109EF59FB4F808170 |
:109A90008093E60A809182088093220B8091EF08E0 |
:109AA0008093060B8091BA08883F38F0EFEFF0E022 |
:109AB000E81BF109EF59FB4F808180936901809188 |
:109AC000D708883F38F0EFEFF0E0E81BF109EF59D5 |
:109AD000FB4F808180933B0B80917301282F3327AC |
:109AE0002F5F3F4F8CE398E2B9010E949EAC7093C8 |
:109AF000800160937F018091900880932A0B809170 |
:109B00008F088093EE0AE091D908EE2309F449C04A |
:109B100081E080933404FF27EE0FFF1FEB5BF54FCE |
:109B200080819181805C9F4F14F410923404809165 |
:109B3000810120913404821721F18330F8F43091AF |
:109B4000B201222351F08CED95E09093290380938C |
:109B50002803332369F48EE209C088EC90E09093E7 |
:109B6000290380932803332319F487E18093B201FA |
:109B700085E080934A042093810103C08150809343 |
:109B8000810180917B0B90917C0B97FF0FC080919E |
:109B90003404882359F08091EA0580688093EA05AF |
:109BA00005C0E09334048AE08093810180917B0BAF |
:109BB00090917C0B97FF1DC080915F048823C9F0B2 |
:109BC000809134048823A9F080910B0190910C01BD |
:109BD0008F5F9F4F71F488E99AE3909329038093F4 |
:109BE000280380E094EA90930C0180930B0110927B |
:109BF000340480913404882321F08091260481600C |
:109C000003C0809126048E7F80932604DF91CF913C |
:109C1000089580918B08882301F560914404709128 |
:109C2000450477FF02C06D5F7F4F75956795759509 |
:109C30006795409126015091270180910201282FBC |
:109C40003327649FC001659F900D749F900D112470 |
:109C5000B9010E948AACCB0101C09927909385017C |
:109C600080938401809184019091850187349105CE |
:109C700038F486E490E09093850180938401089500 |
:109C80008F3A910530F08FEA90E0909385018093B0 |
:109C900084010895A8E1B0E0E0E5FEE40C94EEACA8 |
:109CA0000E94ED4280912704992784719070892B3E |
:109CB00091F58091F00882FF27C080914404909133 |
:109CC00045040097F1F002E088359007D4F49C0138 |
:109CD00097FF02C02D5F3F4F359527953595279506 |
:109CE00080919A089927289FA001299F500D389F9D |
:109CF000500D1124CA0164E670E00E949EACCB01B5 |
:109D000006C08DE290E003C080919A089927909355 |
:109D1000250480932404209122043091230455E7E4 |
:109D20002033350759F410926B0410926A04809125 |
:109D3000EE0A9927909325048093240460916A0485 |
:109D400070916B047A8369838091EE0A99270A9651 |
:109D50006817790714F49A838983809160048436A4 |
:109D600008F062C08091260482FD5EC080910005EB |
:109D700090910105009731F0019790930105809330 |
:109D800000050BC010925F0490932904809328046F |
:109D9000809127048D7E80932704289A809128043F |
:109DA00090912904895E9340E0F18091BF0B853644 |
:109DB000C0F180912404909125049A838983809135 |
:109DC000270480618093270480917608A82FBB2701 |
:109DD000AA0FBB1FFD01E557F54F1182108280913C |
:109DE0007708282F3327220F331FC9018557954F36 |
:109DF000FC0111821082AB5BB54F11961C921E9232 |
:109E00002B5B354FD90111961C921E9280917908D7 |
:109E1000E82FFF27EE0FFF1FEB5BF54F118210823B |
:109E2000C2C510925F04BFC5809160048D3808F4EC |
:109E300090C59091E608992309F445C08091E70800 |
:109E4000882309F440C0E92FFF27EE0FFF1FEB5BCB |
:109E5000F54F80819181C397BCF080919601823348 |
:109E600061F48091260485FF08C0809126048064F7 |
:109E70008093260480E38093B201809126048F773B |
:109E80008093260486E917C0808191818E5C9F4F64 |
:109E9000ACF480919601863941F480912604806863 |
:109EA000809326048FE28093B201809126048F7BF9 |
:109EB0008093260482E38093960105C08091260456 |
:109EC0008F7380932604809127048F7E80932704CC |
:109ED00090919B0882E3989FC00111249093010503 |
:109EE00080930005E981FA81B9978CF080915F0435 |
:109EF000882369F08091280490912904FFEF8F3F17 |
:109F00009F0729F00196909329048093280440919B |
:109F10002804509129044F3F510509F048F510924B |
:109F2000820410928304109284041092850410928B |
:109F30007E0410927F04109280041092810410928B |
:109F4000EC041092ED041092EE041092EF041092C3 |
:109F50008A0410928B0410928C0410928D048091CC |
:109F6000260480628093260484E68093960135C19E |
:109F7000809127048260809327048091260485FFC6 |
:109F800098C080913C0599279C012470307082FD17 |
:109F900004C08091260486FF2AC0809143018D333E |
:109FA00031F580911F04882311F180E580934F04DF |
:109FB00084EF91E0A0E0B0E08093500490935104CE |
:109FC000A0935204B0935304809356049093570483 |
:109FD000A0935804B093590488EE93E090939501B0 |
:109FE00080939401232B19F08DE08093B20180912E |
:109FF0003C0390913D03A0913E03B0913F0387390C |
:10A000009105A105B1058CF480915A0490915B04EF |
:10A01000A0915C04B0915D04825A9E4FAF4FBF4F38 |
:10A0200024F08091220B80FD21C088EE93E0909374 |
:10A030009501809394018091260486FF0FC01092B1 |
:10A040004F048CE291E0A0E0B0E08093560490933E |
:10A050005704A0935804B093590403C080E380933D |
:10A06000B201809126048F7180932604109282049D |
:10A0700010928304109284041092850410927E043E |
:10A0800010927F04109280041092810410928A042E |
:10A0900010928B0410928C0410928D04495E5340F0 |
:10A0A00008F49BC088EE93E09093290480932804E1 |
:10A0B00094C08091260487FF1AC08091430186379F |
:10A0C00011F08D33A1F480911F04882381F08091D9 |
:10A0D000E70880934F0480EE91EBAFEFBFEF8093E2 |
:10A0E000500490935104A0935204B09353042091D0 |
:10A0F00094013091950143E0283E340708F048C0B0 |
:10A100002F5F3F4F3093950120939401109282046A |
:10A1100010928304109284041092850410927E049D |
:10A1200010927F04109280041092810410928A048D |
:10A1300010928B0410928C0410928D0480913C0339 |
:10A1400090913D03A0913E03B0913F038C5291400A |
:10A15000A040B0408093560490935704A0935804B5 |
:10A16000B0935904285E3340C1F58091260487FFDF |
:10A1700034C0809143018B3281F1809126048F7726 |
:10A18000809326048091260480628093260425C053 |
:10A1900080911F04882309F180914301863711F0D3 |
:10A1A0008D32D9F480915A0490915B04A0915C04A3 |
:10A1B000B0915D04885E9340A040B04074F48091FB |
:10A1C0001508909116088D5A93403CF01092950115 |
:10A1D000109294018EE08093B20180917808E82F6C |
:10A1E000FF27EE0FFF1FEB5BF54F808191818135DB |
:10A1F00091050CF454C120915F04222309F04FC152 |
:10A2000080917908E82FFF27EE0FFF1FEB5BF54FDA |
:10A21000808191818C3491050CF411C180910205EB |
:10A220008F5F80930205893C08F439C120930205B1 |
:10A23000109229041092280430917608E32FFF270A |
:10A24000EE0FFF1FEB5BF54F808191818734910505 |
:10A25000B4F480917708E82FFF27EE0FFF1FEB5B28 |
:10A26000F54F808191810190F081E02DF7FF03C0CF |
:10A27000F095E195FF4FE734F1050CF478C041E02B |
:10A2800020917708A22FBB27AA0FBB1FAB5BB54F4E |
:10A290008D919C9111978734910544F0E32FFF270E |
:10A2A000EE0FFF1FEB5BF54F808191818D919C91AB |
:10A2B0008734910574F080917608E82FFF27EE0F20 |
:10A2C000FF1FEB5BF54F80819181873491050CF086 |
:10A2D00042E0E22FFF27EE0FFF1FEB5BF54F80817F |
:10A2E00091818634910574F480917608E82FFF27D8 |
:10A2F000EE0FFF1FEB5BF54F808191818734910555 |
:10A300000CF043E0E22FFF27EE0FFF1FEB5BF54F52 |
:10A31000808191818A5B9F4F74F480917608E82F49 |
:10A32000FF27EE0FFF1FEB5BF54F80819181873494 |
:10A3300091050CF044E0E22FFF27EE0FFF1FEB5BCF |
:10A34000F54F808191818A5B9F4F74F480917608EC |
:10A35000E82FFF27EE0FFF1FEB5BF54F8081918108 |
:10A36000863491050CF445E0842F0E94F2338091ED |
:10A370007708E82FFF27EE0FFF1FEB5BF54F80817B |
:10A3800091810190F081E02DF7FF03C0F095E195F8 |
:10A39000FF4F7E97CCF480917608E82FFF27EE0FD1 |
:10A3A000FF1FEB5BF54F808191818A5B9F4F64F4C7 |
:10A3B00081E08093050610924B0488EE93E0909321 |
:10A3C0002903809328036BC0809101010E949D3373 |
:10A3D00080E00E94BB0C80919C080E947CA7809129 |
:10A3E000220B80FF10C080911C0190911D01875BA2 |
:10A3F000934038F480911C0190911D018E5E924033 |
:10A4000010F40E940B2281E00E948F3F982F8093CE |
:10A410004B0421E020932603579A8091EA05882374 |
:10A4200011F087E006C0992319F42093B20103C00C |
:10A4300088E18093B20185E080936D0527C080811B |
:10A440009181855B9F4F4CF5809102058F5F8093D2 |
:10A450000205893C20F120935F04209302051092AD |
:10A4600029041092280482E00E948F3F982F809345 |
:10A470004B048091EA05882311F087E005C09923F9 |
:10A4800011F481E001C088E18093B20168E770E0D7 |
:10A49000809101010E94DA3E02C020930205809162 |
:10A4A0007808E82FFF27EE0FFF1FEB5BF54F808149 |
:10A4B00091818C599F4F0CF045C22091DA08E22F10 |
:10A4C000FF27EF77F070EE0FFF1FE557F54F808104 |
:10A4D0009181069714F084E606C0808191818B5F9C |
:10A4E0009F4F1CF48CE98093050580915F04E091F7 |
:10A4F0007908882309F071C1FF27EE0FFF1FEB5B7E |
:10A50000F54F808191818C599F4F9CF48091F00888 |
:10A5100083FD0BC0E22FFF27EE0FFF1FEB5BF54F14 |
:10A5200080819181855B9F4FDCF08091DA088823E0 |
:10A53000B9F08091F00883FF4DC18091DA08E82FCF |
:10A54000FF27EE0FFF1FEB5BF54F80819181875F47 |
:10A550009F4F0CF43FC180910505843609F03AC144 |
:10A5600080914B04882329F0809127048860809390 |
:10A57000270480911E0190911F01A0912001B091AC |
:10A5800021018093170890931808A0931908B0939D |
:10A590001A0810925A0410925B0410925C041092F4 |
:10A5A0005D04109238031092390310923A0310920E |
:10A5B0003B0388E592E09093230480932204109259 |
:10A5C0003403109235031092360310923703109221 |
:10A5D000490310924A0310924B0310924C0380914E |
:10A5E0007608E82FFF27EE0FFF1FEB5BF54F80810A |
:10A5F00091818D599F4FACF480917708E82FFF2708 |
:10A60000EE0FFF1FEB5BF54F808191810190F08190 |
:10A61000E02DF7FF03C0F095E195FF4FE436F1051B |
:10A6200034F48091DA08882311F480930305809133 |
:10A6300003058F5F809303058E3F08F466C1809108 |
:10A640002D0B90912E0B97FF03C0909581959F4FF6 |
:10A650008197B4F48091E90A9091EA0A97FF03C0C8 |
:10A66000909581959F4F45975CF48091DA0A90917F |
:10A67000DB0A97FF03C0909581959F4F459714F093 |
:10A6800010924B04109203058091EA05882309F08B |
:10A6900094C080914B04882309F48FC080914005B9 |
:10A6A000882309F08AC081E090E090932904809388 |
:10A6B000280481E080935F041092EC041092ED0472 |
:10A6C0001092EE041092EF0410928A0410928B0400 |
:10A6D00010928C0410928D041092860410928704BC |
:10A6E000109288041092890480919108E82EFF242A |
:10A6F000002711278091260B9091270B9C0144275E |
:10A7000037FD4095542FC801B7010E945FACDC01B2 |
:10A71000CB0180939A0490939B04A0939C04B093E4 |
:10A720009D048091380B9091390B9C01442737FD93 |
:10A730004095542FC801B7010E945FACDC01CB01EA |
:10A740008093920490939304A0939404B0939504FF |
:10A750008091BA049091BB04A091BC04B091BD0457 |
:10A760008093960490939704A0939804B0939904CF |
:10A770008091B2049091B304A091B404B091B50457 |
:10A7800080938E0490938F04A0939004B0939104CF |
:10A790001092820410928304109284041092850413 |
:10A7A00010927E0410927F04109280041092810413 |
:10A7B00084E680934A0484E39AC08CED95E09093FC |
:10A7C00029038093280380914B04882309F09DC0BE |
:10A7D00081E08DC01092030598C0FF27EE0FFF1F88 |
:10A7E000EB5BF54F80819181853691059CF08091DE |
:10A7F000F00883FD0BC0E22FFF27EE0FFF1FEB5B7E |
:10A80000F54F80819181855B9F4FDCF08091DA0864 |
:10A810008823B9F08091F00883FF75C08091DA0831 |
:10A82000E82FFF27EE0FFF1FEB5BF54F8081918133 |
:10A830008E5C9F4F0CF067C0809105058C3909F044 |
:10A8400062C080917608E82FFF27EE0FFF1FEB5BB9 |
:10A85000F54F808191818D599F4FACF4809177089D |
:10A86000E82FFF27EE0FFF1FEB5BF54F80819181F3 |
:10A870000190F081E02DF7FF03C0F095E195FF4FC7 |
:10A88000E436F1053CF48091DA08882319F48093CA |
:10A89000040518C01092820410928304109284045C |
:10A8A0001092850410927E0410927F04109280040E |
:10A8B00010928104109271041092700410926F042F |
:10A8C00010926E04809104058F5F809304058B3F86 |
:10A8D00088F010925F0410920405109229041092DF |
:10A8E0002804809126048F718093260486E2809349 |
:10A8F000B2010BC0843649F48CEA9DE090932903A1 |
:10A900008093280302C01092040520912204309104 |
:10A910002304F3E0283E3F0708F045C0809146033A |
:10A92000909147038B569F4F1CF02F5F3F4F05C000 |
:10A9300021153105C1F1215030403093230420937B |
:10A94000220431C0109205051092230410922204B3 |
:10A950002AC02E5E324038F18091430B9091440B17 |
:10A960008059914000F580915A0490915B04A09128 |
:10A970005C04B0915D048C5D9540A040B0409CF4B7 |
:10A9800080E395E790932304809322048091280428 |
:10A99000909129048A5E934030F089EE93E0909381 |
:10A9A00029048093280480914201815080934201C0 |
:10A9B000809142018F3F21F08091270484FFDFC303 |
:10A9C0000E94EA4AB0908C0880910E0590910F0584 |
:10A9D0009C01220F331F280F391FC0907608AC2D21 |
:10A9E000BB27AA0FBB1FFD01EB5BF54F4B2D552776 |
:10A9F00080819181849FB001859F700D949F700D1F |
:10AA00001124260F371F37FF02C02D5F3F4FB901BA |
:10AA10007595679575956795A557B54F80918D0884 |
:10AA2000082F11278D919C91809FD001819FB00D9F |
:10AA3000909FB00D11246A0F7B1F70930F056093D8 |
:10AA40000E0580911005909111059C01220F331F76 |
:10AA5000280F391FD0907708AD2DBB27AA0FBB1F39 |
:10AA6000FD01EB5BF54F80819181849FF001859F13 |
:10AA7000F00D949FF00D11242E0F3F1F37FF02C0E1 |
:10AA80002D5F3F4FA9015595479555954795A5577A |
:10AA9000B54F8D919C91809F7001819FF00C909F8C |
:10AAA000F00C11244E0D5F1D5093110540931005BD |
:10AAB00080913404882309F448C0CB0177FD0396C4 |
:10AAC000DC01B595A795B595A795CA0157FD0396E5 |
:10AAD000FC01F595E795F595E7958091A701682F1D |
:10AAE000772767FD70956A9F90016B9F300D7A9F65 |
:10AAF000300D112480914205482F552747FD509570 |
:10AB00004E9FC0014F9F900D5E9F900D1124280F06 |
:10AB1000391F37FF02C0295F3F4F03E03595279566 |
:10AB20000A95E1F730937104209370046E9F9001B1 |
:10AB30006F9F300D7E9F300D11244A9FC0014B9FA7 |
:10AB4000900D5A9F900D11243FC08091D808E82F96 |
:10AB5000FF27E65BFE4F86818093A701908190934B |
:10AB60004205A82FBB27A7FDB095A69F9001A79FE0 |
:10AB7000300DB69F300D1124E92FFF27E7FDF0952A |
:10AB8000E49FC001E59F900DF49F900D1124280FC4 |
:10AB9000391F37FF02C0295F3F4F13E035952795D6 |
:10ABA0001A95E1F73093710420937004A49F9001EB |
:10ABB000A59F300DB49F300D1124E69FC001E79F83 |
:10ABC000900DF69F900D1124281B390B37FF02C002 |
:10ABD000295F3F4F43E0359527954A95E1F730933C |
:10ABE0006F0420936E0480917908E82FFF27EE0F01 |
:10ABF000FF1FEB5BF54F80819181909581959F4F71 |
:10AC000090936D0480936C048530910514F0049743 |
:10AC100005C00FEF8C3F900734F4049690936D04B9 |
:10AC200080936C0404C010926D0410926C048091A7 |
:10AC30002204909123048150924078F18091700415 |
:10AC40009091710497FD079623E0959587952A9535 |
:10AC5000E1F7909371048093700480916E04909159 |
:10AC60006F0497FD079603E0959587950A95E1F7A0 |
:10AC700090936F0480936E04109282041092830468 |
:10AC8000109284041092850410927E0410927F0426 |
:10AC9000109280041092810443C080912F05882374 |
:10ACA00009F43EC0282F33278091700490917104DD |
:10ACB00097FD079613E0959587951A95E1F7289FDC |
:10ACC000A001299F500D389F500D1124CA0157FD36 |
:10ACD0000F96B4E095958795BA95E1F79093710436 |
:10ACE0008093700480916E0490916F0497FD079695 |
:10ACF000A3E095958795AA95E1F7289FB001299F34 |
:10AD0000700D389F700D1124CB0177FD0F96F4E084 |
:10AD100095958795FA95E1F790936F0480936E046B |
:10AD20008090700490907104809132059091330569 |
:10AD3000881A990A909271048092700400916E04AE |
:10AD400010916F048091300590913105081B190B0B |
:10AD500010936F0400936E0480917808E82FFF270A |
:10AD6000EE0FFF1FEB5BF54FE080F1808FE790E087 |
:10AD7000E80EF91EF0926B04E0926A04809178016B |
:10AD80009927AA2797FDA095BA2FBC01CD010E9453 |
:10AD9000D3ABDC01CB0120E030E040E251E4BC0168 |
:10ADA000CD010E9441ABDC01CB01BC01CD010E9471 |
:10ADB000A5ABDC01CB018093320B809177018093AE |
:10ADC000080B809176019927AA2797FDA095BA2FA5 |
:10ADD000BC01CD010E94D3ABDC01CB0120E030E00F |
:10ADE00040E251E4BC01CD010E9441ABDC01CB014A |
:10ADF000BC01CD010E94A5ABDC01CB018093E10A2F |
:10AE0000809175018093F70A8091110680FF59C0E7 |
:10AE100080913B0B813808F454C080910A06992731 |
:10AE200087FD90952B2D3327829FD001839FB00DF6 |
:10AE3000929FB00D11248A0E9B1E909271048092F5 |
:10AE4000700480910B06992787FD9095829FF001F1 |
:10AE5000839FF00D929FF00D11240E0F1F1F109372 |
:10AE60006F0400936E0480910C06282F332727FD72 |
:10AE7000309580916C0490916D04820F931F909394 |
:10AE80006D0480936C0480910E06282F332727FDD4 |
:10AE90003095809187089927289F8001299F100D60 |
:10AEA000389F100D1124109349010093480180919F |
:10AEB0000D0699278E159F0524F490936B048093BB |
:10AEC0006A0480916A0490916B0497FF04C0109209 |
:10AED0006B0410926A048091220B82FF02C01092D0 |
:10AEE000080B4091700450917104CA0157FD0396FC |
:10AEF0009C01359527953595279537FF03C03095EB |
:10AF000021953F4F80912C0490912D048217930737 |
:10AF1000B4F4CA0157FF03C0909581959F4F97FDE8 |
:10AF20000396959587959595879590932D04809395 |
:10AF30002C048536910544F084E690E001C0019729 |
:10AF400090932D0480932C0440916E0450916F04D3 |
:10AF5000CA0157FD03969C01359527953595279590 |
:10AF600037FF03C0309521953F4F80912A0490917F |
:10AF70002B0482179307B4F4CA0157FF03C09095BE |
:10AF800081959F4F97FD0396959587959595879504 |
:10AF900090932B0480932A048536910544F084E62F |
:10AFA00090E001C0019790932B0480932A04809134 |
:10AFB000270484FF08C010922D0410922C041092D4 |
:10AFC0002B0410922A04ED2DFF27EE0FFF1FEB5BE1 |
:10AFD000F54F4091B108242F3327808191812817A4 |
:10AFE000390744F48091ED0882FF04C081E080932A |
:10AFF000410413C0ED2DFF27EE0FFF1FEB5BF54F54 |
:10B00000842F99272091B208821B910920813181D8 |
:10B010002817390714F41092410440917708E42F5F |
:10B02000FF27EE0FFF1FEB5BF54F5091B108852F07 |
:10B03000992722273327281B390B8081918182177A |
:10B04000930744F48091ED0883FF04C081E080936E |
:10B05000400416C080914004882391F0E42FFF271C |
:10B06000EE0FFF1FEB5BF54F8091B2089927851B10 |
:10B070009109208131818217930714F410924004C2 |
:10B08000EC2DFF27EE0FFF1FEB5BF54F4091B10852 |
:10B09000242F3327808191812817390744F4809128 |
:10B0A000ED0880FF04C081E080933E0417C08091CA |
:10B0B0003E04882399F0EC2DFF27EE0FFF1FEB5B7A |
:10B0C000F54F842F99272091B208821B9109208186 |
:10B0D00031812817390714F410923E044091760804 |
:10B0E000E42FFF27EE0FFF1FEB5BF54F5091B108E8 |
:10B0F000852F992722273327281B390B808191819F |
:10B100008217930744F48091ED0881FF04C081E029 |
:10B1100080933F0416C080913F04882391F0E42F70 |
:10B12000FF27EE0FFF1FEB5BF54F8091B2089927C9 |
:10B13000851B9109208131818217930714F41092A5 |
:10B140003F0480914104882319F4809140048111C7 |
:10B1500081E08093420480913E04882321F4809111 |
:10B160003F04882351F081E080934304109242040D |
:10B17000109241041092400402C0809343048091D5 |
:10B180004204882321F480914304882369F080914C |
:10B19000B008992729813A818217930714F49A837A |
:10B1A000898381E0809376048091260499279C010D |
:10B1B0002470307082FF31C0809132059091330548 |
:10B1C000909581959F4F9093710480937004809126 |
:10B1D000300590913105909581959F4F90936F0424 |
:10B1E00080936E04809184019091850190936B040B |
:10B1F00080936A0410926D0410926C048091220B6B |
:10B200008B778B668093220B8091060B8C7B8093CF |
:10B21000060B88EC80933D041EC08091270484FFB8 |
:10B220001AC030936D0420936C0430937104209302 |
:10B23000700430936F0420936E049AE59093320B60 |
:10B2400088E78093080B9093E10A8093F70A1092A5 |
:10B250004204109243048091FA0A9091FB0AA09153 |
:10B26000FC0AB091FD0A2091BA043091BB044091D0 |
:10B27000BC045091BD04820F931FA41FB51F80937F |
:10B28000FA0A9093FB0AA093FC0AB093FD0A8091FE |
:10B29000020B9091030BA091040BB091050BE09071 |
:10B2A000B204F090B3040091B4041091B504EB82A1 |
:10B2B000FC820D831E838E0D9F1DA01FB11F8093E6 |
:10B2C000020B9093030BA093040BB093050B80919A |
:10B2D000EF0A9091F00AA091F10AB091F20AE09081 |
:10B2E000B604F090B7040091B8041091B904EF824D |
:10B2F000F88609871A878E0D9F1DA01FB11F8093A6 |
:10B30000EF0A9093F00AA093F10AB093F20A8091A9 |
:10B31000E20A9091E30AA091E40AB091E50AE09074 |
:10B32000AE04F090AF040091B0041091B104EB862C |
:10B33000FC860D871E878E0D9F1DA01FB11F809359 |
:10B34000E20A9093E30AA093E40AB093E50AF0902E |
:10B350004304FF86FF2029F480914204882309F4E6 |
:10B3600060C01092AA041092AB041092AC04109228 |
:10B37000AD041092A6041092A7041092A804109293 |
:10B38000A9041092FA0A1092FB0A1092FC0A109279 |
:10B39000FD0A1092020B1092030B1092040B1092F4 |
:10B3A000050B1092EF0A1092F00A1092F10A109217 |
:10B3B000F20A1092E20A1092E30A1092E40A109242 |
:10B3C000E50A80919A0490919B04A0919C04B0910D |
:10B3D0009D048093960490939704A0939804B0934F |
:10B3E00099048091920490919304A0919404B09157 |
:10B3F000950480938E0490938F04A0939004B0934F |
:10B400009104109245031092440310924704109245 |
:10B41000460410924904109248040F85002309F055 |
:10B42000D0C180914204882309F0CBC180911508D6 |
:10B4300090911608815092402CF480915F048823EB |
:10B4400009F4BFC19090B40BA09091082090260BF6 |
:10B450003090270B4090380B5090390B19140CF09A |
:10B46000BBC0BB24CC24DD24CA01B901A6019501CF |
:10B470000E94D3AC79018A0180917D0B90917E0B63 |
:10B48000281A390AC101AA2797FDA095BA2FE81AF0 |
:10B49000F90A0A0B1B0B6B817C818D819E81A601B1 |
:10B4A00095010E94D3AC59016A0180917F0B909164 |
:10B4B000800B481A590AC201AA2797FDA095BA2FF6 |
:10B4C000A81AB90ACA0ADB0A292C332427FC3094AB |
:10B4D000432C532CC801B701A20191010E945FAC1B |
:10B4E00097FF04C061507E4F8F4F9F4F3B014C012F |
:10B4F00009E095948794779467940A95D1F7C601EB |
:10B50000B501A20191010E945FAC97FF04C0615098 |
:10B510007E4F8F4F9F4F5B016C0119E0D594C7940C |
:10B52000B794A7941A95D1F780912C0490912D048B |
:10B53000813491053CF480912A0490912B0481344C |
:10B540009105D4F0D401C30197FE03C00196A11D5B |
:10B55000B11D3C014D019594879477946794D60171 |
:10B56000C501D7FE03C00196A11DB11D5C016D018F |
:10B57000D594C794B794A7948091B60B282F3327FE |
:10B5800027FD3095432F532F2615370548055905BC |
:10B5900014F439014A01992787FD9095909581957A |
:10B5A0009F4FAA2797FDA095BA2F681679068A069D |
:10B5B0009B0614F43C014D012A153B054C055D0525 |
:10B5C00014F459016A01A816B906CA06DB060CF084 |
:10B5D000D0C05C016D01CDC0EA2CFF2400271127EB |
:10B5E000CA01B901A80197010E94D3AC39014A01EF |
:10B5F000C101AA2797FDA095BA2F681A790A8A0A6D |
:10B600009B0A6B817C818D819E81A80197010E949C |
:10B61000D3AC59016A01C201AA2797FDA095BA2FA0 |
:10B62000A81AB90ACA0ADB0AD401C30197FE03C0EB |
:10B630000F96A11DB11D3C014D01F4E09594879436 |
:10B6400077946794FA95D1F7D601C501D7FE03C068 |
:10B650000F96A11DB11D5C016D01E4E0D594C79466 |
:10B66000B794A794EA95D1F780912C0490912D047A |
:10B67000813491053CF480912A0490912B0481340B |
:10B680009105A4F0C401B30123E030E040E050E0B4 |
:10B690000E94D3AC39014A01C601B50123E030E074 |
:10B6A00040E050E00E94D3AC59016A0180917908D2 |
:10B6B000E82FFF27EE0FFF1FEB5BF54F8081918195 |
:10B6C0000190F081E02DF7FF03C0F095E195FF4F69 |
:10B6D0007A97A4F0C401B30123E030E040E050E0E9 |
:10B6E0000E94D3AC39014A01C601B50123E030E024 |
:10B6F00040E050E00E94D3AC59016A0189E1809397 |
:10B70000900121E262167104810491042CF070E230 |
:10B71000672E712C812C912C30EE63163FEF73064F |
:10B720003FEF83063FEF930644F460EE662E6FEF23 |
:10B73000762E6FEF862E6FEF962E41E2A416B1049F |
:10B74000C104D1042CF050E2A52EB12CC12CD12C77 |
:10B7500050EEA5165FEFB5065FEFC5065FEFD506A5 |
:10B7600044F440EEA42E4FEFB42E4FEFC42E4FEF13 |
:10B77000D42E80919A0490919B04A0919C04B09146 |
:10B780009D0486199709A809B90980939A04909392 |
:10B790009B04A0939C04B0939D048091920490918B |
:10B7A0009304A0919404B09195048A199B09AC0963 |
:10B7B000BD098093920490939304A0939404B09352 |
:10B7C000950480914403909145038F3F910509F0C2 |
:10B7D00008F4C4C56F85662309F04EC58091420404 |
:10B7E000882309F049C580917604882309F044C56F |
:10B7F0007091B908788B772309F43EC58091FA0AD5 |
:10B800009091FB0AA091FC0AB091FD0AB7FF04C019 |
:10B8100081509F4FAF4FBF4FE92EFA2E0B2F1127AC |
:10B8200007FD1A95E092FA0AF092FB0A0093FC0ACF |
:10B830001093FD0A8091020B9091030BA091040BD1 |
:10B84000B091050BB7FF04C081509F4FAF4FBF4F62 |
:10B85000892F9A2FAB2FBB27A7FDBA95898B9A8B7F |
:10B86000AB8BBC8B8093020B9093030BA093040BC8 |
:10B87000B093050B80919108A82EBB24CC24DD2425 |
:10B880002091AA043091AB044091AC045091AD04D6 |
:10B89000C601B5010E945FAC97FF04C061507F4FA5 |
:10B8A0008F4F9F4F672E782E892E992487FC9A946C |
:10B8B0006092AA047092AB048092AC049092AD04A2 |
:10B8C0002091A6043091A7044091A8045091A904A6 |
:10B8D000C601B5010E945FAC97FF04C061507F4F65 |
:10B8E0008F4F9F4F272E382E492E552447FC5A94B0 |
:10B8F0002092A6043092A7044092A8045092A90472 |
:10B900008091A2049091A304A091A404B091A504F5 |
:10B91000B7FF04C081509F4FAF4FBF4F892F9A2F61 |
:10B92000AB2FBB27A7FDBA958093A2049093A304E5 |
:10B93000A093A404B093A504D801C7018619970960 |
:10B94000A809B9098093F8049093F904A093FA0424 |
:10B95000B093FB042091B808E22EFF2400271127A2 |
:10B96000BC01CD01A80197010E94D3AC59016A0125 |
:10B970002093060530930705409308055093090569 |
:10B9800089899A89AB89BC8982199309A409B50967 |
:10B990008093FC049093FD04A093FE04B093FF04F5 |
:10B9A000BC01CD01A80197010E94D3AC20930A05E8 |
:10B9B00030930B0540930C0550930D05D601C5013E |
:10B9C000D7FE04C081509F4FAF4FBF4F892F9A2F92 |
:10B9D000AB2FBB27A7FDBA959093470480934604ED |
:10B9E00057FF04C021503F4F4F4F5F4FBB2757FDBC |
:10B9F000BA95A52F942F832F9093490480934804E0 |
:10BA000080912C0490912D0481349105DCF4809177 |
:10BA10002A0490912B0481349105A4F48091790833 |
:10BA2000E82FFF27EE0FFF1FEB5BF54F8081918121 |
:10BA30000190F081E02DF7FF03C0F095E195FF4FF5 |
:10BA40007A97E4F08091B40B8F3FC1F48091460463 |
:10BA50009091470497FD019695958795909347049B |
:10BA600080934604809148049091490497FD019683 |
:10BA70009595879590934904809348048091EF0AA7 |
:10BA80009091F00AA091F10AB091F20AB7FF04C0B8 |
:10BA900081509F4FAF4FBF4F892F9A2FAB2FBB279E |
:10BAA000A7FDBA958093EF0A9093F00AA093F10A4C |
:10BAB000B093F20A8091E20A9091E30AA091E40A1D |
:10BAC000B091E50AB7FF04C081509F4FAF4FBF4F01 |
:10BAD000892F9A2FAB2FBB27A7FDBA958093E20A37 |
:10BAE0009093E30AA093E40AB093E50A8091BA0424 |
:10BAF0009091BB04A091BC04B091BD042F81388506 |
:10BB000049855A85281B390B4A0B5B0B2093F0049F |
:10BB10003093F1044093F2045093F3048091B20403 |
:10BB20009091B304A091B404B091B504EB84FC846B |
:10BB30000D851E85E81AF90A0A0B1B0BE092F40426 |
:10BB4000F092F5040093F6041093F7042093F804A0 |
:10BB50003093F9044093FA045093FB04E092FC0400 |
:10BB6000F092FD040093FE041093FF04809196046C |
:10BB700090919704A0919804B0919904821B930B23 |
:10BB8000A40BB50B8093960490939704A09398040C |
:10BB9000B093990480918E0490918F04A0919004A9 |
:10BBA000B09191048E199F09A00BB10B80938E0464 |
:10BBB00090938F04A0939004B09391048889882374 |
:10BBC000E1F02091740430917504213831054CF076 |
:10BBD0008091CC049091CD0401969093CD048093F4 |
:10BBE000CC0420583F4F4CF48091CC049091CD046C |
:10BBF00001979093CD048093CC0410927504109219 |
:10BC0000740481E090E09093130580931205E09016 |
:10BC1000F804F090F9040091FA041091FB04D801A3 |
:10BC2000C70117FF07C088279927DC018E199F09D4 |
:10BC3000A00BB10B81509240A040B04034F084E0A2 |
:10BC400090E09093130580931205809118059091D0 |
:10BC50001905A0911A05B0911B052091FA0A30919F |
:10BC6000FB0A4091FC0A5091FD0A821B930BA40B26 |
:10BC7000B50B815E914BAF4FBF4F8F539C49A04096 |
:10BC8000B04028F08091B50B89310CF4FFC021E061 |
:10BC9000E21620E1F20620E0020720E012070CF491 |
:10BCA00073C080911405882309F46AC0D801C701C4 |
:10BCB00017FF07C088279927DC018E199F09A00B61 |
:10BCC000B10B9C01AD01B7FF04C021503E4F4F4F57 |
:10BCD0005F4FF9E05595479537952795FA95D1F738 |
:10BCE0008091120590911305820F931F9093130575 |
:10BCF00080931205D801C70117FF03C00796A11D45 |
:10BD0000B11DE3E0B595A79597958795EA95D1F78D |
:10BD10008093060590930705A0930805B093090545 |
:10BD200089589341A040B04064F088E893E1A0E0D6 |
:10BD3000B0E08093060590930705A0930805B093A3 |
:10BD4000090520910605309107054091080550919D |
:10BD5000090557FF04C021503F4F4F4F5F4F232F1E |
:10BD6000342F452F552747FD5A95809146049091D1 |
:10BD70004704820F931F909347048093460406C0A4 |
:10BD800081E08093140502C01092140540E0E4168F |
:10BD900040EFF4064FEF04074FEF14070CF073C0A9 |
:10BDA00080911505882309F46AC0D801C70117FFDF |
:10BDB00007C088279927DC018E199F09A00BB10BBA |
:10BDC0009C01AD01B7FF04C021503E4F4F4F5F4F64 |
:10BDD00069E055954795379527956A95D1F78091F4 |
:10BDE000120590911305820F931F90931305809372 |
:10BDF0001205D801C70117FF03C00796A11DB11D89 |
:10BE000023E0B595A795979587952A95D1F78093C7 |
:10BE1000060590930705A0930805B0930905885778 |
:10BE20009C4EAF4FBF4F64F488E79CEEAFEFBFEF7F |
:10BE30008093060590930705A0930805B093090524 |
:10BE4000209106053091070540910805509109059C |
:10BE500057FF04C021503F4F4F4F5F4F232F342FC8 |
:10BE6000452F552747FD5A958091460490914704E8 |
:10BE7000820F931F909347048093460411C081E082 |
:10BE8000809315050DC0109215050AC01092130578 |
:10BE90001092120584E690E090938F0180938E01BA |
:10BEA0006889262F33278091120590911305281752 |
:10BEB000390724F430931305209312051091B50B24 |
:10BEC000112379F0212F332727FD3095809112051A |
:10BED000909113052817390724F430931305209304 |
:10BEE00012054091F8045091F9046091FA047091A0 |
:10BEF000FB04413851056105710574F08091D0044F |
:10BF00009091D1042091120530911305820F931F57 |
:10BF10009093D1048093D00440585F4F6F4F7F4F70 |
:10BF200074F48091D0049091D10420911205309145 |
:10BF30001305821B930B9093D1048093D00481E06E |
:10BF400090E09093130580931205C090FC04D0906C |
:10BF5000FD04E090FE04F090FF04D701C601F7FE57 |
:10BF600007C088279927DC018C199D09AE09BF09F4 |
:10BF700081509240A040B04034F084E090E0909333 |
:10BF800013058093120580911C0590911D05A091C9 |
:10BF90001E05B0911F052091020B3091030B4091BB |
:10BFA000040B5091050B821B930BA40BB50B815E08 |
:10BFB000914BAF4FBF4F8F539C49A040B04018F0FA |
:10BFC00019310CF4FFC001E0C01600E1D00600E01A |
:10BFD000E00600E0F0060CF473C08091160588239B |
:10BFE00009F46AC0D701C601F7FE07C08827992760 |
:10BFF000DC018C199D09AE09BF099C01AD01B7FF99 |
:10C0000004C021503E4F4F4F5F4F09E05595479573 |
:10C01000379527950A95D1F78091120590911305D0 |
:10C02000820F931F9093130580931205D701C601C9 |
:10C03000F7FE03C00796A11DB11D13E0B595A795A6 |
:10C04000979587951A95D1F780930A0590930B05DC |
:10C05000A0930C05B0930D0589589341A040B040C2 |
:10C0600064F088E893E1A0E0B0E080930A05909343 |
:10C070000B05A0930C05B0930D0520910A05309196 |
:10C080000B0540910C0550910D0557FF04C0215040 |
:10C090003F4F4F4F5F4F232F342F452F552747FDDD |
:10C0A0005A958091480490914904820F931F909370 |
:10C0B00049048093480406C081E08093160502C0BD |
:10C0C0001092160520E0C21620EFD2062FEFE206EE |
:10C0D0002FEFF2060CF073C080911705882309F446 |
:10C0E0006AC0D701C601F7FE07C088279927DC017F |
:10C0F0008C199D09AE09BF099C01AD01B7FF04C0B1 |
:10C1000021503E4F4F4F5F4FE9E05595479537958A |
:10C110002795EA95D1F78091120590911305820F2A |
:10C12000931F9093130580931205D701C601F7FE64 |
:10C1300003C00796A11DB11D73E0B595A79597950E |
:10C1400087957A95D1F780930A0590930B05A09374 |
:10C150000C05B0930D0588579C4EAF4FBF4F64F44C |
:10C1600088E79CEEAFEFBFEF80930A0590930B0535 |
:10C17000A0930C05B0930D0520910A0530910B0595 |
:10C1800040910C0550910D0557FF04C021503F4FC1 |
:10C190004F4F5F4F232F342F452F552747FD5A957B |
:10C1A0008091480490914904820F931F9093490411 |
:10C1B0008093480411C081E0809317050DC0109250 |
:10C1C00017050AC0109213051092120584E690E03C |
:10C1D00090938F0180938E014889242F332780917B |
:10C1E0001205909113052817390724F4309313058D |
:10C1F000209312058091B50B882379F0282F3327DF |
:10C2000027FD309580911205909113052817390765 |
:10C2100024F430931305209312054091FC045091AF |
:10C22000FD046091FE047091FF04413851056105E1 |
:10C23000710574F08091CE049091CF042091120585 |
:10C2400030911305820F931F9093CF048093CE04F7 |
:10C2500040585F4F6F4F7F4FCCF48091CE04909148 |
:10C26000CF042091120530911305821B930B9093FC |
:10C27000CF048093CE040AC010924904109248045F |
:10C280001092470410924604109276048091080B95 |
:10C29000882341F4109249041092480410924704F4 |
:10C2A000109246048091FA0A9091FB0AA091FC0A30 |
:10C2B000B091FD0A8093180590931905A0931A0573 |
:10C2C000B0931B058091020B9091030BA091040B7E |
:10C2D000B091050B80931C0590931D05A0931E053E |
:10C2E000B0931F051092AA041092AB041092AC04F4 |
:10C2F0001092AD041092A6041092A7041092A80404 |
:10C300001092A9041092A2041092A3041092A40403 |
:10C310001092A5041092FA0A1092FB0A1092FC0ADD |
:10C320001092FD0A1092020B1092030B1092040B54 |
:10C330001092050B1092EF0A1092F00A1092F10A77 |
:10C340001092F20A1092E20A1092E30A1092E40AA2 |
:10C350001092E50A1092450310924403E0906C0499 |
:10C36000F0906D04C701F7FE04C0882799278E1945 |
:10C370009F0904973CF08091220B84FD03C082E367 |
:10C3800080934A0410918E08A12EBB24CC24DD2476 |
:10C39000B701882777FD8095982F9701F7FE04C095 |
:10C3A000222733272E193F09442737FD4095542F64 |
:10C3B0000E945FAC9B01AC01C601B5010E945FAC5D |
:10C3C00097FF04C061507E4F8F4F9F4F59E0959566 |
:10C3D0008795779567955A95D1F79B01812F992776 |
:10C3E0008E9DD0018F9DB00D9E9DB00D1124CD016D |
:10C3F000B7FD03969595879595958795280F391FD5 |
:10C4000080912204909123048150924010F020E00A |
:10C4100030E080914C0490914D04280F391F44273F |
:10C4200037FD4095542F2093EC043093ED04409356 |
:10C43000EE045093EF0480918A0490918B04A091B4 |
:10C440008C04B0918D04821B930BA40BB50B8093CD |
:10C450008A0490938B04A0938C04B0938D0481552F |
:10C46000934CA040B04064F080E593ECA0E0B0E0D5 |
:10C4700080938A0490938B04A0938C04B0938D04D2 |
:10C4800080918A0490918B04A0918C04B0918D04CA |
:10C49000805B9C43AF4FBF4F64F480EB9CE3AFEFF6 |
:10C4A000BFEF80938A0490938B04A0938C04B09385 |
:10C4B0008D04809092019090930197FCFBC0809135 |
:10C4C000220B83FFF7C080919101815080939101ED |
:10C4D000882309F0F3C08DE0809391018091BA0424 |
:10C4E0009091BB04A091BC04B091BD04B7FF04C0FF |
:10C4F00081509E4FAF4FBF4F39E0B595A7959795A7 |
:10C5000087953A95D1F78C0197FF03C01095019557 |
:10C510001F4F8091B2049091B304A091B404B091E4 |
:10C52000B504B7FF04C081509E4FAF4FBF4F29E005 |
:10C53000B595A795979587952A95D1F79C0197FF73 |
:10C5400003C0309521953F4F021713070CF4890162 |
:10C55000B80117FF02C0695F7F4F3B01B3E07594DC |
:10C560006794BA95E1F7A2E0EA2EF12C6E0C7F1CDD |
:10C57000A090340BB090350BC090360BD090370B99 |
:10C58000209144013091450140914601509147016D |
:10C59000C601B5010E94D3AC19012A013093E00A0B |
:10C5A0002093DF0A821A930AC401845E9D4F68E6D5 |
:10C5B00071E00E949EACAC01445B504020914A0463 |
:10C5C000222321F0309279042092780480918E0108 |
:10C5D00090918F01009731F0019790938F01809394 |
:10C5E0008E0112C0093111057CF480917404909180 |
:10C5F0007504840F951F909375048093740422230F |
:10C6000019F0215020934A0480918E0190918F015E |
:10C61000892BF9F4809190019927489F8001499FC7 |
:10C62000100D589F100D1124C801B3010E949EAC3B |
:10C63000CB01AA2797FDA095BA2FA80EB91ECA1E36 |
:10C64000DB1EA092340BB092350BC092360BD09209 |
:10C65000370B80914A04882369F580917804909182 |
:10C6600079042091DF0A3091E00A821B930B845EEB |
:10C670009D4F68E671E00E949EAC9C01245B3040B7 |
:10C6800080917B0186959927289FA001299F500DB5 |
:10C69000389F500D11249A0157FF02C0215F3F4F70 |
:10C6A000F4E035952795FA95E1F730934D04209302 |
:10C6B0004C0404C010924D0410924C0480917604F6 |
:10C6C000882381F010927E0410927F0410928004DF |
:10C6D00010928104109282041092830410928404B8 |
:10C6E00010928504809143048823F1F48091080B13 |
:10C6F000282F3327442755278091BA049091BB04F3 |
:10C70000A091BC04B091BD04BC01CD010E945FACFE |
:10C71000DC01CB01BC01CD0128EF3AE240E050E062 |
:10C720000E94D3AC290102C04424552480914204C4 |
:10C730008823F1F48091080B282F332744275527AD |
:10C740008091B2049091B304A091B404B091B50467 |
:10C75000BC01CD010E945FACDC01CB01BC01CD016D |
:10C7600028EF3AE240E050E00E94D3AC190102C049 |
:10C77000222433248091DC0A9091DD0A893C9105C2 |
:10C780001CF088EC90E005C088539F4F34F488E398 |
:10C790009FEF9093DD0A8093DC0A8091E70A9091E5 |
:10C7A000E80A893C91051CF088EC90E005C08853AC |
:10C7B0009F4F34F488E39FEF9093E80A8093E70A51 |
:10C7C0008091E90A9091EA0AAA2797FDA095BA2FCD |
:10C7D0002091320BA22EBB24CC24DD24BC01CD0140 |
:10C7E000A60195010E945FAC9B01AC018091DC0A1F |
:10C7F0009091DD0AAA2797FDA095BA2FE7E0880F50 |
:10C80000991FAA1FBB1FEA95D1F7280F391F4A1F8E |
:10C810005B1F57FF04C0215C3F4F4F4F5F4F76E0D7 |
:10C8200055954795379527957A95D1F78201020F4F |
:10C83000131F1093EA0A0093E90A8091DA0A909193 |
:10C84000DB0AAA2797FDA095BA2FBC01CD01A6014E |
:10C8500095010E945FAC9B01AC018091E70A909129 |
:10C86000E80AAA2797FDA095BA2F67E0880F991FBD |
:10C87000AA1FBB1F6A95D1F7280F391F4A1F5B1FDC |
:10C8800057FF04C0215C3F4F4F4F5F4FA6E05595C7 |
:10C89000479537952795AA95D1F77101E20EF31EBA |
:10C8A000F092DB0AE092DA0A80912D0B90912E0B28 |
:10C8B000880F991FAA2797FDA095BA2F2091E10A0A |
:10C8C000332744275527BC01CD010E945FAC5B0193 |
:10C8D0006C0197FF08C08FE390E0A0E0B0E0A80EE5 |
:10C8E000B91ECA1EDB1EF6E0D594C794B794A79470 |
:10C8F000FA95D1F78091F70A282F33274427552737 |
:10C9000080919E0490919F04A091A004B091A104F5 |
:10C91000BC01CD010E945FACDC01CB01BC01CD01AB |
:10C9200020EF35E540E050E00E94D3ACB501620F46 |
:10C93000731F70932E0B60932D0B0150104134F038 |
:10C9400080E090E19093EA0A8093E90A8091E90AF5 |
:10C950009091EA0A8050904F34F480E090EF9093E9 |
:10C96000EA0A8093E90AB1E0EB16B0E1FB0634F085 |
:10C9700080E090E19093DB0A8093DA0A8091DA0AF2 |
:10C980009091DB0A8050904F34F480E090EF9093C8 |
:10C99000DB0A8093DA0A6150704134F080E090E164 |
:10C9A00090932E0B80932D0B80912D0B90912E0B3D |
:10C9B0008050904F34F480E090EF90932E0B809352 |
:10C9C0002D0B8091270485FD16C0809102019927C7 |
:10C9D000209126013091270169817A81689FA00109 |
:10C9E000699F500D789F500D1124CA01B9010E9412 |
:10C9F0008AAC7A83698380912005815080932005D9 |
:10CA00008F3F09F05EC08091210590912205892B0E |
:10CA100041F4809126019091270190932205809303 |
:10CA200021058091260190912701209121053091C7 |
:10CA300022052817390718F42F5F3F4F09C080914E |
:10CA40002601909127018217930730F4215030403E |
:10CA5000309322052093210584E680932005809160 |
:10CA6000FA02282F332740912105509122054217C1 |
:10CA7000530710F48AE00CC080910001280F311D8B |
:10CA80002417350738F480911E04882319F081504B |
:10CA900080931E048091F902282F332742175307F1 |
:10CAA00010F489E10CC080910001280F311D24177A |
:10CAB000350738F480911D04882319F08150809344 |
:10CAC0001D0480911E048823D1F080915004909120 |
:10CAD0005104A0915204B0915304B7FD10C080914D |
:10CAE000E70880934F0480EE91EBAFEFBFEF8093A8 |
:10CAF000500490935104A0935204B0935304809136 |
:10CB00002703882311F40E94D97389819A81880FA1 |
:10CB1000991F880F991F9A8389838091220B80FD2A |
:10CB200002C00C94B26F80914204882311F00C94DF |
:10CB3000B26F20914304222311F00C94B26F8091C4 |
:10CB4000EA0599278F779070009711F00C94B26FD7 |
:10CB50003C018091D2049091D304892B09F044C008 |
:10CB600080911C0190911D018959934058F087B51F |
:10CB70008A3F20F480914803815011C081E0809366 |
:10CB80002E055EC080911C0190911D018436910597 |
:10CB900030F587B58630F8F0809148038F5F809339 |
:10CBA000480395E089029001112480912108821B9D |
:10CBB00087BD87B5809588BD8CE291E0909329036D |
:10CBC000809328038EE591E09093D3048093D20460 |
:10CBD0000E94D32135C081E080932D0531C0209380 |
:10CBE0002D0520932E052CC07092470360924603BA |
:10CBF00080911F04882321F081E00E94B4A517C012 |
:10CC000080915A0490915B04A0915C04B0915D0402 |
:10CC100074E0880F991FAA1FBB1F7A95D1F78093E4 |
:10CC2000490390934A03A0934B03B0934C03809124 |
:10CC3000D2049091D30401979093D3048093D204AB |
:10CC40008091220B20913D0481FF3CC0223348F5A6 |
:10CC5000809197018150809397018F3F09F052C0D6 |
:10CC60008091B201882339F480917704882319F0E8 |
:10CC700088E28093B2011092770480915A049091D7 |
:10CC80005B04A0915C04B0915D0480935604909382 |
:10CC90005704A0935804B093590481E080939701FE |
:10CCA00031C0273478F18091B201882339F4809122 |
:10CCB0007704882319F487E28093B20188EC80938B |
:10CCC00097011DC08091480190914901820F911DEB |
:10CCD000209187083327829FF001839FF00D929F58 |
:10CCE000F00D1124CF01AA2797FDA095BA2F8093AC |
:10CCF000560490935704A0935804B093590481E0CC |
:10CD0000809377048091BA049091BB04A091BC04F5 |
:10CD1000B091BD04E0904401F090450100914601BE |
:10CD200010914701BC01CD01A80197010E94D3AC2D |
:10CD300059016A018091B2049091B304A091B404A6 |
:10CD4000B091B504BC01CD01A80197010E94D3ACFC |
:10CD5000B901C5010E947FAA9093F40A8093F30A57 |
:10CD6000CC9734F08CE390E09093F40A8093F30A2C |
:10CD70008091F30A9091F40A0E94857C9093F40AC2 |
:10CD80008093F30A80E2809343011092550410923D |
:10CD9000540480917704882309F48BC78091270479 |
:10CDA00099279C012071307084FD83C780912604EF |
:10CDB0008260809326047091060B872F992761E08B |
:10CDC000862E912C8822992280FD04C08091220B0E |
:10CDD00081FD10C009811A81309324052093230519 |
:10CDE000309355042093540480912704806C8093E1 |
:10CDF0002704F4C28091270481FFC0C200918401FE |
:10CE000010918501C8010F96E0906A04F0906B04C0 |
:10CE1000F88EEF8A8E159F0508F096C080912D053B |
:10CE2000882309F091C08091270487FF15C0809165 |
:10CE300027048F778093270480913C0390913D03D2 |
:10CE4000A0913E03B0913F03809356049093570402 |
:10CE5000A0935804B0935904E090E60AEE20D9F16B |
:10CE60008091560490915704A0915804B0915904B0 |
:10CE7000BC01CD0124E630E040E050E00E94D3AC9C |
:10CE8000AE2CBB24CC24DD24A216B306C406D506E2 |
:10CE900014F590925504809254048091B201882335 |
:10CEA000C1F480915A0490915B04A0915C04B0910C |
:10CEB0005D04BC01CD012FE530E040E050E00E9470 |
:10CEC000D3ACA216B306C406D5061CF48AE180933F |
:10CED000B2018DE37CC08091250590912605459790 |
:10CEE00084F080913C0390913D03A0913E03B0916A |
:10CEF0003F038093560490935704A0935804B09333 |
:10CF00005904809127048064809327042F89388DE9 |
:10CF1000201B310B2F50304037FF03C03095219537 |
:10CF20003F4F309355042093540480911E0488236E |
:10CF300049F0C90163E070E00E949EAC7093550413 |
:10CF4000609354048BE243C0C8010F972F89388D3A |
:10CF50002817390708F040C080912E058823E1F595 |
:10CF60008091270486FD07C08091250590912605B4 |
:10CF7000845D9E4FACF4809127048F7B80932704BF |
:10CF800080913C0390913D03A0913E03B0913F03FB |
:10CF90008093560490935704A0935804B093590477 |
:10CFA000809127048068809327048F89988D801B47 |
:10CFB000910B0F9697FF03C0909581959F4F909589 |
:10CFC00081959F4F90935504809354048DE28093F4 |
:10CFD000430110924E04D9C08DE3809343016091C8 |
:10CFE0004F04662371F12091500430915104409117 |
:10CFF0005204509153048091560490915704A0918B |
:10D000005804B091590482179307A407B507CCF4CC |
:10D0100080912704806480932704862F992790931A |
:10D020005504809354048AE080934E048EE58093E7 |
:10D0300043018091270487FFA8C0809127048F7740 |
:10D0400033C0662309F443C0209150043091510449 |
:10D05000409152045091530480915604909157048A |
:10D06000A0915804B0915904281739074A075B0763 |
:10D0700074F580912704806880932704862F992770 |
:10D08000909581959F4F909355048093540486EF1B |
:10D0900080934E0486E7809343018091270486FFA6 |
:10D0A00074C0809127048F7B8093270480913C0378 |
:10D0B00090913D03A0913E03B0913F0380935604AD |
:10D0C00090935704A0935804B09359045EC0809184 |
:10D0D0002704807C09F459C080914E04882379F597 |
:10D0E000E0903C03F0903D0300913E0310913F031C |
:10D0F000D801C701885C9040A040B0402091560400 |
:10D100003091570440915804509159048217930765 |
:10D11000A407B5075CF4D801C70188539F4FAF4FF0 |
:10D12000BF4F281739074A075B075CF08093560406 |
:10D1300090935704A0935804B093590402C01092DE |
:10D140004E04809127048F73809327041092240546 |
:10D150001092230571FF06C084EF91E0909329039C |
:10D160008093280380915E04882379F480915A0487 |
:10D1700090915B04A0915C04B0915D04C397A105FC |
:10D18000B1051CF081E080935E04609123057091ED |
:10D1900024058091540490915504680F791F709371 |
:10D1A000240560932305CB0177FF04C088279927C6 |
:10D1B000861B970B855F91400CF4C9C040914E04CB |
:10D1C000442389F180915004909151042091560498 |
:10D1D00030915704821B930B0996439748F4809132 |
:10D1E000500490915104A0915204B091530412C084 |
:10D1F000242F332727FD3095432F532F809156043A |
:10D2000090915704A0915804B0915904820F931F34 |
:10D21000A41FB51F8093560490935704A0935804FD |
:10D22000B093590424C02091560430915704409182 |
:10D23000580450915904809187081616170644F433 |
:10D2400063E00E947EAC280F311D411D511D07C0B7 |
:10D2500063E00E947EAC281B3109410951092093EB |
:10D260005604309357044093580450935904109235 |
:10D27000240510922305E0905A04F0905B0400917D |
:10D280005C0410915D04D801C70180509440A04017 |
:10D29000B04020913C0330913D0340913E035091BA |
:10D2A0003F0382179307A407B5075CF4D801C701B1 |
:10D2B00080509C4FAF4FBF4F281739074A075B0775 |
:10D2C00044F080933C0390933D03A0933E03B093BE |
:10D2D0003F03E0903C03F0903D0300913E0310912A |
:10D2E0003F03D801C70180509440A040B040209136 |
:10D2F00056043091570440915804509159048217B4 |
:10D300009307A407B5075CF4D801C70180509C4F70 |
:10D31000AF4FBF4F281739074A075B0744F0809388 |
:10D32000560490935704A0935804B09359048091E5 |
:10D33000060B81FF06C084E690E09093290380935A |
:10D34000280380914F04882311F40E94094E809194 |
:10D35000D2049091D304892BE9F180913C03909100 |
:10D360003D03A0913E03B0913F03809356049093F8 |
:10D370005704A0935804B09359042CC081E00E9434 |
:10D38000B4A580913C0390913D03A0913E03B091E0 |
:10D390003F03805D9740A040B04080935604909337 |
:10D3A0005704A0935804B093590480918B088823A4 |
:10D3B00011F0992702C08FE790E090938501809348 |
:10D3C000840169817A8170934504609344048EE2FC |
:10D3D000809343010091440410914504C0903C03A4 |
:10D3E000D0903D03E0903E03F0903F03209156041F |
:10D3F0003091570440915804509159042C153D0523 |
:10D400004E055F0524F08091060B80FD64C4809179 |
:10D410001F046091D2047091D304882309F078C26C |
:10D42000672B49F0009144041091450410922605A1 |
:10D4300010922505DBC0D701C601821B930BA40BFC |
:10D44000B50B8093F0049093F104A093F204B09391 |
:10D45000F304823070E897077FEFA7077FEFB707E5 |
:10D460002CF481E090E8AFEFBFEF09C08F5F9F47DA |
:10D47000A040B04064F08FEF9FE7A0E0B0E0809361 |
:10D48000F0049093F104A093F204B093F30480911C |
:10D49000F0049091F10490932605809325058091E6 |
:10D4A0007D01282F3327442755278091F004909140 |
:10D4B000F104A091F204B091F304BC01CD010E94EB |
:10D4C0005FAC97FF04C0615E7F4F8F4F9F4F55E069 |
:10D4D00095958795779567955A95D1F76093F00460 |
:10D4E0007093F1048093F2049093F3046530FEEF9F |
:10D4F0007F07FFEF8F07FFEF9F072CF484E09EEF7D |
:10D50000AFEFBFEF09C0605074408040904064F0BE |
:10D5100080E094E0A0E0B0E08093F0049093F10408 |
:10D52000A093F204B093F3046090F0047090F104BF |
:10D53000209146033091470337FF02C0295F3F4FD8 |
:10D5400043E0359527954A95E1F74FEF22383407A8 |
:10D550001CF421E83FEF05C02038310514F020E825 |
:10D5600030E0C901AA2797FDA095BA2F20917E012E |
:10D57000332744275527BC01CD010E945FAC97FF9C |
:10D5800004C06D5F7F4F8F4F9F4F22E09595879529 |
:10D59000779567952A95D1F79B015FEF6130750705 |
:10D5A0001CF420E03FEF06C06F3F710519F014F046 |
:10D5B00020E031E080912704807C49F0C90137FDEB |
:10D5C00003969C0135952795359527950DC080913B |
:10D5D000060B80FF09C0C90137FD07969C01A3E037 |
:10D5E00035952795AA95E1F7620E731E20917C016F |
:10D5F000222309F454C060917A0470917B048091D5 |
:10D600007C0490917D0497FF04C061587F4F8F4F39 |
:10D610009F4FF7E09595879577956795FA95D1F7A0 |
:10D620003327442755270E945FAC97FF04C0615EF3 |
:10D630007F4F8F4F9F4FE5E095958795779567953D |
:10D64000EA95D1F76093F0047093F1048093F204AB |
:10D650009093F3046138AFEF7A07AFEF8A07AFEF2B |
:10D660009A072CF480E89FEFAFEFBFEF0AC06F3F3F |
:10D6700071058105910569F064F080E091E0A0E01A |
:10D68000B0E08093F0049093F104A093F204B0937F |
:10D69000F3048091F0049091F104680E791E80915A |
:10D6A0007A01282F33278091B80B992787FD909511 |
:10D6B000289FF001299FF00D389FF00D11249F0144 |
:10D6C000F7FF02C021583F4F220F232F221F330B99 |
:10D6D000FFEF21383F071CF420E83FEF06C02F3F43 |
:10D6E000310519F014F020E031E0260D371DC90195 |
:10D6F000AA2797FDA095BA2FE0904404F090450426 |
:10D700009701442737FD4095542FBC01CD010E945D |
:10D710005FAC97FF04C061507E4F8F4F9F4F59E021 |
:10D7200095958795779567955A95D1F7061B170BB1 |
:10D730008091540490915504892B09F064C01E1403 |
:10D740001F040CF060C02091250530912605C90109 |
:10D7500037FF03C0309521953F4F2D33310540F4FD |
:10D7600080917204909173048017910774F526C01C |
:10D770002C53304045E0369527954A95E1F7203106 |
:10D78000310510F02FE030E04091720450917304A5 |
:10D7900018161906E4F480E190E0821B930B489F71 |
:10D7A0009001499F300D589F300D112494E036951B |
:10D7B00027959A95E1F72017310720F5809182018E |
:10D7C0009091830108171907F4F08C011CC0205FA9 |
:10D7D0003F4F8091820190918301829FB001839F8E |
:10D7E000700D929F700D11249B0184E03695279552 |
:10D7F0008A95E1F74017510714F08A0104C0021717 |
:10D80000130708F08901C801AA2797FDA095BA2F30 |
:10D810001DE0880F991FAA1FBB1F1A95D1F72091F1 |
:10D82000F30A3091F40A442737FD4095542FBC0188 |
:10D83000CD010E94D3AC2093F4043093F5044093BF |
:10D84000F6045093F7040091F4041091F5048091CC |
:10D850002705909128059C01220F331F280F391F9F |
:10D86000200F311F37FF02C02D5F3F4FA901559593 |
:10D8700047955595479550932805409327058091E6 |
:10D880008308282F3327220F331F220F331F24171B |
:10D8900035076CF480912A0B282F3327220F331F72 |
:10D8A000220F331F205530404217530724F0309386 |
:10D8B0002805209327058091060B80FF14C08091D6 |
:10D8C000270590912805A981BA818A179B0724F022 |
:10D8D000B0932805A0932705E0912705F09128052E |
:10D8E000FA83E983F8C129813A812E193F0937FF6C |
:10D8F00002C02D5F3F4F3595279535952795E090D0 |
:10D900002705F0902805E20EF31EFA82E982E3C1B2 |
:10D91000672B49F0009144041091450410922605AC |
:10D920001092250533C1D701C601821B930BA40BAE |
:10D93000B50B8093F0049093F104A093F204B0939C |
:10D94000F304823020E892072FEFA2072FEFB207EF |
:10D950002CF481E090E8AFEFBFEF09C08F5F9F47E5 |
:10D96000A040B04064F08FEF9FE7A0E0B0E080936C |
:10D97000F0049093F104A093F204B093F304809127 |
:10D98000F0049091F10490932605809325058091F1 |
:10D990007D01282F3327442755278091F00490914B |
:10D9A000F104A091F204B091F304BC01CD010E94F6 |
:10D9B0005FAC97FF04C0615E7F4F8F4F9F4F25E0A4 |
:10D9C00095958795779567952A95D1F76093F0049B |
:10D9D0007093F1048093F2049093F304653048EF60 |
:10D9E00074074FEF84074FEF94072CF484E098EF0F |
:10D9F000AFEFBFEF09C0605078408040904064F0C6 |
:10DA000080E098E0A0E0B0E08093F0049093F1040F |
:10DA1000A093F204B093F3046090F0047090F104CA |
:10DA200080917C01282F332780914D0390914E03E4 |
:10DA3000829FB001839F700D929F700D11249B01F6 |
:10DA400077FF02C021503F4F232F330F330B8091BC |
:10DA5000460390914703820F931FAA2797FDA09535 |
:10DA6000BA2F8093F0049093F104A093F204B09342 |
:10DA7000F30480914E04209154043091550488237E |
:10DA800031F0B3E0220F331FBA95E1F71CC080914B |
:10DA900087089927289FD001299FB00D389FB00D86 |
:10DAA0001124CD019D01A3E0220F331FAA95E1F7B8 |
:10DAB000280F391F37FF02C0215E3F4FF5E0359533 |
:10DAC0002795FA95E1F73093210420932004809163 |
:10DAD0002004909121049C01442737FD4095542F48 |
:10DAE0008091F0049091F104A091F204B091F304BC |
:10DAF000821B930BA40BB50B8093F0049093F1045D |
:10DB0000A093F204B093F30420917E0133274427BD |
:10DB10005527BC01CD010E945FAC97FF04C0615E38 |
:10DB20007F4F8F4F9F4FE5E0959587957795679548 |
:10DB3000EA95D1F76093F0047093F1048093F204B6 |
:10DB40009093F3046530B8EF7B07BFEF8B07BFEF0F |
:10DB50009B072CF484E098EFAFEFBFEF09C0605053 |
:10DB600078408040904064F080E098E0A0E0B0E031 |
:10DB70008093F0049093F104A093F204B093F30423 |
:10DB80008091F0049091F104680E791E061917092E |
:10DB90008091720490917304801791073CF48091F6 |
:10DBA000820190918301081719070CF08C01C801BC |
:10DBB000AA2797FDA095BA2F6DE0880F991FAA1F7D |
:10DBC000BB1F6A95D1F72091F30A3091F40A4427DC |
:10DBD00037FD4095542FBC01CD010E94D3AC20935A |
:10DBE000F4043093F5044093F6045093F704009145 |
:10DBF000F4041091F50480912705909128059C016B |
:10DC0000220F331F280F391F200F311F37FF02C08B |
:10DC10002D5F3F4F359527953595279530932805EE |
:10DC200020932705809122049091230481599140EB |
:10DC300020F48091260485FF03C080918F0802C0E4 |
:10DC4000809183089927880F991F880F991F209129 |
:10DC50002705309128058217930764F480912A0BD9 |
:10DC60009927880F991F880F991F80559040281772 |
:10DC7000390724F090932805809327058091060B9F |
:10DC8000209127053091280580FF10C0E980FA8097 |
:10DC90002E153F0524F0F0922805E092270500910B |
:10DCA0002705109128051A83098315C03A83298313 |
:10DCB00012C00E94094E29813A8130932805209391 |
:10DCC000270580912704806C809327048091260487 |
:10DCD0008D7F809326048091270499279C012270D0 |
:10DCE000307081FF30C18091290590912A05A09163 |
:10DCF0002B05B0912C050097A105B10521F080916D |
:10DD00005E048130B9F48091440490914504AA27BF |
:10DD100097FDA095BA2F1EE0880F991FAA1FBB1F61 |
:10DD20001A95D1F78093290590932A05A0932B0586 |
:10DD3000B0932C0580915E04813019F482E08093C9 |
:10DD40005E0449815A817A010027F7FC0095102F63 |
:10DD50008091F30A9091F40A9C01442737FD409585 |
:10DD6000542FC801B7010E945FACDC01CB01809346 |
:10DD7000F4049093F504A093F604B093F704B7FF6E |
:10DD800004C08150904EAF4FBF4F7C018D01FDE02C |
:10DD900015950795F794E794FA95D1F7E092F40476 |
:10DDA000F092F5040093F6041093F70460912804B0 |
:10DDB000709129045FE0603A750750F5809129055C |
:10DDC00090912A05A0912B05B0912C059C01AD01E5 |
:10DDD000EAE05695479537952795EA95D1F7821B46 |
:10DDE000930BA40BB50BA8019701F4E0220F331F8E |
:10DDF000441F551FFA95D1F7820F931FA41FB51F1B |
:10DE00008093290590932A05A0932B05B0932C05A8 |
:10DE100060547F4118F58091290590912A05A091C1 |
:10DE20002B05B0912C059C01AD01ECE05695479572 |
:10DE300037952795EA95D1F7821B930BA40BB50B69 |
:10DE4000A801970172E0220F331F441F551F7A95D6 |
:10DE5000D1F7820F931FA41FB51F38C080914603CE |
:10DE600090914703809146039091470397FF03C029 |
:10DE7000909581959F4F8436910584F580913C0360 |
:10DE800090913D032091560430915704821B930BCF |
:10DE900081509F4F8F5F914008F5809129059091A7 |
:10DEA0002A05A0912B05B0912C059C01AD016EE0D7 |
:10DEB00056954795379527956A95D1F7821B930B11 |
:10DEC000A40BB50B8E0D9F1DA01FB11F80932905BC |
:10DED00090932A05A0932B05B0932C0580912905DA |
:10DEE00090912A05A0912B05B0912C051EE0B695C6 |
:10DEF000A795979587951A95D1F7909345048093A8 |
:10DF0000440440918908442399F055279C01BA01A3 |
:10DF10000E949EACC901861B970B9093730480935B |
:10DF20007204260F371F30938301209382011FC094 |
:10DF300010927304109272048FEF93E09093830118 |
:10DF40008093820114C010925E04109229051092F1 |
:10DF50002A0510922B0510922C053093450420932E |
:10DF6000440405C080912704806C8093270480912D |
:10DF70003C0581FF37C089819A8197FD039695956D |
:10DF8000879595958795209124043091250428172D |
:10DF9000390760F48091440490914504892B31F055 |
:10DFA000220F331F220F331F3A83298380913C03B2 |
:10DFB00090913D03A0913E03B0913F03809356049E |
:10DFC00090935704A0935804B093590488E99AE3B6 |
:10DFD000909329038093280380E09EE090930C01A6 |
:10DFE00080930B012091EE0A822F9927880F991FA9 |
:10DFF000880F991F8896E981FA818E179F0714F080 |
:10E000009A83898380912A0B9927880F991F880FFB |
:10E01000991F80559040E980FA808E159F0514F471 |
:10E020009A83898380918003882341F48091BF0B78 |
:10E030008E3F20F080914005882319F180912804BB |
:10E04000909129040297C097E0F409811A81101673 |
:10E050001106BCF481E090E0909329048093280499 |
:10E06000422F5527440F551F440F551F485D5F4FE2 |
:10E070005A8349838091BF0B883218F489E08093DA |
:10E08000B20180912703882311F40E94D97369811A |
:10E090007A817093DF076093DE078091EC049091A2 |
:10E0A000ED04A091EE04B091EF0432E0880F991FC7 |
:10E0B000AA1FBB1F3A95D1F700912D0B10912E0B83 |
:10E0C000081B190B613A71058CF0CB0177FD0196A5 |
:10E0D00095958795801791070CF48C019095819503 |
:10E0E0009F4F081719076CF48C010BC001351105FF |
:10E0F00014F000E510E07FEF003B170714F400EB8D |
:10E100001FEF80912A0B282F3327220F331F220F56 |
:10E11000331FC901A981BA818A1B9B0B8017910704 |
:10E120000CF48C01E981FA81E21BF30B0E171F0737 |
:10E130000CF48F018091E90A9091EA0A60917004D1 |
:10E1400070917104861B970B9093F90A8093F80ADB |
:10E15000D090080B20918204309183044091840474 |
:10E1600050918504DD2041F0461A570AC201AA27C2 |
:10E1700097FDA095BA2F04C0AA2797FDA095BA2FA6 |
:10E18000280F391F4A1F5B1F20938204309383049A |
:10E190004093840450938504809182049091830479 |
:10E1A000A0918404B091850481509A4FA040B04062 |
:10E1B00064F080E09AEFA0E0B0E080938204909356 |
:10E1C0008304A0938404B093850480918204909189 |
:10E1D0008304A0918404B091850480509640AF4F91 |
:10E1E000BF4F64F480E096E0AFEFBFEF809382040E |
:10E1F00090938304A0938404B0938504C0909808FE |
:10E200002091F80A3091F90A48E04C1598F08C2DCD |
:10E210009927829FB001839F700D929F700D1124EA |
:10E22000CB0177FD07967C01B3E0F594E794BA95AE |
:10E23000E1F712C08C2D86959927829FD001839F8C |
:10E24000B00D929FB00D1124CD01B7FD03967C0156 |
:10E25000F594E794F594E794A0907F01B090800145 |
:10E260009501442737FD4095542F80918204909169 |
:10E270008304A0918404B0918504BC01CD010E9467 |
:10E28000D3ACE20EF31E90906901692D77278827A1 |
:10E290009927980117FF04C022273327201B310B31 |
:10E2A00037FF02C02F5F3F4F35952795E981FA81EF |
:10E2B0002E0F3F1F442737FD4095542F0E945FAC1F |
:10E2C00097FF04C0615C7F4F8F4F9F4FE6E09595AD |
:10E2D000879577956795EA95D1F79B016E157F0530 |
:10E2E0000CF47B01309521953F4FE216F3060CF4B8 |
:10E2F00079018091DA0A9091DB0A60916E04709145 |
:10E300006F04861B970B9093D90A8093D80A2091AB |
:10E310007E0430917F044091800450918104DD207F |
:10E3200041F0261A370AC101AA2797FDA095BA2FF6 |
:10E3300004C0AA2797FDA095BA2F280F391F4A1F9E |
:10E340005B1F20937E0430937F044093800450939E |
:10E35000810480917E0490917F04A0918004B0910B |
:10E36000810481509A4FA040B04064F080E09AEF61 |
:10E37000A0E0B0E080937E0490937F04A09380049B |
:10E38000B093810480917E0490917F04A0918004D9 |
:10E39000B091810480509640AF4FBF4F64F480E04D |
:10E3A00096E0AFEFBFEF80937E0490937F04A0933D |
:10E3B0008004B09381042091D80A3091D90A48E0B2 |
:10E3C0004C1598F08C2D9927829FB001839F700D7A |
:10E3D000929F700D1124CB0177FD07966C0163E0CD |
:10E3E000D594C7946A95E1F712C0C6948C2D9927ED |
:10E3F000829FD001839FB00D929FB00D1124CD015B |
:10E40000B7FD03966C01D594C794D594C794950134 |
:10E41000442737FD4095542F80917E0490917F04CE |
:10E42000A0918004B0918104BC01CD010E94D3ACC5 |
:10E43000C20ED31E692D772788279927980117FFC9 |
:10E4400004C022273327201B310B37FF02C02F5F68 |
:10E450003F4F35952795E981FA812E0F3F1F4427BD |
:10E4600037FD4095542F0E945FAC97FF04C0615C5C |
:10E470007F4F8F4F9F4F36E095958795779567959E |
:10E480003A95D1F79B016C157D050CF46B01309525 |
:10E4900021953F4FC216D3060CF4690180912703E2 |
:10E4A000882311F40E94D9738091EE0A282F332714 |
:10E4B0003E8B2D8B80912A0B282E33245090DB0825 |
:10E4C00020E9A22E29E0B22E9BE0892E99E0992E18 |
:10E4D0008BE0482EB9E06B2EBBE07B2ED4012C9153 |
:10E4E00012160CF02FC1203429F4E981FA81F88F3B |
:10E4F000EF8B1FC049815A81CA01AA2797FDA095B9 |
:10E50000BA2F332727FD3095432F532FBC01CD0160 |
:10E510000E945FAC97FF04C0615C7F4F8F4F9F4F9D |
:10E52000A6E09595879577956795AA95D1F7788F09 |
:10E530006F8BF4012181203439F42F89388D2E0D11 |
:10E540003F1D388F2F8B2AC0203C39F44F89588DBE |
:10E550004E195F09588F4F8B21C0C701AA2797FD1D |
:10E56000A095BA2F332727FD3095432F532FBC0199 |
:10E57000CD010E945FAC97FF04C0615C7F4F8F4F5D |
:10E580009F4FF6E09595879577956795FA95D1F722 |
:10E59000AF89B88DA60FB71FB88FAF8BF40122815A |
:10E5A000203439F42F89388D2C0D3D1D388F2F8B59 |
:10E5B0002AC0203C39F44F89588D4C195D09588F79 |
:10E5C0004F8B21C0C601AA2797FDA095BA2F3327EC |
:10E5D00027FD3095432F532FBC01CD010E945FAC26 |
:10E5E00097FF04C0615C7F4F8F4F9F4FE6E095958A |
:10E5F000879577956795EA95D1F7AF89B88DA60F7E |
:10E60000B71FB88FAF8BF4012381203439F42F89E1 |
:10E61000388D200F311F388F2F8B2AC0203C39F4C2 |
:10E620004F89588D401B510B588F4F8B21C0C8010B |
:10E63000AA2797FDA095BA2F332727FD3095432FA2 |
:10E64000532FBC01CD010E945FAC97FF04C0615CF9 |
:10E650007F4F8F4F9F4F56E095958795779567959C |
:10E660005A95D1F7AF89B88DA60FB71FB88FAF8B6A |
:10E67000F501808181FD08C0D3018D919C91EF89C6 |
:10E68000F88D8E179F0774F4D3018D919C91EF89BB |
:10E69000F88D8E0F9F1F97FD019695958795988F02 |
:10E6A0008F8B1EC0552049F42F89388D220F331FC0 |
:10E6B000281B390B388F2F8B13C031E0351580F4B0 |
:10E6C000252D33274F89588D841B950BB9010E9446 |
:10E6D0009EACCB016F89788D680F791F788F6F8B17 |
:10E6E0008D899E89880F991F880F991FAF89B88DD2 |
:10E6F0008A179B0754F4C101880F991F880F991F2F |
:10E70000EF89F88DE817F90714F0988F8F8B8F89B0 |
:10E71000988D97FD03969595879595958795F50125 |
:10E720008183880F991F880F991F2F89388D281B87 |
:10E73000390BC901880F8283EF89F88DD301ED93DE |
:10E74000FC9303C0F501118212824A9422E030E06A |
:10E75000620E731E44E050E0840E951E6FE070E080 |
:10E76000A60EB71E47FEBACEE2E1C85E0C940AAD13 |
:10E7700084B1806A84B93D9A82E58CBD1DBC459AFE |
:10E7800081E080933E0B8AEA80934F0B83E880936D |
:10E79000500B8AE08093510B1092530B1092520B46 |
:10E7A0001092550B1092540B1092B70B1092730BE2 |
:10E7B000089530913E0B332309F070C00DB407FE6D |
:10E7C0006DC085E080932703459A2EB5809143055F |
:10E7D00099278130910589F0823091051CF4892BAD |
:10E7E00021F03EC00297B9F03BC03093720B2093EA |
:10E7F00044052138A9F581E008C0253549F4809108 |
:10E800004405820F8093440582E08093430528C02D |
:10E810003093430525C08091720BE82FFF27EC56FB |
:10E82000F44F20838F5F8093720B90914405803268 |
:10E83000A0F0291769F480E2A4E9BBE0E4E7FBE07B |
:10E840000D9001928A95E1F781E08093730B02C0ED |
:10E850003093730B1092430503C0920F90934405BD |
:10E8600020914E0B2232A0F44598000000000000D9 |
:10E870000000E091470BF091480BE20FF11D808101 |
:10E880008EBD8091700B9081890F8093700B03C0B7 |
:10E8900081E080933E0B2F5F20934E0B0895EF9203 |
:10E8A000FF920F931F93809191089927880F991FCA |
:10E8B000880F991F7C010027F7FC0095102F80918D |
:10E8C000BA049091BB04A091BC04B091BD04BC01FA |
:10E8D000CD01A80197010E94D3AC3093530B209334 |
:10E8E000520B8091B2049091B304A091B404B09102 |
:10E8F000B504BC01CD01A80197010E94D3AC3093AF |
:10E90000550B2093540B2091340B3091350B4091D3 |
:10E91000360B5091370BDA01C90173E0880F991F4C |
:10E92000AA1FBB1F7A95D1F7820F931FA41FB51F93 |
:10E93000820F931FA41FB51F209144013091450100 |
:10E940004091460150914701BC01CD010E94D3ACDA |
:10E9500030935B0B20935A0B8091CC049091CD04A3 |
:10E960002091530330915403821B930B9093610BBE |
:10E970008093600BE091C204F091C3048091FF0A80 |
:10E980009091000BBF010E949EACCB019B01220F16 |
:10E99000331F220F331F280F391F280F391F37FF4E |
:10E9A00002C02D5F3F4F35952795359527953093BC |
:10E9B000570B2093560B8091300B9091310BBF0178 |
:10E9C0000E949EAC9B01220F331F220F331F260F84 |
:10E9D000371F260F371F37FF02C02D5F3F4F35957A |
:10E9E0002795359527953093590B2093580B109206 |
:10E9F000C3041092C2041092000B1092FF0A1092EE |
:10EA0000310B1092300B8091510B9927AA27BB270D |
:10EA1000FC013A97E830F10508F05AC2E459FF4F7B |
:10EA20000C9425AD80913C048093640B80913B0451 |
:10EA30008093650B80913A048093660B8091390432 |
:10EA40008093670B809138048093680B8091370422 |
:10EA50008093690B8091360480936A0B8091350412 |
:10EA600080936B0B8091270480936C0B809127041B |
:10EA7000837F809327048091010180936D0B8091A7 |
:10EA800026019091270180936E0B8091260480933C |
:10EA90006F0B42991DC280912604877F80932604C4 |
:10EAA00017C28091B90B9091BA0B9093650B80932C |
:10EAB000640B809145058093660B8091BF0B80931A |
:10EAC000670B8091C6080E94CE4A8093680B8091A4 |
:10EAD00043018093690B20914505822F9927FC0102 |
:10EAE00014E0EE0FFF1F1A95E1F7E81BF90BE05752 |
:10EAF000F64F868580936A0B808180936B0B8681AD |
:10EB000080936C0B838180936D0B878180936E0B58 |
:10EB1000858180936F0B2F5F20934505E22FFF27A0 |
:10EB2000EE0FFF1FEE0FFF1FE250F74F85851816FF |
:10EB30000CF4CEC1222309F4CBC1822F9927019670 |
:10EB40006DE070E00E949EACAC01282FE82FFF27FB |
:10EB5000EE0FFF1FEE0FFF1FE250F74F85851816CF |
:10EB600014F0442351F740934505B2C1809102014E |
:10EB70008093640B8091C7088093650B8091C808CF |
:10EB80008093660B8091C9088093670B8091CA08B7 |
:10EB90008093680B8091CE088093690B8091CF0899 |
:10EBA00080936A0B8091D00880936B0B8091D3087F |
:10EBB00080936C0B8091D10880936D0B8091D2086B |
:10EBC00080936E0B8091D40881C18091C508809399 |
:10EBD000640B80919C08863081F08091F102823430 |
:10EBE00051F00E944F85E82FFF27E856F94E849197 |
:10EBF0008093F10202C00E944F8580916E05809340 |
:10EC0000650B8091E7088093660B8091DC08809308 |
:10EC1000670B80911D048093680B8091770580932A |
:10EC2000690B8091750580936A0B809174058093C0 |
:10EC30006B0B1092770510927505109274058091F8 |
:10EC400078049091790490936D0B80936C0B809174 |
:10EC5000EB0880936E0B8091EC0838C1F89480919A |
:10EC60007808E82FFF27EE0FFF1FEB5BF54F0190B1 |
:10EC7000F081E02DE038F1051CF0EFE7F0E006C090 |
:10EC80002FEFE138F20714F4E1E8FFEFE093640BB3 |
:10EC900080917908E82FFF27EE0FFF1FEB5BF54F00 |
:10ECA0000190F081E02DE038F1051CF0EFE7F0E095 |
:10ECB00006C07FEFE138F70714F4E1E8FFEFE093D7 |
:10ECC000650B80917708E82FFF27EE0FFF1FEB5BA6 |
:10ECD000F54F0190F081E02DE038F1051CF0EFE7F1 |
:10ECE000F0E006C08FEFE138F80714F4E1E8FFEF39 |
:10ECF000E093660B80917608E82FFF27EE0FFF1F49 |
:10ED0000EB5BF54F0190F081E02DE038F1051CF050 |
:10ED1000EFE7F0E006C02FEFE138F20714F4E1E886 |
:10ED2000FFEF7894E093670B809161048093680B08 |
:10ED3000809162048093690B8091630480936A0BD5 |
:10ED40008091640480936B0B8091650480936C0BBD |
:10ED50008091660480936D0B8091670480936E0BA5 |
:10ED600080916804B3C080910506853018F0109238 |
:10ED7000050685E08093640B8091D5088093650B30 |
:10ED800080915A0490915B04A0915C04B0915D0461 |
:10ED9000BC01CD0125E030E040E050E00E94D3AC62 |
:10EDA0003093670B2093660B809156049091570423 |
:10EDB000A0915804B0915904BC01CD0125E030E088 |
:10EDC00040E050E00E94D3AC3093690B2093680B75 |
:10EDD0008091CB0880936A0B8091CC0880936B0B59 |
:10EDE0008091CD0880936C0B8091600480936D0BB3 |
:10EDF0008091460580936E0B8091DE079091DF072E |
:10EE000097FD039695958795959587955FC082E0C8 |
:10EE10008093640B86E08093650B85E08093660B9E |
:10EE200085E48093670B809103018093680B809148 |
:10EE3000EA058093690B9091EB0590936A0B8F77AD |
:10EE40008093EA0590719093EB058091E808809398 |
:10EE50006B0B8091220B80936C0B8091060B80933F |
:10EE60006D0B8091D80880936E0B8091F0082EC0B6 |
:10EE70008091BD0B9091BE0B9093650B8093640BBA |
:10EE8000809171018093660B809170018093670B74 |
:10EE9000809108088093680B8091F0028093690B41 |
:10EEA0008091D60880936A0B8091E60A80936B0B61 |
:10EEB0008091F5029091F60290936D0B80936C0B0C |
:10EEC0008091AC0880936E0B8091ED0580936F0B61 |
:10EED0008091730B882309F46CC16091740B80914D |
:10EEE000A801681719F08AEF8093A6016093A80122 |
:10EEF00081E0809391014091750B5091760BCA018E |
:10EF000081509E4F8F5F9340B0F42091770B3091EA |
:10EF1000780BC90181509E4F8F5F934060F48091C0 |
:10EF2000820885FF08C05093330540933205309323 |
:10EF300031052093300580917B0B90917C0B21E073 |
:10EF40008936920724F49093930180939201209143 |
:10EF5000850B3091860B80912803909129038217AD |
:10EF6000930740F48091FB02882321F43093290316 |
:10EF700020932803862F99278936910509F48CC0A0 |
:10EF80008A36910544F48736910571F088369105EB |
:10EF900009F44DC016C18A36910509F407C18B36B4 |
:10EFA000910509F4C9C00DC18091870B8093B40B02 |
:10EFB0008091880B8093B60B8091890B8093B50B61 |
:10EFC00080918A0B8093900180918B0B8093B80B7A |
:10EFD00080918C0B8093A70180918D0B80934205CB |
:10EFE00080918E0B80932F0580913404882351F0FB |
:10EFF00080918F0B9091900B97FD04C090937904B2 |
:10F000008093780420913A0530913B058091910BD3 |
:10F010009091920B280F391F37FF02C02F5F3F4F8F |
:10F020003595279530933B0520933A05CAC08091CA |
:10F03000870B8093490B8091880B80934A0B8091BA |
:10F04000890B80934B0B80918A0B80934C0B8091A2 |
:10F050008B0B80934D0B8091CE0790918C0B892B5D |
:10F060008093CE079091CF07937080918D0B8C7019 |
:10F07000982B9093CF0780918E0B809340058091C1 |
:10F080008F0B809398018091900B8093B70B8091A8 |
:10F09000910B80933C0595C08091870B80933F0B2B |
:10F0A0008091880B8093400B8091890B8093410B5A |
:10F0B00080918A0B8093420B80918B0B90918C0BEB |
:10F0C0009093440B8093430B80918D0B90918E0B0A |
:10F0D0009093460B8093450B80918F0B992787FD6A |
:10F0E00090959093800A80937F0A8091900B8093F3 |
:10F0F0004F048091910B9091920B9C01442737FD16 |
:10F100004095542FDA01C90163E0880F991FAA1FA7 |
:10F11000BB1F6A95D1F7820F931FA41FB51F820FE3 |
:10F12000931FA41FB51F8093500490935104A09384 |
:10F130005204B093530445C08091870B80933F05E0 |
:10F140008091880B80933E058091890B80933D05CB |
:10F1500090918A0B992349F08091B201882319F08C |
:10F160008151833010F49093B20180918D0B909176 |
:10F170008E0B909373058093720580918B0B809317 |
:10F180007A0580918C0B8093790580918F0B809309 |
:10F1900078058091900B809376058091910B9091EA |
:10F1A000920B90932C0B80932B0B0BC00E94BC8571 |
:10F1B00008C010923305109232051092310510925A |
:10F1C00030051F910F91FF90EF90089580913E0BB5 |
:10F1D000882319F480E090E0089545988FE49BE03F |
:10F1E0009093480B8093470B90914105E92FFF279F |
:10F1F000E756FE4F9F5F9093410580818093510BAE |
:10F200009D3010F01092410510923E0B0E944F74F9 |
:10F2100081E080934E0B80914F0B8093700B8EBDDD |
:10F2200081E090E0089587B18C6087B94298439857 |
:10F230001092480580E88093AA01109247058093B8 |
:10F24000A901089580917F0A9091800A81589F4F6B |
:10F2500039F080917F0A9091800A815880935205FD |
:10F2600080914D05815080934D058F3F09F052C12B |
:10F270008091BF0880934E058091C10880934F050F |
:10F2800089E080934D0580912704992780739070C1 |
:10F29000892B21F48091EB0580FF1DC08091C3086C |
:10F2A000882351F080915005882319F484E08093DD |
:10F2B000480581E0809350058091C408882379F047 |
:10F2C00080915105882319F484E08093470581E0FB |
:10F2D0008093510504C01092500510925105809101 |
:10F2E0005005882309F082C08091ED08282F33272C |
:10F2F00024FF07C080915F04882319F425FD8FC087 |
:10F3000090C09091C008983F48F08091010B8D3DCE |
:10F3100028F080914E0588236CF00AC0983F78F061 |
:10F320008091010B853059F480914E0587FF02C012 |
:10F33000429A01C0429881E08093AA0154C0809112 |
:10F3400048058150809348058F3F09F06BC080913C |
:10F35000F00885FF2FC090915205892F86958093E4 |
:10F360004805992361F49093460580914E0587FFE7 |
:10F3700002C0429A01C042981092AA0153C081E093 |
:10F38000809346058091AA0190914E05882349F407 |
:10F390008093520580E48093AA0199230CF43FC026 |
:10F3A00040C0982311F0429A01C0429886958093FC |
:10F3B000AA0138C08091010B869580934805809101 |
:10F3C000AA01813021F41092520580E401C0869593 |
:10F3D0008093AA018091AA0190914E05892311F092 |
:10F3E000429A01C04298109246051CC0809148057F |
:10F3F0008150809348058F3FA9F489E080934805A8 |
:10F400008091AA01813011F480E801C08695809333 |
:10F41000AA018091AA019091C308892311F0429A10 |
:10F4200001C0429880915105882309F043C0909112 |
:10F43000ED0897FF07C080915F04882319F496FDBB |
:10F4400052C053C09091C208983F48F08091290B58 |
:10F450008D3D28F080914F0588236CF00AC0983FBD |
:10F4600078F08091290B853059F480914F0587FF02 |
:10F4700002C0439A01C0439881E08093A90136C03D |
:10F48000809147058150809347058F3F79F58091A2 |
:10F49000290B8695809347058091A901813011F44D |
:10F4A00080E401C086958093A9018091A901909183 |
:10F4B0004F0517C0809147058150809347058F3FC6 |
:10F4C000A9F489E0809347058091A901813011F466 |
:10F4D00080E801C086958093A9018091A90190914F |
:10F4E000C408892311F0439A01C04398429B05C088 |
:10F4F00080912604886080932604439B06C08091F7 |
:10F5000026048061809326040895809126048F7ECE |
:10F510008093260408954FB724E130E0F894809159 |
:10F52000C9008F778093C9008091C9008F7B809339 |
:10F53000C9008091C9008F7D8093C900832F9927CE |
:10F540008093CD002093CC008091C800826080938E |
:10F55000C80080E18093C9008091CA008F778093B2 |
:10F56000CA008091CA008F7B8093CA008091CA0034 |
:10F570008F7D8093CA008091CA008F7E8093CA00DD |
:10F580008091CA00877F8093CA008091C9008B7FD9 |
:10F590008093C9008091CA0084608093CA008091E2 |
:10F5A000CA0082608093CA008091C80087FF03C0B0 |
:10F5B0008091CE00F9CF8091C90080688093C90006 |
:10F5C0004FBF0895EF92FF920F931F93CF93DF9356 |
:10F5D000482F00E010E08091AB01813061F410927F |
:10F5E000AB0184E4809353051092550510925405A5 |
:10F5F0001092560539C180915305882319F421E0F2 |
:10F6000030E001C0980190915405992371F4232BA7 |
:10F6100011F081E010C084E4809353059093550568 |
:10F62000909354059093560508C1913069F4232BAB |
:10F6300009F0F9C082E080935405809155058F5FF1 |
:10F640008093550583E0F7C09230D1F4232B09F065 |
:10F65000EAC083E080935305409356059091550589 |
:10F66000923039F41092570547FF03C081E0809330 |
:10F67000570583E0809354059F5F90935505DDC047 |
:10F68000933009F0D0C0232B09F0CDC090935305DF |
:10F6900082E080935405809155058F5F80935505D6 |
:10F6A00020915605822F9927782F6627842F992736 |
:10F6B000682B792B80919C08813049F47370CB01C1 |
:10F6C0008050924063E070E00E949EAC17C0823090 |
:10F6D00061F47770CB018050944066E070E00E9446 |
:10F6E0009EAC2695269526950BC073706856714082 |
:10F6F000CB0177FD0196BC017595679526952695FA |
:10F70000022F11270F7010700F5F1F4F0D30110562 |
:10F7100008F082C07801E00EF11EF701EB5BF54FB7 |
:10F72000808191819B01281B390BC90137FF03C0E0 |
:10F73000909581959F4F069704F5E091DF08EE23A1 |
:10F7400051F0FF27EE0FFF1FEB5BF54F808191819A |
:10F750008436910594F480916004883C30F4809163 |
:10F760006004865F8093600408C088EC8093600426 |
:10F7700080916F008F7D80936F00F701EB5BF54FF9 |
:10F78000808191819C01220F331F280F391F260F82 |
:10F79000371F37FF02C02D5F3F4FE901D595C79551 |
:10F7A000D595C795CB0101968C179D0714F4219729 |
:10F7B00006C061507040C617D7070CF4219680919F |
:10F7C0006004843BD0F0F701EB5BF54F80819181C1 |
:10F7D000FE01E81BF90BCF0163E070E00E949EACD4 |
:10F7E000CB01880F991F860F971F2BE83AE0E20E96 |
:10F7F000F31EF7019183808307C02BE83AE0E20E05 |
:10F80000F31EF70111821082000F111F0B5B154FC1 |
:10F81000F801D183C08311C00231110570F081E07D |
:10F820008093AB010AC081E08093AB011092550533 |
:10F830001092570584E480935305809155058031DB |
:10F8400098F080915705882331F48091AB0188238B |
:10F8500011F48093420110925505109257051092B1 |
:10F86000540584E480935305E6E0CDB7DEB70C94ED |
:10F8700016ADCF93FC0197FF05C0CFEFF095E19552 |
:10F88000FF4F01C0C1E028E631E0CF01B9010E947D |
:10F890009EACFC018B35910554F08B5590408A3518 |
:10F8A000910538F484EB90E08E1B9F0BFC0141E046 |
:10F8B0000DC0CF01855B90408A35910518F4E45B5B |
:10F8C000F04003C02E1B3F0BF9014FEFEE0FFF1F5F |
:10F8D000EF54F64F259134918C2F992787FD909501 |
:10F8E000289FB001299F700D389F700D1124842F1F |
:10F8F000992787FD9095689FA001699F500D789F7B |
:10F90000500D1124CA01CF9108952AE530E0281B3B |
:10F91000390BC9010E94397C0895CF93DF9380E0B1 |
:10F920000E947D9E80912601909127016AE070E0FF |
:10F930000E949EAC9F938F93809126019091270106 |
:10F940006AE070E00E949EAC7F936F9385EB9AE033 |
:10F950009F938F93C0E7DEE9DF93CF93E091D105CA |
:10F96000F091D20509952DB73EB7285F3F4F2DBFC7 |
:10F970008091A601882361F186E00E947D9E80919E |
:10F98000980199279F938F938091430B9091440BFB |
:10F990006AE070E00E948AAC7F936F938FED90E0F5 |
:10F9A0009F938F9380912B0B90912C0B9F938F9310 |
:10F9B0008EEB9AE09F938F93DF93CF93E091D105E5 |
:10F9C000F091D20509958DB79EB70C968DBF12C0E8 |
:10F9D00086E00E947D9E8CEC9AE09F938F93DF934C |
:10F9E000CF93E091D105F091D20509950F900F903A |
:10F9F0000F900F9080914005882309F452C08091A8 |
:10FA00005805909159050E94B11D882391F080916D |
:10FA1000AC01882319F01092AC0103C081E08093FF |
:10FA2000AC018CED95E00E94A81D90935905809340 |
:10FA300058058091AC018823E1F080E00E947D9E12 |
:10FA40001F921F929091400581E1989FC00111245F |
:10FA50008C59924F9F938F93DF93CF93E091D10571 |
:10FA6000F091D20509952DB73EB72A5F3F4F2DBFC4 |
:10FA70003BC086E00E947D9E8091400599279F9320 |
:10FA80008F9383ED9AE09F938F93DF93CF93E091D1 |
:10FA9000D105F091D20509958DB79EB706968DBF19 |
:10FAA00023C080916D058823F9F00E94839E80E138 |
:10FAB0000E947D9E81EF98E09F938F93809101013A |
:10FAC00099279F938F938FED9AE09F938F93DF9366 |
:10FAD000CF93E091D105F091D20509952DB73EB7AE |
:10FAE000285F3F4F2DBF72C080E10E947D9E8091B4 |
:10FAF000F3029091F4026CE370E00E948AAC9F9351 |
:10FB00008F938091F3029091F4026CE370E00E9475 |
:10FB10008AAC7F936F938091BD0B9091BE0B9F93A6 |
:10FB20008F938AEE9AE09F938F93C0E7DEE9DF938D |
:10FB3000CF93E091D105F091D20509958091220BE8 |
:10FB40002DB73EB7265F3F4F2DBF80FF29C08AE10A |
:10FB50000E947D9E8091430199279F938F9380916E |
:10FB60005A0490915B04A0915C04B0915D04BC01C7 |
:10FB7000CD0124E630E040E050E00E94D3AC3F935A |
:10FB80002F9387EF9AE09F938F93DF93CF93E0912A |
:10FB9000D105F091D20509958DB79EB708968DBF16 |
:10FBA0008091F002882391F08AE10E947D9E8EEF81 |
:10FBB0009AE09F938F93DF93CF93E091D105F091DB |
:10FBC000D20509950F900F900F900F90DF91CF9174 |
:10FBD0000895CF93DF9380E00E947D9E8091C409B9 |
:10FBE00099279F938F938091B50999279F938F931E |
:10FBF0008091A60999279F938F93809197099927C0 |
:10FC00009F938F9380E09BE09F938F93C0E7DEE903 |
:10FC1000DF93CF93E091D105F091D205099580E172 |
:10FC20000E947D9E2DB73EB7245F3F4F2DBF809130 |
:10FC3000000A99279F938F938091F10999279F93A9 |
:10FC40008F938091E20999279F938F938091D30995 |
:10FC500099279F938F9380E19BE09F938F93DF93EE |
:10FC6000CF93E091D105F091D20509958091740868 |
:10FC70002DB73EB7245F3F4F2DBF853098F480E10C |
:10FC80000E947D9E80E29BE09F938F93DF93CF93B2 |
:10FC9000E091D105F091D20509950F900F900F904A |
:10FCA0000F9018C08730B0F488E10E947D9E8FEDE0 |
:10FCB00090E09F938F9381E39BE09F938F93DF93DB |
:10FCC000CF93E091D105F091D20509958DB79EB7FC |
:10FCD00006968DBFDF91CF9108950F931F9380E01B |
:10FCE0000E947D9E2AE030E08091B90B9091BA0B82 |
:10FCF000B9010E948AAC9F938F938091B90B909128 |
:10FD0000BA0BB9010E948AAC7F936F938091260150 |
:10FD100090912701B9010E949EAC9F938F9380918F |
:10FD2000260190912701B9010E949EAC7F936F93A9 |
:10FD30008AE39BE09F938F9300E71EE91F930F9345 |
:10FD4000E091D105F091D205099580E10E947D9E58 |
:10FD50008DB79EB70C968DBF8091BD0B9091BE0B59 |
:10FD60009F938F938091BB0B9091BC0B9F938F932C |
:10FD70008CE49BE09F938F931F930F93E091D105A9 |
:10FD8000F091D20509958DB79EB708968DBF1F914A |
:10FD90000F910895EF92FF920F931F9380E00E94BE |
:10FDA0007D9E8FEDE82EF12CFF92EF9280919201D3 |
:10FDB000909193019F938F9380913F0599279F93F3 |
:10FDC0008F9388E59BE09F938F9300E71EE91F9335 |
:10FDD0000F93E091D105F091D205099580E10E9441 |
:10FDE0007D9E8DB79EB70A968DBF80913D05992760 |
:10FDF0009F938F93FF92EF9280913E0599279F9357 |
:10FE00008F938BE69BE09F938F931F930F93E091CB |
:10FE1000D105F091D20509958DB79EB70A968DBF91 |
:10FE20001F910F91FF90EF9008950F931F9380E023 |
:10FE30000E947D9E8EE79BE09F938F9300E71EE9D3 |
:10FE40001F930F93E091D105F091D205099580E1C0 |
:10FE50000E947D9E0F900F900F900F908DE89BE079 |
:10FE60009F938F931F930F93E091D105F091D2054B |
:10FE700009950F900F900F900F901F910F9108957B |
:10FE80000F931F9380E00E947D9E8BE99BE09F93E0 |
:10FE90008F9300E71EE91F930F93E091D105F09136 |
:10FEA000D205099580E10E947D9E0F900F900F90E2 |
:10FEB0000F908AEA9BE09F938F931F930F93E0919B |
:10FEC000D105F091D20509950F900F900F900F90EA |
:10FED0001F910F91089580E00E947D9E88EB9BE02A |
:10FEE0009F938F9380E79EE99F938F93E091D10535 |
:10FEF000F091D20509950F900F900F900F900895F3 |
:10FF000080E00E947D9E89EC9BE09F938F9380E729 |
:10FF10009EE99F938F93E091D105F091D2050995C9 |
:10FF20000F900F900F900F9008951F93CF93DF9332 |
:10FF3000182F80E00E947D9E8AED9BE09F938F9317 |
:10FF4000C0E7DEE9DF93CF93E091D105F091D205D0 |
:10FF500009950F900F900F900F9080917605882350 |
:10FF600031F480E10E947D9E86EE9BE009C0809185 |
:10FF7000410B833099F080E10E947D9E81EF9BE0F0 |
:10FF80009F938F93DF93CF93E091D105F091D205AA |
:10FF900009950F900F900F900F9080C08BE00E94FA |
:10FFA0007D9E8091AD0199279F938F938CEF9BE06D |
:10FFB0009F938F93DF93CF93E091D105F091D2057A |
:10FFC000099580E10E947D9E8DB79EB706968DBFF4 |
:10FFD00080915A0490915B04A0915C04B0915D04FF |
:10FFE000BC01CD0124E630E040E050E00E94D3ACFB |
:10FFF0003F932F9380912B0B90912C0B9F938F937A |
:020000021000EC |
:1000000080E09CE09F938F93DF93CF93E091D105A5 |
:10001000F091D20509958DB79EB708968DBF809156 |
:100020005A05882331F08EE00E947D9E81E19CE09C |
:1000300005C08EE00E947D9E84E19CE09F938F939B |
:10004000DF93CF93E091D105F091D20509950F9000 |
:100050000F900F900F901F3251F49091AD0180914D |
:1000600076059817D8F49F5F9093AD0109C01F34AF |
:1000700059F48091AD01823088F081508093AD01B8 |
:1000800081E080935A050AC01F3141F48091AD018F |
:10009000882321F08093740510925A05DF91CF9147 |
:1000A0001F9108951F93CF93DF93182F80E00E9434 |
:1000B0007D9E87E19CE09F938F93C0E7DEE9DF930D |
:1000C000CF93E091D105F091D20509950F900F9053 |
:1000D0000F900F9080917605882399F480E10E941B |
:1000E0007D9E82E29CE09F938F93DF93CF93E0917C |
:1000F000D105F091D20509950F900F900F900F90B8 |
:1001000097C08BE00E947D9E8091AE0199279F93BE |
:100110008F938DE29CE09F938F93DF93CF93E09139 |
:10012000D105F091D20509958DB79EB706968DBF82 |
:1001300080917905882359F180E10E947D9E80910C |
:10014000500490915104A0915204B0915304BC0109 |
:10015000CD0124E630E040E050E00E94D3AC3F9374 |
:100160002F9380917205909173059F938F9381E3F4 |
:100170009CE09F938F93DF93CF93E091D105F09113 |
:10018000D20509958DB79EB708968DBF12C088E13C |
:100190000E947D9E83E49CE09F938F93DF93CF9397 |
:1001A000E091D105F091D20509950F900F900F9035 |
:1001B0000F9080915B05882331F08EE00E947D9E38 |
:1001C00084E59CE005C08EE00E947D9E87E59CE072 |
:1001D0009F938F93DF93CF93E091D105F091D20558 |
:1001E00009950F900F900F900F901F3251F490913E |
:1001F000AE01809176059817D8F49F5F9093AE0179 |
:1002000009C01F3459F48091AE01823088F08150CA |
:100210008093AE0181E080935B050AC01F3141F4F9 |
:100220008091AE01882321F08093750510925B05C3 |
:10023000DF91CF911F9108951F93CF93DF93182FD4 |
:100240008091180CC0E7DEE9882391F40E947D9E1E |
:100250008AE59CE09F938F93DF93CF93E091D10544 |
:10026000F091D20509950F900F900F900F9016C046 |
:1002700080E00E947D9E88E19CE09F938F9388E6BA |
:100280009CE09F938F93DF93CF93E091D105F09102 |
:10029000D20509958DB79EB706968DBF80917605DC |
:1002A000C0E7DEE9882399F480E10E947D9E8FE615 |
:1002B0009CE09F938F93DF93CF93E091D105F091D2 |
:1002C000D20509950F900F900F900F9089C080E193 |
:1002D0000E947D9E8091AF0199279F938F938AE71B |
:1002E0009CE09F938F93DF93CF93E091D105F091A2 |
:1002F000D20509958DB79EB706968DBF8091790579 |
:100300008823E9F088E10E947D9E809179059927F4 |
:100310009F938F9380917A0599279F938F9383E87A |
:100320009CE09F938F93DF93CF93E091D105F09161 |
:10033000D20509958DB79EB708968DBF12C088E18A |
:100340000E947D9E8BE89CE09F938F93DF93CF93D9 |
:10035000E091D105F091D20509950F900F900F9083 |
:100360000F9080915C05882331F08EE10E947D9E84 |
:1003700081E99CE005C08EE10E947D9E84E99CE0BD |
:100380009F938F93DF93CF93E091D105F091D205A6 |
:1003900009950F900F900F900F901F3251F490918C |
:1003A000AF01809176059817D8F49F5F9093AF01C5 |
:1003B00009C01F3459F48091AF01823088F0815018 |
:1003C0008093AF0181E080935C050AC01F3141F446 |
:1003D0008091AF01882321F08093770510925C050E |
:1003E000DF91CF911F9108951F93CF93DF93182F23 |
:1003F0008091180CC0E7DEE9882391F40E947D9E6D |
:1004000087E99CE09F938F93DF93CF93E091D10591 |
:10041000F091D20509950F900F900F900F9016C094 |
:1004200080E00E947D9E88E19CE09F938F9385EA07 |
:100430009CE09F938F93DF93CF93E091D105F09150 |
:10044000D20509958DB79EB706968DBF809176052A |
:10045000882361F480E10E947D9E8CEA9CE09F935A |
:100460008F9380E79EE99F938F930FC08091410BFC |
:10047000C0E7DEE9833099F080E10E947D9E87EB42 |
:100480009CE09F938F93DF93CF93E091D105F09100 |
:10049000D20509950F900F900F900F908AC080E1C0 |
:1004A0000E947D9E8091B00199279F938F9382EC4B |
:1004B0009CE09F938F93DF93CF93E091D105F091D0 |
:1004C000D20509958DB79EB706968DBF80917905A7 |
:1004D0008823E9F088E10E947D9E80917905992723 |
:1004E0009F938F9380917A0599279F938F938CEC9C |
:1004F0009CE09F938F93DF93CF93E091D105F09190 |
:10050000D20509958DB79EB708968DBF12C088E1B8 |
:100510000E947D9E84ED9CE09F938F93DF93CF9309 |
:10052000E091D105F091D20509950F900F900F90B1 |
:100530000F9080915D05882331F08EE10E947D9EB1 |
:100540008AED9CE005C08EE10E947D9E8DED9CE0D1 |
:100550009F938F93DF93CF93E091D105F091D205D4 |
:1005600009950F900F900F900F901F3251F49091BA |
:10057000B001809176059817E0F49F5F9093B001E9 |
:1005800009C01F3459F48091B001823090F081503D |
:100590008093B00181E080935D050BC01F3149F469 |
:1005A0008091B001882329F08068809377051092AC |
:1005B0005D05DF91CF911F9108950F931F93CF9306 |
:1005C000DF938091A601C0E7DEE9882309F47DC0AE |
:1005D00080E00E947D9E8091400B99279F938F938E |
:1005E0008091420B99279F938F9380EE9CE09F937D |
:1005F0008F938E01DF93CF93E091D105F091D205D7 |
:1006000009958DB79EB708968DBF8091410B8330B9 |
:1006100031F48CE00E947D9E8FEE9CE005C08CE062 |
:100620000E947D9E84EF9CE09F938F93DF93CF93F6 |
:10063000E091D105F091D20509950F900F900F90A0 |
:100640000F9080913F0B81FF12C08CE00E947D9E35 |
:1006500089EF9CE09F938F931F930F93E091D105B7 |
:10066000F091D20509950F900F900F900F9080E1B7 |
:100670000E947D9E8091980199279F938F938FED83 |
:1006800090E09F938F938091450B9091460B9F93A1 |
:100690008F938091430B9091440B6AE070E00E942D |
:1006A0008AAC7F936F938EEF9CE09F938F9380E74C |
:1006B0009EE99F938F93E091D105F091D205099522 |
:1006C0008DB79EB70C968DBF12C082E00E947D9EB2 |
:1006D00081E19DE09F938F93DF93CF93E091D105CC |
:1006E000F091D20509950F900F900F900F90DF9128 |
:1006F000CF911F910F910895CF93C82F20915E0540 |
:1007000020935F0599278F329105E1F080339105A1 |
:100710001CF44F9779F027C08F349105D9F08F38AA |
:10072000910509F586E0289FF0011124E959F54F5C |
:10073000849117C086E0289FF0011124E859F54FF5 |
:1007400084910FC086E0289FF0011124E759F54FEE |
:10075000849107C086E0289FF0011124E659F54FE7 |
:10076000849180935E0590915E0580915F0598135A |
:10077000C0E08091B101282F33278F5F8093B101B2 |
:1007800020FD02C0CF3089F0C09360050E94839E97 |
:1007900090915E0586E0989FF0011124E559F54F90 |
:1007A000259134918C2FF901099580E090E0CF914B |
:1007B00008951092BA0B1092B90B1092BE0B1092C2 |
:1007C000BD0B1092BC0B1092BB0B1092BF0B82E3BF |
:1007D00090E00E94A81D90936205809361050895A2 |
:1007E0009927FC0124E0EE0FFF1F2A95E1F7E81B93 |
:1007F000F90BE057F64F95819F3F19F480E090E0A8 |
:100800000895993C18F4892F99270895808182FFD3 |
:1008100007C08AE0989FC00111248850974008952E |
:10082000892F99270895A0E0B0E0E9E1F4E80C945D |
:10083000F7AC80916105909162050E94B11D8823FB |
:1008400009F4CFC08091610590916205C2969093A2 |
:10085000620580936105C0E0D0E07E01BB247FEF9C |
:10086000C72E8091BF0B8E3F21F481E08093F00270 |
:1008700004C08F3F11F4B092F002DD2400E919E0CA |
:10088000F801838187FF17C0B3948581893C30F0DC |
:100890008D2D0E94F083C80FD91F02C0C80FD11D33 |
:1008A000F8018181E80EF11C8681C81610F0C82E6F |
:1008B00002C01092F002D394015F1F4FFBE0FD15C0 |
:1008C000F8F6C092BF0BEF2841F5209167053091F3 |
:1008D00068054091690550916A05BB27A52F942FA3 |
:1008E000832F9093660580936505AA27BB27281B55 |
:1008F000390B4A0B5B0BCE01AA27BB27280F391FE8 |
:100900004A1F5B1F20936705309368054093690574 |
:1009100050936A05C5E0D0E013C0809165059091C1 |
:1009200066058C179D0718F4C81BD90B02C0C0E0E0 |
:10093000D0E08B2D9927880F991FC80FD91F2596B6 |
:10094000D093BA0BC093B90BCF3FD10578F4809107 |
:100950002601909127018C9F90018D9F300D9C9FC7 |
:10096000300D1124C90164E670E013C0CE019695E4 |
:100970008795969587952091260130912701289F8C |
:10098000A001299F500D389F500D1124CA0169E123 |
:1009900070E00E948AAC7093BC0B6093BB0B80919B |
:1009A0006305909164058C0F9D1F9093640580935F |
:1009B000630552E0813D9507A0F02091BD0B309179 |
:1009C000BE0B2F5F3F4F805D9240E2E0813D9E076E |
:1009D000C0F790936405809363053093BE0B20931A |
:1009E000BD0BE9E0CDB7DEB70C9413AD20917B05CC |
:1009F000822F9927FC0134E0EE0FFF1F3A95E1F7B3 |
:100A0000E81BF90BE057F64F978180917C05891719 |
:100A100028F490937C0520937E0508C0992331F03B |
:100A200080917D05981710F490937D05822F8F5F3C |
:100A300080937B058C30D0F010927B0580917D05F2 |
:100A40008F3F19F08093700502C01092700580915D |
:100A50007C058093710580917E0580936F058FEFF3 |
:100A600080937D0510927C0510927E05089595E196 |
:100A7000899F802D11240E9449A480E090E19F93DA |
:100A80008F938BE194EA9F938F93E091D105F0913E |
:100A9000D20509950F900F900F900F900895CF9366 |
:100AA000C0E09091B20190936E058091270485FF7C |
:100AB00013C080911E04882331F080919C088630F9 |
:100AC00011F4CEE001C0C0E1992301F180917F05CE |
:100AD0008031E1F4C92F1AC090914005892F8150CF |
:100AE0008232B0F480915F04882349F4E92FFF2714 |
:100AF000EE0FFF1FE15EF24F8491882349F4E92F46 |
:100B0000FF27EE0FFF1FE25EF24FC491CC2351F49A |
:100B10008091F00886FD03C01092B20105C0C0911B |
:100B2000B20102C0C0936E0580917F058C1771F4ED |
:100B300080918005909181050E94B11D882319F450 |
:100B400080E090E017C080EA9FE002C080ED97E06F |
:100B50000E94A81D9093810580938005CC2331F0DD |
:100B60008091B201C81711F41092B201C0937F05B1 |
:100B70008C2F9927CF91089520E030E050E08091AC |
:100B8000920B992789389105E9F08A38910564F428 |
:100B90008230910539F1833091051CF40197F9F009 |
:100BA00028C0039719F125C08D389105A1F08E3822 |
:100BB000910524F48A38910541F01BC08E389105C7 |
:100BC00039F017C022E23CE008C02AEF3CE005C043 |
:100BD00020EC3BE002C02CEE3BE05CE20AC02DECD6 |
:100BE00032E002C020EE32E054E003C028E13CE0F5 |
:100BF00059E09091870B40E08091880B481770F482 |
:100C0000951760F4D901A90FB11DE42FFF27EC5807 |
:100C1000F44F85898C939F5F4F5FEECF089520E35B |
:100C200035E7809143018B3211F08D32F9F48091D8 |
:100C30008708282F33278091540490915504829F70 |
:100C4000A001839F500D929F500D1124CA0163E0B3 |
:100C500070E00E949EACCB019B01205D3A48C1969A |
:100C6000C19708F03FC02EEF34E73CC0803229F531 |
:100C70008091270481FF36C020916B0530916C056F |
:100C8000205D3A4855E72133350748F085E7243998 |
:100C9000380718F420E335E702C02456304045E712 |
:100CA00020333407F8F454E72D3C350718F020E3DF |
:100CB00035E718C02C593F4F15C08E3549F4909137 |
:100CC0004F048AE0989F90011124205D3A480AC0A1 |
:100CD000863741F490914F048AE0989FC001112417 |
:100CE000281B390BC90108951F9399278A3891054C |
:100CF00009F4ABC18B38910524F48938910551F082 |
:100D000064C38D38910509F497C28E38910509F4B2 |
:100D1000F0C15BC30E944F85182F8093FC0C80911B |
:100D20005A0490915B04A0915C04B0915D04BC01F5 |
:100D3000CD0124E630E040E050E00E94D3ACDA017F |
:100D4000C9018C509E4F9093280C8093270C11233F |
:100D500019F40E940F8602C080E395E790932E0C51 |
:100D600080932D0C80912D0C90912E0C9093300C33 |
:100D700080932F0C9093320C8093310C2091270C90 |
:100D80003091280C80912B0C90912C0C281739074E |
:100D900024F430932C0C20932B0C8091290C9091EF |
:100DA0002A0C8217930724F430932A0C2093290CE1 |
:100DB0001092240C82E29CE0909399058093980510 |
:100DC000809143018093480C8091260480FF02C0EB |
:100DD00083E401C080E28093490C209140052223E6 |
:100DE00009F1822F6AE00E947EAC805D8093330C13 |
:100DF000822F0E947EAC892F805D8093340C8AE321 |
:100E00008093350C81E1289FF0011124A6E3BCE01A |
:100E1000EC59F24F9FE084918D939150319697FF5A |
:100E2000FACFDEC080911E04882361F0A3E3BCE00A |
:100E3000EEEBFFE094E184918D939150319697FF12 |
:100E4000FACFC0C28091270485FF0CC0A3E3BCE0A9 |
:100E5000E4EDFFE094E184918D939150319697FFFA |
:100E6000FACFB0C280916D05882301F1A3E3BCE005 |
:100E7000E7EBFFE096E084918D939150319697FFD8 |
:100E8000FACF80910101805D8093370CAAE3BCE02A |
:100E9000E1EFF8E09BE081918D93915097FFFBCFBC |
:100EA00080E28093450C8093460CB8C03091790560 |
:100EB000332309F497C087E58093330C80E5809352 |
:100EC000340C40E24093350C20917A05822F6AE081 |
:100ED0000E947EAC805D8093360C822F0E947EAC97 |
:100EE000892F805D8093370C8FE28093380C832F9D |
:100EF0000E947EAC805D8093390C832F0E947EAC73 |
:100F0000892F805D80933A0C40933B0C20917205B1 |
:100F10003091730583E0293E380780F0C90168EEFF |
:100F200073E00E948AACCB01805D80933C0CC901C8 |
:100F300068EE73E00E948AAC9C0102C040933C0CB6 |
:100F40002536310580F0C90164E670E00E948AAC64 |
:100F5000CB01805D80933D0CC90164E670E00E9486 |
:100F60008AAC9C0103C080E280933D0CC9016AE019 |
:100F700070E00E948AACCB01805D80933E0CC90179 |
:100F80006AE070E00E948AAC805D80933F0C8DE641 |
:100F90008093400C80E28093410C209178052536A7 |
:100FA00060F0822F64E60E947EAC805D8093420CEC |
:100FB000822F0E947EAC292F02C08093420C822F88 |
:100FC0006AE00E947EAC805D8093430C822F0E9479 |
:100FD0007EAC892F805D8093440C83E78093450C21 |
:100FE00080E261CF80914B048823D9F4A3E3BCE075 |
:100FF000ECEEFFE090E184918D939150319697FF54 |
:10100000FACF82E38093430C8EE28093440C80E31A |
:101010008093450C86E38093460C86E68093470CCC |
:10102000D1C1A3E3BCE0EAEEFFE094E184918D93AB |
:101030009150319697FFFACF8091F002882309F4FE |
:10104000C1C182E58093330CBDC180915A04909157 |
:101050005B04A0915C04B0915D04BC01CD0124E669 |
:1010600030E040E050E00E94D3ACDA01C9018C507E |
:101070009E4F9093100D80930F0D8091FC0C882350 |
:1010800019F40E940F8602C080E395E79093120D39 |
:101090008093110D88E78093130D8091400B80930E |
:1010A000140D80913F0B81FF02C084E407C0809142 |
:1010B000410B833011F480E201C081E28093150D71 |
:1010C0008AEF9CE090939905809398058091980110 |
:1010D0008093210D8091150D8093230D8091450BF8 |
:1010E0009091460B97FD0196959587958093160DE7 |
:1010F00069C10E94F68480915A0490915B04A0918A |
:101100005C04B0915D04BC01CD0124E630E040E018 |
:1011100050E00E94D3ACDA01C9018C509E4F9093ED |
:10112000DB0B8093DA0B809126019091270190933D |
:10113000D50B8093D40B8091260190912701909339 |
:10114000D70B8093D60B80912B0B90912C0B97FD96 |
:101150000196959587958093C60B8093CD0B209132 |
:10116000450B3091460B37FF02C02F5F3F4F35953F |
:1011700027952093CB0B8091430B9091440B64E116 |
:1011800070E00E948AAC6093CC0B2093D20B6093EA |
:10119000D30B8091FC0C882319F40E940F8602C0A7 |
:1011A00080E395E79093E30B8093E20B88E78093CD |
:1011B000E40B80912601909127019093DF0B80939F |
:1011C000DE0B809170058C5E8093D80B8091710549 |
:1011D0008C5E8093D90B8091BD0B9091BE0B6AE021 |
:1011E00070E00E948AAC7093E10B6093E00B8091F9 |
:1011F000FC0C8093C20B8091B90B9091BA0B909329 |
:10120000DD0B8093DC0B80EC9BE090939905809341 |
:1012100098052091F3023091F402C9016CE370E06B |
:101220000E948AAC6093E70BC9016CE370E00E94F6 |
:101230008AAC8093E80BC6C00E94F6848091430B71 |
:101240009091440B64E670E00E948AAC7093020CAB |
:101250006093010C80912B0B90912C0B97FD0196C4 |
:10126000959587958093F20B8091920190919301CF |
:1012700097FD0196959587958093F30B80910808CB |
:101280008093F60B8091450B9091460B97FD01964C |
:10129000959587958093F70B80910201482F5527EC |
:1012A0009A012E5F3F4F80912601909127012817C8 |
:1012B000390784F48091260190912701841B950BB6 |
:1012C0009C01220F331F280F391F822F86508093D5 |
:1012D000FE0B02C01092FE0B8091FE0B853618F0BB |
:1012E00084E68093FE0B8091400599279093000C33 |
:1012F0008093FF0B80915A0490915B04A0915C0451 |
:10130000B0915D04BC01CD0124E630E040E050E046 |
:101310000E94D3ACDA01C9018C509E4F9093040C0B |
:101320008093030C80912601909127019093F90BF3 |
:101330008093F80B80912601909127019093FB0BED |
:101340008093FA0B8091FC0C882319F40E940F867D |
:1013500002C080E395E79093060C8093050C809182 |
:10136000FC0C88588093070C8091260190912701EE |
:1013700090930B0C80930A0C809170058C5E809387 |
:10138000FC0B809171058C5E8093FD0B8091BD0BF1 |
:101390009091BE0B6AE070E00E948AAC70930D0CD5 |
:1013A00060930C0C1092EE0B8091B90B9091BA0BDC |
:1013B0009093090C8093080C8CEE9BE09093990518 |
:1013C000809398052CE230E002C020E030E0C901B3 |
:1013D0001F910895EF92FF920F931F93CF93DF9386 |
:1013E00080916B0590916C059C0173E0220F331F77 |
:1013F0007A95E1F7281B390B8091460390914703BA |
:10140000280F391F37FF02C0295F3F4F63E0359532 |
:1014100027956A95E1F730936C0520936B058091D1 |
:10142000830599278330910511F40C94D29384306D |
:10143000910564F48130910509F43DC38230910532 |
:101440000CF03AC7892B91F00C942E9A85309105B7 |
:1014500011F40C9486968530910514F40C944695FD |
:10146000069711F40C9410980C942E9A8091820592 |
:10147000282F3327442755278F5F80938205F90152 |
:101480002131310510F00C942B9AEC58FF4F0C943D |
:1014900025AD8091270485FF2AC080E00E9449A4E1 |
:1014A00080912601909127016AE070E00E949EAC35 |
:1014B0009F938F9380912601909127016AE070E0BD |
:1014C0000E949EAC7F936F9386E190E19F938F93F0 |
:1014D0008CE394EA9F938F93E091D105F091D2052C |
:1014E00009952DB73EB7285F3F4F2DBF28C080E03C |
:1014F0000E9449A480912601909127016AE070E042 |
:101500000E949EAC9F938F9380912601909127011A |
:101510006AE070E00E949EAC7F936F9383E290E15B |
:101520009F938F938BE194EA9F938F93E091D105E2 |
:10153000F091D20509958DB79EB708968DBF809121 |
:10154000220B80FF40C0809177048823E9F08AE075 |
:101550000E9449A48091430199279F938F93809182 |
:101560005A0490915B04A0915C04B0915D04BC01AD |
:10157000CD0124E630E040E050E00E94D3AC3F9340 |
:101580002F9380E390E1B9C68AE00E9449A480913C |
:101590005A0490915B04A0915C04B0915D04BC017D |
:1015A000CD0124E630E040E050E00E94D3AC3F9310 |
:1015B0002F938CE390E19F938F938BE194EA9F9319 |
:1015C0008F930C9446998AE00E9449A487E490E1A5 |
:1015D0000C942F988091270485FF2AC085E10E94F2 |
:1015E00049A48091F3029091F4026CE370E00E94B0 |
:1015F0008AAC9F938F938091F3029091F4026CE3F5 |
:1016000070E00E948AAC7F936F9381E590E19F9395 |
:101610008F938CE394EA9F938F93E091D105F0919F |
:10162000D20509952DB73EB7285F3F4F2DBF28C083 |
:1016300085E10E9449A48091F3029091F4026CE349 |
:1016400070E00E948AAC9F938F938091F3029091F7 |
:10165000F4026CE370E00E948AAC7F936F938EE596 |
:1016600090E19F938F938BE194EA9F938F93E09106 |
:10167000D105F091D20509958DB79EB708968DBF1B |
:101680008FE10E9449A480E690E09F938F93809120 |
:101690002B0B90912C0B9F938F938BE690E19F9354 |
:1016A0008F93CBE1D4EADF93CF93E091D105F09112 |
:1016B000D2050995809126042DB73EB7285F3F4F8C |
:1016C0002DBF80FF06C089E20E9449A486E790E111 |
:1016D00070C389E20E9449A488E790E1C8C680915E |
:1016E000270485FF1BC08AE20E9449A48091BD0B9C |
:1016F0009091BE0B9F938F938AE790E19F938F9376 |
:101700008CE394EA9F938F93E091D105F091D205F9 |
:1017100009958DB79EB706968DBF1BC08AE20E94C1 |
:1017200049A48091BD0B9091BE0B9F938F9382E84B |
:1017300090E19F938F938BE194EA9F938F93E09135 |
:10174000D105F091D20509952DB73EB72A5F3F4FDD |
:101750002DBF86E30E9449A48091B90B9091BA0BEA |
:101760006AE070E00E948AAC9F938F938091B90BDE |
:101770009091BA0B6AE070E00E948AAC7F936F93FD |
:101780008AE890E19F938F938BE194EA9F938F93E4 |
:101790000C94219489E00E9449A486E990E19F93EA |
:1017A0008F930BE114EA1F930F93E091D105F09111 |
:1017B000D20509958EE10E9449A40F900F900F90D9 |
:1017C0000F9088E990E19F938F931F930F93E0917F |
:1017D000D105F091D205099583E30E9449A40F90A9 |
:1017E0000F900F900F908AE990E19F938F931F9332 |
:1017F0000F93E091D105F091D20509958FE30E94F6 |
:1018000049A40F900F900F900F908CE990E19F9357 |
:101810008F931F930F93E091D105F091D205099515 |
:101820008EE70E9449A40F900F900F900F9082EBCB |
:1018300090E10C9479958091A601882309F462C007 |
:101840008DE50E9449A488EC90E19F938F93CBE1B2 |
:10185000D4EADF93CF93E091D105F091D2050995B9 |
:1018600084E50E9449A40F900F900F900F908091F3 |
:10187000400B99279F938F938AEC90E19F938F93CE |
:10188000DF93CF93E091D105F091D20509958EE5D4 |
:101890000E9449A42DB73EB72A5F3F4F2DBF8091CC |
:1018A000430B9091440B6AE070E00E948AAC7F93F6 |
:1018B0006F9383ED90E19F938F93DF93CF93E091AC |
:1018C000D105F091D20509958DB79EB706968DBFCB |
:1018D0008091410B833081F480913F0B81FF06C0E2 |
:1018E0008BE50E9449A48DED90E1C1C58BE50E9476 |
:1018F00049A480EE90E1BBC58BE50E9449A483EE2C |
:1019000090E128C784E00C94B2988091A6018823C6 |
:1019100011F40C94B198809185055BE1E52E54EAB1 |
:10192000F52E882309F44BC089E60E9449A48091D2 |
:101930003F0599279F938F9386EE90E19F938F9316 |
:10194000FF92EF92E091D105F091D205099585E7DC |
:101950000E9449A42DB73EB72A5F3F4F2DBF80910B |
:10196000980199279F938F9300E610E01F930F93A0 |
:101970008091450B9091460B9F938F9381EF90E15F |
:101980009F938F93FF92EF92E091D105F091D20552 |
:10199000099582E70E9449A48DB79EB70A968DBF2C |
:1019A00080913D0599279F938F931F930F9380916B |
:1019B0003E0599279F938F938DEF90E176C689E638 |
:1019C0000E9449A48091980199279F938F9380E664 |
:1019D00090E09F938F938091450B9091460B9F933E |
:1019E0008F938091420B99279F938F938DE091E184 |
:1019F0009F938F93FF92EF92E091D105F091D205E2 |
:101A000009958DB79EB70C960C944E999091400510 |
:101A10009923D1F080919505882381F0933270F459 |
:101A200087E00E94378583E90E9449A480914005A0 |
:101A300099279F938F9386E291E1D2C383E90E9415 |
:101A400049A481E391E1E1C3809127044BE1E42EB5 |
:101A500044EAF42E85FF07C084E90E9449A487E385 |
:101A600091E10C949B9583E90E9449A48AE491E159 |
:101A70000C949B9580915F0D823029F40E944EA4B6 |
:101A800085E00C94249A863069F48091850588233A |
:101A900021F0109285050C94289A81E080938505A9 |
:101AA0000C94289A883011F00C94289A0E944EA425 |
:101AB00081E00C94249A80918205282F33274427B3 |
:101AC00055278F5F80938205F9012131310510F090 |
:101AD0000C942B9AEB57FF4F0C9425AD8091270463 |
:101AE00085FF44C080E00E9449A48091BD0B909185 |
:101AF000BE0B9F938F9380912601909127016AE0FE |
:101B000070E00E949EAC9F938F93809126019091EC |
:101B100027016AE070E00E949EAC7F936F938091F2 |
:101B2000F3029091F4026CE370E00E948AAC9F9300 |
:101B30008F938091F3029091F4026CE370E00E9425 |
:101B40008AAC7F936F9380E691E19F938F938CE3B0 |
:101B500094EA9F938F93E091D105F091D205099576 |
:101B60002DB73EB7225F3F4F0C94F49680E00E9461 |
:101B700049A48091BD0B9091BE0B9F938F93809150 |
:101B80002601909127016AE070E00E949EAC9F932D |
:101B90008F9380912601909127016AE070E00E9466 |
:101BA0009EAC7F936F938091F3029091F4026CE36B |
:101BB00070E00E948AAC9F938F938091F302909182 |
:101BC000F4026CE370E00E948AAC7F936F938BE722 |
:101BD00091E1E7C285E10E9449A480E690E09F93ED |
:101BE0008F9380912B0B90912C0B9F938F9386E971 |
:101BF00091E19F938F93CBE1D4EADF93CF93E09170 |
:101C0000D105F091D20509958091220B2DB73EB7F1 |
:101C1000285F3F4F2DBF80FF51C0809177048823FC |
:101C200039F18FE10E9449A480915A0490915B049C |
:101C3000A0915C04B0915D04BC01CD0124E630E0CC |
:101C400040E050E00E94D3AC3F932F9380EA91E1B3 |
:101C50009F938F938BE294EA9F938F93E091D105AA |
:101C6000F091D20509958DB79EB706968DBF38C005 |
:101C70008FE10E9449A480915A0490915B04A09145 |
:101C80005C04B0915D04BC01CD0124E630E040E08D |
:101C900050E00E94D3AC3F932F9389EA91E19F9348 |
:101CA0008F93DF93CF93E091D105F091D205099501 |
:101CB0002DB73EB72A5F3F4F2DBF12C08FE10E9464 |
:101CC00049A482EB91E19F938F93DF93CF93E091AF |
:101CD000D105F091D20509950F900F900F900F90BC |
:101CE00089E20E9449A48091430199279F938F9391 |
:101CF0008CEB91E117C48091A6018823F9F08BE267 |
:101D00000E9449A48091980199279F938F93809175 |
:101D1000430B9091440B6AE070E00E948AAC7F9381 |
:101D20006F9380E690E09F938F938091450B909105 |
:101D3000460B9F938F938FEB91E165C182E00C94EA |
:101D4000B2988FE30E9449A48091BB0B9091BC0B89 |
:101D50009F938F938091B90B9091BA0B6AE070E0DA |
:101D60000E948AAC9F938F938091B90B9091BA0B8C |
:101D70006AE070E00E948AAC7F936F9386ED91E1F8 |
:101D80009F938F93CBE1D4EADF93CF93E091D1057A |
:101D9000F091D2050995809126042DB73EB7265FB4 |
:101DA0003F4F2DBF80FF0BC082E50E9449A48AEE01 |
:101DB00091E19F938F938BE294EA0C94339882E5A0 |
:101DC0000E9449A48DEE91E152C38091A6013BE1AE |
:101DD000E32E34EAF32E882309F44BC084E50E94F5 |
:101DE00049A48091400B99279F938F938091420B38 |
:101DF00099279F938F9380EF91E19F938F93E701B2 |
:101E0000FF92EF92E091D105F091D20509958DB73F |
:101E10009EB708968DBF8091410B833051F484E6C4 |
:101E20000E9449A483E092E19F938F93FF92EF92E7 |
:101E30000BC084E60E9449A489E092E19F938F93AE |
:101E40008CE394EA9F938F93E091D105F091D205B2 |
:101E500009950F900F900F900F9080913F0B81FD8F |
:101E600002C00C94309A84E60E9449A48FE092E16B |
:101E7000FEC284E50E9449A485E192E15CC680919E |
:101E800084052BE1E22E24EAF22E882309F45BC0BC |
:101E900089E60E9449A483E00E94F0836AE070E032 |
:101EA0000E948AAC9F938F9383E00E94F0836AE044 |
:101EB00070E00E948AAC7F936F9382E00E94F0836F |
:101EC0006AE070E00E948AAC9F938F9382E00E9448 |
:101ED000F0836AE070E00E948AAC7F936F9381E0A8 |
:101EE0000E94F0836AE070E00E948AAC9F938F9317 |
:101EF00081E00E94F0836AE070E00E948AAC7F93E8 |
:101F00006F9380E00E94F0836AE070E00E948AACE8 |
:101F10009F938F9380E00E94F0836AE070E00E94BC |
:101F20008AAC7F936F938BE292E19F938F93FF92A2 |
:101F3000EF92E091D105F091D20509952DB73EB70A |
:101F40002C5E3F4F51C789E60E9449A480E690E08D |
:101F50009F938F938091C40999279F938F9380912A |
:101F6000B50999279F938F938091A60999279F93ED |
:101F70008F938091970999279F938F9388E492E19B |
:101F80009F938F93FF92EF92E091D105F091D2054C |
:101F900009958DB79EB70E960C944E998091840545 |
:101FA00090917408882309F4B1C0943009F4B0C04A |
:101FB0009630C9F58EE70E9449A485E00E94F0831F |
:101FC0006AE070E00E948AAC9F938F9385E00E9444 |
:101FD000F0836AE070E00E948AAC7F936F9384E0A4 |
:101FE0000E94F0836AE070E00E948AAC9F938F9316 |
:101FF00084E00E94F0836AE070E00E948AAC7F93E4 |
:102000006F938BE592E19F938F938BE194EA9F937B |
:102010008F93E091D105F091D20509952DB73EB788 |
:10202000245F3F4FE1C6973010F40C94309A8EE74E |
:102030000E9449A488E00E94F0836AE070E00E9458 |
:102040008AAC9F938F9388E00E94F0836AE070E0EF |
:102050000E948AAC7F936F9387E00E94F0836AE0CE |
:1020600070E00E948AAC9F938F9387E00E94F08378 |
:102070006AE070E00E948AAC7F936F9386E00E94D2 |
:10208000F0836AE070E00E948AAC9F938F9386E0B1 |
:102090000E94F0836AE070E00E948AAC7F936F93A5 |
:1020A00085E00E94F0836AE070E00E948AAC9F9312 |
:1020B0008F9385E00E94F0836AE070E00E948AAC12 |
:1020C0007F936F9384E00E94F0836AE070E00E9447 |
:1020D0008AAC9F938F9384E00E94F0836AE070E063 |
:1020E0000E948AAC7F936F938AE692E19F938F93CD |
:1020F0008BE194EA9F938F93E091D105F091D20503 |
:1021000009958DB79EB748960C944E99943019F462 |
:1021100086E00C94B298963019F58EE70E9449A497 |
:1021200080E690E09F938F938091E20999279F9397 |
:102130008F938091D30999279F938F9387E892E19A |
:102140009F938F938BE194EA9F938F93E091D105B6 |
:10215000F091D20509952DB73EB7265F3F4F44C693 |
:10216000973010F40C94309A8EE70E9449A480E6D0 |
:1021700090E09F938F938091000A99279F938F936C |
:102180008091F10999279F938F938091E209992774 |
:102190009F938F938091D30999279F938F938AE977 |
:1021A00092E19F938F938BE194EA9F938F93ECCE70 |
:1021B00090914005992309F44BC08091950588239F |
:1021C000F9F09332E8F487E00E94378583E90E94B2 |
:1021D00049A48091400599279F938F938DEA92E1BE |
:1021E0009F938F938BE294EA9F938F93E091D10515 |
:1021F000F091D20509952DB73EB72A5F3F4FF4C540 |
:1022000083E90E9449A488EB92E19F938F930BE1AD |
:1022100014EA1F930F93E091D105F091D20509952F |
:102220001F921F929091400581E1989FC001112457 |
:102230008C59924F9F938F931F930F93E091D105E9 |
:10224000F091D20509958DB79EB70A960C944E99D8 |
:10225000809127049BE1E92E94EAF92E85FF06C0C0 |
:1022600084E90E9449A48EEB92E165C483E90E944F |
:1022700049A481ED92E15FC480915F0D863079F4CD |
:1022800080918405882319F01092840503C081E0B1 |
:102290008093840585E00E94378586E072C288308D |
:1022A00009F4F0C3813011F00C94289A0E944EA4D6 |
:1022B000109283050C94269A80918205282F33274B |
:1022C000442755278F5F80938205F901213131051D |
:1022D00010F00C942B9AEA56FF4F0C9425AD80E039 |
:1022E0000E9449A481EF98E09F938F938091010110 |
:1022F00099279F938F9387EE92E19F938F938BE221 |
:1023000094EA9F938F9367C585E10E9449A48FEF5C |
:1023100098E09F938F93809102016AE00E947EACC7 |
:10232000892F99279F938F93809102010E947EAC01 |
:1023300099279F938F9386EF92E19F938F938BE1E1 |
:1023400094EA9F938F9307C78AE20E9449A487E08B |
:1023500093E19F938F93CBE1D4EADF93CF93E09106 |
:10236000D105F091D20509958091220B0F900F9025 |
:102370000F900F9080FF41C08091820890913D04A2 |
:1023800081FD0BC0892F99279F938F938CE093E158 |
:102390009F938F93DF93CF9329CFE091D105F09155 |
:1023A000D205933318F086E193E102C08DE193E109 |
:1023B0009F938F93DF93CF9309950F900F900F907A |
:1023C0000F908091060BE091D105F091D20590918C |
:1023D0003D0480FF0BC0892F99279F938F9384E240 |
:1023E00093E19F938F93DF93CF9354C7892F9927BE |
:1023F0009F938F938AE293E1BBC080E393E137C060 |
:102400008FE30E9449A489E393E19F938F93CBE1EB |
:10241000D4EADF93CF93E091D105F091D2050995ED |
:102420000F900F900F900F908091D908882319F486 |
:102430008DE393E11CC080913404E091D105F091CB |
:10244000D205882319F086E493E102C08DE493E17C |
:102450009F938F93DF93CF9309950F900F900F90D9 |
:102460000F908091EF0886FFFBC784E593E19F936F |
:102470008F93DF93CF93F9C584E50E9449A48BE540 |
:1024800093E19F938F93CBE1D4EADF93CF93E091D5 |
:10249000D105F091D20509958091220B0F900F90F4 |
:1024A0000F900F9085FD03C080E693E108C08091F6 |
:1024B000C6080E94CE4A823358F489E693E19F937E |
:1024C0008F93DF93CF93E091D105F091D20516C0A1 |
:1024D000843B18F080E793E1F2CF8091EF08E09120 |
:1024E000D105F091D20585FF03C087E793E102C0D3 |
:1024F0008EE793E19F938F93DF93CF9309950F908E |
:102500000F900F900F908091DD08882309F4A8C7E1 |
:102510008EE50E9449A48091DD0899279F938F93AF |
:1025200085E893E19F938F93DF93CF93AFC689E6BE |
:102530000E9449A480E993E19F938F93CBE1D4EA71 |
:10254000DF93CF93E091D105F091D20509950F90DB |
:102550000F900F900F908091DC08E091D105F091E1 |
:10256000D205882351F099279F938F938AE993E1AD |
:102570009F938F93DF93CF933DCE8EE993E19F930B |
:102580008F93DF93CF9375C5809186050BE1E02E85 |
:1025900004EAF02E882309F053C08EE70E9449A474 |
:1025A0008091710199279F938F9380917708E82FED |
:1025B000FF27EE0FFF1FEB5BF54F808191819F930B |
:1025C0008F9380917608E82FFF27EE0FFF1FEB5BBC |
:1025D000F54F808191819F938F9384EA93E19F933C |
:1025E0008F93FF92EF92E091D105F091D20509957A |
:1025F00083E90E9449A48DB79EB70A968DBF80914A |
:102600007908E82FFF27EE0FFF1FEB5BF54F808166 |
:1026100091819F938F9380917808E82FFF27EE0F89 |
:10262000FF1FEB5BF54F8081918181589F4F9F93F6 |
:102630008F9388EB93E19F938F93FF92EF92CBC39D |
:102640008EE70E9449A48091630499279F938F93FA |
:102650008091620499279F938F93809161049927B9 |
:102660009F938F9387EC93E19F938F93FF92EF92C9 |
:10267000E091D105F091D205099583E90E9449A422 |
:102680008DB79EB70A968DBF8091660499279F9358 |
:102690008F938091650499279F938F938091640411 |
:1026A00099279F938F938BED93E19F938F93FF9245 |
:1026B000EF924CCD80919505882309F4D1C68EE721 |
:1026C0000E9449A48091220B86FD11C08FEE93E1F8 |
:1026D0009F938F938CE394EA9F938F93E091D1051E |
:1026E000F091D20509950F900F900F900F90809167 |
:1026F000ED0899278F709070892B89F08EEF93E108 |
:102700009F938F938CE394EA9F938F93E091D105ED |
:10271000F091D20509950F900F900F900F90809136 |
:10272000220B82FF11C088E094E19F938F938CE38A |
:1027300094EA9F938F93E091D105F091D20509958A |
:102740000F900F900F900F908091220B83FD88C601 |
:102750008DE094E19F938F938CE394EA84C400917D |
:102760005F0D063089F480918605882319F0109258 |
:10277000860503C081E08093860586E00E94378548 |
:1027800087E00E94378564C6083021F40E944EA479 |
:1027900083E05AC6013009F05BC60E944EA4009344 |
:1027A000830554C680918205282F33278F5F80933D |
:1027B00082052230310509F453C0233031053CF441 |
:1027C0002115310549F02130310501F144C626308B |
:1027D00031050CF040C683C080E00E9449A48BE123 |
:1027E00094E19F938F930BE114EA1F930F93E09171 |
:1027F000D105F091D205099585E10E9449A40F9079 |
:102800000F900F900F908AE294E173C18091790547 |
:102810001BE1E12E14EAF12E8823E1F08EE70E94FD |
:1028200049A48091790599279F938F9380917A0588 |
:1028300099279F938F938FE394E19F938F93FF92B8 |
:10284000EF92E091D105F091D20509958DB79EB731 |
:10285000089624C58EE70E9449A481E594E16BC1E6 |
:1028600083E90E9449A480912601909127016AE0A2 |
:1028700070E00E949EAC9F938F938091260190916F |
:1028800027016AE070E00E949EAC7F936F9384E61C |
:1028900094E19F938F930BE114EA1F930F93E091C0 |
:1028A000D105F091D20509958EE90E9449A42DB772 |
:1028B0003EB7285F3F4F2DBF88E19CE09F938F93E9 |
:1028C0008EE694E19F938F931F930F93E091D10530 |
:1028D000F091D20509958DB79EB706968DBF809170 |
:1028E000B3018823E9F1809187058823C9F080919D |
:1028F00095058823A9F089E40E9449A481E794E121 |
:102900009F938F938BE194EA9F938F93E091D105EE |
:10291000F091D20509950F900F900F900F901AC06B |
:1029200089E40E9449A48091B30199279F938F93D2 |
:1029300085E794E19F938F938BE194EA9F938F9324 |
:10294000E091D105F091D20509952DB73EB72A5FE8 |
:102950003F4F2DBF8FE30E9449A48CE794E105C04F |
:102960008FE30E9449A487E894E19F938F938BE1C2 |
:1029700094EA9F938F93E091D105F091D205099548 |
:102980000F900F900F900F9080917605882331F46F |
:1029900084E50E9449A486E994E139C08091410B05 |
:1029A000833081F580918705882351F08091B301B0 |
:1029B000882331F084E50E9449A484EA94E105C0AB |
:1029C00084E50E9449A482EB94E19F938F938BE16D |
:1029D00094EA9F938F93E091D105F091D2050995E8 |
:1029E0000F900F900F900F9080915F0D8630F1F453 |
:1029F0008091B301882319F0806880937705109245 |
:102A0000870514C084E50E9449A480EC94E19F935B |
:102A10008F938BE194EA9F938F93E091D105F0918E |
:102A2000D20509950F900F900F900F9080915F0D38 |
:102A3000843059F49091B301809176059817E8F4A9 |
:102A400081E080938705980F0AC0823069F49091E5 |
:102A5000B301923090F081E080938705915090937C |
:102A6000B3011092950509C0883039F40E944EA434 |
:102A700084E0809383051092820580915F0D813000 |
:102A800009F0E6C40E944EA482E0DEC48091820573 |
:102A9000282F33278F5F809382052230310509F478 |
:102AA0004FC0233031053CF42115310549F0213068 |
:102AB000310521F1D0C4263031050CF0CCC47FC0E3 |
:102AC00080E00E9449A48EEC94E19F938F930BE1E8 |
:102AD00014EA1F930F93E091D105F091D205099567 |
:102AE00085E10E9449A40F900F900F900F908DEDFB |
:102AF00094E19F938F931F930F93B7C280917905B1 |
:102B0000CBE1EC2EC4EAFC2E882381F08EE70E94F4 |
:102B100049A48091790599279F938F9380917A0595 |
:102B200099279F938F938FEE94E187CE8EE70E9433 |
:102B300049A481E095E19F938F93FF92EF9295C214 |
:102B400083E90E9449A480912601909127016AE0BF |
:102B500070E00E949EAC9F938F938091260190918C |
:102B600027016AE070E00E949EAC7F936F9383E13F |
:102B700095E19F938F930BE114EA1F930F93E091DC |
:102B8000D105F091D20509958EE90E9449A42DB78F |
:102B90003EB7285F3F4F2DBF88E19CE09F938F9306 |
:102BA0008DE195E19F938F931F930F93E091D10552 |
:102BB000F091D20509958DB79EB706968DBF8FE32C |
:102BC0000E9449A480E295E19F938F93CBE1D4EAE0 |
:102BD000DF93CF93E091D105F091D20509950F9045 |
:102BE0000F900F900F908091B401882339F180915C |
:102BF0008805882351F080919505882331F089E478 |
:102C00000E9449A48BE295E11EC089E40E9449A478 |
:102C10008091B40199279F938F938FE295E19F93C1 |
:102C20008F93DF93CF93E091D105F091D205099571 |
:102C30002DB73EB72A5F3F4F2DBF12C089E40E94D7 |
:102C400049A489E395E19F938F93DF93CF93E0911C |
:102C5000D105F091D20509950F900F900F900F902C |
:102C600080917605882331F484E50E9449A48DE3A0 |
:102C700095E113C080918805882351F08091B401BB |
:102C8000882331F084E50E9449A48BE495E105C0D6 |
:102C900084E50E9449A489E595E19F938F938BE198 |
:102CA00094EA9F938F93E091D105F091D205099515 |
:102CB0000F900F900F900F9080915F0D843061F412 |
:102CC0009091B40180917605981708F0A6C181E033 |
:102CD00080938805980F0BC0823061F49091B40105 |
:102CE000923008F49AC181E08093880591509093C6 |
:102CF000B40185C1863009F085C18091B401882373 |
:102D000011F0809377051092880587C18091820524 |
:102D1000282F33278F5F809382052230310509F4F5 |
:102D200065C0233031053CF42115310549F02130CF |
:102D3000310561F090C3263031050CF08CC3A4C07E |
:102D400080E00E9449A487E695E189C18AE20E9459 |
:102D500049A480912601909127016AE070E00E94C9 |
:102D60009EAC9F938F9380912601909127016AE0FA |
:102D700070E00E949EAC7F936F938DE795E19F93E7 |
:102D80008F930BE114EA1F930F93E091D105F0911B |
:102D9000D20509958FE30E9449A48DB79EB7089686 |
:102DA0008DBF8091F3029091F4026CE370E00E9479 |
:102DB0008AAC9F938F938091F3029091F4026CE31D |
:102DC00070E00E948AAC7F936F9388E895E19F93AF |
:102DD0008F931F930F93E091D105F091D205099540 |
:102DE0002DB73EB7285F3F4F2DBF3AC385E30E9402 |
:102DF00049A480915A0490915B04A0915C04B09125 |
:102E00005D04BC01CD0124E630E040E050E00E94CA |
:102E1000D3AC3F932F9383E995E19F938F930BE17D |
:102E200014EA1F930F93E091D105F091D205099513 |
:102E30008AE40E9449A48DB79EB706968DBF80E6AE |
:102E400090E09F938F9380912B0B90912C0B9F93ED |
:102E50008F938CE995E19F938F931F930F93E0914C |
:102E6000D105F091D20509958FE50E9449A42DB7AF |
:102E70003EB7285F3F4F2DBF8091710199279F93E7 |
:102E80008F9387EA95E1FEC18EE70E9449A480EB0B |
:102E900095E19F938F93CBE1D4EADF93CF93E091B9 |
:102EA000D105F091D20509950F900F900F900F90DA |
:102EB00080918905882339F180918A05882351F012 |
:102EC00080919505882331F08BE80E9449A48DEB11 |
:102ED00095E11EC08BE80E9449A48091890599273D |
:102EE0009F938F9381EC95E19F938F93DF93CF9383 |
:102EF000E091D105F091D20509952DB73EB72A5F33 |
:102F00003F4F2DBF12C08BE80E9449A486EC95E18B |
:102F10009F938F93DF93CF93E091D105F091D205EA |
:102F200009950F900F900F900F908091410B833077 |
:102F3000B9F580917605882331F483E90E9449A48C |
:102F400089EC95E10DC080918A058823C9F08091B4 |
:102F500089058823A9F083E90E9449A487ED95E1BA |
:102F60009F938F938BE194EA9F938F93E091D10588 |
:102F7000F091D20509950F900F900F900F9003C01C |
:102F800087E00E94378580915F0D8630E9F480915B |
:102F90008905882311F08093740510928A0514C066 |
:102FA00083E90E9449A486EE95E19F938F938BE17C |
:102FB00094EA9F938F93E091D105F091D205099502 |
:102FC0000F900F900F900F9080915F0D843059F407 |
:102FD00090918905809176059817F8F481E08093A7 |
:102FE0008A05980F0AC0823069F490918905923061 |
:102FF000A0F081E080938A0591509093890510920A |
:1030000095050BC0883049F40E944EA48091830539 |
:103010008F5F809383051092820580915F0D0DC2B2 |
:1030200080918205282F33278F5F8093820522307D |
:10303000310509F49AC0233031053CF421153105DE |
:1030400049F021303105D9F006C2263031050CF0A7 |
:1030500002C226C180E00E9449A484EF95E19F93BB |
:103060008F938BE194EA9F938F93E091D105F09138 |
:10307000D20509950F900F900F900F90F1C18AE241 |
:103080000E9449A480912601909127016AE070E096 |
:103090000E949EAC9F938F9380912601909127016F |
:1030A0006AE070E00E949EAC7F936F9389E096E1A6 |
:1030B0009F938F93CBE1D4EADF93CF93E091D10537 |
:1030C000F091D20509958FE30E9449A48DB79EB770 |
:1030D00008968DBF8091F3029091F4026CE370E04A |
:1030E0000E948AAC9F938F938091F3029091F40297 |
:1030F0006CE370E00E948AAC7F936F9384E196E169 |
:103100009F938F93DF93CF93E091D105F091D205F8 |
:1031100009952DB73EB7285F3F4F2DBF80917905A8 |
:103120008823F9F089E60E9449A480917205909164 |
:1031300073059F938F938091790599279F938F9320 |
:1031400080917A0599279F938F938FE196E19F93C2 |
:103150008F93DF93CF93E091D105F091D20509953C |
:1031600072C885E00E9437857BC180914F04BBE126 |
:10317000EB2EB4EAFB2E8823C1F182E30E9449A41E |
:103180008091500490915104A0915204B091530445 |
:10319000BC01CD0124E630E040E050E00E94D3AC19 |
:1031A0003F932F9380915A0490915B04A0915C040B |
:1031B000B0915D04BC01CD0124E630E040E050E078 |
:1031C0000E94D3AC3F932F9384E396E19F938F9318 |
:1031D000FF92EF92E091D105F091D20509952DB7BC |
:1031E0003EB7285F3F4F2DBF24C082E30E9449A411 |
:1031F00080915A0490915B04A0915C04B0915D04AD |
:10320000BC01CD0124E630E040E050E00E94D3ACA8 |
:103210003F932F9381E496E19F938F93FF92EF92D8 |
:10322000E091D105F091D20509958DB79EB706962C |
:103230008DBF87E40E9449A480E690E09F938F931E |
:1032400080912B0B90912C0B9F938F938EE496E1A2 |
:103250009F938F930BE114EA1F930F93E091D10595 |
:10326000F091D20509958CE50E9449A42DB73EB78F |
:10327000285F3F4F2DBF8091710199279F938F93B6 |
:1032800089E596E19F938F931F930F93E091D1056A |
:10329000F091D20509958DB79EB706968DBFE0C017 |
:1032A00080915F0D882349F08091F2079091F30798 |
:1032B00001969093F3078093F2078EE70E9449A44A |
:1032C00082E696E19F938F93CBE1D4EADF93CF938D |
:1032D000E091D105F091D20509950F900F900F90D4 |
:1032E0000F9080918B05882339F180918C0588237C |
:1032F00051F080919505882331F089E80E9449A416 |
:103300008EE696E11EC089E80E9449A480918B0553 |
:1033100099279F938F9382E796E19F938F93DF93F3 |
:10332000CF93E091D105F091D20509952DB73EB725 |
:103330002A5F3F4F2DBF12C089E80E9449A486E74B |
:1033400096E19F938F93DF93CF93E091D105F09116 |
:10335000D20509950F900F900F900F9080917605F0 |
:10336000882331F483E90E9449A489E796E10DC0DE |
:1033700080918C058823C9F080918B058823A9F062 |
:1033800083E90E9449A487E896E19F938F938BE19C |
:1033900094EA9F938F93E091D105F091D20509951E |
:1033A0000F900F900F900F901FC087E00E943785FD |
:1033B000809179058823C1F083E90E9449A488E1BE |
:1033C0009CE09F938F9385E996E19F938F938BE188 |
:1033D00094EA9F938F93E091D105F091D2050995DE |
:1033E0008DB79EB706968DBF80915F0D843059F4DE |
:1033F00090918B0580917605981750F581E0809328 |
:103400008C05980F0AC0823069F490918B05923038 |
:10341000F8F081E080938C05915090938B05109289 |
:10342000950516C0863049F480918B05882311F0EC |
:103430008093750510928C050BC0813049F40E9471 |
:103440004EA480918305815080938305109282055C |
:1034500010925F0D05C01092820502C01092830584 |
:10346000E6E0CDB7DEB70C9416AD4FB728E130E0FB |
:10347000F8948091C9008F778093C9008091C9002A |
:103480008F7B8093C9008091C9008F7D8093C90094 |
:10349000832F99278093CD002093CC008091C80082 |
:1034A00082608093C80080E18093C9008091CA0047 |
:1034B0008F778093CA008091CA008F7B8093CA0067 |
:1034C0008091CA008091CA008F7E8093CA0080914B |
:1034D000CA0088608093CA008091C9008B7F809366 |
:1034E000C9008091CA0084608093CA008091CA009C |
:1034F00082608093CA008091C80087FF03C08091DA |
:10350000CE00F9CF8091C90080688093C900809176 |
:103510003D0D846080933D0D4FBF089590915305FC |
:10352000992341F48F3031F490938E0580E5809398 |
:1035300053050895E0918E05EF5FE0938E05E83125 |
:1035400021F481E080938D050895E93120F089E12F |
:1035500080938E050895FF27EA5DF24F80830895DA |
:10356000A0E0B0E0E6EBFAE90C94F6AC91E0D92EDD |
:1035700082E0A82EBD2CE12C01E0F02E80913D0DC3 |
:1035800082FDB5C080916F008F7D80936F00E091C8 |
:10359000DF08EE2351F0FF27EE0FFF1FEB5BF54F27 |
:1035A00080819181843691055CF480916004883C2F |
:1035B00020F4809160048C5E01C088EC80936004EC |
:1035C0008091270D682F772780918F0581508093F8 |
:1035D0008F058F3F31F418EAC12E82E080938F056A |
:1035E00002C0C4E2CC2E40E04C1508F07EC0EA2DAB |
:1035F000FF27EA5DF24F80818D2111F06E297F292E |
:103600008D2D9927880F991FD82E882319F4B1E0A2 |
:10361000DB2EAD0CEE0CFF1C20E0E21628E0F206DB |
:1036200009F061C0A1E0EA2EF12CCB01805094405A |
:1036300065E070E00E949EACAB2DBB27FD01EA0F58 |
:10364000FB1FEB5BF54F808191819C01220F331FA3 |
:10365000280F391F260F371F37FF02C02D5F3F4F3E |
:10366000E901D595C795D595C795CB0101968C17DE |
:103670009D0714F4219706C061507040C617D70704 |
:103680000CF4219680916004833CD8F08D010A0FE0 |
:103690001B1FF801EB5BF54F80819181FE01E81B58 |
:1036A000F90BCF0163E070E00E949EACCB01880F64 |
:1036B000991F860F971F0557154FF8019183808337 |
:1036C00007C0AA0FBB1FA557B54F11961C921E929B |
:1036D000EB2DFF27EE0FFF1FEB5BF54FD183C08370 |
:1036E00060E070E0B3944F5F7FCF10924201109280 |
:1036F0008D05EAE0CDB7DEB70C9412AD08950895BC |
:1037000040E050E080919005909191059C01220F3E |
:10371000331F280F391F8091460390914703280FCC |
:10372000391F37FF02C02D5F3F4F359527953595DF |
:1037300027953093910520939005809143018B321A |
:10374000D9F480918708282F3327809154049091D1 |
:103750005504829FA001839F500D929F500D11240C |
:10376000CA0157FD4F96AC0125E0559547952A951E |
:10377000E1F74B5F5F4F3DC08D32D9F480918708F0 |
:10378000282F33278091540490915504829FA001E3 |
:10379000839F500D929F500D1124CA0157FD4F96E3 |
:1037A000AC0195E0559547959A95E1F74550504005 |
:1037B00020C0803271F48091270481FF1AC0C901B2 |
:1037C00037FD4F96AC0185E0559547958A95E1F711 |
:1037D00010C08E3529F480914F04482F552709C019 |
:1037E000863739F480914F04992744275527481B81 |
:1037F000590BCA01AA2797FDA095BA2F8093A7025B |
:103800009093A802A093A902B093AA0208950F93DF |
:103810001F930E94F6848091260190912701AA2788 |
:1038200097FDA095BA2F8093D6019093D701A093CE |
:10383000D801B093D9018091B90B9091BA0BAA2706 |
:10384000BB278093E9019093EA01A093EB01B09329 |
:10385000EC010AE010E08091BD0B9091BE0BB80125 |
:103860000E948AACCB01AA27BB278093FC019093CE |
:10387000FD01A093FE01B093FF0180915A04909145 |
:103880005B04A0915C04B0915D04BC01CD0124E611 |
:1038900030E040E050E00E94D3AC20930F02309320 |
:1038A0001002409311025093120280919201909164 |
:1038B0009301AA2797FDA095BA2F80932202909397 |
:1038C0002302A0932402B09325028091400B9927F4 |
:1038D000AA27BB278093350290933602A093370224 |
:1038E000B09338028091420B9927AA27BB27809377 |
:1038F000480290934902A0934A02B0934B028091F0 |
:10390000430B9091440BB8010E948AACCB01AA27CB |
:10391000BB2780935B0290935C02A0935D02B093FF |
:103920005E028091450B9091460BAA2797FDA095CA |
:10393000BA2F80936E0290936F02A0937002B0939F |
:103940007102809171059927AA27BB278093810274 |
:1039500090938202A0938302B093840280913F05EA |
:103960009927AA27BB278093940290939502A0934E |
:103970009602B0939702809140059927AA27BB270A |
:103980008093BA029093BB02A093BC02B093BD0295 |
:103990001F910F9108954FB720E430E0F894809183 |
:1039A000C9008F778093C9008091C9008F7B809375 |
:1039B000C9008091C9008F7D8093C900832F99270A |
:1039C0008093CD002093CC008091C80082608093CA |
:1039D000C80088E18093C9008091CA008F778093E6 |
:1039E000CA008091CA008F7B8093CA008091CA0070 |
:1039F0008F7D8093CA008091CA008F7E8093CA0019 |
:103A00008091CA00877F8093CA008091C9008B7F14 |
:103A10008093C9008091CA0084608093CA0080911D |
:103A2000CA0082608093CA008091C80087FF03C0EB |
:103A30008091CE00F9CF8091C90080688093C90041 |
:103A40004FBF08950F931F93CF93DF93482F4F5F7E |
:103A5000893108F08BC08091440A841720F44F5FAD |
:103A60004093440A4150CB0183539B4268E170E08C |
:103A70000E949EACA42FBB27FD01EA0FFB1FEB5B4E |
:103A8000F54F808191819B01281B390BC90137FFBC |
:103A900003C0909581959F4F069794F480916004A0 |
:103AA000883C30F480916004865F8093600408C095 |
:103AB00088EC8093600480916F008F7D80936F000D |
:103AC000FD01EA0FFB1FEB5BF54F808191819C01AB |
:103AD000220F331F280F391F260F371F37FF02C051 |
:103AE0002D5F3F4FE901D595C795D595C795CB017A |
:103AF00001968C179D0714F4219706C06150704001 |
:103B0000C617D7070CF4219680916004843BD8F047 |
:103B10008D010A0F1B1FF801EB5BF54F808191812E |
:103B2000FE01E81BF90BCF0163E070E00E949EAC40 |
:103B3000CB01880F991F860F971F0557154FF80166 |
:103B40009183808307C0AA0FBB1FA557B54F11965D |
:103B50001C921E92E42FFF27EE0FFF1FEB5BF54F29 |
:103B6000D183C083443011F410924201DF91CF9190 |
:103B70001F910F910895CF93DF932091600D822FB5 |
:103B80009927807F9070409709F066C02F3109F027 |
:103B900040C08091610D80939C059091630D90933E |
:103BA0009E058091640D80939D05992309F054C072 |
:103BB00080917608282F3327220F331FF901E5570C |
:103BC000F54F1182108280917708A82FBB27AA0F8A |
:103BD000BB1FFD01E557F54F1182108280917908D6 |
:103BE000E82FFF27EE0FFF1FCF018557954FEC0100 |
:103BF000198218822B5B354FE90119821882AB5B61 |
:103C0000B54F11961C921E92EB5BF54F11821082FC |
:103C100023C0C22FCF70CA30F8F48091610D809319 |
:103C20008C0D8091620D80938B0D8091630D80933C |
:103C30008E0D8091640D80938D0D60918B0D709130 |
:103C40008C0D8C2F0E94229D60918D0D70918E0D98 |
:103C50008C2F8F5F0E94229DDF91CF910895CF938B |
:103C6000C82F8F3F49F480919F058F3F29F4109210 |
:103C7000A1051092A00532C02091A105222339F49C |
:103C8000CF3111F485E001C084E08093A2058091DA |
:103C9000A2059091A0058217A0F4892F80958093AA |
:103CA000A0058F3F19F48EEF8093A0058091A005A9 |
:103CB000C81711F40E94BB9D1092A1051092A00597 |
:103CC0000BC0E22FFF27E05AF24FC0832F5F2093F3 |
:103CD000A1059C0F9093A005C0939F05CF910895D7 |
:103CE00090919B05933240F4E92FFF27E859F24F5A |
:103CF00080839F5F90939B050895833218F48D5FB6 |
:103D000080939B05089590E2EBE6FDE08FE19193AF |
:103D1000815087FFFCCF0895CF93CFB723E031E0E8 |
:103D2000F8948091C9008F778093C9008091C90071 |
:103D30008F7B8093C9008091C9008F7D8093C900DB |
:103D4000832F99278093CD002093CC008091C800C9 |
:103D500082608093C80088E18093C9008091CA0086 |
:103D60008F778093CA008091CA008F7B8093CA00AE |
:103D70008091CA0080628093CA008091CA008061ED |
:103D80008093CA008091CA0088608093CA008091A5 |
:103D9000C90084608093C9008091CA0084608093C8 |
:103DA000CA008091CA0082608093CA008091C800D6 |
:103DB00087FF03C08091CE00F9CF8091C900806851 |
:103DC0008093C9008091C90080648093C9000E94DB |
:103DD000839ECFBFCF910895282F99278F70907021 |
:103DE000892B31F4209580919A05822B80939A0536 |
:103DF00008951F920F920FB60F9211248F93EF9395 |
:103E0000FF938091EB02882309F068C0E091A4053C |
:103E1000EE2389F48091A305882369F48091680DCD |
:103E2000882321F081E08093A50505C08091C90019 |
:103E300081608093C9008091A505882379F4EF5FA4 |
:103E4000E093A40580913F0D8E1720F481E08093CC |
:103E5000A5051CC0FF27E15CF24F3CC08091A30583 |
:103E6000882361F48091680D882311F483E003C0F6 |
:103E7000813999F481E08093A3050FC0833099F4D0 |
:103E80008091680D882349F01092680D8091C900D7 |
:103E90008E7F8093C9008EEF1EC08091C900816023 |
:103EA0008093C9000EC0833261F48091C9008E7F77 |
:103EB0008093C9008FEF8093CE0081E08093EB0266 |
:103EC00018C08091A305E82FFF27E859F24F8F5FB4 |
:103ED0008093A30580818093CE000BC01092A30530 |
:103EE0001092A4051092A5058091C900806180936D |
:103EF000C900FF91EF918F910F900FBE0F901F900F |
:103F00001895682727E0322F67FF06C0862F99276C |
:103F1000880F991F832702C0862F880F682F215092 |
:103F200027FFF2CF992708950F931F93CF93DF9325 |
:103F3000062F60E0162F601740F4EC0189910E9473 |
:103F4000819F682F1F5F1017C8F3862F9927DF9175 |
:103F5000CF911F910F910895DC0190E0961758F4CE |
:103F60008C91803241F09F5F961728F4FD01E90F94 |
:103F7000F11D8081F6CF892F99270895A0E0B0E048 |
:103F8000E4ECFFE90C94F7AC8FE98093400D80E1FD |
:103F90008093420D84EA8093430D85E58093440D20 |
:103FA0008DE58093450D1092460D8091A7058823DD |
:103FB00009F06AC08091A60513E1819FC001112418 |
:103FC00063E081549E4F0E94AC9F082F8091A6050C |
:103FD000819FC00111246AE08B549E4F0E94AC9FC8 |
:103FE000982F800F865F80933F0D2EEFB22EB80E74 |
:103FF000B092410D2091A6052093470DE92EFF2494 |
:10400000C70113E0880F991F1A95E1F7802B809361 |
:10401000480D822F9927C3E1CC2ED12C8C9D900185 |
:104020008D9D300D9C9D300D1124C9018B549E4FE8 |
:10403000A701BC0189E49DE00E94BFAA11278091DD |
:10404000A60599278C9DE0018D9DD00D9C9DD00DDE |
:104050001124CE0181549E4FA801BC01C701875B8A |
:10406000924F0E94BFAA015C124F0E0D1F1D6B2DB7 |
:1040700081E49DE00E94949FF80182878091A705CA |
:104080008F5F8093A70593C0C090460D1C2D0E94A2 |
:10409000079C3091EC02303108F058C0B3E1EB2EB0 |
:1040A000F12C632F812F9927FC01EE0FFF1FE80FE2 |
:1040B000F91FEC0DF11DE15CF24F832F99278E9DC6 |
:1040C000D0018F9DB00D9E9DB00D1124AB54BE4FFD |
:1040D000ED012D8574E0880F991F7A95E1F7282B63 |
:1040E00020873E3088F42E853F853F798A8999273D |
:1040F000982F88279295990F907E282B392B21870E |
:10410000832F9927828716C0ED012E853F85488928 |
:1041100059892187BB27A52F942F832F8287CA0116 |
:10412000AA27BB278387852F9927AA27BB278487A0 |
:10413000E2E0CE0E862F8F5F682F1F5F163020F4CF |
:10414000382F803108F4AECF8093EC0283E0189FC3 |
:10415000C00111242C2D280F285F20933F0D225CD5 |
:104160002093410D812F99278C01000F111F080FFB |
:10417000191F0C0D111D015C124F2054622F81E498 |
:104180009DE00E94949FE80188878091EC02803135 |
:1041900070F081E08093EC021092A7058091A60553 |
:1041A0008F5F8093A605803110F01092A605E9E09C |
:1041B000CDB7DEB70C9413AD8091EB02882309F4E0 |
:1041C00047C08091270485FD04C08091F1028823B7 |
:1041D00081F082E98093680D83E28093690D80917C |
:1041E000F102882309F485E580936A0D1092F102AB |
:1041F00002C08093680D8091ED028F3071F4809140 |
:104200009A050E947C83882341F081E98093680DA0 |
:104210008093690D81E380936A0D1092EB02809187 |
:10422000C80085FFFCCF8091C9008F7E8093C900B4 |
:104230008091C9008E7F8093C9000E94BE9F8EE747 |
:104240008093CE0080919A058093ED0210929A059A |
:104250000895EF92FF920F931F93CF93DF937C010A |
:104260008B01EA01452B39F0F80181918F01F701AB |
:1042700009952197C9F7E6E0CDB7DEB70C9416ADE6 |
:10428000EF92FF920F931F93CF93DF937C018B01EB |
:10429000EA01452B41F0F8010F5F1F4F8491F701B0 |
:1042A00009952197C1F7E6E0CDB7DEB70C9416ADBE |
:1042B0000F931F93CF938C01C62F161634F480E210 |
:1042C000F8010995C1501C16D4F3CF911F910F919D |
:1042D00008950F931F93CF938C01C62F161634F4B5 |
:1042E00080E3F8010995C1501C16D4F3CF911F91BA |
:1042F0000F910895A5E3B0E0E0E8F1EA0C94EEAC8C |
:104300002E96EEADFFAD2E9788249924540180910E |
:104310009405882321F42C961FAE1EAE2C97AEE494 |
:104320004A2E512C4C0E5D1E6F01B60105C0153290 |
:1043300039F00894C11CD11CF60114911123B9F76E |
:10434000A601461B570B31F02C968EAD9FAD2C97D6 |
:104350000E9440A1112309F46AC20894C11CD11C17 |
:10436000FF24FDA6FCA6EFEFEE2EF9A6F6010894B9 |
:10437000C11CD11C1491153721F0812F8062883720 |
:10438000B1F4F0FE0AC0F20124E030E0420E531E08 |
:1043900080809180A280B3800AC0F20142E050E0A8 |
:1043A000440E551E808191814C01AA24BB241032F9 |
:1043B00021F489A58823D1F61DC0133219F458E0E1 |
:1043C000F52AD4CF1A3211F01D3291F41A3259F471 |
:1043D000F20182E090E0480E591EE081ECA7EE2346 |
:1043E0002CF6E195ECA790E1F92AAFEDFA22BECFC9 |
:1043F0001B3211F419A7BACF1E32C1F5F601089489 |
:10440000C11CD11C14911A3279F4F20122E030E07F |
:10441000420E531E408151813FEF4F3F530714F42A |
:104420004FEF5FEFE42EA2CF40E050E0812F8053AA |
:104430008A30A0F4CA0173E0880F991F7A95E1F7DA |
:10444000840F951F480F591F410F511D4053504075 |
:10445000F6010894C11CD11C1491E8CF8FEF4F3F97 |
:10446000580714F44FEF5FEFE42E85CF103329F493 |
:10447000F4FC7CCF90E2F92A79CF812F81538930E7 |
:10448000D8F440E050E0CA0163E0880F991F6A95B4 |
:10449000E1F7840F951F480F591F410F511D4053DD |
:1044A0005040F6010894C11CD11C1491812F8053F7 |
:1044B0008A3048F34CA75FCF183619F4A4E0FA2AE3 |
:1044C00055CF1C3619F4B1E0FB2A50CF133661F4F6 |
:1044D0003E010894611C711CF20122E030E0420EA2 |
:1044E000531E808189833CC1143421F0143611F0AD |
:1044F000193651F5143411F431E0F32AF0FE0AC0F4 |
:10450000F20144E050E0440E551E80809180A2806C |
:10451000B3800CC0F20182E090E0480E591E808109 |
:1045200091814C01AA2497FCA094BA2CB7FE0AC032 |
:10453000B094A09490948094811C911CA11CB11CF7 |
:104540008DE289A70AE06FC01F3411F01F3631F4E5 |
:104550001F3411F491E0F92A08E064C0103779F4AF |
:10456000F201A2E0B0E04A0E5B1E808191814C0115 |
:10457000AA24BB2400E1B0E4FB2A18E753C0133798 |
:10458000C1F5F20122E030E0420E531E60807180DE |
:104590006114710489F43E010894611C711C88E265 |
:1045A00089838EE6F301818385E78B838CE68C8398 |
:1045B0008D8389E28E831F82E7FC13C08E2D99279D |
:1045C00087FD9095AC0160E070E0C3010E94B2AA43 |
:1045D000009729F0382E3618E3140CF0C3C03E2C97 |
:1045E000C1C0F30101900020E9F731973E2E361843 |
:1045F000B9C0153511F0153731F4153511F4F1E066 |
:10460000FF2A0AE00FC0183519F0183709F0A0C0CA |
:1046100000E1F3FE07C081149104A104B10411F07C |
:1046200020E4F22A19A6EDA6E7FC02C03FEDF32232 |
:1046300049E2642E712C6C0E7D1E81149104A1043C |
:10464000B10421F44DA5442309F47BC0802F9927A0 |
:10465000AA27BB278EA79FA7A8ABB9AB202E3324D0 |
:1046600090E0891690E0990691E0A90690E0B906DD |
:1046700048F0C501B4012EA53FA548A959A90E943B |
:10468000B1AC17C0AFEF8A169104A104B10449F090 |
:1046900040F0C401B1010E948AAC9B014427552718 |
:1046A00008C0882D602F0E947EAC282F3327442716 |
:1046B00055272AAB3BAB4CAB5DAB0A3059F48AA90A |
:1046C000880F880F880F9AA9990F890F382D381BEA |
:1046D000832F10C0003139F48AA98295807F482D3C |
:1046E000481B842F07C08AA9880F880F880F582D70 |
:1046F000581B852F90E02EA53FA548A959A98216E1 |
:104700009306A406B50608F091E08AA89BA8ACA879 |
:10471000BDA88A3010F4805D04C0895A183509F4A8 |
:104720008F7DD3018E933D01992309F099CF0830F5 |
:1047300041F4F3FE06C0803321F080E3FD01829353 |
:104740003F01CE010196382E3618F8E23F0E0BC01D |
:10475000112309F46CC03E010894611C711C19837B |
:1047600031E0332E19A6032D2DA4231827FC222473 |
:1047700089A5882311F00F5F02C0F6FC0E5F020DC1 |
:10478000EF2CFF24C70180739070892B49F48CA50E |
:10479000801B682F2C968EAD9FAD2C970E9458A140 |
:1047A00089A5882331F041E050E0BE01675D7F4F6D |
:1047B0000AC0E6FE0EC080E38AA71BA742E050E0D5 |
:1047C000BE01665D7F4F2C968EAD9FAD2C970E94EB |
:1047D00029A1C70180739070809749F48CA5801B34 |
:1047E000682F2C968EAD9FAD2C970E9469A1622DEB |
:1047F0002C968EAD9FAD2C970E9469A1832D992791 |
:1048000087FD9095AC01B3012C968EAD9FAD2C9792 |
:104810000E9429A1E4FE89CD2CA5201B2CA7622F84 |
:104820002C968EAD9FAD2C970E9458A17ECDE2E1D3 |
:10483000CB5C0C940AAD982F8091670D883A50F4A8 |
:104840008091670DE82FFF27E25BF34F93838F5F23 |
:104850008093670D0895982F8091670D883A58F4DA |
:104860008091670DE82FFF27E25BF34F90689383F9 |
:104870008F5F8093670D0895982F80919505882309 |
:1048800021F0892F0E942BA40895892F0E941BA438 |
:104890000895883A10F48093670D089580E090E2BF |
:1048A000E1E5FCE091938F5F883AE0F308954FB71C |
:1048B00021E830E0F8948091C9008F778093C90097 |
:1048C0008091C9008F7B8093C9008091C9008F7D42 |
:1048D0008093C900832F99278093CD002093CC002B |
:1048E0008091C80082608093C80088E18093C900ED |
:1048F0008091CA008F778093CA008091CA008F7B15 |
:104900008093CA008091CA008F7D8093CA008091F5 |
:10491000CA008F7E8093CA008091CA00877F8093EF |
:10492000CA008091C90084608093C9008091CA0048 |
:1049300084608093CA008091CA0082608093CA001C |
:104940008091C90081608093C9008091C80087FF71 |
:1049500003C08091CE00F9CF8091C9008068809318 |
:10496000C9004FBF3CE73093C00B2DE72093EB0B02 |
:104970008EE88093C10B1092DD0B1092DC0B10922D |
:10498000C60B80EE8093C30B3093220C20934D0C0A |
:1049900010922E0C10922D0C1092300C10922F0CA5 |
:1049A0001092320C1092310C84EF91E090932C0C09 |
:1049B00080932B0C90932A0C8093290C9093280CB5 |
:1049C0008093270C1092240C89E88093230C10927A |
:1049D0004B0C10924C0C80E98093250C3093FA0C10 |
:1049E0002093250D1092FC0C8AE88093FB0C10920A |
:1049F000020D1092010D1092000D1092040D1092F4 |
:104A0000050D1092060D1092070D1092090D1092CF |
:104A10000A0D10920B0D10920C0D1092100D1092A9 |
:104A20000F0D10920E0D10920D0D80EA8093FD0C6B |
:104A30003093EC0B2093170C1092EE0B8DE88093C3 |
:104A4000ED0B1092160C80ED8093EF0B8BE78093AB |
:104A50004E0C80E880934F0C1092500C8091C60B46 |
:104A600090E2E1E5FCE091938F5F883AE0F38DE717 |
:104A70008093F90C0895CF93C82F8091A8058038B2 |
:104A800079F48C2F0E947486809397058091970506 |
:104A9000882331F1C093660D809197058F5F16C012 |
:104AA0008F37F1F480915F0D882329F48C2F809546 |
:104AB0008F7080935F0D0E944F858093500C8EE421 |
:104AC0009CE090939905809398058DEA80939705D3 |
:104AD0008091C9008F7E8093C90082E08093960503 |
:104AE000C093A805CF91089530919605332331F0F6 |
:104AF0008091960581508093960508958091970541 |
:104B0000882361F1409197059091A905413069F49E |
:104B1000292F3093A90580919505882319F03093AA |
:104B2000950510C0409395050DC0E0919805F09152 |
:104B300099058191F0939905E0939805282F980F96 |
:104B40009093A9058091C80085FFFCCF2093CE00EB |
:104B50008091970581508093970508958091C900B1 |
:104B600080618093C90008956F927F928F929F9287 |
:104B7000AF92BF92CF92DF92EF92FF920F931F936B |
:104B8000882361F1823041F41092B2051092B3058E |
:104B90001092B4051092B50520915A0430915B042F |
:104BA00040915C0450915D04DA01C90119E0880F5D |
:104BB000991FAA1FBB1F1A95D1F7809349039093A1 |
:104BC0004A03A0934B03B0934C032093AA05309360 |
:104BD000AB054093AC055093AD0526C1A0905A0497 |
:104BE000B0905B04C0905C04D0905D048091AA05F5 |
:104BF0009091AB05A091AC05B091AD053501460192 |
:104C0000681A790A8A0A9B0A6092AE057092AF050B |
:104C10008092B0059092B10580914D0390914E0322 |
:104C200084559F4F7C010027F7FC0095102F809141 |
:104C3000F30A9091F40A9C01442737FD4095542FC4 |
:104C4000C801B7010E945FAC97FF04C06150704E6D |
:104C50008F4F9F4FAB01BC01FDE075956795579550 |
:104C60004795FA95D1F74C5A5040604070404093B8 |
:104C7000B6055093B7056093B8057093B9052091B8 |
:104C8000540B3091550B37FF02C0215F3F4FE4E0DA |
:104C900035952795EA95E1F780915103909152035C |
:104CA000829FD001839FB00D929FB00D1124CD0142 |
:104CB000B7FF02C081509F4FE92FFF27E7FDFA950C |
:104CC0002091520B3091530B37FF02C0215F3F4FB1 |
:104CD00084E0359527958A95E1F780914F0390916F |
:104CE0005003829FD001839FB00D929FB00D11247D |
:104CF000CD01B7FF02C081509F4F892F990F990BAB |
:104D0000E80FF91FCF01AA2797FDA095BA2F840FAE |
:104D1000951FA61FB71F8093B6059093B705A09364 |
:104D2000B805B093B905BC01CD012DE030E040E0FD |
:104D300050E00E945FAC7B018C01C401B30124EF01 |
:104D400031E040E050E00E945FACDC01CB01E80EB6 |
:104D5000F91E0A1F1B1F8091B2059091B305A09107 |
:104D6000B405B091B5052091BA053091BB054091CD |
:104D7000BC055091BD05821B930BA40BB50BE80E2F |
:104D8000F91E0A1F1B1FE092B205F092B3050093B3 |
:104D9000B4051093B505D801C70180509E4FAF4FA1 |
:104DA000BF4FB7FF06C0D801C70181509A4FAF4F20 |
:104DB000BF4F1AE0B595A795979587951A95D1F7A6 |
:104DC0008093BA059093BB05A093BC05B093BD0535 |
:104DD000A092AA05B092AB05C092AC05D092AD05E9 |
:104DE0002091490330914A0340914B0350914C0369 |
:104DF000E0903C03F0903D0300913E0310913F038F |
:104E00002E193F09400B510B280F391F4A1F5B1FFA |
:104E10002A0D3B1D4C1D5D1D2093490330934A0311 |
:104E200040934B0350934C038091BA059091BB057E |
:104E300090934703809346038091490390914A03DE |
:104E4000A0914B03B0914C03BC01CD011F910F9178 |
:104E5000FF90EF90DF90CF90BF90AF909F908F909A |
:104E60007F906F9008952FB740E0F894E0E0F0E075 |
:104E700081E2809357009491E2E0F0E08093570044 |
:104E80003491E4E0F0E08093570084912FBF9E318D |
:104E900099F4363941F4893011F441E00DC08A307B |
:104EA00059F442E009C0373939F4863011F443E04F |
:104EB00003C0853009F444E0842F992708959FB7F3 |
:104EC000F8948091C900877F8093C9008091C900C0 |
:104ED0008F7E8093C9008091C9008F778093C9002D |
:104EE0008091C9008F7B8093C9008091C9008F7D1C |
:104EF0008093C9009FBF08951F93CF93DF93182F0E |
:104F000080919405882309F4A7C08091EA021817BC |
:104F100009F4A2C080919305882321F40E9433A74D |
:104F20008093930582ED91E090934101809340013D |
:104F30008CE697E19F938F93CFE9D9E1DF93CF93ED |
:104F4000E091D105F091D20509950F900F900F9047 |
:104F50000F90812F9927AA27BB27FC01099778F585 |
:104F6000E955FF4F2091D1053091D2050C9425AD24 |
:104F700088E697E102C08FE597E19F938F93DF93D7 |
:104F8000CF93F901099527C08AE597E1F6CF82E52D |
:104F900097E1F3CF8AE497E19F938F93DF93CF93C9 |
:104FA000F901099588ED91E09093410180934001CA |
:104FB00012C085E497E1E1CF89E797E1DECF8FE783 |
:104FC00097E19F938F93DF93CF93E091D105F09179 |
:104FD000D205099510E00F900F900F900F908091DF |
:104FE0009305843011F0823011F50E945FA7812F64 |
:104FF0008150833018F40E948B7A2CC0143019F43D |
:105000000E948C9E27C0183019F40E947E9B22C0FB |
:10501000153019F40E94CB9C1DC0163019F40E9463 |
:1050200057A418C01730B1F40E94359A13C0112349 |
:1050300089F085E997E19F938F938FE999E19F9399 |
:105040008F93E091D105F091D20509950F900F90C3 |
:105050000F900F901093EA02DF91CF911F91089566 |
:105060000F931F93082F81E0809394054091E902EC |
:10507000E5EFF6E120E030E05FE4849199272F5FCF |
:105080003F4F829FB001839F700D929F700D11243E |
:1050900046275150319657FFF0CF4093E902EDEC8F |
:1050A000F6E120E030E057E2849199272F5F3F4FEF |
:1050B000829FB001839F700D929F700D112446272F |
:1050C0005150319657FFF0CF4093E90280919305FC |
:1050D000882321F40E9433A7809393058AE791EAFD |
:1050E0009093D2058093D1058091E902833459F0E1 |
:1050F00088E190E029E20FB6F894A89580936000CB |
:105100000FBE20936000063091F080EB97E19F93F3 |
:105110008F938FE999E19F938F93E091D105F0915F |
:10512000D20509950F900F900F900F90EECF8091C0 |
:105130000301893158F1809192058823A9F48DECFF |
:1051400097E19F938F938FE999E19F938F93E091DC |
:10515000D105F091D205099587E1809303010F9065 |
:105160000F900F900F9012C015BC873119F48093E7 |
:10517000030106C087E08093140186E08093130149 |
:10518000E091E702F091E8028DEF09950E947B0C17 |
:1051900086E690E09F938F9386E090E09F938F93B5 |
:1051A00082E090E09F938F93809103016AE00E94D8 |
:1051B0007EAC892F99279F938F93809103010E9442 |
:1051C0007EAC99279F938F9387E098E19F938F936D |
:1051D0000FE919E11F930F93E091D105F091D205EA |
:1051E000099585EF96E19F938F931F930F93E0911D |
:1051F000D105F091D20509958DEC96E19F938F939F |
:105200001F930F93E091D105F091D20509950E946B |
:105210007B0C83EC8093810080916F00806280938F |
:105220006F008DB79EB746968DBF1F910F91089561 |
:105230008091DD088D3338F080913F0B87FD03C0EE |
:105240008CE38093DD0880918B08882331F08055B2 |
:10525000853618F08FE780938B0808958091940528 |
:10526000882309F487C08091CE0581508093CE05B4 |
:10527000882309F069C089E18093CE058091DD081B |
:105280008E3338F080913F0B87FD03C08DE3809310 |
:10529000DD08809160048238A0F580912804909107 |
:1052A0002904805D974020F08091BF0B843620F464 |
:1052B0001092D0051092CF052091CF053091D005E6 |
:1052C00021153105B1F1C90101979093D005809363 |
:1052D000CF05419798F180913F0B84FF2FC08091BB |
:1052E000260484608093260480914D0B87FF26C09E |
:1052F00080917A05882311F13093D0052093CF0552 |
:105300001DC080916004853BC8F09091DD0884E168 |
:10531000989FC001112440962091CF053091D0056F |
:105320002817390730F42F5F3F4F3093D005209373 |
:10533000CF05809126048B7F809326048091E9021B |
:10534000833411F0109294059091EA02963019F48A |
:105350000E9474A508958091EE02882321F0815067 |
:105360008093EE0208958BE48093EE02943011F462 |
:105370000E94DCA008951F920F920FB60F92112485 |
:105380002F933F934F935F936F937F938F939F934D |
:10539000AF93BF93EF93FF939091CE008091FD0266 |
:1053A0008823B9F09093C6008091FD02823009F005 |
:1053B0003FC09F3FE9F58FEF94E3ACE0B0E0C297C8 |
:1053C000A109B109B7FFFBCF809114068093CE00ED |
:1053D0002FC02091EA02822F8150833020F4892F40 |
:1053E0000E94E27A25C0243021F4892F0E94EC9E8D |
:1053F0001FC0283021F4892F0E947F9B19C0809103 |
:105400000301893120F080919205882389F02530AD |
:1054100021F4892F0E942F9E0BC0263021F4892F62 |
:105420000E943BA505C0273019F4892F0E948E9A4F |
:10543000FF91EF91BF91AF919F918F917F916F916C |
:105440005F914F913F912F910F900FBE0F901F9042 |
:105450001895002422273327442751E0BB27EE2745 |
:10546000FF27A0E1660F771F881F991F001C221FCE |
:10547000331F441F660F771F881F991F001C221FB0 |
:10548000331F441F2AF4050E2B1F3E1F4F1F04C05D |
:10549000051A2B0B3E0B4F0B550FBB1FEE1F587FF2 |
:1054A000556047FD5250AA95E9F6E695B795579590 |
:1054B000E695B7955795852F9B2F0895222733277B |
:1054C00041E0552768E0880F991F221F331F880F7E |
:1054D000991F221F331F1AF4240F351F02C0241BEB |
:1054E000350B440F551F487F456037FD42506A9584 |
:1054F00051F75695479556954795842F0895AA27B5 |
:1055000097FF04C0809590958A1F9A1F77FF04C06B |
:10551000609570956A1F7A1F669F9001779FA00122 |
:10552000679F300D411D5A1F300D411D5A1F889F26 |
:10553000F001999F2E0F3F1F401D511D899F300D77 |
:10554000411D5A1F300D411D5A1FCA01B9011124B6 |
:1055500080CFFB01DC0102C005900D92415050400C |
:10556000D8F70895FC014150504030F001900616E4 |
:10557000D1F73197CF010895882799270895FB0126 |
:10558000DC0102C001900D9241505040D8F70895BF |
:10559000A0E0B0E0EEECFAEA0C94F6AC6C017B0112 |
:1055A000EA01590121978FEFCF3FD80789F0860193 |
:1055B0000894C11CD11CC7010894E11CF11CF50121 |
:1055C0000995F80180832197FFEFCF3FDF0779F737 |
:1055D000EAE0CDB7DEB70C9412ADCF92DF92EF9236 |
:1055E000FF920F931F937C016B01FB010995082F1C |
:1055F000C7010196F6010995182FC8011F910F9157 |
:10560000FF90EF90DF90CF900895A0E0B0E0EBE046 |
:10561000FBEA0C94F8AC8C017B01EA01690121974B |
:105620008FEFCF3FD80771F0F70121917F01C801BB |
:105630000F5F1F4F622FF60109952197FFEFCF3FB4 |
:10564000DF0791F7E8E0CDB7DEB70C9414ADCF9249 |
:10565000DF92EF92FF920F931F936C018B017A01FF |
:10566000FA010995812F9927682FC6010196F70144 |
:1056700009951F910F91FF90EF90DF90CF900895C3 |
:105680005058BB27AA270ED0E0C0D1D030F0D6D0DA |
:1056900020F031F49F3F11F41EF4C6C00EF4E095E3 |
:1056A000E7FBBCC0E92FE2D080F3BA1762077307AB |
:1056B0008407950718F071F49EF5FAC00EF4E09592 |
:1056C0000B2EBA2FA02D0B01B90190010C01CA01BC |
:1056D000A0011124FF27591B99F0593F50F4503E67 |
:1056E00068F11A16F040A22F232F342F4427585F59 |
:1056F000F3CF469537952795A795F0405395C9F771 |
:105700007EF41F16BA0B620B730B840BBAF0915028 |
:10571000A1F0FF0FBB1F661F771F881FC2F70EC0C7 |
:10572000BA0F621F731F841F48F48795779567959A |
:10573000B795F7959E3F08F0B3CF9395880F08F083 |
:105740009927EE0F97958795089598D088F09F57E1 |
:1057500090F0B92F9927B751A0F0D1F0660F771FBD |
:10576000881F991F1AF0BA95C9F712C0B13081F09D |
:105770009FD0B1E008959CC0672F782F8827B85F2D |
:1057800039F0B93FCCF3869577956795B395D9F7FE |
:105790003EF490958095709561957F4F8F4F9F4F08 |
:1057A0000895E89409C097FB3EF490958095709514 |
:1057B00061957F4F8F4F9F4F9923A9F0F92F96E95D |
:1057C000BB279395F695879577956795B795F111D2 |
:1057D000F8CFFAF4BB0F11F460FF1BC06F5F7F4F6F |
:1057E0008F4F9F4F16C0882311F096E911C0772381 |
:1057F00021F09EE8872F762F05C0662371F096E88A |
:10580000862F70E060E02AF09A95660F771F881F58 |
:10581000DAF7880F9695879597F9089597F99F6716 |
:1058200080E870E060E008959FEF80EC0895002428 |
:105830000A941616170618060906089500240A94F5 |
:1058400012161306140605060895092E0394000C7B |
:1058500011F4882352F0BB0F40F4BF2B11F460FF0A |
:1058600004C06F5F7F4F8F4F9F4F089557FD905833 |
:10587000440F551F59F05F3F71F04795880F97FB14 |
:10588000991F61F09F3F79F08795089512161306CE |
:105890001406551FF2CF4695F1DF08C016161706FD |
:1058A0001806991FF1CF8695710561050894089532 |
:1058B000E894BB2766277727CB0197F90895629F65 |
:1058C000D001739FF001829FE00DF11D649FE00DF8 |
:1058D000F11D929FF00D839FF00D749FF00D659F59 |
:1058E000F00D9927729FB00DE11DF91F639FB00D58 |
:1058F000E11DF91FBD01CF0111240895991B79E025 |
:1059000004C0991F961708F0961B881F7A95C9F74F |
:1059100080950895AA1BBB1B51E107C0AA1FBB1F9E |
:10592000A617B70710F0A61BB70B881F991F5A952B |
:10593000A9F780959095BC01CD01089597FB092E9C |
:1059400007260AD077FD04D0E5DF06D000201AF440 |
:10595000709561957F4F0895F6F7909581959F4FCB |
:105960000895A1E21A2EAA1BBB1BFD010DC0AA1FA0 |
:10597000BB1FEE1FFF1FA217B307E407F50720F0B8 |
:10598000A21BB30BE40BF50B661F771F881F991F33 |
:105990001A9469F760957095809590959B01AC017C |
:1059A000BD01CF01089597FB092E05260ED057FDA6 |
:1059B00004D0D7DF0AD0001C38F4509540953095BC |
:1059C00021953F4F4F4F5F4F0895F6F79095809583 |
:1059D000709561957F4F8F4F9F4F08952F923F9203 |
:1059E0004F925F926F927F928F929F92AF92BF92EF |
:1059F000CF92DF92EF92FF920F931F93CF93DF939B |
:105A0000CDB7DEB7CA1BDB0B0FB6F894DEBF0FBEF7 |
:105A1000CDBF09942A88398848885F846E847D8444 |
:105A20008C849B84AA84B984C884DF80EE80FD8046 |
:105A30000C811B81AA81B981CE0FD11D0FB6F894BC |
:105A4000DEBF0FBECDBFED010895EE0FFF1F059025 |
:085A5000F491E02D0994FFCF51 |
:105A580004035E0A010164FF010020FFFFC01FC0AC |
:105A68001F0101070610F40101737373FF03007D22 |
:105A78000000C409C4099600134167696C650051A8 |
:105A8800756164726F0000000000000064000C097A |
:105A9800D20101200B050000ECFF000204060708F4 |
:105AA80008080706040200FEFCFAF9F8F8F8F9FA03 |
:105AB800FCFE000204060708086440415A465532B5 |
:105AC8006464640A02969696960840403A10303804 |
:105AD8000132FF037F0090D0030090D00300320012 |
:105AE8002064FFFFE8036464200B0A0D0B0E100B03 |
:105AF8000A0C0F0B1110FA206801010101010101C4 |
:105B080001011501014D4B202020202020202020BC |
:105B18002020010000000000566F6C74616765204A |
:105B28002020562020010000000001437572726594 |
:105B38006E742020204120200100000000014361F4 |
:105B480070616369747920204168200100000000B9 |
:105B580002416C74697475646520206D2020010011 |
:105B680000000000436F6D70617373202020B02027 |
:105B780020010000000000536174732020202020C1 |
:105B8800202020200100000000005370656564207B |
:105B9800202020206D2F730100000000004469734D |
:105BA80074616E636520206D2020010000000000F4 |
:105BB800486F6D652D4469722020B02020010000D7 |
:105BC8000000006D61782E54656D702E20B0432062 |
:105BD8000100000000004D61676E2E6669656C6407 |
:105BE800252020010000000000566172696F202006 |
:105BF8002020202020200100000000004572726F44 |
:105C080072436F6465202020200100000000004CD2 |
:105C180061746974756465202020202009000000E3 |
:105C280000004C6F6E676974756465202020200938 |
:105C38000000000000F7FFFCFF70FF01010F640087 |
:00000001FF |
/tags/V2.06f/Hex-Files/Flight-Ctrl_MEGA644_V2_06f_SVN871.hex |
---|
0,0 → 1,3943 |
:100000000C94A9050C94EF050C94EF050C94EF05E6 |
:100010000C94EF050C94EF050C94EF050C94EF0590 |
:100020000C94EF050C945D190C94EF050C94EF05FE |
:100030000C94502F0C94EF050C94EF050C94EF05E5 |
:100040000C94EF050C94EF050C9480150C94EF05BF |
:100050000C94150C0C94EF050C94DF0B0C94EF052D |
:100060000C942D1B0C94EF050C946A2A0C94EF054C |
:100070000C9483770C94EF050C94E271521B571B80 |
:100080005C1B651B7C1B931BA31BB31BF71BD21DA7 |
:10009000931BCD1CDE1CF21C101D2D1D781DC41DD4 |
:1000A000C51F922005217E21B621592218237523D0 |
:1000B000F02321249724C524F2245C636264E7645E |
:1000C00000643B656C659B632F640A0D3D3D3D3DBF |
:1000D0003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D50 |
:1000E0003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D007D |
:1000F0000A0D426174743A002025642043656C6CDB |
:10010000732000204C6F77207761726E696E673ABA |
:100110002025642E2564560020204175746F2D43E0 |
:10012000483A2025642E2564560020204175746FBE |
:100130006C616E64696E673A2025642E25645600F2 |
:100140000A0D4F6C642046432048617264776172E7 |
:1001500065206E6F7420737570706F7274656420A3 |
:1001600062792074686973204669726D776172657F |
: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 |
:1008300006010000A56A00020101AA6B0103020281 |
:100840002E6C02040303ED6E03050707D66C040645 |
:100850000808016D050006068B6C040707072C6D60 |
:1008600005080808046E2532692E253169560025D1 |
: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 |
:100B6000A0E0B1E0E0EAF5EF02C005900D92A23BF3 |
:100B7000B107D9F719E0A2EBB1E001C01D92A63D83 |
:100B8000B107E1F74AEAE2E0F0E081E28093570042 |
:100B9000549120EF37EFA7EAB3E09FE0F9012F5F10 |
:100BA0003F4F84918D93915097FFF8CF573911F4AF |
:100BB0000000FECFE7EAF3E09EE0819148274095F0 |
:100BC000915097FFFACF8091B603481721F057391B |
:100BD00011F40000FECF0E9424070C94CF7A0C94ED |
:100BE00000008AEC90E09F938F9381E992E19F93BC |
:100BF0008F93E091BA03F091BB0309950F900F908A |
:100C00000F900F90089580915F06E82FFF27EE0F59 |
:100C1000FF1FE25DF74F808191818D5E9F4F14F041 |
:100C200010920401808191818A5B9F4FCCF4809166 |
:100C300004018823A9F481E0809304018091EE03EC |
:100C40008F5F8093EE03853038F088EE93E09093C9 |
:100C5000EB018093EA01089566E970E00E94283173 |
:100C60000895CF93DF93C82F882311F180EF90E090 |
:100C70009F938F9381E992E19F938F93E091BA03C1 |
:100C8000F091BB03099580912301909124016BE2BF |
:100C900070E00E94427ACB018F5F809300010F9039 |
:100CA0000F900F900F90873018F086E0809300012E |
:100CB00080918206823328F590910001989F802DC3 |
:100CC000112480930201CC23F1F068EC70E0892FAD |
:100CD0000E9428318091000199279F938F9388EF7C |
:100CE00090E09F938F9381E992E19F938F93E0919E |
:100CF000BA03F091BB0309958DB79EB706968DBFD9 |
:100D000002C0809302019091D206923340F4809108 |
:100D10000001899F802D11248093BC0102C0909313 |
:100D2000BC013091D306323340F480910001839F9F |
:100D3000802D11248093BB0102C03093BB018091B0 |
:100D4000BC0190910201981720F491509093BC013E |
:100D50009F5F8091BB01891720F091509093BB0158 |
:100D60009F5F8091BC012091BB01821728F0332343 |
:100D700019F021502093BC01CC2309F462C0892FC3 |
:100D80006AE00E94227A892F99279F938F938091FE |
:100D900002010E94227A99279F938F9383E091E02A |
:100DA0009F938F93C1E9D2E1DF93CF93E091BA0390 |
:100DB000F091BB0309958DB79EB708968DBF8091C2 |
:100DC000BB018823E9F06AE00E94227A892F9927E3 |
:100DD0009F938F938091BB010E94227A99279F93C2 |
:100DE0008F9388E191E09F938F93DF93CF93E0916E |
:100DF000BA03F091BB0309958DB79EB708968DBFD6 |
:100E00008091BC018823E9F06AE00E94227A892F50 |
:100E100099279F938F938091BC010E94227A9927F2 |
:100E20009F938F938AE291E09F938F93DF93CF9369 |
:100E3000E091BA03F091BB0309958DB79EB7089670 |
:100E40008DBFDF91CF910895CFEFD0E1DEBFCDBF51 |
:100E500088249924C1E07C2E14B815B88AE08AB998 |
:100E60008FE58BB9B7EECB2EB3E0DB2E2EEC3FEF48 |
:100E7000C20ED31ED7FEFACF189B06C0199B02C024 |
:100E80008DE005C08BE003C0199B04C084E1809312 |
:100E9000030107C08AE0809303018EE38AB987E4E7 |
:100EA0008BB981E887B93E9A8FEF88B98BE184B915 |
:100EB00081E085B9469A84B7877F84BF80916000BE |
:100EC0008861809360001092600084EC99E09093B8 |
:100ED000EB018093EA0110929F0210929E02109201 |
:100EE0003308109232081092A1021092A0021092C0 |
:100EF000A3021092A20220910301243128F084EC75 |
:100F000094E0A0E0B0E004C08BE095E0A0E0B0E0A9 |
:100F10008093410190934201A0934301B093440117 |
:100F20002898293111F4299A01C029980E94D116D4 |
:100F30000E94A2160E9499120E94172F0E948D1AD9 |
:100F400081E00E94172A0E9402620E94E96F86E0F7 |
:100F50000E942C7680910301893111F4299A01C0F5 |
:100F6000299878940E943829809103018431E8F40B |
:100F700088E190E02CE00FB6F894A895809360008B |
:100F80000FBE2093600080E491E09F938F9381E9EE |
:100F900092E19F938F93E091BA03F091BB0309957F |
:100FA0000F900F900F900F90EECF80913D028260D6 |
:100FB00080933D0210924002C0E0D0E00E946F3C5E |
:100FC00085E090E00E9468166C0180913D0280FDF2 |
:100FD00005C0C6010E9471168823B9F3219631E03D |
:100FE000C43FD30758F382E791E09F938F93A1E921 |
:100FF000AA2EA2E1BA2EBF92AF92E091BA03F0916D |
:10100000BB030995C0E0D0E00F900F900F900F90B8 |
:1010100009E717E0F4EFEF2EF6E0FF2EF7018081ED |
:1010200024E030E0E20EF31E1816ACF40BC00E9470 |
:101030006F3C80913D0280FD05C0C6010E94711683 |
:101040008823B9F3C6010E947116882321F4F801A0 |
:101050008381882364F7F801838187FF2CC0CE0148 |
:1010600001966AE070E00E942E7A9F938F9384E845 |
:1010700091E09F938F93BF92AF92E091BA03F0916A |
:10108000BB0309958091B4018F5F8093B401F8018F |
:10109000948584E6989FC00111242585280F8DB77B |
:1010A0009EB706968DBF222331F08091D603281774 |
:1010B00010F42093D6032196015F1F4FCC30D10549 |
:1010C00008F4ACCFC0E0D0E009E717E0E4EFEE2E83 |
:1010D000E6E0FE2EF801838187FD1DC0F7018081C7 |
:1010E0001816CCF42196DF93CF93219787E891E0EF |
:1010F0009F938F9381E992E19F938F93E091BA033D |
:10110000F091BB03099582E08093E8012DB73EB7CB |
:101110002A5F3F4F2DBFF80183818078838321961A |
:1011200024E030E0E20EF31E015F1F4FCC30D1050A |
:1011300088F20E94F10590915D068091B4019817A4 |
:1011400028F48091D40380618093D403993020F0F7 |
:1011500088E080933B0102C090933B0185EA91E0D7 |
:101160009F938F93C1E9D2E1DF93CF93E091BA03CC |
:10117000F091BB03099588EE93E00E9468166C011C |
:101180000E94CB1A0F900F900F900F90C6010E94F3 |
:1011900071168823D9F385EC91E09F938F93DF93A9 |
:1011A000CF93E091BA03F091BB03099580E00E94D0 |
:1011B000DD31289880ED97E09093EB018093EA0170 |
:1011C00085E58093F0038EE090E00E945C279927EC |
:1011D000182F00278FE090E00E945C27080F111D58 |
:1011E0001093BA010093B9018AE090E00E945C2755 |
:1011F0009927182F00278BE090E00E945C27080FAA |
:10120000111D1093B8010093B7010F900F900F902C |
:101210000F900F5F1F4F39F08091B9019091BA0183 |
:101220008F5F9F4F41F41092BA011092B901109252 |
:10123000B8011092B7018091B7019091B8019F93C6 |
:101240008F938091B9019091BA019F938F938AEC0B |
:1012500091E09F938F93DF93CF93E091BA03F09146 |
:10126000BB0309950E943F1F88E893E190933A01E0 |
:1012700080933901C1E0C093EF038C2F0E943106A7 |
:10128000809185060E947F750E94F10580ED97E0B0 |
:101290000E9468166C018AEF90E00E94681693E045 |
:1012A0009093B7051092B3018091D8062DB73EB741 |
:1012B000285F3F4F2DBF84FF02C0C093BD019093B4 |
:1012C0003C0112BC11BC8091BF01882311F04798EA |
:1012D000FECF8091EE01882309F460C28091150150 |
:1012E000882309F45BC2F8948091EE0181508093C9 |
:1012F000EE0178948091EE03882319F00E94030692 |
:1013000002C00E941C400E946F3C2898809192026B |
:10131000882331F0809192028150809392020EC016 |
:1013200080916F00806280936F0010922F0810925E |
:101330002E088091D40388608093D4038091390172 |
:1013400090913A01019790933A01809339018091ED |
:10135000390190913A01892B21F080913E02882336 |
:10136000C9F18091390190913A01892BD9F40E94F9 |
:10137000482A85E090E090933A018093390180916A |
:10138000F1059091F20501969093F2058093F10595 |
:101390008091D40381608093D4038091B8058260EA |
:1013A0008093B80580910B0190910C018F5F9F4F46 |
:1013B00091F480919102882371F088EA91E69093EC |
:1013C000EB018093EA0180E890E090930C01809318 |
:1013D0000B0101C028980E94FB768091EE018823C2 |
:1013E00009F0DAC18091E901882311F40E94236297 |
:1013F00080911101882311F00E942B170E94E512A1 |
:101400000E946A0EC6010E947116882309F4C0C1A9 |
:1014100084E190E0C80ED91E0E94E91680913E0238 |
:10142000882329F48091A8098E3150F405C0809159 |
:10143000D40382608093D4038091B80582600FC08A |
:101440008091EA019091EB01892B59F48091390147 |
:1014500090913A01079728F08091B8058D7F80938D |
:10146000B8058091BD01882361F08091920287398F |
:1014700040F01092BD0188E893E19093EB018093D6 |
:10148000EA0180910601882321F0815080930601B2 |
:101490002EC08093FA03109265021092640210929B |
:1014A00063021092620210926102109260028091B7 |
:1014B00092028823E1F480910B0190910C018F5FDF |
:1014C0009F4FA9F42091BD01223089F088E99AE369 |
:1014D0009093EB018093EA0180E09CE090930C01F3 |
:1014E00080930B01222319F082E08093BD0180914B |
:1014F000A001893C70F081508093A0018091D403B9 |
:101500008B7F8093D4038091D70381608093D7032E |
:1015100051C0809135098823F9F08091D40384600B |
:101520008093D40389E08093720380910B019091A2 |
:101530000C018F5F9F4F81F480919102882361F0AD |
:1015400088E99AE39093EB018093EA0180E098EABE |
:1015500090930C0180930B01109265031092640329 |
:101560001092630310926203109261031092280993 |
:101570008FEF80939D09109267091092660910926F |
:101580006909109268098FEF9FEF90936509809326 |
:1015900064091092810210928202109283021092CA |
:1015A0008402109285028091D7038E7F8093D703A7 |
:1015B0001092A00160910201262F33278091230110 |
:1015C0009091240128173907F4F080915902806224 |
:1015D0008093590280910B0190910C018F5F9F4F76 |
:1015E00091F480912301909124010B9764F080E79E |
:1015F00097E19093EB018093EA0180E093E0909370 |
:101600000C0180930B018091BE018F5F8093BE011E |
:10161000813309F074C01092BE018091590281FF9C |
:101620000AC08091B5019091B60101969093B601E0 |
:101630008093B50104C05AEA852E55E0952E80911D |
:101640005A0290915B028050944008F049C020916A |
:1016500000063091010640910206509103068091E8 |
:101660001B0190911C01A0911D01B0911E01281732 |
:1016700039074A075B0764F48091000690910106E0 |
:10168000A0910206B09103060596A11DB11D20C0D0 |
:101690002091000630910106409102065091030608 |
:1016A00080911B0190911C01A0911D01B0911E0120 |
:1016B00082179307A407B5079CF4809100069091C8 |
:1016C0000106A0910206B09103060597A109B10990 |
:1016D0008093000690930106A0930206B093030640 |
:1016E000862F99270196209123013091240182179A |
:1016F00093072CF4809159028F7D809359020894AE |
:10170000811C911C82E788168BE0980609F040C086 |
:10171000882499242091B9013091BA012F5F3F4F5D |
:101720003093BA012093B9018091B7019091B8012B |
:1017300001969093B8018093B701832F9927682F62 |
:101740008EE090E00E9464278091B9019091BA01E7 |
:101750009070682F8FE090E00E9464278091B7011D |
:101760009091B801892F9927682F8AE090E00E9414 |
:1017700064278091B7019091B8019070682F8BE039 |
:1017800090E00E94642784E190E00E9468166C015A |
:101790000E943A670E94237071107A94772039F47E |
:1017A0000E94FE66882319F08CE0782E8ACD809105 |
:1017B000E901882309F085CD0E94236282CD1F9222 |
:1017C0000F920FB60F9211248F939F93EF93FF9375 |
:1017D000809108018823E1F48091D9019091DA0188 |
:1017E00001969093DA018093D901FC01E552FB4FF9 |
:1017F000E081ED3019F08C3D910539F41092DA0159 |
:101800001092D90181E080930801E093C60004C0E2 |
:101810001092DA011092D901FF91EF919F918F916F |
:101820000F900FBE0F901F9018951F920F920FB63A |
:101830000F9211242F933F934F935F936F937F9356 |
:101840008F939F93AF93BF93CF93EF93FF9390E0CA |
:101850008091BF01813029F48091C6008093CE0031 |
:10186000D1C08091BF01823029F48091C60080935D |
:10187000FD03C8C08091C6008093D1015091DF0163 |
:101880005C3D10F09093E0018091D1018D3009F022 |
:101890006AC08091E001823009F065C09093E00158 |
:1018A000852F992783509C4FFC01329740812091CE |
:1018B000DB013091DC01241B3109DC0111978C9193 |
:1018C000281B3109C9019F709093DC018093DB01D3 |
:1018D00046E0969587954A95E1F7982F935C90930B |
:1018E000DD012F733070235C2093DE018081981717 |
:1018F00029F48C91281711F491E006C090E08091B2 |
:10190000CE018F5F8093CE018091D001882309F0B2 |
:1019100079C0992309F476C081E08093D001580FF3 |
:101920005093CD015150E52FFF27E350FC4F8DE040 |
:1019300080838091FF03823509F064C0C0919102D9 |
:10194000CC2309F05FC00E943F1F88E190E02CE0AB |
:101950000FB6F894A895809360000FBE20936000A6 |
:10196000C093E8014FC02091E001822F9927813078 |
:101970009105F9F0823091051CF4892B21F040C0CB |
:10198000029711F13DC08091D101833239F48091E9 |
:10199000D001882319F481E08093E0018091D10186 |
:1019A0008093FD0381E08093DF018091D10199272D |
:1019B00022C02F5F2093E001E52FFF27E350FC4F6B |
:1019C0008091D101808309C0E52FFF27E350FC4FB0 |
:1019D0008091D10180835C3D20F45F5F5093DF01F3 |
:1019E00002C01092E0012091D1018091DB01909121 |
:1019F000DC01820F911D9093DC018093DB0102C01A |
:101A00001092E001FF91EF91CF91BF91AF919F9123 |
:101A10008F917F916F915F914F913F912F910F9097 |
:101A20000FBE0F901F901895AC01A0E0B0E09D0193 |
:101A3000A817B90748F4EBEDF4E08191280F311DA8 |
:101A40001196A417B507C8F33F70FD01E552FB4F8F |
:101A5000C90156E0969587955A95E1F7835C808396 |
:101A60001196FD01E552FB4F2F733070822F835C7E |
:101A70008083A452BB4F8DE08C931092080180911B |
:101A8000DB048093C6000895A0E0B0E0EAE4FDE046 |
:101A90000C949B7A2C859D850E85BB2483E28093D4 |
:101AA000DB049F599093DC042093DD0433E0E32EA4 |
:101AB000F12C002309F49EC0CF84D888BE016D5E4E |
:101AC0007F4FA989BA890150109709F493C01097E4 |
:101AD000B9F0F601EB0DF11DB3949081119791F4DB |
:101AE000002349F1FB016E5F7F4FDB01C080D18095 |
:101AF0006E5F7F4F0D90BC91A02DBB24015002C0A2 |
:101B000090E019C01097B9F0F601EB0DF11DB394F8 |
:101B10004081119791F4002341F1FB016E5F7F4FEB |
:101B2000DB01C080D1806E5F7F4F0D90BC91A02DF6 |
:101B3000BB24015002C040E018C01097B1F0F6017C |
:101B4000EB0DF11DB3941081119781F4002371F016 |
:101B5000FB013296DB01CD90DC90BF016E5F7F4FC1 |
:101B6000A081B181BB24015001C010E0F701E55212 |
:101B7000FB4F892F86958695835C80830894E11CB2 |
:101B8000F11CF701E552FB4F892F99278370907064 |
:101B900024E0880F991F2A95E1F755279A0194E0D0 |
:101BA000369527959A95E1F7822B835C808308947C |
:101BB000E11CF11CF701E552FB4F4F705070440FD0 |
:101BC000551F440F551F812F992726E0969587951D |
:101BD0002A95E1F7842B835C80830894E11CF11C37 |
:101BE000F701E552FB4F1F73135C10830894E11C4F |
:101BF000F11C6ACFC7010E94140DE9E00C94B77A7A |
:101C0000A3E07A2F4091CD014650442309F458C0F7 |
:101C1000E72FFF27E350FC4F80818D537F5FE72F35 |
:101C2000FF27E350FC4F20812D537F5FE72FFF27D5 |
:101C3000E350FC4F30813D537F5FE72FFF27E35098 |
:101C4000FC4F60816D537F5F9927880F991F880F24 |
:101C5000991F522F52955F70582B822F99278F70A2 |
:101C60009070F4E0880F991FFA95E1F7232F2695DD |
:101C70002695282B832F992783709070E6E0880F94 |
:101C8000991FEA95E1F7682B41504F3FC9F0EA2FC1 |
:101C9000FF27E350FC4F5083AF5F41504F3F81F02F |
:101CA000EA2FFF27E350FC4F2083AF5F41504F3FA7 |
:101CB00039F0EA2FFF27E350FC4F6083AF5FA5CFD9 |
:101CC00080E094E09093CC018093CB01A350A0934B |
:101CD000CA010895A2E0B0E0E0E7FEE00C94A17A2A |
:101CE0008091D001882309F418C40E94000E8091CD |
:101CF000FE03823609F0E4C28091FF039927803702 |
:101D0000910509F4AFC081379105C4F48A36910575 |
:101D100009F441C28B36910544F48B34910571F17D |
:101D20008636910509F46AC1CBC28D36910509F456 |
:101D300069C08E36910509F44DC0C2C28437910541 |
:101D400041F1853791054CF48137910509F491C033 |
:101D50008337910509F4EAC0B3C28737910509F4C6 |
:101D6000DCC1883791052CF48537910509F498C1B9 |
:101D7000A7C28937910509F47DC1A2C2E091CB01C8 |
:101D8000F091CC01808191819093900180938F019B |
:101D900097C28091CD01A091CB01B091CC0185314A |
:101DA00040F080E1E8EDF3E00D9001928A95E1F7D3 |
:101DB0000DC08D919D910D90BC91A02D8093D80365 |
:101DC0009093D903A093DA03B093DB0380EF809361 |
:101DD000C8014BC0809108018823E1F38DE490E0B5 |
:101DE0009F938F9387EE96E09F938F9381E08F93DD |
:101DF0008F938EE48F930E94440D8DB79EB7079604 |
:101E00008DBF5EC2A091CB01B091CC011C9111306D |
:101E100081F48DE4E7EEF6E00D9001928A95E1F70A |
:101E20000E94732819838091D4038F7E8093D403FA |
:101E300001C01982809108018823E1F381E090E0DC |
:101E40009F938F93CE0101969F938F9381E08F9301 |
:101E50008F938DE48F930E94440DADB7BEB7179654 |
:101E6000ADBF2EC281E08093D3018FEF8093060136 |
:101E700027C2809191028823E1F5E091CB01F09196 |
:101E8000CC01E0818E2F8A508A3058F489838823D0 |
:101E900011F481E003C0863010F085E0898361E0B1 |
:101EA0000EC08E2F84518A3070F48983882311F4F8 |
:101EB00081E003C0863010F085E0898360E089818D |
:101EC0000E94F52812C0E983EF3F19F40E94D6283A |
:101ED00089838981882311F481E003C0863010F062 |
:101EE00085E0898389810E947A2780E00E943106FB |
:101EF00003C00E94D6288983809108018823E1F3DA |
:101F000088E890E09F938F938EE596E09F938F9360 |
:101F100081E090E09F938F93CE0101969F938F93E2 |
:101F200082E08F9381E08F9381E52DC12091CB01D9 |
:101F30003091CC01D9018C918150853008F045C099 |
:101F4000F9018181863609F040C080919102882391 |
:101F5000E1F52F5F3F4F88E8EEE5F6E0D9010D90FF |
:101F600001928A95E1F7F90182910E94E52780911B |
:101F70009F069927AA27BB27BC01CD0124EC39E095 |
:101F800040E050E00E94037ADC01CB01809387019E |
:101F900090938801A0938901B0938A018091A00653 |
:101FA0009927AA27BB27BC01CD010E94037ADC0137 |
:101FB000CB018093830190938401A0938501B0931A |
:101FC00086010E94D628898301C019828091080168 |
:101FD0008823E1F381E090E09F938F93CE010196F7 |
:101FE0009F938F9381E08F938F9383E58F930E94CC |
:101FF000440D8DB79EB707968DBF2BC0809191027F |
:10200000882309F05DC1E091CB01F091CC01E08122 |
:102010008E2F8150853018F48E2F0E947A270E94CF |
:10202000D6288983809108018823E1F381E090E03C |
:102030009F938F93CE0101969F938F9381E08F930F |
:102040008F9386E48F930E94440DADB7BEB7179669 |
:10205000ADBF10919102112341F46EE670E08981C9 |
:102060000E942831812F0E943106809185060E94AE |
:102070007F7526C119822981A091CB01B091CC0135 |
:10208000EEE2F8E08D91992787FD909593A382A3C6 |
:10209000822F8F5F8983282F32968C3098F310C15E |
:1020A000E091CB01F091CC0180810E94872E8A8340 |
:1020B000882319F481E0898301C019828091080185 |
:1020C0008823E1F388E090E09F938F9381E797E086 |
:1020D0009F938F9321E030E03F932F938091CB012A |
:1020E0009091CC019F938F933F932F93CE010296B3 |
:1020F0009F938F933F932F93CE01820F931F9F93B4 |
:102100008F9384E08F9381E08F9385E58F930E9476 |
:10211000440DEDB7FEB773963CC08091CA0189307B |
:1021200008F4CEC02091CB013091CC012F5F3F4FFE |
:1021300088E0A1E7B7E0F90101900D928A95E1F7F7 |
:10214000D9018E910E94E12D8A83882319F481E0C0 |
:10215000898301C01982809108018823E1F321E07D |
:1021600030E03F932F93CE0102969F938F933F933E |
:102170002F93CE01820F931F9F938F9382E08F93B3 |
:1021800081E08F9387E58F930E94440DEDB7FEB7F2 |
:102190003B96EDBF95C080919102882309F090C0D5 |
:1021A0000E9436758983823019F0843009F088C026 |
:1021B00020E430E0F8948091C1008F738093C100D7 |
:1021C0008091C9008F738093C9008091C100877E80 |
:1021D0008093C1008091C900877E8093C90080915F |
:1021E000C80087FF03C08091CE00F9CF8091C00066 |
:1021F00087FF03C08091C600F9CFE091CB01F09139 |
:10220000CC01E081E13021F482E08093BF012EC057 |
:10221000E43611F421E830E081E08093BF01832FA0 |
:1022200099278093CD002093CC008091CD0080939E |
:10223000C5008091CC008093C4008091CA008F7D3E |
:102240008093CA008091CA008F7E8093CA008091DB |
:10225000C9008B7F8093C9008091CA0084608093FD |
:10226000CA008091CA0082608093CA008091CA002F |
:10227000877F8093CA008091C200877F8093C200CD |
:102280008091C9008E7F8093C9008091C1008861D0 |
:102290008093C1008091C90088618093C9008091BA |
:1022A000C10080688093C1008091C90080688093DC |
:1022B000C90010926E0010926F0010927000789416 |
:1022C0008091FF0399278436910509F4BBC08536B8 |
:1022D0009105ACF48136910509F46FC08236910501 |
:1022E0002CF48B34910509F45DC00FC18236910541 |
:1022F00009F470C08336910509F47FC006C18C369D |
:10230000910509F4EDC08D3691054CF487369105A1 |
:1023100009F4F8C08836910509F4B2C0F6C08437D4 |
:10232000910529F08637910509F4E8C0EEC0809147 |
:10233000CD01A091CB01B091CC01803140F080E182 |
:10234000E8EDF3E00D9001928A95E1F70DC08D91D3 |
:102350009D910D90BC91A02D8093D8039093D903AB |
:10236000A093DA03B093DB03809108018823E1F3A3 |
:102370001F92809105018F9384E58F930E94440DF5 |
:102380008AEF8093C8018FEF8093060180EA9FE077 |
:102390000E9468169093C1018093C0010F900F9026 |
:1023A0000F90B3C0E091CB01F091CC01808191817D |
:1023B0009093900180938F01A8C0E091CB01F091A0 |
:1023C000CC01808180930701803298F08FE1809367 |
:1023D00007010FC0A091CB01B091CC018BE0E0EFE1 |
:1023E000F3E00D9001928A95E1F78091F9038093D3 |
:1023F000F9058FEF8093060188C08091C401909108 |
:10240000C501892B89F4E091CB01F091CC01E081E9 |
:10241000EE2351F08AE0E89FC00111240E94681663 |
:102420009093CB038093CA03E091CB01F091CC0150 |
:1024300090818AE0989FC00111249093C5018093F8 |
:10244000C40115C08FEF80930601E091CB01F0919C |
:10245000CC0190818AE0989FC00111249093C7011C |
:102460008093C601892B19F081E08093D50180EA21 |
:102470009FE00E9468169093C1018093C00145C0FF |
:102480008FEF80930601E091CB01F091CC01908118 |
:1024900097FD08C082E08093D2011092C301109290 |
:1024A000C2011AC0909580913602892B8093360222 |
:1024B00091818AE0989FC00111249093C301809379 |
:1024C000C20184E08093D20180EA9FE00E946816F6 |
:1024D0009093C1018093C00181E08093D60115C023 |
:1024E0008FEF80930601E091CB01F091CC018081C8 |
:1024F0008093370281E08093D70107C081E0809309 |
:10250000D40103C081E08093D8011092D0011092D1 |
:10251000CC011092CB011092CA01E3E0CE5F0C9483 |
:10252000BD7A982F8091C00085FFFCCF9093C600A4 |
:1025300008950F931F9388E18093C1008091C0009C |
:1025400082608093C0008091C10080688093C10048 |
:102550008091C10080648093C10000E010E000938E |
:10256000C5008AE290E08093C4008091C6019091FA |
:10257000C7010E9468169093CD038093CC038CED25 |
:1025800090E00E9468169093FC038093FB0382E026 |
:102590008093CE0386E08093CF0385E08093D203BF |
:1025A0008BE08093D0031092D1038FEF8093D603FA |
:1025B000809103018093D5031093CC010093CB014C |
:1025C0001092CA011F910F910895A0E1B0E0EBEEC7 |
:1025D000F2E10C94A07A80910801882309F48CC25E |
:1025E0008091C0019091C1010E947116882361F011 |
:1025F0001092C3011092C2011092C7011092C6013D |
:102600001092C5011092C4018091C2019091C30142 |
:10261000892B41F08091D9049091DA040E947116BF |
:10262000882329F48091D601882309F460C0809121 |
:102630000801882309F45BC08091D2010DE016E007 |
:102640008430A8F00E94551F80E590E09F938F93FF |
:102650001F930F9381E08F938F9388E48F930E9451 |
:10266000440D2DB73EB7295F3F4F2DBF34C01092A8 |
:1026700038028CEE93E09F938F9388E49FE19F93C1 |
:102680008F93E091BA03F091BB03099584E190E048 |
:102690009F938F931F930F9381E090E09F938F936D |
:1026A00082ED91E09F938F9382E08F9381E08F93EF |
:1026B00088E48F930E94440D8091D201982F8F5F00 |
:1026C0008093D2012DB73EB7215F3F4F2DBF94308D |
:1026D00010F01092D2018091C2019091C3010E942A |
:1026E00068169093DA048093D9041092D6018091F1 |
:1026F000D701882351F180910801882331F10E948C |
:10270000551F80E590E09F938F938DE096E09F9317 |
:102710008F9321E030E03F932F9385E291E09F93E8 |
:102720008F933F932F9387E392E09F938F9383E060 |
:102730008F9381E08F938CE48F930E94440D1092CD |
:10274000D7018DB79EB70F968DBF8091D401882396 |
:10275000D1F0809108018823B1F08AE090E09F9346 |
:102760008F938EEC93E09F938F9381E08F938F9361 |
:1027700086E58F930E94440D1092D4012DB73EB789 |
:10278000295F3F4F2DBF8091D8018823D9F08091D8 |
:1027900008018823B9F08BE090E09F938F9380EF3E |
:1027A00093E09F938F9381E08F93809105018F93A6 |
:1027B00087E48F930E94440D1092D8018DB79EB785 |
:1027C00007968DBF8091C6019091C701892B41F07A |
:1027D0008091CC039091CD030E947116882321F43F |
:1027E0008091D501882341F180910801882321F14E |
:1027F0000E943A3082E490E09F938F9387EB95E0BC |
:102800009F938F9381E08F938F9384E48F930E94A3 |
:10281000440D1092D5012DB73EB7295F3F4F2DBF14 |
:102820008091C6019091C701009731F00E9468160F |
:102830009093CD038093CC038091C4019091C50106 |
:10284000892B09F497C08091CA039091CB030E9411 |
:102850007116882309F48EC080910801882309F439 |
:1028600089C080913B0990913C099093BD0380936E |
:10287000BC0380913D0990913E099093BF038093E2 |
:10288000BE0320911D0930911E0940911F095091EE |
:102890002009DA01C90163E0880F991FAA1FBB1F35 |
:1028A0006A95D1F7820F931FA41FB51F820F931F44 |
:1028B000A41FB51F20914101309142014091430175 |
:1028C00050914401BC01CD010E94777A3093C1033D |
:1028D0002093C0038091B4029091B502A091B602FA |
:1028E000B091B70249E0B595A795979587954A9518 |
:1028F000D1F78093C2038091B0029091B102A09170 |
:10290000B202B091B30239E0B595A7959795879536 |
:102910003A95D1F78093C3038091BC029091BD0298 |
:10292000A091BE02B091BF0229E0B595A7959795F9 |
:1029300087952A95D1F78093C4038EE090E09F930A |
:102940008F938CEB93E09F938F9381E08F938F9382 |
:1029500083E48F930E94440D8091C4019091C5013E |
:102960000E9468169093CB038093CA038DB79EB7DD |
:1029700007968DBF809107018F3F79F1992704E079 |
:10298000880F991F0A95E1F784519E4F40E150E06E |
:10299000BC01CE0101960E94567880E190E09F93A1 |
:1029A0008F93CE0101969F938F9381E090E09F9348 |
:1029B0008F9387E091E09F938F9382E08F9381E0E4 |
:1029C0008F9381E48F930E94440D8FEF80930701D2 |
:1029D0002DB73EB7255F3F4F2DBF8091F905882366 |
:1029E000C9F0809108018823A9F081E090E09F93CD |
:1029F0008F9389EF95E09F938F9381E08F938F93CF |
:102A000082E48F930E94440D1092F9058DB79EB712 |
:102A100007968DBF8091D3018823D1F08091080162 |
:102A20008823B1F086E490E09F938F938EE298E044 |
:102A30009F938F9381E08F938F9380E58F930E9474 |
:102A4000440D1092D3012DB73EB7295F3F4F2DBFE4 |
:102A50008091FB039091FC030E947116882309F476 |
:102A60004BC080910801882309F446C08091A001E1 |
:102A7000882361F580913B0990913C099093E9038B |
:102A80008093E80380913D0990913E099093EB0378 |
:102A90008093EA0380916E028093EC0380916D0233 |
:102AA0008093ED0388E090E09F938F9388EE93E00E |
:102AB0009F938F9381E08F9383E08F938BE68F9327 |
:102AC0000E94440D8DB79EB707968DBF8091EE038F |
:102AD000853018F086E08093EE038091E70188232B |
:102AE00019F083E690E002C087EE93E00E9468163A |
:102AF0009093FC038093FB03E4E0C05F0C94BC7AEA |
:102B00001F920F920FB60F9211242F933F935F9352 |
:102B10006F937F938F939F93AF93BF93EF93FF93A5 |
:102B20008091E901882329F08091E9018150809307 |
:102B3000E90180918503882319F0815080938503F2 |
:102B40008091F10181508093F1018F3F09F051C0D4 |
:102B500089E08093F1018091EF019091F00101965D |
:102B60009093F0018093EF01809112018F5F81704B |
:102B700080931201882349F48091EE01843028F477 |
:102B80008091EE018F5F8093EE01349903C081E064 |
:102B90008093E7018091EA019091EB01892B11F17B |
:102BA0008091EA019091EB010B9750F08091EA013E |
:102BB0009091EB010A979093EB018093EA0104C096 |
:102BC0001092EB011092EA018091EA019091EB01E1 |
:102BD00020910B0130910C0182239323892B41F02A |
:102BE000479A07C08FEF9FEF90930C0180930B01E2 |
:102BF00047988091E701882309F45AC02091A001E9 |
:102C0000222309F055C080910B0983FF51C086B182 |
:102C10009927FC01E071F07084FF13C08091EC01F2 |
:102C20009091ED0101969093ED018093EC018091DC |
:102C3000EC019091ED01895E9340D0F12093E70182 |
:102C400037C08091EC019091ED01892B69F1809161 |
:102C5000EC019091ED018A56914030F58091EC01A4 |
:102C60009091ED0169E270E00E942E7A8091EC0172 |
:102C70009091ED01860F971F9093ED018093EC01E9 |
:102C80008091EC019091ED010B9750F08091EC0157 |
:102C90009091ED010A979093900180938F0104C069 |
:102CA000F0939001E0938F011092ED011092EC01EE |
:102CB000FF91EF91BF91AF919F918F917F916F9114 |
:102CC0005F913F912F910F900FBE0F901F9018951D |
:102CD0002091EF013091F001280F391FC9010196B1 |
:102CE00008952091EF013091F001821B930B892F01 |
:102CF00099278695807490700895CF93DF930E94F2 |
:102D00006816EC01CE010E9471168823D9F3DF9179 |
:102D1000CF910895CF93DF930E946816EC0109C00C |
:102D200080911501882329F0909315018FEC8093F1 |
:102D30007A00CE010E947116982F882389F3DF91C3 |
:102D4000CF9108959FB7F8945F983E9A469A8091E4 |
:102D5000B0008F708093B0008091B000836080934A |
:102D6000B0008091B1008B738093B1008091B1006D |
:102D70008B608093B1001092B2008FEF8093B3000C |
:102D80008091B00080688093B000809170008A7F4D |
:102D900080937000809170008260809370009FBF6C |
:102DA00008958AE090E00E9468169093FB05809356 |
:102DB000FA0582E085BD83EB84BD8FEF88BD84EB8F |
:102DC00087BD86E086BD80916E00816080936E0035 |
:102DD00008958091D70620916E0182FF30C09091B6 |
:102DE0008E068CE3989FB001112490918D0680E5AA |
:102DF000989FA0011124922F905897FD9D5F959563 |
:102E0000959586E09802C001112420910901309126 |
:102E10000A01281B390B30930A012093090142173C |
:102E200053072CF050930A01409309010895261787 |
:102E3000370784F070930A01609309010895822F87 |
:102E4000992736E0880F991F3A95E1F790930A0188 |
:102E5000809309010895EF92FF920F931F93CF93F0 |
:102E6000DF9380919506E82FFF27E95BFE4F96815F |
:102E7000C08180911101813009F021C18091D90672 |
:102E800087FF05C0C0E0D0E0E0E0F0E046C0892F59 |
:102E9000992787FD9095A92FB92F2091EC023091A9 |
:102EA000ED024091EE025091EF02BC01CD010E9473 |
:102EB000037A97FF04C061587F4F8F4F9F4F7B016C |
:102EC0008C0187E015950795F794E7948A95D1F7DB |
:102ED0008C2F992787FD9095A92FB92F2091E40277 |
:102EE0003091E5024091E6025091E702BC01CD012C |
:102EF0000E94037A97FF04C061587F4F8F4F9F4F06 |
:102F0000B7E09595879577956795BA95D1F7F801CC |
:102F1000E701C61BD70BE80BF90B20916C0330912E |
:102F20006D03C901A3E0880F991FAA95E1F7821BE1 |
:102F3000930BAA2797FDA095BA2FC81BD90BEA0BB4 |
:102F4000FB0B80916C019927AA27BB27BC01CD01FF |
:102F50009E01AF010E94037A97FF04C061507E4F2B |
:102F60008F4F9F4FFC01EB0179E0F595E795D795E1 |
:102F7000C7957A95D1F71091D706609109017091A4 |
:102F80000A0112FF05C07093100160930F0118C071 |
:102F900040910F015091100180919406282F332702 |
:102FA000CB01841B950BB9010E94427A80910F01DD |
:102FB00090911001860F971F9093100180930F013D |
:102FC00010FF14C080910F019091100197FD0F9692 |
:102FD00064E0959587956A95E1F7AA2797FDA095F6 |
:102FE000BA2FC80FD91FEA1FFB1F15C080910F0110 |
:102FF0009091100197FD0F9654E0959587955A95FD |
:10300000E1F7AA2797FDA095BA2F8C1B9D0BAE0B5D |
:10301000BF0BFD01EC012091C906222321F13327CA |
:103020008091E3019091E401829FA001839F500D64 |
:10303000929F500D1124CA01AA2797FDA095BA2F7F |
:103040008C0F9D1FAE1FBF1F2F5F3F4F442737FDC3 |
:103050004095542FBC01CD010E94777A3093E40152 |
:103060002093E30104C0D093E401C093E301809175 |
:103070008D06282F3327220F331F220F331F8091F5 |
:10308000E3019091E401821793077CF080918E0612 |
:10309000282F3327220F331F220F331F8091E30184 |
:1030A0009091E4012817390724F43093E401209328 |
:1030B000E301809111018F5F80931101F9C0892F85 |
:1030C000992787FD9095A92FB92F2091E40230917F |
:1030D000E5024091E6025091E702BC01CD010E9459 |
:1030E000037A97FF04C061587F4F8F4F9F4F7B013A |
:1030F0008C0187E015950795F794E7948A95D1F7A9 |
:103100008C2F992787FD9095A92FB92F2091EC023C |
:103110003091ED024091EE025091EF02BC01CD01E1 |
:103120000E94037A9B01AC0197FF04C021583F4FD6 |
:103130004F4F5F4FC7E05595479537952795CA95EF |
:10314000D1F72E0D3F1D401F511F80916B01992714 |
:10315000AA27BB27BC01CD010E94037A97FF04C0B8 |
:1031600061507E4F8F4F9F4FFC01EB01B9E0F59509 |
:10317000E795D795C795BA95D1F780916D019927B5 |
:10318000A6E0880F991FAA95E1F740910D01509193 |
:103190000E01209194063327841B950BB9010E94E0 |
:1031A000427A80910D0190910E01860F971F9093A6 |
:1031B0000E0180930D018091D70681FF14C080918C |
:1031C0000D0190910E0197FD0F9674E095958795EE |
:1031D0007A95E1F7AA2797FDA095BA2FC80FD91FB6 |
:1031E000EA1FFB1F15C080910D0190910E0197FD04 |
:1031F0000F9664E0959587956A95E1F7AA2797FD64 |
:10320000A095BA2F8C1B9D0BAE0BBF0BFD01EC01E3 |
:103210002091CA06222321F133278091E101909168 |
:10322000E201829FA001839F500D929F500D1124B7 |
:10323000CA01AA2797FDA095BA2F8C0F9D1FAE1F1C |
:10324000BF1F2F5F3F4F442737FD4095542FBC01D0 |
:10325000CD010E94777A3093E2012093E10104C00E |
:10326000D093E201C093E10180919106282F33278A |
:10327000220F331F220F331F8091E1019091E20151 |
:10328000821793077CF080919206282F3327220F14 |
:10329000331F220F331F8091E1019091E201281723 |
:1032A000390724F43093E2012093E10110921101D7 |
:1032B000E6E0CDB7DEB70C94BA7A1F920F920FB644 |
:1032C0000F9211242F933F934F935F938F939F936C |
:1032D000EF93FF938091F201882309F0DDC0809184 |
:1032E000B00086FF9FC08091B0008F7B8093B000BC |
:1032F000E091F50120919306EE23D9F433278DED6B |
:1033000096E0289FA001299F500D389F500D112451 |
:10331000CA012091F3013091F401821B930B909329 |
:10332000E6018093E5011092F4011092F301469AB0 |
:10333000B0C02E1738F48AE090E09093E6018093B5 |
:10334000E501A7C089EA93E09093E6018093E50147 |
:103350008E2F992783309105D9F08430910534F46C |
:103360008130910549F0029761F020C084309105C9 |
:1033700091F0059799F01AC08091E3019091E401D2 |
:1033800004C08091E1019091E20187559E4F1DC0DC |
:103390008091E70805C08091C00802C08091F008C4 |
:1033A0009927880F991F880F991FEFCFFF27EE0FDE |
:1033B000FF1FE25DF74F20813181220F331F809183 |
:1033C000E5019091E601820F931F9093E6018093AF |
:1033D000E5018091E5019091E60155E08D3D95076D |
:1033E00018F08CED95E005C08757914030F487E7E1 |
:1033F00091E09093E6018093E5012091E501309101 |
:10340000E6012C5B30403093E6012093E50180918A |
:10341000F3019091F401820F931F9093F401809334 |
:10342000F30137C08091B00080648093B0008CEBD2 |
:1034300090E09093E6018093E5018091F3019091F3 |
:10344000F40184549F4F9093F4018093F301809191 |
:10345000E801882321F080919202882321F4809151 |
:10346000E801823011F4469801C0469A8091F50136 |
:103470008F5F8093F501282F33278091930699273A |
:103480000196821793072CF481E08093110110922A |
:10349000F50181E08093F2012091E5013091E60190 |
:1034A00041E02F37340730F08FEF8093B3002F5F68 |
:1034B00030400FC02F3F3105C9F0C0F0A9014F5F68 |
:1034C00050404F37510550F480E88093B3002058A6 |
:1034D00030403093E6012093E50112C08FEF8093D6 |
:1034E000B3005093E6014093E5010AC08091E501E5 |
:1034F0008093B3001092E6011092E5011092F20160 |
:10350000FF91EF919F918F915F914F913F912F91FB |
:103510000F900FBE0F901F90189510927C008FECAB |
:1035200080937A0008958091510260911301709107 |
:10353000140120910602882379F0CB01AA27BB272A |
:10354000332727FD3095432F532FBC01CD010E9417 |
:10355000037ADC01CB0116C084E0660F771F8A95E1 |
:10356000E1F7CB01AA27BB27332727FD3095432F4F |
:10357000532FBC01CD010E94037ADC01CB010497DB |
:10358000A109B1098093FE019093FF01A09300026D |
:10359000B09301020895CF93DF93109206020E9428 |
:1035A000931A83E090E00E945C27C82FDD27C03F7C |
:1035B000D10508F42A96C7BD8C2F809588BD86E971 |
:1035C00090E00E948A168091190190911A0181520F |
:1035D000934010F0C0EFD0E0C630D10510F1C7BD68 |
:1035E0008C2F809588BD84E690E00E948A1681E049 |
:1035F00094E09F938F9381E992E19F938F93E09161 |
:10360000BA03F091BB0309958091190190911A01B9 |
:103610000F900F900F900F908152934010F42197CC |
:10362000DBCFC0930A066C2F83E090E00E946427F2 |
:1036300080916B0680FF0AC080910A068A508C3DFB |
:1036400028F08091D30380648093D3038CE291E0CF |
:103650000E948A16DF91CF9108951F920F920FB6A4 |
:103660000F9211242F933F934F935F936F937F9308 |
:103670008F939F93AF93BF93CF93DF93EF93FF937A |
:1036800080911E02282F3327442755278F5F809370 |
:103690001E02F9012231310508F0CEC3E25CFF4F72 |
:1036A0000C94C97A809178009091790046C08091FD |
:1036B0007800909179007BC1809178009091790099 |
:1036C00090932202809321028BC18091F602909107 |
:1036D000F7022091780030917900821B930B909330 |
:1036E000FD058093FC058091FC059091FD0590936C |
:1036F0002C0280932B0292C18091780090917900E6 |
:103700002091F8023091F902821B930B90930906E5 |
:1037100080930806809108069091090690932E02E6 |
:1037200080932D028BC380912502909126022091D7 |
:10373000780030917900820F931F90932602809336 |
:10374000250281E07CC38091230290912402209184 |
:10375000780030917900820F931F90932402809318 |
:10376000230284E06CC38091340290913502892B4E |
:1037700091F42091780030917900C901E3E0880F3D |
:10378000991FEA95E1F7820F931F820F931F909381 |
:103790003502809334022091780030917900C9017C |
:1037A00073E0880F991F7A95E1F7820F931F820FBC |
:1037B000931F20913402309135028217930718F03D |
:1037C0002E5F3F4F02C0225030403093350220938D |
:1037D000340280913402909135026FE170E00E94D2 |
:1037E0002E7A709324016093230185E028C3809191 |
:1037F0007800909179009093FF058093FE05809169 |
:10380000FE059091FF054091F2025091F302841B56 |
:10381000950B2091F102332727FD3095821B930BE6 |
:1038200090930C0280930B0280915102882309F03F |
:103830006DC080910B0290910C0202977CF122E006 |
:103840004E3E52070CF062C020911F0230912002C0 |
:103850002B5F3F4F3093200220931F0225503040B2 |
:1038600080915A0290915B02845F914030F4215F15 |
:103870003F4F3093200220931F0280911F029091AE |
:103880002002853691050CF441C04F5F5F4F509385 |
:10389000F3024093F2028456904034C080910B02B0 |
:1038A00090910C028F5F9F4F8CF562E04732560774 |
:1038B0006CF120911F02309120022550304030934E |
:1038C000200220931F022B5F3F4F80915A0290915C |
:1038D0005B02845F914030F42F50304030932002DF |
:1038E00020931F0280911F02909120022FEF8C39AC |
:1038F000920764F4415050405093F3024093F20217 |
:103900008C599F4F9093200280931F0280910B024D |
:1039100090910C029C01442737FD4095542F8091D3 |
:10392000AC029091AD02A091AE02B091AF02820FB5 |
:10393000931FA41FB51F8093AC029093AD02A09378 |
:10394000AE02B093AF022091AC023091AD02409133 |
:10395000AE025091AF0257FF04C021503C4F4F4F71 |
:103960005F4F6AE055954795379527956A95D1F74A |
:103970008091AC029091AD02A091AE02B091AF02E5 |
:10398000821B930BA40BB50B8093AC029093AD02FA |
:10399000A093AE02B093AF02F5C080912302909144 |
:1039A00024022091780030917900820F931F909328 |
:1039B00024028093230210921D0243C220917800BA |
:1039C000309179008091210290912202280F391FB5 |
:1039D0008FEF97E0821B930B90931202809311025A |
:1039E00086E02DC28091F6029091F7022091780036 |
:1039F00030917900821B930B9093FD058093FC0519 |
:103A00008091FC059091FD0520912B0230912C02B4 |
:103A1000820F931F9093100280930F0287E00FC2D2 |
:103A200080917800909179002091F8023091F9020C |
:103A3000821B930B909309068093080680910806D9 |
:103A40009091090620912D0230912E02820F931F32 |
:103A500090930E0280930D02F1C1209125023091C6 |
:103A600026028091780090917900280F391F220F4B |
:103A7000331F220F331F3093260220932502C901E2 |
:103A800037FD079643E0959587954A95E1F7909322 |
:103A90001602809315028091270290912802820FCE |
:103AA000931F97FD01969595879590932802809393 |
:103AB00027022091020330910303821B930B909302 |
:103AC00022018093210120911B0230911C028091E0 |
:103AD000210190912201280F391F37FF02C02F5F6B |
:103AE0003F4F3595279530931C0220931B0229CE1A |
:103AF00020912302309124028091780090917900E6 |
:103B0000280F391F220F331F220F331F3093240237 |
:103B100020932302C90137FD0796F3E09595879519 |
:103B2000FA95E1F790931402809313028091290291 |
:103B300090912A02820F931F97FD01969595879584 |
:103B400090932A028093290220910003309101036F |
:103B5000821B930B9093200180931F0120911902E7 |
:103B600030911A0280911F0190912001280F391F76 |
:103B700037FF02C02F5F3F4F3595279530931A02CC |
:103B80002093190283E05BC110921E0281E08093B2 |
:103B90001501809102029091030201969093030215 |
:103BA00080930202809178009091790090931A019D |
:103BB000809319018091190190911A01AA27BB27BE |
:103BC000C0912F02D0913002E0913102F091320287 |
:103BD000C80FD91FEA1FFB1FC0932F02D0933002DA |
:103BE000E0933102F0933202809133028F5F809331 |
:103BF0003302803108F422C180911B0190911C0195 |
:103C0000A0911D01B0911E019C01AD0163E0220F46 |
:103C1000331F441F551F6A95D1F7281B390B4A0BD8 |
:103C20005B0B2C0F3D1F4E1F5F1F8091FE0190917B |
:103C3000FF01A0910002B0910102281B390B4A0B31 |
:103C40005B0B57FF04C0295F3F4F4F4F5F4F93E01F |
:103C500055954795379527959A95D1F720931B0150 |
:103C600030931C0140931D0150931E01C09100062A |
:103C7000D0910106E0910206F091030680911B01AC |
:103C800090911C01A0911D01B0911E01C81BD90B80 |
:103C9000EA0BFB0BC093F601D093F701E093F80118 |
:103CA000F093F90120910702309108024091090236 |
:103CB00050910A0257FF04C0215F3F4F4F4F5F4FA3 |
:103CC00084E055954795379527958A95D1F780914A |
:103CD000070290910802A0910902B0910A02821B8A |
:103CE000930BA40BB50B8093070290930802A0934B |
:103CF0000902B0930A028091070290910802A091F4 |
:103D00000902B0910A028C0F9D1FAE1FBF1F809346 |
:103D1000070290930802A0930902B0930A028091CF |
:103D2000070290910802A0910902B0910A02B7FF20 |
:103D300003C00F96A11DB11DC4E0B595A795979539 |
:103D40008795CA95D1F72091F6013091F701281B8C |
:103D5000390B64E0213036071CF020E034E006C067 |
:103D60008CEF2030380714F420E03CEF80910402FF |
:103D700090910502809104029091050297FF03C083 |
:103D8000909581959F4FA901F3E0440F551FFA9537 |
:103D9000E1F78D5B9240C4F080910402909105029E |
:103DA0009C01E4E0220F331FEA95E1F7281B390B51 |
:103DB000240F351F37FF02C0215F3F4F74E0359558 |
:103DC00027957A95E1F717C080910402909105023A |
:103DD0009C0165E0220F331F6A95E1F7281B390B20 |
:103DE000240F351F37FF02C0215E3F4F45E0359558 |
:103DF00027954A95E1F730930502209304028091BC |
:103E00002F0290913002A0913102B0913202B7FF9F |
:103E100003C00196A11DB11DB595A79597958795EE |
:103E200080932F0290933002A0933102B09332021C |
:103E300088E08093330202C010921E0282E08093D9 |
:103E40001D0280911D0280937C0080911E028823B8 |
:103E500019F08FEC80937A00FF91EF91DF91CF9171 |
:103E6000BF91AF919F918F917F916F915F914F9192 |
:103E70003F912F910F900FBE0F901F90189590E2D9 |
:103E8000EDE0F6E08FE49193815087FFFCCF089539 |
:103E900090913802903540F4E92FFF27E35FF94F06 |
:103EA00080839F5F909338020895A0E0B0E0EBE537 |
:103EB000FFE10C949C7A2091360220FF0AC0809189 |
:103EC0003702882311F0815002C080912501809330 |
:103ED000370221FF0CC0909137028091250198177D |
:103EE00019F41092370203C09F5F90933702822F1C |
:103EF000992780FF04C081FF02C0109237020E9400 |
:103F00003F1F80913702282F332708E41FE1C0911B |
:103F1000BA03D091BB038A3098F481E180933802D0 |
:103F20003F932F9383E094E09F938F931F930F937E |
:103F3000FE0109952DB73EB72A5F3F4F2DBF11C037 |
:103F400080E1809338023F932F9388E094E09F9321 |
:103F50008F931F930F93FE0109958DB79EB7069619 |
:103F60008DBF20913702822F9927AA27BB27FC01FA |
:103F70000D9708F096C5E05BFF4F08E41FE1C09184 |
:103F8000BA03D091BB030C94C97A109238028DE029 |
:103F900094E09F938F9358E4E52E5FE1F52E1F93F5 |
:103FA0000F93FE01099584E1809338020F900F90E2 |
:103FB0000F900F9086E690E09F938F9386E090E0BD |
:103FC0009F938F9382E090E09F938F938091030162 |
:103FD0006AE00E94227A892F99279F938F9380917C |
:103FE00003010E94227A99279F938F938DE194E099 |
:103FF0009F938F931F930F93E091BA03F091BB03AC |
:10400000099588E280933802EDB7FEB73E96EDBF82 |
:1040100088EE96E09F938F938091010199279F935B |
:104020008F9385E394E09F938F931F930F93E09179 |
:10403000BA03F091BB0309958091D4032DB73EB725 |
:10404000285F3F4F2DBF84FF0AC08CE38093380266 |
:1040500083E494E09F938F931F930F933DC09091BF |
:10406000D303992351F08CE380933802892F992749 |
:104070009F938F9380E594E047C090913E029923EF |
:1040800051F08CE380933802892F99279F938F9367 |
:1040900087E694E02EC190917203992371F08CE32E |
:1040A00080933802892F99279F938F938DE794E00F |
:1040B0009F938F93FF92EF9288C3809139019091E3 |
:1040C0003A01069798F48CE3809338028EE894E0E6 |
:1040D0009F938F93FF92EF92E091BA03F091BB030D |
:1040E00009950F900F900F900F90E4C49091A8093C |
:1040F0009E3108F0DFC48CE380933802892F992722 |
:104100009F938F938BE994E09F938F93FF92EF920D |
:10411000E091BA03F091BB0309958DB79EB706965F |
:104120008DBFC8C41092380280918C0290918D028C |
:10413000A0918E02B0918F02BC01CD0125E030E04C |
:1041400040E050E00E94777A3F932F938FEA94E00B |
:104150009F938F931F930F93FE01099584E18093A2 |
:104160003802EDB7FEB73696EDBF80918802909188 |
:104170008902A0918A02B0918B02BC01CD0125E099 |
:1041800030E040E050E00E94777A3F932F938CEB31 |
:1041900094E09F938F931F930F93E091BA03F09154 |
:1041A000BB03099588E2809338022DB73EB72A5F9A |
:1041B0003F4F2DBF8091190190911A019F938F93CA |
:1041C00089EC94E09F938F931F930F93E091BA0330 |
:1041D000F091BB0309958CE3809338028DB79EB7AD |
:1041E00006968DBF87B599279F938F9386ED94E0B0 |
:1041F0009F938F931F930F93E091BA03F091BB03AA |
:104200000995EDB7FEB7369690C31092380283EE4B |
:1042100094E09F938F9348E4E42E4FE1F42E1F9394 |
:104220000F93FE01099584E1809338020F900F905F |
:104230000F900F908091EC029091ED02A091EE0210 |
:10424000B091EF02B7FF04C081509C4FAF4FBF4FFA |
:104250003AE0B595A795979587953A95D1F7BF938D |
:10426000AF939F938F9380EF94E09F938F93FF92F0 |
:10427000EF92E091BA03F091BB03099588E2809335 |
:1042800038022DB73EB7285F3F4F2DBF8091E40223 |
:104290009091E502A091E602B091E702B7FF04C059 |
:1042A00081509C4FAF4FBF4F2AE0B595A79597958A |
:1042B00087952A95D1F7BF93AF939F938F938FEFF5 |
:1042C00094E09F938F93FF92EF92E091BA03F09165 |
:1042D000BB0309958CE3809338028DB79EB708968F |
:1042E0008DBF80911409909115099F938F938EE053 |
:1042F00095E09F938F93FF92EF927ECF91E0F92EFE |
:10430000C1E0D0E000E318E09F2D969584E1989FEE |
:10431000C001112480933802F801828193819F9318 |
:104320008F932196DF93CF932197808191819F93E3 |
:104330008F93DF93CF938DE195E09F938F9388E4E4 |
:104340009FE19F938F93E091BA03F091BB0309958E |
:104350002DB73EB7245F3F4F2DBF32E0F30E2296BC |
:104360000C5F1F4F88E08F1578F6A4C310923802B7 |
:1043700080916006E82FFF27EE0FFF1FE25DF74FE9 |
:10438000808191819F938F9380915F06E82FFF2713 |
:10439000EE0FFF1FE25DF74F808191819F938F9316 |
:1043A0008FE295E09F938F931F930F93FE010995E2 |
:1043B00084E180933802EDB7FEB73896EDBF809167 |
:1043C0006206E82FFF27EE0FFF1FE25DF74F8081A7 |
:1043D00091819F938F9380916106E82FFF27EE0FC5 |
:1043E000FF1FE25DF74F8081918181589F4F9F931E |
:1043F0008F938FE395E09F938F931F930F93E0919B |
:10440000BA03F091BB03099588E2809338022DB777 |
:104410003EB7285F3F4F2DBF80916406E82FFF27EE |
:10442000EE0FFF1FE25DF74F8081918181589F4F12 |
:104430009F938F9380916306E82FFF27EE0FFF1F56 |
:10444000E25DF74F8081918181589F4F9F938F93B9 |
:104450008FE495E09F938F931F930F93E091BA039E |
:10446000F091BB0309958CE3809338028DB79EB71A |
:1044700008968DBF80916606E82FFF27EE0FFF1F7D |
:10448000E25DF74F8081918181589F4F9F938F9379 |
:1044900080916506E82FFF27EE0FFF1FE25DF74FC3 |
:1044A0008081918181589F4F9F938F938FE595E0F5 |
:1044B00030C2109238028FE695E09F938F9388E484 |
:1044C000E82E8FE1F82E1F930F93FE01099584E1EA |
:1044D000809338020F900F900F900F9080910203FD |
:1044E000909103039C0197FF02C0215F3F4F207F03 |
:1044F000821B930B97FD0196959587959F938F93BC |
:10450000809102039091030397FD0F96B4E0959577 |
:104510008795BA95E1F79F938F932091020330918D |
:10452000030337FF02C0295F3F4FA3E0359527956E |
:10453000AA95E1F78091150290911602821B930BC8 |
:104540009F938F938DE795E09F938F93FF92EF92C8 |
:10455000E091BA03F091BB03099588E28093380299 |
:104560002DB73EB7265F3F4F2DBF8091000390913E |
:1045700001039C0197FF02C0215F3F4F207F821BF8 |
:10458000930B97FD0196959587959F938F938091B7 |
:1045900000039091010397FD0F96E4E095958795B0 |
:1045A000EA95E1F79F938F932091000330910103E7 |
:1045B00037FF02C0295F3F4F73E0359527957A9505 |
:1045C000E1F78091130290911402821B930B9F9349 |
:1045D0008F938FE895E09F938F93FF92EF92E091F6 |
:1045E000BA03F091BB0309958CE3809338028DB731 |
:1045F0009EB70A968DBF8091FE029091FF0297FDB3 |
:104600000196959587959F938F938091FE02909147 |
:10461000FF022091110230911202821B930B9F9393 |
:104620008F9381EA95E09F938F93FF92EF9275C1EC |
:104630001092380280EB95E09F938F931F930F9316 |
:10464000FE01099584E1809338020F900F900F903E |
:104650000F908091F8029091F9029F938F9380912F |
:104660000D0290910E029F938F938DEB95E09F9397 |
:104670008F931F930F93E091BA03F091BB030995B9 |
:1046800088E2809338022DB73EB7285F3F4F2DBF99 |
:104690008091F6029091F7029F938F9380910F0281 |
:1046A000909110029F938F938CEC95E09F938F9342 |
:1046B0001F930F93E091BA03F091BB0309958CE32C |
:1046C000809338028DB79EB708968DBF8091F20215 |
:1046D0009091F3029F938F9380910B0290910C0223 |
:1046E0009F938F938BED95E014C1109238028091C7 |
:1046F0002301909124016AE070E00E94427A9F9326 |
:104700008F9380912301909124016AE070E00E94D0 |
:10471000427A7F936F938AEE95E09F938F931F93D6 |
:104720000F93FE01099584E1809338022DB73EB7BF |
:10473000285F3F4F2DBF8091A2099091A3096AE0A5 |
:1047400070E00E942E7A9F938F938091A20990919E |
:10475000A3096AE070E00E942E7A7F936F938EEF38 |
:1047600095E09F938F931F930F93E091BA03F0917D |
:10477000BB03099588E2809338028DB79EB70896EF |
:104780008DBF8091A4099091A5099F938F9382E199 |
:1047900096E09F938F931F930F93E091BA03F0914C |
:1047A000BB0309958CE380933802EDB7FEB73696CC |
:1047B000EDBF8091A6099091A7099F938F9382E204 |
:1047C00096E09F938F931F930F93E091BA03F0911C |
:1047D000BB0309952DB73EB72A5F3F4F2DBF6AC176 |
:1047E0001092380284E396E09F938F931F930F9368 |
:1047F000FE01099588E2809338020F900F900F9088 |
:104800000F908091920299279F938F938DE396E06A |
:104810009F938F931F930F93E091BA03F091BB0383 |
:1048200009958CE3809338028DB79EB706968DBFAD |
:1048300080912D08992701979F938F938DE496E09F |
:10484000D7CC109238028DE596E09F938F931F93FB |
:104850000F93FE01099584E1809338020F900F9029 |
:104860000F900F90809102016AE00E94227A892FB6 |
:1048700099279F938F93809102010E94227A992712 |
:104880009F938F938DE696E09F938F931F930F9343 |
:10489000E091BA03F091BB03099588E28093380256 |
:1048A0002DB73EB7285F3F4F2DBF8091BB016AE017 |
:1048B0000E94227A892F99279F938F938091BB0121 |
:1048C0000E94227A99279F938F938BE796E09F937C |
:1048D0008F931F930F93E091BA03F091BB03099557 |
:1048E0008CE3809338028DB79EB708968DBF809178 |
:1048F000BC016AE00E94227A892F99279F938F93A7 |
:104900008091BC010E94227A99279F938F9389E816 |
:1049100096E09F938F931F930F93E091BA03F091CA |
:10492000BB030995EDB7FEB73896EDBFC3C053E999 |
:10493000C52E52E0D52E20E030E0E90143E0F42E10 |
:10494000C0933802F60181916F0199279F938F934D |
:1049500089010F5F1F4F1F930F9387E996E09F9385 |
:104960008F9388E49FE19F938F93E091BA03F09136 |
:10497000BB0309952DB73EB7285F3F4F2DBFFA9473 |
:1049800064969801F7FEDCCF95C097E9C92E92E0B6 |
:10499000D92EC0E0D0E08E0183E0F82E00933802DB |
:1049A000F60181916F0199279F938F932596DF934D |
:1049B000CF9384EA96E09F938F9388E49FE19F933F |
:1049C0008F93E091BA03F091BB0309952DB73EB7E1 |
:1049D000285F3F4F2DBFFA940C5E1F4F2497F7FEC0 |
:1049E000DDCF68C01092380281EB96E09F938F93E1 |
:1049F0001F930F93FE01099584E1809338020F9075 |
:104A00000F900F900F908091B7019091B8019F93F4 |
:104A10008F938FEB96E09F938F931F930F93E0916B |
:104A2000BA03F091BB03099588E2809338028DB7F1 |
:104A30009EB706968DBF8091B9019091BA019F9360 |
:104A40008F938CEC96E09F938F931F930F93E0913D |
:104A5000BA03F091BB03099589E480933802EDB75E |
:104A6000FEB73696EDBF89ED96E09F938F931F9327 |
:104A70000F93E091BA03F091BB0309958091360240 |
:104A80000F900F900F900F9083FF14C01092BA01F7 |
:104A90001092B90160E070E08EE090E00E9475270E |
:104AA00009C080912501281719F421502093250170 |
:104AB0001092370210923602E8E0CDB7DEB70C94C0 |
:104AC000B87AF999FECF92BD81BDF89A80B5992741 |
:104AD0000895F999FECF1FBA92BD81BD60BD0FB692 |
:104AE000F894FA9AF99A0FBE08954AEA20E030E065 |
:104AF0002617370740F4FC018191480F2F5F3F4F85 |
:104B000026173707C8F3842F99270895EAEA40E06B |
:104B100050E04617570778F49C01F999FECF32BD53 |
:104B200021BDF89A80B5E80F4F5F5F4F2F5F3F4F71 |
:104B30004617570790F38E2F9927089581E08093A9 |
:104B4000610682E08093600683E080935F0684E0E4 |
:104B50008093620685E08093630686E08093640616 |
:104B600087E08093650688E08093660689E08093FD |
:104B700067068AE0809368068BE0809369068CE084 |
:104B800080936A06089586E680935E063CE0EAED2F |
:104B9000F6E0832F11928A95E9F78AE080937E06EA |
:104BA0001092A2068BE180937A068EE480939F0692 |
:104BB0008093A006B0E2B093A1061092D6068AE6D2 |
:104BC00080936B0682E78093D80680E58093D906B0 |
:104BD00084E0809385061092C3061092C00678E0A8 |
:104BE0007093780626EE2093790680E480937B0606 |
:104BF00085E080936E06FEE1F0936C069FE0909353 |
:104C00006F06F0936D06109271067093720684E140 |
:104C100080937306109274061092C60690937006E5 |
:104C20001092CF063093D006109287061092880615 |
:104C30001092890610928A061092A4061092A50678 |
:104C40001092A6061092A70690E890938B0642E376 |
:104C500040938C06A2E0A093D70688E180938D064E |
:104C600020938E0683E0809393065DE7509396062B |
:104C7000509397065093980690938F06E5E5E0933E |
:104C8000900666E4609391068CED809392068CE327 |
:104C900080939406109295069AEA9093A8068CEC5D |
:104CA0008093AA061092AC069093AD0698E290937A |
:104CB000A9069093AB061092AE061092D4064093CC |
:104CC000D506409399062AE520939A0640939B06C1 |
:104CD00036E03093AF0684E68093B0068093B10649 |
:104CE0002093B20688E78093B3069093B7068BE4CF |
:104CF0008093B406E093B5068093B6063093B80669 |
:104D00007093B9064093BA068AE28093BB0610926C |
:104D1000BC061092BF069CE89093BD06A093BE0609 |
:104D20001092C1061092C20681E4809383062093FC |
:104D300084061092C4061092C50686E98093C706C1 |
:104D400050939C0684E380939D061092C8061092AF |
:104D5000C9061092CA069093CB066093CC06909336 |
:104D6000CD066093CE061092D106B09382068FE1F5 |
:104D70008093D306F093D20608950E94C3258AE05B |
:104D80008093750680E18093760626E0209377066F |
:104D90009AE590937C0688E780937D0690937F0642 |
:104DA000809380062093810680E2809386068CE3C0 |
:104DB00080939E068BE48093A30686E491E6A3E7A6 |
:104DC000B4E78093DA069093DB06A093DC06B093F9 |
:104DD000DD0668E870E08EE596E00E947525809318 |
:104DE000E6060895CF93DF930E94C32588E0809361 |
:104DF000750630E13093760626E02093770694E638 |
:104E000090937C0688E780937D0690937F0680933D |
:104E10008006209381063093860686E480939E0662 |
:104E20008093A306AAEDB6E085E0E6E2F1E0ED01AD |
:104E3000019009928A95E1F768E870E0CD018C57FE |
:104E400090400E9475258093E606DF91CF910895EA |
:104E50000E94C32526E0209375068AE0809376069B |
:104E600084E08093770694E690937C0688E78093AD |
:104E70007D0690937F06809380062093810680E1D3 |
:104E80008093860686E480939E068093A30685E43D |
:104E900091E6A3E7B9E78093DA069093DB06A09347 |
:104EA000DC06B093DD0668E870E08EE596E00E94CF |
:104EB00075258093E6060895F999FECF92BD81BDD0 |
:104EC000F89A80B599270895F999FECF1FBA92BD37 |
:104ED00081BD60BD0FB6F894FA9AF99A0FBE089595 |
:104EE00061E675E20E949178089549E655E20E94D4 |
:104EF000CB780895EF92FF920F931F93CF93C82F13 |
:104F00008150853008F0C3E089E8C89F80011124F2 |
:104F10008BEDE82E8FEFF82EE00EF11E68E870E0C2 |
:104F2000C7010E948625682F98012D593F4F8FB3E6 |
:104F30009927AC014270507081FDF9CF32BD21BD7F |
:104F4000F89A80B5861711F0CA0121C08FB399274E |
:104F50009C012270307081FDF9CFF2BCE1BCF89A5F |
:104F600080B5863611F0C90112C089E8C89FC0011A |
:104F70001124859721E635E249E850E0BC018EE531 |
:104F800096E00E946C780E942B6781E090E0CF91C0 |
:104F90001F910F91FF90EF900895282F863010F009 |
:104FA00025E003C0882309F421E020930101F99949 |
:104FB000FECF1FBA82E090E092BD81BD20BD0FB64A |
:104FC000F894FA9AF99A0FBE0895CF93C82F80915A |
:104FD0005E06863609F04FC0C63010F0C5E003C04B |
:104FE000CC2309F448C00E94E5768091D90682FF5F |
:104FF00007C080918306843618F080E5809383068D |
:1050000068E870E08EE596E00E9475258093E606DC |
:1050100089E8C89FC001112429E635E249E850E03B |
:105020006EE576E085970E94A97829E635E24CE0A6 |
:1050300050E06FE576E080E590E00E94A9786CE0B2 |
:1050400070E08FE596E00E947525282FF999FECF34 |
:105050001FBA8CE590E092BD81BD20BD0FB6F894DB |
:10506000FA9AF99A0FBE8C2F0E94CD270E942B67C7 |
:1050700081E090E002C080E090E0CF9108956DE47F |
:1050800070E088EE93E00E948625482F8FB3992721 |
:105090009C012270307081FDF9CF85E394E092BDD0 |
:1050A00081BDF89A80B5841779F48FB399279C0154 |
:1050B0002270307081FDF9CF88EE93E092BD81BD02 |
:1050C000F89A80B5813011F0C901089521E635E2E2 |
:1050D0004EE450E068EE73E087EE96E00E946C7854 |
:1050E00081E090E008958091E7068130A9F46DE4B5 |
:1050F00070E087EE96E00E9475258093340729E6DC |
:1051000035E24EE450E067EE76E088EE93E00E94F0 |
:10511000A97881E090E0089580E090E00895CF9331 |
:10512000DF9381E08093E706E7EEF6E08FE01586F7 |
:1051300016861786108A8150349687FFF8CF80E450 |
:105140008093F4068093F5061092F6068093F70696 |
:105150008093F80690EC9093F9061092FA068093EB |
:10516000FB068093FC061092FD069093FE0690933A |
:10517000FF06809300071092010780930207909327 |
:105180000307A8EEB6E08CE0ECE2F1E0ED0101905F |
:1051900009928A95E1F76DE470E0CD0101970E94D4 |
:1051A000752580933407DF91CF910895F999FECF4B |
:1051B00082E090E092BD81BDF89A80B5282F8630BC |
:1051C00078F023E0322FF999FECF1FBA82E090E009 |
:1051D00092BD81BD30BD0FB6F894FA9AF99A0FBE10 |
:1051E00020930101822F992708951F93CF93C82FF1 |
:1051F000162F863010F0C5E003C0882309F4C1E003 |
:105200008C2F99278230910541F08330910544F429 |
:10521000019731F40E94BD2605C00E94F22602C00B |
:105220000E9428271123E1F06CE070E080E590E017 |
:105230000E948625282FF999FECF8CE590E092BD3B |
:1052400081BDF89A80B5821759F421E635E24CE029 |
:1052500050E060E570E08FE596E00E946C7802C057 |
:105260000E949E258C2F0E94E527CF911F910895C3 |
:10527000DF92EF92FF920F931F93CF93FF24DF2CC7 |
:10528000EF2C81E090E00E945C27863611F031E03F |
:10529000E32E6CE070E080E590E00E948625C82F48 |
:1052A000F999FECF8CE590E092BD81BDF89A80B56A |
:1052B0008C1711F421E0D22EC1E001E010E0EE20C5 |
:1052C00029F48C2F0E947A278823B9F591E0F92ED2 |
:1052D0001F930F9381EE96E09F938F9381E992E164 |
:1052E0009F938F93E091BA03F091BB0309952DB77B |
:1052F0003EB72A5F3F4F2DBF0130110521F002302C |
:10530000110521F006C00E94BD2605C00E94F226AC |
:1053100002C00E942827DD2059F021E635E24CE04A |
:1053200050E060E570E08FE596E00E946C7802C086 |
:105330000E949E258C2F0E94E527CF5F0F5F1F4F95 |
:10534000C63008F4BCCFFF2019F083E00E94CD27BF |
:105350000E94D628C82F0E947A278C2F99279F93C6 |
:105360008F9387E097E09F938F9301E912E11F935A |
:105370000F93E091BA03F091BB03099581E090E0AF |
:105380000E945C272DB73EB72A5F3F4F2DBF8F3F4E |
:1053900021F00E943F28882399F480E297E09F93B0 |
:1053A0008F931F930F93E091BA03F091BB0309957C |
:1053B0000E948F280E9473280F900F900F900F90DB |
:1053C000EE2029F066E681E090E00E9464271092CA |
:1053D0005D0690E0E4EFF6E0CFE0808134961816A9 |
:1053E0000CF49F5FC150C7FFF8CF90935D06892FE3 |
:1053F00099279F938F9388EE96E09F938F9381E4F4 |
:1054000097E09F938F931F930F93E091BA03F091CE |
:10541000BB0309950E94F1058DB79EB708968DBF15 |
:10542000CF911F910F91FF90EF90DF900895982FEB |
:105430002FB7F8943998389A88B1836088B98091E9 |
:10544000B9008C7F8093B9008AE28093B8001092F3 |
:10545000430210924102109240029923B1F0E9E711 |
:10546000F7E08BE01082118212821382148215827F |
:105470001682178216861086118612861386148667 |
:10548000158681503F9687FFEDCF78942FBF089502 |
:105490001092430284E98093BC0080E88093BC00B2 |
:1054A0001092BD001092BA001092BB001092B90089 |
:1054B0001092B80010923F0280E00E94172A1092CA |
:1054C000BB0085E88093BC0080913D0282608093A0 |
:1054D0003D0208951F920F920FB60F9211242F9341 |
:1054E0003F936F937F938F939F93EF93FF9380915D |
:1054F0004302282F33278F5F8093430223303105E7 |
:1055000009F41CC1243031055CF42130310509F463 |
:1055100054C0223031050CF099C0232B71F02EC3FA |
:105520002530310509F470C1253031050CF41EC158 |
:105530002630310509F434C221C381E080933F0253 |
:1055400009C0809141028C3090F4809141028F5FBC |
:105550008093410280914102E82FFF27EE0FFF1F49 |
:10556000EE0FFF1FE951F94F8585181654F780910A |
:1055700041026CE00E94227A90934102809149029C |
:105580008F5F8093490290913B01981770F41092BD |
:10559000490210923C0210923B0285E08093430244 |
:1055A00080914002880F8D5A04C080914102880F7B |
:1055B0008E5A8093BB0085E824C1809141029927CF |
:1055C000FC0124E0EE0FFF1F2A95E1F7E81BF90B21 |
:1055D000E758F84F81818093BB0085E88093BC0039 |
:1055E000809141029927FC01E295F295F07FFE2718 |
:1055F000E07FFE27E81BF90BE758F84F808180FF1A |
:105600009BC0809141029927FC01E295F295F07FC1 |
:10561000FE27E07FFE27E81BF90BE758F84F828151 |
:10562000882329F080915D06873008F4BDC28091FF |
:105630003B0290913C02892B09F0B6C2809139025D |
:1056400090913A02892B09F0AFC276C08091410255 |
:1056500021E030E002C0220F331F8A95E2F78091EB |
:10566000390290913A0228233923232B81F080912B |
:1056700041029927FC0174E0EE0FFF1F7A95E1F7D4 |
:10568000E81BF90BE758F84F80E184830EC0809146 |
:1056900041029927FC0164E0EE0FFF1F6A95E1F7D4 |
:1056A000E81BF90BE758F84F1482809141029927C3 |
:1056B000FC01E295F295F07FFE27E07FFE27E81BD4 |
:1056C000F90BE758F84F8481282F3327220F331F17 |
:1056D000220F331F220F331F809141029927FC01B3 |
:1056E00034E0EE0FFF1F3A95E1F7E81BF90BE7589E |
:1056F000F84F82818770822B8093BB0085E880936E |
:10570000BC002091410281E090E002C0880F991F07 |
:105710002A95E2F720913B0230913C0282239323A9 |
:10572000892B51F081E797E09093470280934602DE |
:1057300088E08093480238C284E01DC2E0914602AE |
:10574000F091470281918093BB0085E88093BC0073 |
:10575000F0934702E0934602809148028150809383 |
:105760004802882309F420C283E005C28091B90071 |
:10577000803379F580914402882329F48091410295 |
:105780008F5F80934402809141029927FC01E2954A |
:10579000F295F07FFE27E07FFE27E81BF90BE75824 |
:1057A000F84F838199278F7790708F3791058CF40C |
:1057B000809141029927FC01E295F295F07FFE2746 |
:1057C000E07FFE27E81BF90BE758F84F83818F5FD6 |
:1057D00083831092430284E98093BC008AE090E0C6 |
:1057E00090933A0180933901809141028F5F8093B9 |
:1057F00041021092430280913D028E7F80933D02D0 |
:1058000085EA8093BC00D0C18091B9008034D1F189 |
:10581000809140029927FC0174E0EE0FFF1F7A95FA |
:10582000E1F7E81BF90BE758F84F83818F77838303 |
:10583000809140028F5F80934002809140028C30C3 |
:10584000A0F01092400210923A0210923902809118 |
:1058500045028F5F809345028C3038F010924502EC |
:1058600080913D028D7F80933D0280913D02816059 |
:1058700080933D021092430284E98093BC00109211 |
:105880003F0287C0809140029927FC0164E0EE0F3F |
:10589000FF1F6A95E1F7E81BF90BE758F84F838182 |
:1058A00080688383809140029927FC01E295F295FC |
:1058B000F07FFE27E07FFE27E81BF90BE758F84F43 |
:1058C000808180FF42C0809140029927FC01E295CF |
:1058D000F295F07FFE27E07FFE27E81BF90BE758E3 |
:1058E000F84F848199270097D9F0409709F048C074 |
:1058F00081E797E0909347028093460288E0809387 |
:105900004802809140029927FC0134E0EE0FFF1F0E |
:105910003A95E1F7E81BF90BE758F84F148230C0CD |
:10592000909140028FE0989FC00111248258984FB7 |
:1059300090934702809346029091400280914502E5 |
:105940009817D9F480913C0119C0909140028FE0E2 |
:10595000989FC00111248258984F909347028093DA |
:10596000460280913D0281FD06C0909140028091E7 |
:105970004502981711F482E001C081E0809348024B |
:1059800080914802813011F485E801C085EC809354 |
:10599000BC008091440280933E021092440204C1F4 |
:1059A000E0914602F09147028091BB008083809194 |
:1059B00046029091470201969093470280934602D7 |
:1059C00080914802815080934802823010F085EC2B |
:1059D000CFC0813011F485E8CBC080913D0281FFBA |
:1059E0007BC08091590280FD77C080914002992749 |
:1059F000FC0124E0EE0FFF1F2A95E1F7E81BF90BED |
:105A0000E758F84F868199278C7F9070883F9105E1 |
:105A100091F4809140029927FC01E295F295F07F84 |
:105A2000FE27E07FFE27E81BF90BE758F84F80813F |
:105A3000816080830FC0809140029927FC01E2952C |
:105A4000F295F07FFE27E07FFE27E81BF90BE75871 |
:105A5000F84F1082809140029927FC0174E0EE0F0C |
:105A6000FF1F7A95E1F7E81BF90BE758F84F86819D |
:105A7000883F81F4809140029927FC0164E0EE0F99 |
:105A8000FF1F6A95E1F7E81BF90BE758F84F808193 |
:105A9000866021C0809140029927FC01E295F29531 |
:105AA000F07FFE27E07FFE27E81BF90BE758F84F51 |
:105AB0008681893F89F4809140029927FC01E29513 |
:105AC000F295F07FFE27E07FFE27E81BF90BE758F1 |
:105AD000F84F8081846080838091590281FF20C0CB |
:105AE000809140029927FC0134E0EE0FFF1F3A95A8 |
:105AF000E1F7E81BF90BE758F84F86818E3F80F4F9 |
:105B0000809140029927FC0124E0EE0FFF1F2A95A7 |
:105B1000E1F7E81BF90BE758F84F86858F5F86871A |
:105B2000809140028F5F80934002809140028C30D0 |
:105B3000A0F01092400210923A0210923902809125 |
:105B400045028F5F809345028C3038F010924502F9 |
:105B500080913D028D7F80933D021092430284E943 |
:105B60008093BC0080913D02816080933D021AC009 |
:105B70008093BC0086E08093430216C010924302DB |
:105B800084E98093BC0080913D02816080933D0256 |
:105B90008AE090E090933A0180933901109241029B |
:105BA0001092400210923F02FF91EF919F918F91CE |
:105BB0007F916F913F912F910F900FBE0F901F908B |
:105BC00018950F931F93CF93DF93182F8091910215 |
:105BD000882321F48091C801882319F081E090E0A6 |
:105BE00091C01D3008F08CC01123C9F0812F992776 |
:105BF000FC0144E0EE0FFF1F4A95E1F7E81BF90BAB |
:105C0000E758F84F3C9780813C9688230CF078C089 |
:105C10003F97808180FD03C083E090E073C0809156 |
:105C2000710799278B709070029719F084E090E0CB |
:105C300069C067E070E081E797E00E947525909168 |
:105C40007807891719F085E090E05CC000913B016E |
:105C50008CE080933B0184E690E090933A0180933E |
:105C600039010E946816EC0180913D0280FD05C05B |
:105C7000CE010E9471168823B9F3112319F48FEF16 |
:105C80009FE00BC0212F33272150304081E090E06E |
:105C900002C0880F991F2A95E2F790933C028093E7 |
:105CA0003B02109241021092400288EE93E00E9463 |
:105CB0006816EC011092430280913D028E7F809322 |
:105CC0003D0285EA8093BC0080913D0280FD05C0C5 |
:105CD000CE010E9471168823B9F380913B02909106 |
:105CE0003C02892B29F0CE010E947116882311F302 |
:105CF00000933B0180913B0290913C02009711F090 |
:105D000082E090E0DF91CF911F910F9108950F9362 |
:105D10001F93CF93DF93982F80919102882321F4D2 |
:105D20008091C801882319F081E090E07BC09D300C |
:105D3000B0F4992319F486E090E074C0C92FDD27F0 |
:105D4000FE0154E0EE0FFF1F5A95E1F7EC1BFD0B2F |
:105D5000E758F84F3C9780813C9687FD03C082E06E |
:105D600090E060C03F97808180FD03C083E090E0B9 |
:105D700059C088EE93E00E9468168C0180913D0224 |
:105D800080FD05C0C8010E9471168823B9F32197D0 |
:105D900081E090E002C0880F991FCA95E2F79093C6 |
:105DA0003A028093390210924102109240021092FE |
:105DB0007107109278071092430280913D028E7F06 |
:105DC00080933D0285EA8093BC0080913D0280FD76 |
:105DD00005C0C8010E9471168823B9F38091390269 |
:105DE00090913A02892B29F0C8010E9471168823EC |
:105DF00011F38091710799278B709070029719F0B9 |
:105E000084E090E00FC067E070E081E797E00E94D7 |
:105E1000752590917807891719F085E090E002C008 |
:105E200080E090E0DF91CF911F910F910895CF9383 |
:105E3000DF9380E021E83FEFC4E7D8E0EEE2F8E04E |
:105E4000DF01853020F411961C921E9202C031832E |
:105E500020831982188222968F5F1296329683329F |
:105E600080F38FE790E090936D0880936C0881E851 |
:105E70009FEF90936B0880936A0810926F081092BE |
:105E80006E081092FF021092FE021092010310920F |
:105E900000031092030310920203DF91CF91089543 |
:105EA0001F920F920FB60F9211240F931F932F93EF |
:105EB0003F934F935F936F937F938F939F93AF9392 |
:105EC000BF93CF93DF93EF93FF9340918600509160 |
:105ED000870080914B0290914C02481B590B809196 |
:105EE00086009091870090934C0280934B02CA01E8 |
:105EF0008D549440A0914D02B0914E02835F9A411F |
:105F000058F480914D0280932D08149714F010924C |
:105F10003F0181E090E095C0A131B1050CF095C042 |
:105F2000CA018B5F9040845B914008F085C08091EE |
:105F30003D0190913E01481B590BE091C806EE23AC |
:105F400051F0FF27EE0FFF1FE25DF74F8081918137 |
:105F500084369105ECF4FD01EA0FFB1FE25DF74F7B |
:105F600080819181FA01E81BF90BCF01F7FF03C093 |
:105F7000909581959F4F06975CF480919202883CA2 |
:105F800020F480919202865F01C088EC8093920297 |
:105F9000FD01EA0FFB1FE25DF74F808191819C01BB |
:105FA000220F331F280F391F240F351F37FF02C060 |
:105FB0002D5F3F4FE901D595C795D595C795CA0186 |
:105FC00001968C179D0714F4219706C0415050404C |
:105FD000C417D5070CF4219680919202833CD8F027 |
:105FE0008D010A0F1B1FF801E25DF74F808191813F |
:105FF0009E01281B390BC90163E070E00E94427AC0 |
:10600000CB01880F991F860F971F0C58174FF80167 |
:106010009183808307C0AA0FBB1FAC58B74F11965E |
:106020001C921E92E0914D02F0914E02EE0FFF1F66 |
:10603000E25DF74FD183C08380914D0290914E0273 |
:10604000019690934E0280934D02FF91EF91DF9164 |
:10605000CF91BF91AF919F918F917F916F915F9100 |
:106060004F913F912F911F910F910F900FBE0F9065 |
:106070001F90189580913B0990913C099093BA0527 |
:106080008093B90580913D0990913E099093BC059C |
:106090008093BB0580910F099091100997FD03969D |
:1060A00095958795959587959093BE058093BD05A9 |
:1060B000809121099091220997FD039695958795E6 |
:1060C000959587959093C0058093BF058091FE02BA |
:1060D0009091FF022091110230911202821B930BCA |
:1060E0009093C2058093C10580918C0290918D029E |
:1060F000A0918E02B0918F02BC01CD012AE030E068 |
:1061000040E050E00E94777A3093C4052093C305A5 |
:106110008091FE059091FF059093C6058093C5057B |
:1061200080918F01909190019093CA058093C90549 |
:1061300080912301909124019093CC058093CB050D |
:106140008091920299279093CE058093CD058091FE |
:10615000C8089091C9089093D0058093CF0580918D |
:106160007A0799279093D2058093D105809189076A |
:1061700099279093D4058093D30580919807992708 |
:106180009093D6058093D5058091A7079927909382 |
:10619000D8058093D7058091E3019091E401909315 |
:1061A000E2058093E10580917602909177029093C9 |
:1061B000E4058093E3058091A2099091A30990934F |
:1061C000E6058093E5058091A6099091A709909333 |
:1061D000E8058093E7058091880290918902A0915B |
:1061E0008A02B0918B02BC01CD012AE030E040E090 |
:1061F00050E00E94777A3093EA052093E905809178 |
:10620000A80999279093F4058093F305809164037E |
:10621000909165039093F6058093F5058091620354 |
:10622000909163039093F8058093F7058091D303D1 |
:10623000882321F48091D403882321F08091B8052C |
:10624000816003C08091B8058E7F8093B805089562 |
:10625000EF92FF921F93CF93DF93182F7B018091D2 |
:106260009102882371F580910301893111F42998F5 |
:1062700001C0299A11501F3FE9F0F092EB01E09222 |
:10628000EA01E7018091EA019091EB01892B11F479 |
:10629000209781F38091EE018823A1F31092EE0103 |
:1062A0008091EA019091EB01892B09F421970E94DA |
:1062B000FB76E8CF80910301893111F4299A01C05E |
:1062C0002998DF91CF911F91FF90EF900895EF9261 |
:1062D000FF920F931F9310927A0080911502909174 |
:1062E00016029093D3088093D20880911302909164 |
:1062F00014029093C4088093C30880911102909176 |
:106300001202909317098093160920910D02309183 |
:106310000E02C901880F991F880F991F820F931FC2 |
:10632000820F931F9093100980930F0920910F0201 |
:1063300030911002C901880F991F880F991F820F91 |
:10634000931F820F931F90932209809321098FEC52 |
:1063500080937A0080919F069927AA27BB2744EC57 |
:10636000E42E49E0F42E012D112DBC01CD01A80130 |
:1063700097010E94037ADC01CB01809387019093FF |
:106380008801A0938901B0938A018091A006992782 |
:10639000AA27BB27BC01CD010E94037ADC01CB01F7 |
:1063A0008093830190938401A0938501B09386012B |
:1063B0001F910F91FF90EF900895A0E0B0E0E3EE01 |
:1063C000F1E30C94967A682E91E0792EEE24FF2466 |
:1063D00057014701E7011092D303F092F902E092CE |
:1063E000F802F092F702E092F602F092F302E092E5 |
:1063F000F2021092F102F0920303E0920203F09293 |
:106400000103E0920003F092FF02E092FE0210927C |
:10641000690110926801109206020E94673184E6B9 |
:1064200090E00E948A160E94673180916B0680FF7F |
:1064300014C08091190190911A01875B934058F420 |
:106440008091190190911A018E5E924020F0809106 |
:106450000602882311F00E94CB1A009119011091B5 |
:106460001A0187B5865F87BD87B5809588BD8FE1A6 |
:10647000C82E8AE090E00E948A16809111029091C5 |
:106480001202E80EF91E8091150290911602A80ED4 |
:10649000B91E8091130290911402880E991E80916A |
:1064A000FE059091FF05C80FD91FCA94C7FEE1CF22 |
:1064B0008091190190911A01825F934080F480913C |
:1064C000190190911A01459750F08091190190910E |
:1064D0001A01081B190B109314010093130187B5BF |
:1064E0008A5087BD87B5809588BD9501205F3F4F55 |
:1064F000369527953695279530930303209302030D |
:10650000C40140969695879596958795909301033B |
:106510008093000340E150E0E40EF51EA5E0F69400 |
:10652000E794AA95E1F7F092FF02E092FE02C40F11 |
:10653000D51FF5E0D695C795FA95E1F7D093F3020C |
:10654000C093F2029093FD028093FC023093FB0211 |
:106550002093FA0252E06516C9F580910F099091D7 |
:10656000100997FF03C0909581959F4F6CE070E0F4 |
:106570000E94427A9B017093F9026093F802809125 |
:1065800021099091220997FF03C0909581959F4F13 |
:106590006CE070E00E94427A7093F7026093F6021A |
:1065A000B90184E090E00E9475276091F602709135 |
:1065B000F70286E090E00E9475276091F2027091E8 |
:1065C000F30288E090E00E9475274FC084E090E0DD |
:1065D0000E9470279093F9028093F80286E090E081 |
:1065E0000E9470279C019093F7028093F60280919D |
:1065F000F8029091F9028150984018F421503840E7 |
:10660000A0F182E697E09F938F9381E992E19F93B7 |
:106610008F93E091BA03F091BB03099580910F0924 |
:106620009091100997FF03C0909581959F4F6CE062 |
:1066300070E00E94427A7093F9026093F8028091B0 |
:1066400021099091220997FF03C0909581959F4F52 |
:106650006CE070E00E94427A7093F7026093F60259 |
:1066600077240F900F900F900F9012BC11BC1092D6 |
:10667000D3081092D2081092C4081092C308109246 |
:1066800017091092160988EC90E00E948A168091F2 |
:106690000D0290910E029C01220F331F220F331F17 |
:1066A000280F391F280F391F3093100920930F0925 |
:1066B00080910F02909110028C01000F111F000FAA |
:1066C000111F080F191F080F191F1093220900939B |
:1066D000210980917A06C82EDD24EE24FF24442768 |
:1066E00037FD4095542FC701B6010E94037A4B0134 |
:1066F0005C016093EC027093ED028093EE02909344 |
:10670000EF029801442737FD4095542FC701B60189 |
:106710000E94037ADC01CB018093E4029093E502AE |
:10672000A093E602B093E7028092CC029092CD0251 |
:10673000A092CE02B092CF028093C4029093C50281 |
:10674000A093C602B093C7021092BC021092BD0281 |
:106750001092BE021092BF0200918F011091900121 |
:106760001093AB020093AA0284E690E090938C0110 |
:1067700080938B0180919F069927AA27BB27BC0194 |
:10678000CD0124EC39E040E050E00E94037ADC01C6 |
:10679000CB018856954CAF4FBF4F809387019093A4 |
:1067A0008801A0938901B0938A018091A00699275E |
:1067B000AA27BB27BC01CD010E94037ADC01CB01D3 |
:1067C0008856954CAF4FBF4F8093830190938401BF |
:1067D000A0938501B0938601109246011092450165 |
:1067E000C801AA2797FDA095BA2F209141013091A9 |
:1067F00042014091430150914401BC01CD010E94EE |
:10680000037ADC01CB0180931D0990931E09A093AC |
:106810001F09B09320091092A7021092A6020E94AD |
:106820002B67662029F08091590284608093590279 |
:106830008FEF80939D0910929E0980E280939F09BB |
:1068400084E6809392028091E801882311F0579AA0 |
:1068500017C08091D706992780FF05C082FF03C02B |
:1068600080EE9EE202C080E091E190930A01809365 |
:10687000090181E0809311010E942B170E942B17C0 |
:1068800088E090E00E9470279093F3028093F202D8 |
:1068900012BC11BC80910203909103038056994071 |
:1068A000815C9B4228F08091D30381608093D30365 |
:1068B000809100039091010380569940815C9B4236 |
:1068C00028F08091D30382608093D3038091FE02ED |
:1068D0009091FF028C5291408957954028F0809109 |
:1068E000D30384608093D3038091F8029091F902DE |
:1068F0008C529140835C914028F08091D303886052 |
:106900008093D3038091F6029091F7028C529140CC |
:10691000835C914028F08091D30380618093D303FE |
:106920008091F2029091F302805092408355914001 |
:1069300028F08091D30380628093D3038091D303A6 |
:106940008111772486E480937E0180911B019091D0 |
:106950001C01A0911D01B0911E018093000690932F |
:106960000106A0930206B09303061092050210924E |
:10697000040210920702109208021092090210926B |
:106980000A021092AC021092AD021092AE02109266 |
:10699000AF021092F2051092F1050E94931A872D12 |
:1069A0009927EEE0CDB7DEB70C94B27AA3E1B0E060 |
:1069B000ECEDF4E30C94927A8091FE029091FF0248 |
:1069C0002091110230911202821B930B90931709B0 |
:1069D0008093160980911B0290911C0297FD0796E7 |
:1069E0009C0153E0359527955A95E1F73093D308EC |
:1069F0002093D2088091190290911A0297FD079670 |
:106A000043E0959587954A95E1F79093C408809364 |
:106A1000C3083093DF082093DE089093D608809354 |
:106A2000D50880910F0990911009AC01440F551FB2 |
:106A3000480F591F20910D0230910E02C901880F95 |
:106A4000991F880F991F820F931F820F931F480F62 |
:106A5000591F57FF02C04D5F5F4F5595479555959C |
:106A600047955093100940930F0980912109909107 |
:106A70002209AC01440F551F480F591F20910F02E6 |
:106A800030911002C901880F991F880F991F820F3A |
:106A9000931F820F931F480F591F57FF02C04D5F6E |
:106AA0005F4F5595479555954795509322094093CB |
:106AB000210920910D0230910E02C901880F991F02 |
:106AC000880F991F820F931F820F931F9C014427E9 |
:106AD00037FD4095542F8091DC029091DD02A0910A |
:106AE000DE02B091DF02820F931FA41FB51F8093B7 |
:106AF000DC029093DD02A093DE02B093DF022091CE |
:106B00000F0230911002C901880F991F880F991F39 |
:106B1000820F931F820F931F9C01442737FD4095DE |
:106B2000542F8091D8029091D902A091DA02B091AD |
:106B3000DB02820F931FA41FB51F8093D80290938E |
:106B4000D902A093DA02B093DB028091E808909119 |
:106B5000E90820910D0230910E02820F931F90934D |
:106B6000E9088093E8088091190990911A09209109 |
:106B70000F0230911002820F931F90931A09809395 |
:106B800019098091F4029091F50201969093F50213 |
:106B90008093F4028091FE059091FF052091F2020E |
:106BA0003091F302821B930B9C01442737FD4095E3 |
:106BB000542F8091D4029091D502A091D602B09129 |
:106BC000D702820F931FA41FB51F8093D402909306 |
:106BD000D502A093D602B093D7028091F60190918E |
:106BE000F701A091F801B091F90180938C02909384 |
:106BF0008D02A0938E02B0938F028093FA0190933E |
:106C0000FB01A093FC01B093FD018FEC80937A000F |
:106C1000109215012091C4023091C5024091C60224 |
:106C20005091C70229873A874B875C8729543B4696 |
:106C3000414050402CF028E43BE641E050E00DC0DC |
:106C400089859A85AB85BC85885B9449AE4FBF4FDB |
:106C50004CF428EB34E94EEF5FEF2D833E834F83F6 |
:106C6000588708C089859A85AB85BC858D839E83AE |
:106C7000AF83B8872091CC023091CD024091CE02F3 |
:106C80005091CF022D873E874F87588B29543B4622 |
:106C9000414050402CF028E43BE641E050E00DC07C |
:106CA0008D859E85AF85B889885B9449AE4FBF4F6F |
:106CB0004CF428EB34E94EEF5FEF29833A834B83A2 |
:106CC0005C8308C08D859E85AF85B88989839A834A |
:106CD000AB83BC83A0911609B0911709BB8BAA8B1B |
:106CE000FD01CF01AA2797FDA095BA2FA090BC0265 |
:106CF000B090BD02C090BE02D090BF02A80EB91ED7 |
:106D0000CA1EDB1EA092BC02B092BD02C092BE029F |
:106D1000D092BF02E0901D09F0901E0900911F095A |
:106D200010912009E80EF91E0A1F1B1FE0921D0991 |
:106D3000F0921E0900931F0910932009F09175022B |
:106D4000F98BFF2309F098C180917402882309F020 |
:106D500093C180910B0986FF8FC18091C3089091E8 |
:106D6000C408AA2797FDA095BA2FBC01CD0129819F |
:106D70003A814B815C810E94037A9B01AC0197FFB1 |
:106D800004C02150384F4F4F5F4F6BE055954795EA |
:106D9000379527956A95D1F780916801682E7724F9 |
:106DA00088249924CA01B901A40193010E94037A9D |
:106DB000DC01CB0180930E0390930F03A09310038B |
:106DC000B0931103B7FF04C08150904FAF4FBF4F36 |
:106DD0001C012D013CE055944794379427943A9533 |
:106DE000D1F720920E0330920F034092100350927D |
:106DF00011038091D2089091D308AA2797FDA095FE |
:106E0000BA2FBC01CD012D813E814F8158850E9452 |
:106E1000037A97FF04C06150784F8F4F9F4F2BE04C |
:106E200095958795779567952A95D1F7A401930154 |
:106E30000E94037ADC01CB01809312039093130329 |
:106E4000A0931403B0931503B7FF04C08150904F73 |
:106E5000AF4FBF4F9C01AD018CE0559547953795DD |
:106E600027958A95D1F7209312033093130340930B |
:106E700014035093150380910E0390910F03909388 |
:106E8000BB088093BA0880911203909113039093EA |
:106E9000BF088093BE08221933094409550920937D |
:106EA0001203309313034093140350931503E20E1F |
:106EB000F31E041F151FE0921D09F0921E09009396 |
:106EC0001F0910932009809167018823B1F457FFAF |
:106ED00004C02F5F3F4F4F4F5F4F559547953795F4 |
:106EE0002795A21AB30AC40AD50AA092BC02B0928E |
:106EF000BD02C092BE02D092BF022A893B897901AD |
:106F00000027F7FC0095102F809112039091130336 |
:106F1000A0911403B0911503E80EF91E0A1F1B1F60 |
:106F2000C801B70129813A814B815C810E94037AB3 |
:106F30009B01AC0197FF04C02150384F4F4F5F4F6A |
:106F4000BBE05595479537952795BA95D1F7809130 |
:106F50006901A82EBB24CC24DD24CA01B901A601F5 |
:106F600095010E94037ADC01CB0180930603909384 |
:106F70000703A0930803B0930903B7FF04C081502F |
:106F8000904FAF4FBF4F3C014D01ACE095948794BB |
:106F900077946794AA95D1F76092060370920703DD |
:106FA0008092080390920903C801B7012D813E81A8 |
:106FB0004F8158850E94037A97FF04C06150784F33 |
:106FC0008F4F9F4FFBE09595879577956795FA953D |
:106FD000D1F7A60195010E94037ADC01CB018093D1 |
:106FE0000A0390930B03A0930C03B0930D03B7FF18 |
:106FF00004C08150904FAF4FBF4FAC01BD01ECE0DA |
:107000007595679557954795EA95D1F740930A038B |
:1070100050930B0360930C0370930D032A893B89F3 |
:1070200037FF03C0309521953F4F21343105E4F1FE |
:10703000D401C30197FE07C0B095A09590958195A6 |
:107040009F4FAF4FBF4F81389105A105B10584F423 |
:10705000DB01CA0177FF07C0B095A0959095819597 |
:107060009F4FAF4FBF4F81389105A105B105E4F0A7 |
:1070700081E08093A80218C01092BF081092BE0849 |
:107080001092BB081092BA0810920A0310920B03D8 |
:1070900010920C0310920D03109206031092070336 |
:1070A000109208031092090380910A0390910B0338 |
:1070B000A0910C03B0910D03BC01CD0124E630E09A |
:1070C00040E050E00E94777AE0900603F0900703DA |
:1070D000E21AF30AF092D108E092D00880910603F8 |
:1070E00090910703A0910803B0910903BC01CD0161 |
:1070F00024E630E040E050E00E94777ADA01C901EE |
:1071000020910A0330910B038C01021B130B109387 |
:10711000C6080093C5088091410190914201A09159 |
:107120004301B0914401BC01CD0128E631E040E0CB |
:1071300050E00E94037A20911D0930911E09409170 |
:107140001F0950912009261737074807590764F08F |
:10715000261B370B480B590B20931D0930931E0932 |
:1071600040931F095093200920911D0930911E0959 |
:1071700040911F095091200957FF0CC0260F371F5F |
:10718000481F591F20931D0930931E0940931F0962 |
:10719000509320096091C3087091C4086E0D7F1D43 |
:1071A0009B01442737FD4095542F8091C002909158 |
:1071B000C102A091C202B091C302820F931FA41F0B |
:1071C000B51F8093C0029093C102A093C202B093F6 |
:1071D000C30280917A0290917B02681B790BCB01EC |
:1071E000AA2797FDA095BA2F29853A854B855C85FE |
:1071F000820F931FA41FB51F8093C4029093C502F2 |
:10720000A093C602B093C702C0908301D0908401BE |
:10721000E0908501F0908601C816D906EA06FB06C3 |
:10722000C4F488EA91E6A0E0B0E08C199D09AE09AB |
:10723000BF098093C4029093C502A093C602B09385 |
:10724000C7028093C0029093C102A093C202B09380 |
:10725000C30222273327A9012C193D094E095F09D2 |
:107260008091C4029091C502A091C602B091C7025C |
:1072700082179307A407B507B4F4D701C601885A4B |
:107280009146A040B0408093C4029093C502A09361 |
:10729000C602B093C7028093C0029093C102A0932C |
:1072A000C202B093C3026091D2087091D308600FFC |
:1072B000711F9B01442737FD4095542F8091C802D0 |
:1072C0009091C902A091CA02B091CB02820F931F84 |
:1072D000A41FB51F8093C8029093C902A093CA024D |
:1072E000B093CB028091780290917902681B790B60 |
:1072F000CB01AA2797FDA095BA2F2D853E854F85F6 |
:107300005889820F931FA41FB51F8093CC029093BE |
:10731000CD02A093CE02B093CF02E0908701F0900F |
:1073200088010091890110918A01E816F9060A077F |
:107330001B07C4F488EA91E6A0E0B0E08E199F092B |
:10734000A00BB10B8093CC029093CD02A093CE0200 |
:10735000B093CF028093C8029093C902A093CA024F |
:10736000B093CB0222273327A9012E193F09400BE6 |
:10737000510B8091CC029091CD02A091CE02B091A0 |
:10738000CF0282179307A407B507B4F4D801C70149 |
:10739000885A9146A040B0408093CC029093CD0291 |
:1073A000A093CE02B093CF028093C8029093C902FB |
:1073B000A093CA02B093CB028091BC029091BD020F |
:1073C000A091BE02B091BF028093D0029093D102EF |
:1073D000A093D202B093D3028091CC029091CD02BF |
:1073E000A091CE02B091CF028093EC029093ED0277 |
:1073F000A093EE02B093EF028091C4029091C50277 |
:10740000A091C602B091C7028093E4029093E50276 |
:10741000A093E602B093E7028091C8029091C9025E |
:10742000A091CA02B091CB028093E8029093E90246 |
:10743000A093EA02B093EB028091C0029091C10246 |
:10744000A091C202B091C3028093E0029093E10246 |
:10745000A093E202B093E302809121019091220176 |
:1074600097FD079633E0959587953A95E1F79093C8 |
:10747000D3088093D20880911F019091200197FD3D |
:10748000079623E0959587952A95E1F79093C40890 |
:107490008093C30880911502909116020F9734F4DF |
:1074A00088E19CEF9093D3088093D20880911502D5 |
:1074B00090911602079734F480E398EF9093D308E5 |
:1074C0008093D2088091150290911602815D9740B9 |
:1074D00034F088EE93E09093D3088093D2088091A3 |
:1074E000150290911602805E974034F080ED97E08F |
:1074F0009093D3088093D208809113029091140244 |
:107500000F9734F488E19CEF9093C4088093C308EC |
:107510008091130290911402079734F480E398EF5E |
:107520009093C4088093C308809113029091140231 |
:10753000815D974034F088EE93E09093C408809387 |
:10754000C3088091130290911402805E974034F03A |
:1075500080ED97E09093C4088093C3086091760112 |
:10756000662309F4AEC0409121015091220180911F |
:10757000160390911703481B590B50931D0340931A |
:107580001C032091210130912201280F391F37FF60 |
:1075900002C02F5F3F4F35952795309317032093F7 |
:1075A0001603413851051CF080E890E005C04058B2 |
:1075B0005F4F34F480E89FEF90931D0380931C038A |
:1075C00040911F015091200180911803909119035F |
:1075D000481B590B50931B0340931A0320911F0122 |
:1075E00030912001280F391F37FF02C02F5F3F4F16 |
:1075F0003595279530931903209318034138510589 |
:107600001CF080E890E005C040585F4F34F480E8FB |
:107610009FEF90931B0380931A03462F5527809169 |
:107620001C0390911D03849FB001859F700D949F52 |
:10763000700D11249B0177FF02C0215F3F4FB4E022 |
:1076400035952795BA95E1F78091D2089091D308A6 |
:10765000820F931F9093D3088093D20880911A03CE |
:1076600090911B03849F9001859F300D949F300D56 |
:107670001124A90137FF02C0215F3F4FA4E03595D7 |
:107680002795AA95E1F78091C3089091C408820FCD |
:10769000931F9093C4088093C30880912101909117 |
:1076A0002201860F971F90932201809321018091E0 |
:1076B0001F0190912001840F951F909320018093CA |
:1076C0001F010091D5081091D6088091BA089091B9 |
:1076D000BB08101611065CF59C0197FF04C0222719 |
:1076E0003327281B390BC901AA2797FDA095BA2F6C |
:1076F00020916701332744275527BC01CD010E9403 |
:10770000037A9B01AC0197FF04C0215C3F4F4F4FB0 |
:107710005F4FF6E05595479537952795FA95D1F740 |
:107720008091D0089091D108820F931F27C097FFB6 |
:1077300003C0909581959F4FAA2797FDA095BA2FDA |
:1077400020916701332744275527BC01CD010E94B2 |
:10775000037A9B01AC0197FF04C0215C3F4F4F4F60 |
:107760005F4FE6E05595479537952795EA95D1F710 |
:107770008091D0089091D108821B930B9093D108EF |
:107780008093D008E090DE08F090DF088091BE087A |
:107790009091BF081E141F045CF59C0197FF04C064 |
:1077A00022273327281B390BC901AA2797FDA0954B |
:1077B000BA2F20916701332744275527BC01CD01FB |
:1077C0000E94037A9B01AC0197FF04C0215C3F4FEC |
:1077D0004F4F5F4F76E055954795379527957A95AA |
:1077E000D1F78091C5089091C608820F931F27C0DA |
:1077F00097FF03C0909581959F4FAA2797FDA0956D |
:10780000BA2F20916701332744275527BC01CD01AA |
:107810000E94037A9B01AC0197FF04C0215C3F4F9B |
:107820004F4F5F4F66E055954795379527956A9579 |
:10783000D1F78091C5089091C608821B930B909355 |
:10784000C6088093C50880910B0987FF44C0398919 |
:10785000332309F040C0809174028823E1F541E0B0 |
:10786000E41641E0F4064CF08091D2089091D308E0 |
:107870008E0D9F1D805091400DC050E0E5165FEFCA |
:10788000F50664F48091D2089091D3088E0D9F1D67 |
:1078900080509F4F9093D3088093D20881E00130AD |
:1078A00018074CF08091C3089091C408800F911F75 |
:1078B000805091400CC09FEF0030190764F4809114 |
:1078C000C3089091C408800F911F80509F4F9093E0 |
:1078D000C4088093C308E2E1CD5E0C94AE7A809137 |
:1078E0009102882329F5809159028C7F8093590257 |
:1078F000809158028F7D80935802A8EDB3E0E9E7AC |
:10790000F7E09BE08091C801882309F48C938D9166 |
:107910008183128291503F9697FFF4CF8091C801E6 |
:10792000882359F08091C80181508093C80105C017 |
:107930008091590281608093590280913F0288238F |
:1079400019F010923F0208958093430280913D0206 |
:107950008E7F80933D0285EA8093BC000895882342 |
:1079600019F480E090E00895E82FFF27EE0FFF1F45 |
:10797000E25DF74F8081918181589F4F8F3F910544 |
:1079800021F01CF08FEF90E004C097FF02C080E070 |
:1079900090E099270895CF93DF93A3E9B2E0C3E67F |
:1079A000D6E057E08991E82FFF27EE0FFF1FE25D39 |
:1079B000F74F0190F081E02DE158FF4FEF3FF105C7 |
:1079C00021F01CF0EFEFF0E004C0F7FF02C0E0E0B0 |
:1079D000F0E0893111F4EC931BC04C91242F332734 |
:1079E000E217F307A9F0CF01821B930B97FD0396D3 |
:1079F0009595879595958795242F280F2C93822F01 |
:107A00009927E817F90714F4215001C02F5F2C9330 |
:107A10005150119657FFC6CF80916D06883F38F0C0 |
:107A2000EFEFF0E0E81BF109ED56FD4F8081809308 |
:107A30007B0180917B01882329F0843618F084E64D |
:107A400080937B0180916F06883F38F0EFEFF0E084 |
:107A5000E81BF109ED56FD4F808180937A018091FA |
:107A60007A01882329F0843618F084E680937A011D |
:107A700080917C06883F38F0EFEFF0E0E81BF109D9 |
:107A8000ED56FD4F808180937501809175018B309B |
:107A900010F48AE002C08F3F11F480937501809149 |
:107AA000A906883F38F0EFEFF0E0E81BF109ED564A |
:107AB000FD4F80818093EA088091EA08863010F4B7 |
:107AC00085E002C08F3F11F48093EA088091AB06F5 |
:107AD000883F38F0EFEFF0E0E81BF109ED56FD4F7D |
:107AE00080818093120980911209863010F485E01C |
:107AF00002C08F3F11F48093120980919606873F50 |
:107B000019F4429905C007C0863F41F4439B03C066 |
:107B10008091CB0616C08091CC0613C0883F38F008 |
:107B2000EFEFF0E0E81BF109ED56FD4F8081809307 |
:107B3000E7088091E708893110F488E102C08F3F9F |
:107B400011F48093E70880919706873F19F44299D2 |
:107B500005C007C0863F41F4439B03C08091CD061A |
:107B600016C08091CE0613C0883F38F0EFEFF0E0EA |
:107B7000E81BF109ED56FD4F80818093C00880918C |
:107B8000C008893110F488E102C08F3F11F480935E |
:107B9000C00880919806883F38F0EFEFF0E0E81BCE |
:107BA000F109ED56FD4F80818093F0088091F00837 |
:107BB000893110F488E102C08F3F11F48093F008FE |
:107BC00080916E060E94AF3C80936F028091710697 |
:107BD000883F38F0EFEFF0E0E81BF109ED56FD4F7C |
:107BE00080818093790180917306883F38F0EFEFB0 |
:107BF000F0E0E81BF109ED56FD4F8081809377019D |
:107C000080917B06883F38F0EFEFF0E0E81BF10948 |
:107C1000ED56FD4F80818093780180917D06883FED |
:107C200038F0EFEFF0E0E81BF109ED56FD4F8081F1 |
:107C30008093740180917E06883F38F0EFEFF0E08A |
:107C4000E81BF109ED56FD4F80818093760180910C |
:107C50007F06883F38F0EFEFF0E0E81BF109ED56C2 |
:107C6000FD4F80818093730180918006883F38F0BA |
:107C7000EFEFF0E0E81BF109ED56FD4F80818093B6 |
:107C8000720180918606883F38F0EFEFF0E0E81B44 |
:107C9000F109ED56FD4F8081809370018091870638 |
:107CA000883F38F0EFEFF0E0E81BF109ED56FD4FAB |
:107CB000808180936E0280918806883F38F0EFEFD4 |
:107CC000F0E0E81BF109ED56FD4F808180936D02D5 |
:107CD00080918906883F38F0EFEFF0E0E81BF1096A |
:107CE000ED56FD4F808180936C0280918A06883F1B |
:107CF00038F0EFEFF0E0E81BF109ED56FD4F808121 |
:107D000080936B028091A406883F38F0EFEFF0E09B |
:107D1000E81BF109ED56FD4F808180936A02809146 |
:107D2000A506883F38F0EFEFF0E0E81BF109ED56CB |
:107D3000FD4F8081809369028091A606883F38F0CC |
:107D4000EFEFF0E0E81BF109ED56FD4F80818093E5 |
:107D500068028091A706883F38F0EFEFF0E0E81B5B |
:107D6000F109ED56FD4F80818093670280918B066B |
:107D7000883F38F0EFEFF0E0E81BF109ED56FD4FDA |
:107D8000808180936E0180918F06883F38F0EFEFFD |
:107D9000F0E0E81BF109ED56FD4F808180936D0105 |
:107DA00080918C06883F38F0EFEFF0E0E81BF10996 |
:107DB000ED56FD4F808180936C0180919006883F45 |
:107DC00038F0EFEFF0E0E81BF109ED56FD4F808150 |
:107DD00080936B0180919906883F38F0EFEFF0E0D7 |
:107DE000E81BF109ED56FD4F808180936A01809177 |
:107DF0009C06883F38F0EFEFF0E0E81BF109ED5604 |
:107E0000FD4F80818093690180919D06883F38F005 |
:107E1000EFEFF0E0E81BF109ED56FD4F8081809314 |
:107E2000680180919E06883F38F0EFEFF0E0E81B94 |
:107E3000F109ED56FD4F8081809367018091C7065F |
:107E4000883F38F0EFEFF0E0E81BF109ED56FD4F09 |
:107E500080818093CF0880916B0680930B0980917D |
:107E6000D8068093EF088091A306883F38F0EFEFA3 |
:107E7000F0E0E81BF109ED56FD4F8081809366012B |
:107E80008091C006883F38F0EFEFF0E0E81BF10981 |
:107E9000ED56FD4F80818093240980917001282F39 |
:107EA00033272F5F3F4F8CE398E2B9010E94427A5B |
:107EB00070937D0160937C01809179068093130912 |
:107EC000809178068093D708E091C206EE23D9F11D |
:107ED00081E080936602FF27EE0FFF1FE25DF74F00 |
:107EE00080819181805C9F4F14F410926602809192 |
:107EF0007E01209166028217B1F0833088F422233C |
:107F000019F08CED95E002C088EC90E09093EB01C5 |
:107F10008093EA0185E080937C0220937E0103C078 |
:107F2000815080937E01809164099091650997FF4B |
:107F30000FC080916602882359F08091D303806836 |
:107F40008093D30305C0E09366028AE080937E01AC |
:107F5000809164099091650997FF1DC080919102FD |
:107F60008823C9F0809166028823A9F080910B01D3 |
:107F700090910C018F5F9F4F71F488E99AE3909381 |
:107F8000EB018093EA0180E094EA90930C018093E6 |
:107F90000B011092660280916602882321F0809185 |
:107FA0005802816003C0809158028E7F80935802EE |
:107FB000DF91CF91089580917406882301F5609137 |
:107FC00076027091770277FF02C06D5F7F4F7595E3 |
:107FD0006795759567954091230150912401809193 |
:107FE0000201282F3327649FC001659F900D749F65 |
:107FF000900D1124B9010E942E7ACB0101C099275E |
:1080000090938201809381018091810190918201FE |
:108010008734910538F486E490E090938201809350 |
:10802000810108958F3A910530F08FEA90E09093A6 |
:108030008201809381010895A8E1B0E0E2E2F0E4DA |
:108040000C94927A0E94D6348091590299278471B7 |
:108050009070892B91F58091D90682FF27C080917D |
:108060007602909177020097F1F002E08835900750 |
:10807000D4F49C0197FF02C02D5F3F4F35952795A3 |
:1080800035952795809183069927289FA001299FE0 |
:10809000500D389F500D1124CA0164E670E00E9413 |
:1080A000427ACB0106C08DE290E003C08091830646 |
:1080B0009927909357028093560220915402309151 |
:1080C000550255E72033350759F410929D0210925E |
:1080D0009C028091D708992790935702809356026B |
:1080E00060919C0270919D027A8369838091D70888 |
:1080F00099270A966817790714F49A8389838091DF |
:108100009202843608F062C08091580282FD5EC0FF |
:108110008091320390913303009731F0019790934F |
:108120003303809332030BC01092910290935B0251 |
:1081300080935A02809159028D7E80935902289A29 |
:1081400080915A0290915B02895E9340E0F18091A8 |
:10815000A8098536C0F180915602909157029A8302 |
:1081600089838091590280618093590280915F06D2 |
:10817000A82FBB27AA0FBB1FFD01EC58F74F118298 |
:10818000108280916006282F3327220F331FC901E8 |
:108190008C58974FFC0111821082A25DB74F119647 |
:1081A0001C921E92225D374FD90111961C921E928D |
:1081B00080916206E82FFF27EE0FFF1FE25DF74F69 |
:1081C0001182108257C41092910254C4809192027D |
:1081D0008D3808F425C4809159028F7E809359020E |
:1081E0009091840682E3989FC001112490933303F9 |
:1081F00080933203E981FA81B9978CF080919102E2 |
:10820000882369F080915A0290915B02FFEF8F3FC3 |
:108210009F0729F0019690935B0280935A02209168 |
:108220005A0230915B022F3F310509F030F5109270 |
:10823000B4021092B5021092B6021092B7021092D8 |
:10824000B0021092B1021092B2021092B3021092D8 |
:108250001E0310921F03109220031092210310920C |
:10826000BC021092BD021092BE021092BF02809119 |
:1082700058028062809358024DC0809159028260FA |
:10828000809359028091580285FF44C08091FA0181 |
:108290009091FB01A091FC01B091FD0187399105FE |
:1082A000A105B1058CF480918C0290918D02A09172 |
:1082B0008E02B0918F02825A9E4FAF4FBF4F24F073 |
:1082C00080910B0980FD05C0809158028F718093C9 |
:1082D00058021092B4021092B5021092B602109297 |
:1082E000B7021092B0021092B1021092B202109234 |
:1082F000B3021092BC021092BD021092BE02109204 |
:10830000BF02295E334030F088EE93E090935B0229 |
:1083100080935A0280916106E82FFF27EE0FFF1F1E |
:10832000E25DF74F80819181813591050CF434C174 |
:1083300020919102222309F02FC180916206E82F3B |
:10834000FF27EE0FFF1FE25DF74F808191818C3494 |
:1083500091050CF4FFC0809134038F5F8093340348 |
:10836000893C08F419C12093340310925B021092E7 |
:108370005A0230915F06E32FFF27EE0FFF1FE25DE9 |
:10838000F74F8081918187349105B4F48091600624 |
:10839000E82FFF27EE0FFF1FE25DF74F80819181ED |
:1083A0000190F081E02DF7FF03C0F095E195FF4FBC |
:1083B000E734F1050CF478C041E020916006A22F6B |
:1083C000BB27AA0FBB1FA25DB74F8D919C91119740 |
:1083D0008734910544F0E32FFF27EE0FFF1FE25D86 |
:1083E000F74F808191818D919C918734910574F034 |
:1083F00080915F06E82FFF27EE0FFF1FE25DF74F2A |
:1084000080819181873491050CF042E0E22FFF27B3 |
:10841000EE0FFF1FE25DF74F808191818634910559 |
:1084200074F480915F06E82FFF27EE0FFF1FE25DD7 |
:10843000F74F80819181873491050CF043E0E22F62 |
:10844000FF27EE0FFF1FE25DF74F808191818A5B6E |
:108450009F4F74F480915F06E82FFF27EE0FFF1FF8 |
:10846000E25DF74F80819181873491050CF044E003 |
:10847000E22FFF27EE0FFF1FE25DF74F8081918112 |
:108480008A5B9F4F74F480915F06E82FFF27EE0F01 |
:10849000FF1FE25DF74F80819181863491050CF4D6 |
:1084A00045E0842F0E94CD2780916006E82FFF27AA |
:1084B000EE0FFF1FE25DF74F808191810190F08107 |
:1084C000E02DF7FF03C0F095E195FF4F7E97CCF4C8 |
:1084D00080915F06E82FFF27EE0FFF1FE25DF74F49 |
:1084E000808191818A5B9F4F64F481E08093EE03E9 |
:1084F00010927D0288EE93E09093EB018093EA0165 |
:108500004BC0809101010E947A2780E00E943106D1 |
:10851000809185060E947F7580910B0980FF10C0B5 |
:108520008091190190911A01875B934038F48091F2 |
:10853000190190911A018E5E924010F40E94CB1A9C |
:1085400081E00E94DD3180937D0281E08093E8012B |
:10855000579A19C080819181855B9F4FDCF480918F |
:1085600034038F5F80933403893CB0F020939102F1 |
:108570002093340310925B0210925A0282E00E9410 |
:10858000DD3180937D0268E770E0809101010E94F7 |
:10859000283102C02093340380916106E82FFF2721 |
:1085A000EE0FFF1FE25DF74F808191818C599F4F45 |
:1085B0000CF02FC22091C306E22FFF27EF77F07057 |
:1085C000EE0FFF1FEC58F74F80819181069714F052 |
:1085D00084E606C0808191818B5F9F4F1CF48CE9FB |
:1085E0008093370380919102E0916206882309F01D |
:1085F0005EC1FF27EE0FFF1FE25DF74F8081918183 |
:108600008C599F4F9CF48091D90683FD0BC0E22FBB |
:10861000FF27EE0FFF1FE25DF74F80819181855BA1 |
:108620009F4FDCF08091C3068823B9F08091D90672 |
:1086300083FF3AC18091C306E82FFF27EE0FFF1F8B |
:10864000E25DF74F80819181875F9F4F0CF42CC1D1 |
:1086500080913703843609F027C180917D028823F9 |
:1086600029F08091590288608093590280911B0102 |
:1086700090911C01A0911D01B0911E0180930006F4 |
:1086800090930106A0930206B093030610928C0209 |
:1086900010928D0210928E0210928F021092F601AB |
:1086A0001092F7011092F8011092F90188E592E01A |
:1086B0009093550280935402109207021092080280 |
:1086C0001092090210920A0280915F06E82FFF279C |
:1086D000EE0FFF1FE25DF74F808191818D599F4F13 |
:1086E000ACF480916006E82FFF27EE0FFF1FE25DDC |
:1086F000F74F808191810190F081E02DF7FF03C059 |
:10870000F095E195FF4FE436F10534F48091C3060E |
:10871000882311F480933503809135038F5F809314 |
:1087200035038E3F08F458C18091160990911709BE |
:1087300097FF03C0909581959F4F8197B4F48091E6 |
:10874000D2089091D30897FF03C0909581959F4FD1 |
:1087500045975CF48091C3089091C40897FF03C0CB |
:10876000909581959F4F459714F010927D0210923D |
:1087700035038091D303882309F093C080917D0253 |
:10878000882309F48EC080917203882309F089C080 |
:1087900081E090E090935B0280935A0281E08093A5 |
:1087A000910210921E0310921F0310922003109248 |
:1087B00021031092BC021092BD021092BE021092D0 |
:1087C000BF021092B8021092B9021092BA0210922F |
:1087D000BB0280917A06E82EFF24002711278091A2 |
:1087E0000F09909110099C01442737FD4095542FA3 |
:1087F000C801B7010E94037ADC01CB018093CC024F |
:108800009093CD02A093CE02B093CF028091210924 |
:10881000909122099C01442737FD4095542FC801AF |
:10882000B7010E94037ADC01CB018093C4029093CC |
:10883000C502A093C602B093C7028091EC0290914A |
:10884000ED02A091EE02B091EF028093C8029093E6 |
:10885000C902A093CA02B093CB028091E402909126 |
:10886000E502A091E602B091E7028093C0029093E6 |
:10887000C102A093C202B093C3021092B40210923C |
:10888000B5021092B6021092B7021092B002109286 |
:10889000B1021092B2021092B30284E680937C027D |
:1088A0009BC08CED95E091C01092350395C0FF27D9 |
:1088B000EE0FFF1FE25DF74F8081918185369105B4 |
:1088C0009CF08091D90683FD0BC0E22FFF27EE0FAD |
:1088D000FF1FE25DF74F80819181855B9F4FDCF048 |
:1088E0008091C3068823B9F08091D90683FF72C0B6 |
:1088F0008091C306E82FFF27EE0FFF1FE25DF74FC1 |
:10890000808191818E5C9F4F0CF064C08091370311 |
:108910008C3909F05FC080915F06E82FFF27EE0FCA |
:10892000FF1FE25DF74F808191818D599F4FACF41D |
:1089300080916006E82FFF27EE0FFF1FE25DF74FE3 |
:10894000808191810190F081E02DF7FF03C0F095C7 |
:10895000E195FF4FE436F1053CF48091C30688238E |
:1089600019F48093360318C01092B4021092B50225 |
:108970001092B6021092B7021092B0021092B10299 |
:108980001092B2021092B3021092A3021092A202AD |
:108990001092A1021092A002809136038F5F809303 |
:1089A00036038B3F70F010929102109236031092B2 |
:1089B0005B0210925A02809158028F718093580284 |
:1089C0000BC0843649F48CEA9DE09093EB018093D0 |
:1089D000EA0102C0109236032091540230915502F0 |
:1089E00073E0283E370708F045C08091040290915B |
:1089F00005028B569F4F1CF02F5F3F4F05C021157E |
:108A00003105C1F12150304030935502209354027A |
:108A100031C01092370310925502109254022AC0AE |
:108A20002E5E324038F180912C0990912D098059A9 |
:108A3000914000F580918C0290918D02A0918E0260 |
:108A4000B0918F028C5D9540A040B0409CF480E3D3 |
:108A500095E7909355028093540280915A02909129 |
:108A60005B028A5E934030F089EE93E090935B0264 |
:108A700080935A0280913F01815080933F01809101 |
:108A80003F018F3F21F08091590284FFDFC30E9494 |
:108A9000CB3CB090750680914003909141039C01BE |
:108AA000220F331F280F391FC0905F06AC2DBB2744 |
:108AB000AA0FBB1FFD01E25DF74F4B2D55278081AB |
:108AC0009181849FB001859F700D949F700D11243A |
:108AD000260F371F37FF02C02D5F3F4FB901759535 |
:108AE000679575956795AC58B74F80917606082FB6 |
:108AF00011278D919C91809FD001819FB00D909FF7 |
:108B0000B00D11246A0F7B1F7093410360934003E3 |
:108B100080914203909143039C01220F331F280F41 |
:108B2000391FD0906006AD2DBB27AA0FBB1FFD01DA |
:108B3000E25DF74F80819181849FF001859FF00D68 |
:108B4000949FF00D11242E0F3F1F37FF02C02D5FA1 |
:108B50003F4FA9015595479555954795AC58B74F47 |
:108B60008D919C91809F7001819FF00C909FF00CE3 |
:108B700011244E0D5F1D5093430340934203809197 |
:108B80006602882309F448C0CB0177FD0396DC0117 |
:108B9000B595A795B595A795CA0157FD0396FC0114 |
:108BA000F595E795F595E7958091A101682F7727D1 |
:108BB00067FD70956A9F90016B9F300D7A9F300D15 |
:108BC000112480917403482F552747FD50954E9FDF |
:108BD000C0014F9F900D5E9F900D1124280F391FEB |
:108BE00037FF02C0295F3F4F03E0359527950A956F |
:108BF000E1F73093A3022093A2026E9F90016F9F32 |
:108C0000300D7E9F300D11244A9FC0014B9F900D67 |
:108C10005A9F900D11243FC08091C106E82FFF2775 |
:108C2000E95BFE4F86818093A1019081909374034C |
:108C3000A82FBB27A7FDB095A69F9001A79F300D39 |
:108C4000B69F300D1124E92FFF27E7FDF095E49F33 |
:108C5000C001E59F900DF49F900D1124280F391F3E |
:108C600037FF02C0295F3F4F13E0359527951A95CE |
:108C7000E1F73093A3022093A202A49F9001A59F45 |
:108C8000300DB49F300D1124E69FC001E79F900D79 |
:108C9000F69F900D1124281B390B37FF02C0295F66 |
:108CA0003F4F43E0359527954A95E1F73093A10270 |
:108CB0002093A00280916206E82FFF27EE0FFF1F8E |
:108CC000E25DF74F80819181909581959F4F9093C0 |
:108CD0009F0280939E028530910514F0049705C091 |
:108CE0000FEF8C3F900734F4049690939F0280938B |
:108CF0009E0204C010929F0210929E028091540224 |
:108D0000909155028150924078F18091A202909109 |
:108D1000A30297FD079623E0959587952A95E1F79D |
:108D20009093A3028093A2028091A0029091A1024D |
:108D300097FD079603E0959587950A95E1F790933F |
:108D4000A1028093A0021092B4021092B502109278 |
:108D5000B6021092B7021092B0021092B1021092B5 |
:108D6000B2021092B30243C080916103882309F4D8 |
:108D70003EC0282F33278091A2029091A30297FD35 |
:108D8000079613E0959587951A95E1F7289FA0011E |
:108D9000299F500D389F500D1124CA0157FD0F9681 |
:108DA000B4E095958795BA95E1F79093A3028093E7 |
:108DB000A2028091A0029091A10297FD0796A3E0E4 |
:108DC00095958795AA95E1F7289FB001299F700D89 |
:108DD000389F700D1124CB0177FD0F96F4E0959527 |
:108DE0008795FA95E1F79093A1028093A002809075 |
:108DF000A2029090A3028091640390916503881A67 |
:108E0000990A9092A3028092A2020091A00210916E |
:108E1000A1028091620390916303081B190B1093C8 |
:108E2000A1020093A00280916106E82FFF27EE0FB8 |
:108E3000FF1FE25DF74FE080F1808FE790E0E80EE2 |
:108E4000F91EF0929D02E0929C0280917501992793 |
:108E5000AA2797FDA095BA2FBC01CD010E94777972 |
:108E6000DC01CB0120E030E040E251E4BC01CD0167 |
:108E70000E94E578DC01CB01BC01CD010E9449795B |
:108E8000DC01CB0180931B09809174018093F10870 |
:108E9000809173019927AA2797FDA095BA2FBC014D |
:108EA000CD010E947779DC01CB0120E030E040E287 |
:108EB00051E4BC01CD010E94E578DC01CB01BC018D |
:108EC000CD010E944979DC01CB018093CA088091D1 |
:108ED00072018093E0088091FA0380FF59C080916D |
:108EE0002409813808F454C08091F303992787FD41 |
:108EF00090952B2D3327829FD001839FB00D929F99 |
:108F0000B00D11248A0E9B1E9092A3028092A202A1 |
:108F10008091F403992787FD9095829FF001839FAC |
:108F2000F00D929FF00D11240E0F1F1F1093A10240 |
:108F30000093A0028091F503282F332727FD309559 |
:108F400080919E0290919F02820F931F90939F02A7 |
:108F500080939E028091F703282F332727FD3095B9 |
:108F6000809170069927289F8001299F100D389FB6 |
:108F7000100D112410934601009345018091F603D2 |
:108F800099278E159F0524F490939D0280939C024F |
:108F900080919C0290919D0297FF04C010929D02C7 |
:108FA00010929C0280910B0982FF02C01092F1087E |
:108FB0004091A2025091A302CA0157FD03969C0161 |
:108FC000359527953595279537FF03C03095219521 |
:108FD0003F4F80915E0290915F0282179307B4F435 |
:108FE000CA0157FF03C0909581959F4F97FD039647 |
:108FF000959587959595879590935F0280935E02EE |
:109000008536910544F084E690E001C00197909385 |
:109010005F0280935E024091A0025091A102CA01BA |
:1090200057FD03969C01359527953595279537FF74 |
:1090300003C0309521953F4F80915C0290915D0275 |
:1090400082179307B4F4CA0157FF03C09095819526 |
:109050009F4F97FD03969595879595958795909346 |
:109060005D0280935C028536910544F084E690E0D1 |
:1090700001C0019790935D0280935C028091590238 |
:1090800084FF08C010925F0210925E0210925D028F |
:1090900010925C02ED2DFF27EE0FFF1FE25DF74FF0 |
:1090A00040919A06242F3327808191812817390710 |
:1090B00044F48091D60682FF04C081E0809373025D |
:1090C00013C0ED2DFF27EE0FFF1FE25DF74F842F3A |
:1090D000992720919B06821B9109208131812817B5 |
:1090E000390714F41092730240916006E42FFF27B1 |
:1090F000EE0FFF1FE25DF74F50919A06852F9927DB |
:1091000022273327281B390B8081918182179307EF |
:1091100044F48091D60683FF04C081E080937202FC |
:1091200016C080917202882391F0E42FFF27EE0F82 |
:10913000FF1FE25DF74F80919B069927851B9109E0 |
:10914000208131818217930714F410927202EC2D62 |
:10915000FF27EE0FFF1FE25DF74F40919A06242F85 |
:109160003327808191812817390744F48091D606EE |
:1091700080FF04C081E08093700217C0809170026C |
:10918000882399F0EC2DFF27EE0FFF1FE25DF74FCC |
:10919000842F992720919B06821B91092081318180 |
:1091A0002817390714F41092700240915F06E42FDB |
:1091B000FF27EE0FFF1FE25DF74F50919A06852FB4 |
:1091C000992722273327281B390B80819181821709 |
:1091D000930744F48091D60681FF04C081E0809318 |
:1091E000710216C080917102882391F0E42FFF274D |
:1091F000EE0FFF1FE25DF74F80919B069927851BBD |
:109200009109208131818217930714F41092710221 |
:1092100080917302882319F480917202811181E098 |
:109220008093740280917002882321F480917102EE |
:10923000882351F081E0809375021092740210929D |
:1092400073021092720202C08093750280917402C0 |
:10925000882321F480917502882369F08091990612 |
:10926000992729813A818217930714F49A83898375 |
:1092700081E08093A8028091580299279C01247074 |
:10928000307082FF31C080916403909165039095A6 |
:1092900081959F4F9093A3028093A20280916203D5 |
:1092A00090916303909581959F4F9093A102809335 |
:1092B000A002809181019091820190939D02809300 |
:1092C0009C0210929F0210929E0280910B098B7754 |
:1092D0008B6680930B098091EF088C7B8093EF085D |
:1092E00088EC80936F021EC08091590284FF1AC0DF |
:1092F00030939F0220939E023093A3022093A202F8 |
:109300003093A1022093A0029AE590931B0988E76D |
:109310008093F1089093CA088093E0081092740239 |
:10932000109275028091E3089091E408A091E508FD |
:10933000B091E6082091EC023091ED024091EE02EE |
:109340005091EF02820F931FA41FB51F8093E30873 |
:109350009093E408A093E508B093E6088091EB08A9 |
:109360009091EC08A091ED08B091EE08E090E40235 |
:10937000F090E5020091E6021091E702EB82FC8298 |
:109380000D831E838E0D9F1DA01FB11F8093EB08C0 |
:109390009093EC08A093ED08B093EE088091D80864 |
:1093A0009091D908A091DA08B091DB08E090E8022A |
:1093B000F090E9020091EA021091EB02EF82F88648 |
:1093C00009871A878E0D9F1DA01FB11F8093D80893 |
:1093D0009093D908A093DA08B093DB088091CB086A |
:1093E0009091CC08A091CD08B091CE08E090E00219 |
:1093F000F090E1020091E2021091E302EB86FC861C |
:109400000D871E878E0D9F1DA01FB11F8093CB0857 |
:109410009093CC08A093CD08B093CE08F09075023D |
:10942000FF86FF2029F480917402882309F460C02C |
:109430001092DC021092DD021092DE021092DF0226 |
:109440001092D8021092D9021092DA021092DB0226 |
:109450001092E3081092E4081092E5081092E608D2 |
:109460001092EB081092EC081092ED081092EE08A2 |
:109470001092D8081092D9081092DA081092DB08DE |
:109480001092CB081092CC081092CD081092CE0802 |
:109490008091CC029091CD02A091CE02B091CF02EA |
:1094A0008093C8029093C902A093CA02B093CB02E2 |
:1094B0008091C4029091C502A091C602B091C702EA |
:1094C0008093C0029093C102A093C202B093C302E2 |
:1094D0001092030210920202109279021092780206 |
:1094E00010927B0210927A020F85002309F0D0C1FE |
:1094F00080917402882309F0CBC18091FE05909180 |
:10950000FF05815092402CF480919102882309F448 |
:10951000BFC190909D09A0907A0620900F093090CD |
:109520001009409021095090220919140CF0BBC079 |
:10953000BB24CC24DD24CA01B901A60195010E94F7 |
:10954000777A79018A018091660990916709281AD2 |
:10955000390AC101AA2797FDA095BA2FE81AF90A7E |
:109560000A0B1B0B6B817C818D819E81A60195016D |
:109570000E94777A59016A0180916809909169097E |
:10958000481A590AC201AA2797FDA095BA2FA81A0E |
:10959000B90ACA0ADB0A292C332427FC3094432C4D |
:1095A000532CC801B701A20191010E94037A97FFD1 |
:1095B00004C061507E4F8F4F9F4F3B014C0109E02B |
:1095C00095948794779467940A95D1F7C601B5016D |
:1095D000A20191010E94037A97FF04C061507E4F5F |
:1095E0008F4F9F4F5B016C0119E0D594C794B794DE |
:1095F000A7941A95D1F780915E0290915F02813411 |
:1096000091053CF480915C0290915D02813491055A |
:10961000D4F0D401C30197FE03C00196A11DB11D72 |
:109620003C014D019594879477946794D601C501C8 |
:10963000D7FE03C00196A11DB11D5C016D01D5943B |
:10964000C794B794A79480919F09282F332727FDAB |
:109650003095432F532F261537054805590514F427 |
:1096600039014A01992787FD9095909581959F4FE3 |
:10967000AA2797FDA095BA2F681679068A069B0639 |
:1096800014F43C014D012A153B054C055D0514F40D |
:1096900059016A01A816B906CA06DB060CF0D0C04B |
:1096A0005C016D01CDC0EA2CFF2400271127CA01FF |
:1096B000B901A80197010E94777A39014A01C101D5 |
:1096C000AA2797FDA095BA2F681A790A8A0A9B0AD9 |
:1096D0006B817C818D819E81A80197010E94777AA0 |
:1096E00059016A01C201AA2797FDA095BA2FA81AAD |
:1096F000B90ACA0ADB0AD401C30197FE03C00F9658 |
:10970000A11DB11D3C014D01F4E09594879477941F |
:109710006794FA95D1F7D601C501D7FE03C00F961D |
:10972000A11DB11D5C016D01E4E0D594C794B7940F |
:10973000A794EA95D1F780915E0290915F028134FF |
:1097400091053CF480915C0290915D028134910519 |
:10975000A4F0C401B30123E030E040E050E00E94F7 |
:10976000777A39014A01C601B50123E030E040E0D3 |
:1097700050E00E94777A59016A0180916206E82FD1 |
:10978000FF27EE0FFF1FE25DF74F8081918101906F |
:10979000F081E02DF7FF03C0F095E195FF4F7A9738 |
:1097A000A4F0C401B30123E030E040E050E00E94A7 |
:1097B000777A39014A01C601B50123E030E040E083 |
:1097C00050E00E94777A59016A0189E180938D0106 |
:1097D00021E262167104810491042CF070E2672E7C |
:1097E000712C812C912C30EE63163FEF73063FEF06 |
:1097F00083063FEF930644F460EE662E6FEF762EFD |
:109800006FEF862E6FEF962E41E2A416B104C104CD |
:10981000D1042CF050E2A52EB12CC12CD12C50EE4D |
:10982000A5165FEFB5065FEFC5065FEFD50644F4FA |
:1098300040EEA42E4FEFB42E4FEFC42E4FEFD42E98 |
:109840008091CC029091CD02A091CE02B091CF0236 |
:1098500086199709A809B9098093CC029093CD0283 |
:10986000A093CE02B093CF028091C4029091C50222 |
:10987000A091C602B091C7028A199B09AC09BD0923 |
:109880008093C4029093C502A093C602B093C7020E |
:1098900080910202909103028F3F910509F008F434 |
:1098A000C4C56F85662309F04EC580917402882374 |
:1098B00009F049C58091A802882309F044C5709138 |
:1098C000A206788B772309F43EC58091E308909136 |
:1098D000E408A091E508B091E608B7FF04C0815004 |
:1098E0009F4FAF4FBF4FE92EFA2E0B2F112707FDC9 |
:1098F0001A95E092E308F092E4080093E5081093CB |
:10990000E6088091EB089091EC08A091ED08B091E9 |
:10991000EE08B7FF04C081509F4FAF4FBF4F892F54 |
:109920009A2FAB2FBB27A7FDBA95898B9A8BAB8B50 |
:10993000BC8B8093EB089093EC08A093ED08B09358 |
:10994000EE0880917A06A82EBB24CC24DD24209139 |
:10995000DC023091DD024091DE025091DF02C6014F |
:10996000B5010E94037A97FF04C061507F4F8F4F6B |
:109970009F4F672E782E892E992487FC9A946092A7 |
:10998000DC027092DD028092DE029092DF02209172 |
:10999000D8023091D9024091DA025091DB02C6011F |
:1099A000B5010E94037A97FF04C061507F4F8F4F2B |
:1099B0009F4F272E382E492E552447FC5A9420922B |
:1099C000D8023092D9024092DA025092DB028091A2 |
:1099D000D4029091D502A091D602B091D702B7FFE0 |
:1099E00004C081509F4FAF4FBF4F892F9A2FAB2F8D |
:1099F000BB27A7FDBA958093D4029093D502A0937C |
:109A0000D602B093D702D801C70186199709A809D1 |
:109A1000B90980932A0390932B03A0932C03B0934E |
:109A20002D032091A106E22EFF2400271127BC015F |
:109A3000CD01A80197010E94777A59016A0120930C |
:109A400038033093390340933A0350933B03898999 |
:109A50009A89AB89BC8982199309A409B5098093B5 |
:109A60002E0390932F03A0933003B0933103BC01D6 |
:109A7000CD01A80197010E94777A20933C0330938F |
:109A80003D0340933E0350933F03D601C501D7FEEB |
:109A900004C081509F4FAF4FBF4F892F9A2FAB2FDC |
:109AA000BB27A7FDBA95909379028093780257FF60 |
:109AB00004C021503F4F4F4F5F4FBB2757FDBA9512 |
:109AC000A52F942F832F90937B0280937A0280910D |
:109AD0005E0290915F0281349105DCF480915C021A |
:109AE00090915D0281349105A4F480916206E82F83 |
:109AF000FF27EE0FFF1FE25DF74F808191810190FC |
:109B0000F081E02DF7FF03C0F095E195FF4F7A97C4 |
:109B1000E4F080919D098F3FC1F48091780290918B |
:109B2000790297FD01969595879590937902809398 |
:109B3000780280917A0290917B0297FD019695952B |
:109B4000879590937B0280937A028091D8089091B8 |
:109B5000D908A091DA08B091DB08B7FF04C08150A2 |
:109B60009F4FAF4FBF4F892F9A2FAB2FBB27A7FD1A |
:109B7000BA958093D8089093D908A093DA08B09347 |
:109B8000DB088091CB089091CC08A091CD08B091D2 |
:109B9000CE08B7FF04C081509F4FAF4FBF4F892FF2 |
:109BA0009A2FAB2FBB27A7FDBA958093CB08909334 |
:109BB000CC08A093CD08B093CE088091EC02909190 |
:109BC000ED02A091EE02B091EF022F813885498518 |
:109BD0005A85281B390B4A0B5B0B209322033093C9 |
:109BE000230340932403509325038091E402909132 |
:109BF000E502A091E602B091E702EB84FC840D85BA |
:109C00001E85E81AF90A0A0B1B0BE0922603F09254 |
:109C10002703009328031093290320932A033093EA |
:109C20002B0340932C0350932D03E0922E03F092CC |
:109C30002F0300933003109331038091C802909159 |
:109C4000C902A091CA02B091CB02821B930BA40B54 |
:109C5000B50B8093C8029093C902A093CA02B09337 |
:109C6000CB028091C0029091C102A091C202B0913A |
:109C7000C3028E199F09A00BB10B8093C002909371 |
:109C8000C102A093C202B093C30288898823E1F085 |
:109C90002091A6023091A702213831054CF0809125 |
:109CA000FE029091FF0201969093FF028093FE02C4 |
:109CB00020583F4F4CF48091FE029091FF02019793 |
:109CC0009093FF028093FE021092A7021092A602C8 |
:109CD00081E090E09093450380934403E0902A0351 |
:109CE000F0902B0300912C0310912D03D801C70194 |
:109CF00017FF07C088279927DC018E199F09A00B41 |
:109D0000B10B81509240A040B04034F084E090E02C |
:109D1000909345038093440380914A0390914B03B1 |
:109D2000A0914C03B0914D032091E3083091E408D9 |
:109D30004091E5085091E608821B930BA40BB50BEC |
:109D4000815E914BAF4FBF4F8F539C49A040B040B5 |
:109D500028F080919E0989310CF4FFC021E0E216C1 |
:109D600020E1F20620E0020720E012070CF473C0A5 |
:109D700080914603882309F46AC0D801C70117FF00 |
:109D800007C088279927DC018E199F09A00BB10B0A |
:109D90009C01AD01B7FF04C021503E4F4F4F5F4FB4 |
:109DA000F9E05595479537952795FA95D1F7809124 |
:109DB000440390914503820F931F90934503809332 |
:109DC0004403D801C70117FF03C00796A11DB11DA9 |
:109DD000E3E0B595A79597958795EA95D1F7809398 |
:109DE000380390933903A0933A03B0933B03895807 |
:109DF0009341A040B04064F088E893E1A0E0B0E077 |
:109E00008093380390933903A0933A03B0933B03B4 |
:109E1000209138033091390340913A0350913B032C |
:109E200057FF04C021503F4F4F4F5F4F232F342F18 |
:109E3000452F552747FD5A958091780290917902D8 |
:109E4000820F931F909379028093780206C081E07D |
:109E50008093460302C01092460340E0E41640EFB0 |
:109E6000F4064FEF04074FEF14070CF073C0809116 |
:109E70004703882309F46AC0D801C70117FF07C048 |
:109E800088279927DC018E199F09A00BB10B9C0133 |
:109E9000AD01B7FF04C021503E4F4F4F5F4F69E007 |
:109EA00055954795379527956A95D1F78091440345 |
:109EB00090914503820F931F909345038093440331 |
:109EC000D801C70117FF03C00796A11DB11D23E0EC |
:109ED000B595A795979587952A95D1F780933803DF |
:109EE00090933903A0933A03B0933B0388579C4E59 |
:109EF000AF4FBF4F64F488E79CEEAFEFBFEF8093A6 |
:109F0000380390933903A0933A03B0933B03209115 |
:109F100038033091390340913A0350913B0357FF86 |
:109F200004C021503F4F4F4F5F4F232F342F452FF9 |
:109F3000552747FD5A958091780290917902820FBA |
:109F4000931F909379028093780211C081E08093EF |
:109F500047030DC0109247030AC0109245031092A8 |
:109F6000440384E690E090938C0180938B01688990 |
:109F7000262F3327809144039091450328173907F2 |
:109F800024F4309345032093440310919E09112338 |
:109F900079F0212F332727FD30958091440390914C |
:109FA00045032817390724F43093450320934403CD |
:109FB00040912A0350912B0360912C0370912D0343 |
:109FC000413851056105710574F08091020390914B |
:109FD00003032091440330914503820F931F909314 |
:109FE00003038093020340585F4F6F4F7F4F74F419 |
:109FF0008091020390910303209144033091450323 |
:10A00000821B930B909303038093020381E090E003 |
:10A010009093450380934403C0902E03D0902F0368 |
:10A02000E0903003F0903103D701C601F7FE07C07E |
:10A0300088279927DC018C199D09AE09BF09815039 |
:10A040009240A040B04034F084E090E0909345030B |
:10A050008093440380914E0390914F03A09150034D |
:10A06000B09151032091EB083091EC084091ED083C |
:10A070005091EE08821B930BA40BB50B815E914BA4 |
:10A08000AF4FBF4F8F539C49A040B04018F01931DB |
:10A090000CF4FFC001E0C01600E1D00600E0E006CD |
:10A0A00000E0F0060CF473C080914803882309F4A3 |
:10A0B0006AC0D701C601F7FE07C088279927DC01CF |
:10A0C0008C199D09AE09BF099C01AD01B7FF04C001 |
:10A0D00021503E4F4F4F5F4F09E0559547953795BB |
:10A0E00027950A95D1F78091440390914503820FFB |
:10A0F000931F9093450380934403D701C601F7FE55 |
:10A1000003C00796A11DB11D13E0B595A7959795BE |
:10A1100087951A95D1F780933C0390933D03A093C4 |
:10A120003E03B0933F0389589341A040B04064F090 |
:10A1300088E893E1A0E0B0E080933C0390933D0376 |
:10A14000A0933E03B0933F0320913C0330913D0325 |
:10A1500040913E0350913F0357FF04C021503F4FB1 |
:10A160004F4F5F4F232F342F452F552747FD5A95CB |
:10A1700080917A0290917B02820F931F90937B02D1 |
:10A1800080937A0206C081E08093480302C0109257 |
:10A19000480320E0C21620EFD2062FEFE2062FEF91 |
:10A1A000F2060CF073C080914903882309F46AC059 |
:10A1B000D701C601F7FE07C088279927DC018C1953 |
:10A1C0009D09AE09BF099C01AD01B7FF04C0215034 |
:10A1D0003E4F4F4F5F4FE9E055954795379527958F |
:10A1E000EA95D1F78091440390914503820F931F24 |
:10A1F0009093450380934403D701C601F7FE03C043 |
:10A200000796A11DB11D73E0B595A7959795879504 |
:10A210007A95D1F780933C0390933D03A0933E033E |
:10A22000B0933F0388579C4EAF4FBF4F64F488E70D |
:10A230009CEEAFEFBFEF80933C0390933D03A09360 |
:10A240003E03B0933F0320913C0330913D03409186 |
:10A250003E0350913F0357FF04C021503F4F4F4FE3 |
:10A260005F4F232F342F452F552747FD5A95809157 |
:10A270007A0290917B02820F931F90937B028093CE |
:10A280007A0211C081E0809349030DC01092490306 |
:10A290000AC0109245031092440384E690E0909324 |
:10A2A0008C0180938B014889242F332780914403AC |
:10A2B000909145032817390724F4309345032093E0 |
:10A2C000440380919E09882379F0282F332727FDA6 |
:10A2D000309580914403909145032817390724F461 |
:10A2E000309345032093440340912E0350912F0354 |
:10A2F000609130037091310341385105610571055A |
:10A3000074F08091000390910103209144033091F7 |
:10A310004503820F931F90930103809300034058DD |
:10A320005F4F6F4F7F4FCCF48091000390910103FA |
:10A330002091440330914503821B930B90930103BA |
:10A34000809300030AC010927B0210927A0210924E |
:10A350007902109278021092A8028091F108882365 |
:10A3600041F410927B0210927A02109279021092BC |
:10A3700078028091E3089091E408A091E508B091FB |
:10A38000E60880934A0390934B03A0934C03B09349 |
:10A390004D038091EB089091EC08A091ED08B091ED |
:10A3A000EE0880934E0390934F03A0935003B09315 |
:10A3B00051031092DC021092DD021092DE02109224 |
:10A3C000DF021092D8021092D9021092DA02109293 |
:10A3D000DB021092D4021092D5021092D602109293 |
:10A3E000D7021092E3081092E4081092E508109248 |
:10A3F000E6081092EB081092EC081092ED0810920B |
:10A40000EE081092D8081092D9081092DA0810922B |
:10A41000DB081092CB081092CC081092CD08109255 |
:10A42000CE081092030210920202E0909E02F09079 |
:10A430009F02C701F7FE04C0882799278E199F093C |
:10A4400004973CF080910B0984FD03C082E3809364 |
:10A450007C0210917706A12EBB24CC24DD24B70109 |
:10A46000882777FD8095982F9701F7FE04C0222753 |
:10A4700033272E193F09442737FD4095542F0E945A |
:10A48000037A9B01AC01C601B5010E94037A97FFD4 |
:10A4900004C061507E4F8F4F9F4F59E0959587952F |
:10A4A000779567955A95D1F79B01812F99278E9DB6 |
:10A4B000D0018F9DB00D9E9DB00D1124CD01B7FD33 |
:10A4C00003969595879595958795280F391F8091C7 |
:10A4D0005402909155028150924010F020E030E0FB |
:10A4E00080917E0290917F02280F391F442737FD0B |
:10A4F0004095542F20931E0330931F034093200355 |
:10A50000509321038091BC029091BD02A091BE02A4 |
:10A51000B091BF02821B930BA40BB50B8093BC02BE |
:10A520009093BD02A093BE02B093BF028155934C9D |
:10A53000A040B04064F080E593ECA0E0B0E08093F0 |
:10A54000BC029093BD02A093BE02B093BF02809163 |
:10A55000BC029091BD02A091BE02B091BF02805B8F |
:10A560009C43AF4FBF4F64F480EB9CE3AFEFBFEF72 |
:10A570008093BC029093BD02A093BE02B093BF0231 |
:10A5800080908F019090900197FCFBC080910B0907 |
:10A5900083FFF7C080918E01815080938E018823C4 |
:10A5A00009F0F3C08DE080938E018091EC029091D0 |
:10A5B000ED02A091EE02B091EF02B7FF04C081500E |
:10A5C0009E4FAF4FBF4F39E0B595A79597958795AB |
:10A5D0003A95D1F78C0197FF03C0109501951F4F55 |
:10A5E0008091E4029091E502A091E602B091E70229 |
:10A5F000B7FF04C081509E4FAF4FBF4F29E0B595C4 |
:10A60000A795979587952A95D1F79C0197FF03C049 |
:10A61000309521953F4F021713070CF48901B801BB |
:10A6200017FF02C0695F7F4F3B01B3E075946794E9 |
:10A63000BA95E1F7A2E0EA2EF12C6E0C7F1CA090F7 |
:10A640001D09B0901E09C0901F09D09020092091CB |
:10A650004101309142014091430150914401C601B2 |
:10A66000B5010E94777A19012A013093C908209315 |
:10A67000C808821A930AC401845E9D4F68E671E09F |
:10A680000E94427AAC01445B504020917C0222231C |
:10A6900021F03092AB022092AA0280918B0190911E |
:10A6A0008C01009731F0019790938C0180938B017E |
:10A6B00012C0093111057CF48091A6029091A70285 |
:10A6C000840F951F9093A7028093A602222319F06E |
:10A6D000215020937C0280918B0190918C01892BD9 |
:10A6E000F9F480918D019927489F8001499F100DB1 |
:10A6F000589F100D1124C801B3010E94427ACB016A |
:10A70000AA2797FDA095BA2FA80EB91ECA1EDB1E58 |
:10A71000A0921D09B0921E09C0921F09D092200973 |
:10A7200080917C02882369F58091AA029091AB0206 |
:10A730002091C8083091C908821B930B845E9D4FFD |
:10A7400068E671E00E94427A9C01245B304080916F |
:10A75000780186959927289FA001299F500D389F41 |
:10A76000500D11249A0157FF02C0215F3F4FF4E0C2 |
:10A7700035952795FA95E1F730937F0220937E0275 |
:10A7800004C010927F0210927E028091A80288235A |
:10A7900081F01092B0021092B1021092B2021092A7 |
:10A7A000B3021092B4021092B5021092B602109247 |
:10A7B000B702809175028823F1F48091F108282F67 |
:10A7C0003327442755278091EC029091ED02A09108 |
:10A7D000EE02B091EF02BC01CD010E94037ADC01D0 |
:10A7E000CB01BC01CD0128EF3AE240E050E00E94ED |
:10A7F000777A390102C06624772480917402882315 |
:10A80000F1F48091F108282F3327442755278091B0 |
:10A81000E4029091E502A091E602B091E702BC014A |
:10A82000CD010E94037ADC01CB01BC01CD0128EFF0 |
:10A830003AE240E050E00E94777A290102C04424C5 |
:10A8400055248091C5089091C608893C91051CF05B |
:10A8500088EC90E005C088539F4F34F488E39FEF65 |
:10A860009093C6088093C5088091D0089091D10834 |
:10A87000893C91051CF088EC90E005C088539F4FFF |
:10A8800034F488E39FEF9093D1088093D0088091AF |
:10A89000D2089091D308AA2797FDA095BA2F2091AE |
:10A8A0001B09A22EBB24CC24DD24BC01CD01A601B2 |
:10A8B00095010E94037A9B01AC018091C50890919B |
:10A8C000C608AA2797FDA095BA2FE7E0880F991F21 |
:10A8D000AA1FBB1FEA95D1F7280F391F4A1F5B1F1C |
:10A8E00057FF04C0215C3F4F4F4F5F4F76E05595B7 |
:10A8F0004795379527957A95D1F78301020F131F56 |
:10A900001093D3080093D2088091C3089091C40893 |
:10A91000AA2797FDA095BA2FBC01CD01A6019501EC |
:10A920000E94037A9B01AC018091D0089091D108DC |
:10A93000AA2797FDA095BA2F67E0880F991FAA1F35 |
:10A94000BB1F6A95D1F7280F391F4A1F5B1F57FF9E |
:10A9500004C0215C3F4F4F4F5F4F96E055954795A0 |
:10A96000379527959A95D1F77201E20EF31EF09272 |
:10A97000C408E092C3088091160990911709880FC6 |
:10A98000991FAA2797FDA095BA2F2091CA083327AF |
:10A9900044275527BC01CD010E94037A5B016C015D |
:10A9A00097FF08C08FE390E0A0E0B0E0A80EB91ECA |
:10A9B000CA1EDB1E86E0D594C794B794A7948A95E7 |
:10A9C000D1F78091E008282F33274427552780911D |
:10A9D000D0029091D102A091D202B091D302BC01D9 |
:10A9E000CD010E94037ADC01CB01BC01CD0120EF37 |
:10A9F00035E540E050E00E94777AB501620F731FA1 |
:10AA000070931709609316090150104134F080E0EB |
:10AA100090E19093D3088093D2088091D2089091CE |
:10AA2000D3088050904F34F480E090EF9093D30897 |
:10AA30008093D208B1E0EB16B0E1FB0634F080E081 |
:10AA400090E19093C4088093C3088091C3089091CB |
:10AA5000C4088050904F34F480E090EF9093C40885 |
:10AA60008093C3086150704134F080E090E190938E |
:10AA70001709809316098091160990911709805043 |
:10AA8000904F34F480E090EF90931709809316096B |
:10AA90008091590285FD16C080910201992720916D |
:10AAA00023013091240169817A81689FA001699F07 |
:10AAB000500D789F500D1124CA01B9010E942E7AC1 |
:10AAC0007A836983809152038150809352038F3F30 |
:10AAD00009F05EC08091530390915403892B41F497 |
:10AAE0008091230190912401909354038093530308 |
:10AAF00080912301909124012091530330915403BC |
:10AB00002817390718F42F5F3F4F09C080912301A0 |
:10AB1000909124018217930730F4215030403093F4 |
:10AB200054032093530384E6809352038091BC0125 |
:10AB3000282F332740915303509154034217530752 |
:10AB400010F48AE00CC080910001280F311D2417F9 |
:10AB5000350738F480915002882319F08150809392 |
:10AB600050028091BB01282F33274217530710F45E |
:10AB700089E10CC080910001280F311D2417350791 |
:10AB800038F480914F02882319F0815080934F024E |
:10AB9000809150028823D1F08091820290918302AB |
:10ABA000A0918402B0918502B7FD10C08091D006BB |
:10ABB0008093810280EE91EBAFEFBFEF8093820232 |
:10ABC00090938302A0938402B09385028091E9015F |
:10ABD000882311F40E94236289819A81880F991F2A |
:10ABE000880F991F9A83898380910B0980FD02C089 |
:10ABF0000C94025E80917402882311F00C94025E22 |
:10AC000040917502442311F00C94025E8091D303AD |
:10AC100099278F779070009711F00C94025E4C0189 |
:10AC200020910403309105032115310509F044C03A |
:10AC30008091190190911A018959934058F087B574 |
:10AC4000853F20F480910602815011C081E08093FD |
:10AC5000600353C08091190190911A0184369105C7 |
:10AC600030F587B58B30F8F0809106028F5F8093C6 |
:10AC700006029AE089029001112480910A06821B43 |
:10AC800087BD87B5809588BD8CE291E09093EB01FC |
:10AC90008093EA018EE591E090930503809304038D |
:10ACA0000E94931A2AC081E080935F0326C04093DC |
:10ACB0005F034093600321C09093050280930402D8 |
:10ACC00080918C0290918D02A0918E02B0918F02A2 |
:10ACD00014E0880F991FAA1FBB1F1A95D1F7809304 |
:10ACE000070290930802A0930902B0930A02215030 |
:10ACF0003040309305032093040380910B09209189 |
:10AD00006F0281FF25C02233E8F4809191018150C8 |
:10AD1000809391018F3FE1F51092A90280918C02FE |
:10AD200090918D02A0918E02B0918F028093880243 |
:10AD300090938902A0938A02B0938B0281E0809362 |
:10AD4000910126C0273420F188EC809391011DC029 |
:10AD50008091450190914601820F911D20917006CE |
:10AD60003327829FF001839FF00D929FF00D1124F5 |
:10AD7000CF01AA2797FDA095BA2F809388029093C0 |
:10AD80008902A0938A02B0938B0281E08093A9028A |
:10AD90008091EC029091ED02A091EE02B091EF0251 |
:10ADA000E0904101F0904201009143011091440173 |
:10ADB000BC01CD01A80197010E94777A59016A016F |
:10ADC0008091E4029091E502A091E602B091E70241 |
:10ADD000BC01CD01A80197010E94777AB901C50194 |
:10ADE0000E942C789093DD088093DC08CC9734F097 |
:10ADF0008CE390E09093DD088093DC088091DC0880 |
:10AE00009091DD080E949D6A9093DD088093DC0894 |
:10AE100080E2809340011092870210928602809116 |
:10AE2000A902882309F495C58091590299279C01AC |
:10AE30002071307084FD8DC58091580282608093AE |
:10AE400058027091EF08872F9927B1E0CB2ED12CB3 |
:10AE5000C822D92280FD04C080910B0981FD10C059 |
:10AE600009811A813093560320935503309387024A |
:10AE70002093860280915902806C80935902CFC240 |
:10AE80008091590281FF9EC200918101109182013F |
:10AE9000C8010F96A0909C02B0909D028A159B0558 |
:10AEA00008F079C080915F03882309F074C0809115 |
:10AEB000590287FF15C0809159028F7780935902FC |
:10AEC0008091FA019091FB01A091FC01B091FD01EC |
:10AED0008093880290938902A0938A02B0938B0298 |
:10AEE000E090CF08EE20F9F08091880290918902DD |
:10AEF000A0918A02B0918B02BC01CD0124E630E022 |
:10AF000040E050E00E94777A8E2D9927AA27BB2730 |
:10AF100082179307A407B50734F4D0928702C09232 |
:10AF200086028DE378C0809157039091580345972E |
:10AF300084F08091FA019091FB01A091FC01B09105 |
:10AF4000FD018093880290938902A0938A02B093B6 |
:10AF50008B02809159028064809359029501201BD5 |
:10AF6000310B2F50304037FF03C0309521953F4FB4 |
:10AF7000309387022093860280915002882349F003 |
:10AF8000C90163E070E00E94427A70938702609387 |
:10AF900086028BE240C0C8010F97A816B90608F0D8 |
:10AFA0003FC0809160038823D9F58091590286FDC6 |
:10AFB00007C08091570390915803845D9E4FACF475 |
:10AFC000809159028F7B809359028091FA01909170 |
:10AFD000FB01A091FC01B091FD0180938802909348 |
:10AFE0008902A0938A02B0938B02809159028068F3 |
:10AFF00080935902C501801B910B0F9697FF03C0E8 |
:10B00000909581959F4F909581959F4F9093870242 |
:10B01000809386028DE28093400110928002D9C015 |
:10B020008DE38093400160918102662371F120914C |
:10B030008202309183024091840250918502809176 |
:10B04000880290918902A0918A02B0918B028217A6 |
:10B050009307A407B507CCF48091590280648093CC |
:10B060005902862F992790938702809386028AE05F |
:10B07000809380028EE5809340018091590287FF82 |
:10B08000A8C0809159028F7733C0662309F443C06A |
:10B090002091820230918302409184025091850276 |
:10B0A0008091880290918902A0918A02B0918B02CE |
:10B0B000281739074A075B0774F5809159028068A1 |
:10B0C00080935902862F9927909581959F4F909351 |
:10B0D00087028093860286EF8093800286E78093C2 |
:10B0E00040018091590286FF74C0809159028F7B84 |
:10B0F000809359028091FA019091FB01A091FC018B |
:10B10000B091FD018093880290938902A0938A02F6 |
:10B11000B0938B025EC080915902807C09F459C0C3 |
:10B1200080918002882379F5E090FA01F090FB018C |
:10B130000091FC011091FD01D801C701885C90408D |
:10B14000A040B040209188023091890240918A024B |
:10B1500050918B0282179307A407B5075CF4D801BE |
:10B16000C70188539F4FAF4FBF4F281739074A0772 |
:10B170005B075CF08093880290938902A0938A0217 |
:10B18000B0938B0202C010928002809159028F739B |
:10B1900080935902109256031092550371FF06C016 |
:10B1A00084EF91E09093EB018093EA01809190020B |
:10B1B000882379F480918C0290918D02A0918E0267 |
:10B1C000B0918F02C397A105B1051CF081E0809377 |
:10B1D0009002609155037091560380918602909180 |
:10B1E0008702680F791F7093560360935503CB0154 |
:10B1F00077FF04C088279927861B970B855F9140AE |
:10B200000CF4C9C040918002442389F180918202EC |
:10B21000909183022091880230918902821B930BC6 |
:10B220000996439748F48091820290918302A091FD |
:10B230008402B091850212C0242F332727FD309558 |
:10B24000432F532F8091880290918902A0918A0206 |
:10B25000B0918B02820F931FA41FB51F80938802A9 |
:10B2600090938902A0938A02B0938B0224C08091AC |
:10B270007006209188023091890240918A02509193 |
:10B280008B021616170644F463E00E94227A280FF8 |
:10B29000311D411D511D07C063E00E94227A281B09 |
:10B2A0003109410951092093880230938902409362 |
:10B2B0008A0250938B021092560310925503E0902D |
:10B2C0008C02F0908D0200918E0210918F02D801B5 |
:10B2D000C70180509440A040B0402091FA013091C5 |
:10B2E000FB014091FC015091FD0182179307A407D7 |
:10B2F000B5075CF4D801C70180509C4FAF4FBF4FDA |
:10B30000281739074A075B0744F08093FA019093A6 |
:10B31000FB01A093FC01B093FD01E090FA01F090D5 |
:10B32000FB010091FC011091FD01D801C701805083 |
:10B330009440A040B0402091880230918902409111 |
:10B340008A0250918B0282179307A407B5075CF419 |
:10B35000D801C70180509C4FAF4FBF4F2817390706 |
:10B360004A075B0744F08093880290938902A09378 |
:10B370008A02B0938B028091EF0881FF06C084E6B9 |
:10B3800090E09093EB018093EA0180918102882301 |
:10B3900011F40E94DB3F8091040390910503892BF7 |
:10B3A000D1F18091FA019091FB01A091FC01B09143 |
:10B3B000FD018093880290938902A0938A02B09342 |
:10B3C0008B0229C08091FA019091FB01A091FC01B0 |
:10B3D000B091FD01805D9740A040B040809388020D |
:10B3E00090938902A0938A02B0938B028091740695 |
:10B3F000882311F0992702C08FE790E09093820193 |
:10B400008093810129813A813093770220937602DB |
:10B410008EE2809340010091760210917702C090F5 |
:10B42000FA01D090FB01E090FC01F090FD01209129 |
:10B4300088023091890240918A0250918B022C152A |
:10B440003D054E055F0524F08091EF0880FD93C215 |
:10B4500080915102882309F08EC28091040390915B |
:10B460000503892B49F00091760210917702109222 |
:10B47000580310925703DBC0D701C601821B930B00 |
:10B48000A40BB50B8093220390932303A093240372 |
:10B49000B0932503823030E893073FEFA3073FEFD7 |
:10B4A000B3072CF481E090E8AFEFBFEF09C08F5FE6 |
:10B4B0009F47A040B04064F08FEF9FE7A0E0B0E06E |
:10B4C0008093220390932303A0932403B093250336 |
:10B4D0008091220390912303909358038093570304 |
:10B4E00080917A01282F3327442755278091220302 |
:10B4F00090912303A0912403B0912503BC01CD01B9 |
:10B500000E94037A97FF04C0615E7F4F8F4F9F4F69 |
:10B51000A5E09595879577956795AA95D1F760935E |
:10B5200022037093230380932403909325036530B3 |
:10B530005EEF75075FEF85075FEF95072CF484E0FA |
:10B540009EEFAFEFBFEF09C0605074408040904065 |
:10B5500064F080E094E0A0E0B0E080932203909358 |
:10B560002303A0932403B09325038090220390909B |
:10B570002303209104023091050237FF02C0295FA6 |
:10B580003F4FF3E035952795FA95E1F7BFEF223865 |
:10B590003B071CF421E83FEF05C02038310514F0CB |
:10B5A00020E830E0C901AA2797FDA095BA2F209185 |
:10B5B0007B01332744275527BC01CD010E94037A24 |
:10B5C00097FF04C06D5F7F4F8F4F9F4FE2E09595CF |
:10B5D000879577956795EA95D1F79B01EFEF6130F5 |
:10B5E0007E071CF420E03FEF06C06F3F710519F0A5 |
:10B5F00014F020E031E080915902807C49F0C901CB |
:10B6000037FD03969C0135952795359527950DC0F7 |
:10B610008091EF0880FF09C0C90137FD07969C01A2 |
:10B6200043E0359527954A95E1F7820E931E2091C8 |
:10B630007901222309F454C06091AC027091AD02EB |
:10B640008091AE029091AF0297FF04C061587F4F86 |
:10B650008F4F9F4F37E095958795779567953A95EA |
:10B66000D1F73327442755270E94037A97FF04C058 |
:10B67000615E7F4F8F4F9F4FB5E09595879577958A |
:10B680006795BA95D1F76093220370932303809353 |
:10B690002403909325036138FFEF7F07FFEF8F07A7 |
:10B6A000FFEF9F072CF480E89FEFAFEFBFEF0AC0DA |
:10B6B0006F3F71058105910569F064F080E091E0CC |
:10B6C000A0E0B0E08093220390932303A09324038F |
:10B6D000B09325038091220390912303880E991E35 |
:10B6E00080917701282F33278091A109992787FD21 |
:10B6F0009095289F7001299FF00C389FF00C112421 |
:10B700009701F7FE02C021583F4F220F232F221F1F |
:10B71000330B4FEF213834071CF420E83FEF06C00D |
:10B720002F3F310519F014F020E031E0280D391DCC |
:10B73000C901AA2797FDA095BA2FE0907602F09054 |
:10B7400077029701442737FD4095542FBC01CD0166 |
:10B750000E94037A97FF04C061507E4F8F4F9F4F26 |
:10B76000F9E09595879577956795FA95D1F7061B3A |
:10B77000170B8091860290918702892B09F064C093 |
:10B780001E141F040CF060C0209157033091580321 |
:10B79000C90137FF03C0309521953F4F2D33310547 |
:10B7A00040F48091A4029091A5028017910774F54E |
:10B7B00026C02C533040E5E036952795EA95E1F711 |
:10B7C0002031310510F02FE030E04091A40250917B |
:10B7D000A50218161906E4F480E190E0821B930B91 |
:10B7E000489F9001499F300D589F300D112474E0FF |
:10B7F000369527957A95E1F72017310720F5809146 |
:10B800007F019091800108171907F4F08C011CC08A |
:10B81000205F3F4F80917F0190918001829FB00116 |
:10B82000839F700D929F700D11249B0164E03695EB |
:10B8300027956A95E1F74017510714F08A0104C073 |
:10B840000217130708F08901C801AA2797FDA095E0 |
:10B85000BA2F5DE0880F991FAA1FBB1F5A95D1F719 |
:10B860002091DC083091DD08442737FD4095542FA6 |
:10B87000BC01CD010E94777A2093260330932703E1 |
:10B880004093280350932903009126031091270326 |
:10B890008091590390915A039C01220F331F280F66 |
:10B8A000391F200F311F37FF02C02D5F3F4FA90105 |
:10B8B000559547955595479550935A03409359038D |
:10B8C00080916C06282F3327220F331F220F331F3E |
:10B8D000241735076CF480911309282F3327220F82 |
:10B8E000331F220F331F205530404217530724F0D7 |
:10B8F00030935A03209359038091EF0880FF14C0BE |
:10B900008091590390915A03A981BA818A179B07A4 |
:10B9100024F0B0935A03A0935903E0915903F09196 |
:10B920005A03FA83E98327C029813A812E193F09F6 |
:10B9300037FF02C02D5F3F4F3595279535952795E9 |
:10B94000E0905903F0905A03E20EF31EFA82E98266 |
:10B9500012C00E94DB3F09811A8110935A030093A1 |
:10B96000590380915902806C80935902809158024A |
:10B970008D7F809358028091590299279C012270F3 |
:10B98000307081FF30C180915B0390915C03A09186 |
:10B990005D03B0915E030097A105B10521F0809190 |
:10B9A00090028130B9F48091760290917702AA27B3 |
:10B9B00097FDA095BA2F1EE0880F991FAA1FBB1FE5 |
:10B9C0001A95D1F780935B0390935C03A0935D037A |
:10B9D000B0935E0380919002813019F482E08093ED |
:10B9E000900229813A8179010027F7FC0095102FF8 |
:10B9F0008091DC089091DD089C01442737FD40953B |
:10BA0000542FC801B7010E94037ADC01CB01809357 |
:10BA1000260390932703A0932803B0932903B7FF2D |
:10BA200004C08150904EAF4FBF4F7C018D01FDE0AF |
:10BA300015950795F794E794FA95D1F7E0922603C8 |
:10BA4000F0922703009328031093290360915A0270 |
:10BA500070915B023FE0603A730750F580915B03A1 |
:10BA600090915C03A0915D03B0915E039C01AD01D8 |
:10BA7000EAE05695479537952795EA95D1F7821BC9 |
:10BA8000930BA40BB50BA8019701F4E0220F331F11 |
:10BA9000441F551FFA95D1F7820F931FA41FB51F9E |
:10BAA00080935B0390935C03A0935D03B0935E036C |
:10BAB00060547F4118F580915B0390915C03A091E5 |
:10BAC0005D03B0915E039C01AD01ECE05695479596 |
:10BAD00037952795EA95D1F7821B930BA40BB50BED |
:10BAE000A801970172E0220F331F441F551F7A955A |
:10BAF000D1F7820F931FA41FB51F38C08091040295 |
:10BB000090910502809104029091050297FF03C075 |
:10BB1000909581959F4F8436910584F58091FA0127 |
:10BB20009091FB012091880230918902821B930B36 |
:10BB300081509F4F8F5F914008F580915B039091FA |
:10BB40005C03A0915D03B0915E039C01AD016EE0CA |
:10BB500056954795379527956A95D1F7821B930B94 |
:10BB6000A40BB50B8E0D9F1DA01FB11F80935B030F |
:10BB700090935C03A0935D03B0935E0380915B039D |
:10BB800090915C03A0915D03B0915E031EE0B695B9 |
:10BB9000A795979587951A95D1F7909377028093FB |
:10BBA000760240917206442399F055279C01BA0110 |
:10BBB0000E94427AC901861B970B9093A50280933D |
:10BBC000A402260F371F3093800120937F011FC0EE |
:10BBD0001092A5021092A4028FEF93E0909380013F |
:10BBE00080937F0114C01092900210925B03109218 |
:10BBF0005C0310925D0310925E03309377022093F2 |
:10BC0000760205C080915902806C80935902809120 |
:10BC10006E0381FF37C089819A8197FD03969595C0 |
:10BC20008795959587952091560230915702281750 |
:10BC3000390760F48091760290917702892B31F078 |
:10BC4000220F331F220F331F3A8329838091FA0179 |
:10BC50009091FB01A091FC01B091FD0180938802BD |
:10BC600090938902A0938A02B0938B0288E99AE3A9 |
:10BC70009093EB018093EA0180E09EE090930C01A9 |
:10BC800080930B012091D708822F9927880F991F45 |
:10BC9000880F991F889669817A818617970714F013 |
:10BCA0009A838983809113099927880F991F880F98 |
:10BCB000991F80559040A981BA818A179B0714F477 |
:10BCC0009A83898380913E02882341F48091A80958 |
:10BCD0008E3F20F0809172038823E9F080915A0210 |
:10BCE00090915B020297C097B0F4E981FA811E1629 |
:10BCF0001F068CF481E090E090935B0280935A02DF |
:10BD0000E22EFF24EE0CFF1CEE0CFF1C8701085DE9 |
:10BD10001F4F1A8309838091E901882311F40E943F |
:10BD2000236229813A813093C8052093C705809109 |
:10BD30001E0390911F03A0912003B091210342E0C4 |
:10BD4000880F991FAA1FBB1F4A95D1F700911609AA |
:10BD500010911709081B190B213A31058CF0C90104 |
:10BD600037FD019695958795801791070CF48C0106 |
:10BD7000909581959F4F081719076CF48C010BC0A3 |
:10BD80000135110514F000E510E03FEF003B13070B |
:10BD900014F400EB1FEF80911309282F3327220F93 |
:10BDA000331F220F331FC90149815A81841B950B10 |
:10BDB000801791070CF48C0169817A81621B730BE7 |
:10BDC000061717070CF48B018091D2089091D308C5 |
:10BDD0006091A2027091A302861B970B9093E208D8 |
:10BDE0008093E108D090F1082091B4023091B5021F |
:10BDF0004091B6025091B702DD2041F0661A770AF1 |
:10BE0000C301AA2797FDA095BA2F04C0AA2797FDC2 |
:10BE1000A095BA2F280F391F4A1F5B1F2093B40229 |
:10BE20003093B5024093B6025093B7028091B402AA |
:10BE30009091B502A091B602B091B70281509A4F8D |
:10BE4000A040B04064F080E09AEFA0E0B0E08093C2 |
:10BE5000B4029093B502A093B602B093B70280915A |
:10BE6000B4029091B502A091B602B091B702805091 |
:10BE70009640AF4FBF4F64F480E096E0AFEFBFEF66 |
:10BE80008093B4029093B502A093B602B093B70228 |
:10BE9000C09081062091E1083091E208F8E0FC159D |
:10BEA00098F08C2D9927829F7001839FF00C929FB0 |
:10BEB000F00C1124C701F7FC07967C01B3E0F59460 |
:10BEC000E794BA95E1F712C08C2D86959927829F49 |
:10BED000A001839F500D929F500D1124CA0157FD60 |
:10BEE00003967C01F594E794F594E794A0907C0187 |
:10BEF000B0907D019501442737FD4095542F8091E6 |
:10BF0000B4029091B502A091B602B091B702BC0103 |
:10BF1000CD010E94777AE20EF31E90906601692DA2 |
:10BF2000772788279927980117FF04C022273327EE |
:10BF3000201B310B37FF02C02F5F3F4F35952795F0 |
:10BF4000A981BA812A0F3B1F442737FD4095542F02 |
:10BF50000E94037A97FF04C0615C7F4F8F4F9F4F11 |
:10BF6000E6E09595879577956795EA95D1F79B01DA |
:10BF70006E157F050CF47B01309521953F4FE2163D |
:10BF8000F3060CF479018091C3089091C408609184 |
:10BF9000A0027091A102861B970B9093C208809318 |
:10BFA000C1082091B0023091B1024091B20250918B |
:10BFB000B302DD2041F0461A570AC201AA2797FDB5 |
:10BFC000A095BA2F04C0AA2797FDA095BA2F280FD5 |
:10BFD000391F4A1F5B1F2093B0023093B102409378 |
:10BFE000B2025093B3028091B0029091B102A0913D |
:10BFF000B202B091B30281509A4FA040B04064F0B9 |
:10C0000080E09AEFA0E0B0E08093B0029093B1029C |
:10C01000A093B202B093B3028091B0029091B102AA |
:10C02000A091B202B091B30280509640AF4FBF4F83 |
:10C0300064F480E096E0AFEFBFEF8093B00290939E |
:10C04000B102A093B202B093B3022091C108309123 |
:10C05000C20848E04C1598F08C2D9927829FB001BA |
:10C06000839F700D929F700D1124CB0177FD079671 |
:10C070006C0163E0D594C7946A95E1F712C0C69449 |
:10C080008C2D9927829FD001839FB00D929FB00D78 |
:10C090001124CD01B7FD03966C01D594C794D594B6 |
:10C0A000C7949501442737FD4095542F8091B002E5 |
:10C0B0009091B102A091B202B091B302BC01CD0146 |
:10C0C0000E94777AC20ED31E692D77278827992779 |
:10C0D000980117FF04C022273327201B310B37FF9D |
:10C0E00002C02F5F3F4F35952795E981FA812E0FCA |
:10C0F0003F1F442737FD4095542F0E94037A97FF36 |
:10C1000004C0615C7F4F8F4F9F4F36E095958795B8 |
:10C11000779567953A95D1F79B016C157D050CF4E1 |
:10C120006B01309521953F4FC216D3060CF469017F |
:10C130008091E901882311F40E9423628091D7083D |
:10C14000282F33273E8B2D8B80911309282E3324E3 |
:10C150005090C40629E7A22E27E0B22E94EF892E34 |
:10C1600096E0992E8BE0482EB2EF6B2EB8E07B2E36 |
:10C17000D4012C9112160CF02FC1203429F4E9813E |
:10C18000FA81F88FEF8B1FC049815A81CA01AA2713 |
:10C1900097FDA095BA2F332727FD3095432F532FB6 |
:10C1A000BC01CD010E94037A97FF04C0615C7F4F00 |
:10C1B0008F4F9F4FA6E09595879577956795AA95A0 |
:10C1C000D1F7788F6F8BF4012181203439F42F89D6 |
:10C1D000388D2E0D3F1D388F2F8B2AC0203C39F40F |
:10C1E0004F89588D4E195F09588F4F8B21C0C70159 |
:10C1F000AA2797FDA095BA2F332727FD3095432F07 |
:10C20000532FBC01CD010E94037A97FF04C0615CEB |
:10C210007F4F8F4F9F4FF6E0959587957795679560 |
:10C22000FA95D1F7AF89B88DA60FB71FB88FAF8B2E |
:10C23000F4012281203439F42F89388D2C0D3D1DD5 |
:10C24000388F2F8B2AC0203C39F44F89588D4C19D8 |
:10C250005D09588F4F8B21C0C601AA2797FDA09575 |
:10C26000BA2F332727FD3095432F532FBC01CD0123 |
:10C270000E94037A97FF04C0615C7F4F8F4F9F4FEE |
:10C28000E6E09595879577956795EA95D1F7AF891B |
:10C29000B88DA60FB71FB88FAF8BF4012381203460 |
:10C2A00039F42F89388D200F311F388F2F8B2AC0FA |
:10C2B000203C39F44F89588D401B510B588F4F8BC0 |
:10C2C00021C0C801AA2797FDA095BA2F332727FDC3 |
:10C2D0003095432F532FBC01CD010E94037A97FF65 |
:10C2E00004C0615C7F4F8F4F9F4F56E095958795B7 |
:10C2F000779567955A95D1F7AF89B88DA60FB71F77 |
:10C30000B88FAF8BF501808181FD08C0D3018D917D |
:10C310009C91EF89F88D8E179F0774F4D3018D914E |
:10C320009C91EF89F88D8E0F9F1F97FD0196959533 |
:10C330008795988F8F8B1EC0552049F42F89388D93 |
:10C34000220F331F281B390B388F2F8B13C031E07E |
:10C35000351580F4252D33274F89588D841B950B77 |
:10C36000B9010E94427ACB016F89788D680F791FDD |
:10C37000788F6F8B8D899E89880F991F880F991FE1 |
:10C38000AF89B88D8A179B0754F4C101880F991F94 |
:10C39000880F991FEF89F88DE817F90714F0988F27 |
:10C3A0008F8B8F89988D97FD039695958795959599 |
:10C3B0008795F5018183880F991F880F991F2F8911 |
:10C3C000388D281B390BC901880F8283EF89F88DBE |
:10C3D000D301ED93FC9303C0F501118212824A94BC |
:10C3E00022E030E0620E731E44E050E0840E951EA1 |
:10C3F0006FE070E0A60EB71E47FEBACEE2E1C85E5F |
:10C400000C94AE7A84B1806A84B93D9A82E58CBD81 |
:10C410001DBC459A81E0809327098AEA80933809F8 |
:10C4200083E8809339098AE080933A0910923C09A5 |
:10C4300010923B0910923E0910923D091092A009FA |
:10C4400010925C09089530912709332309F070C0D8 |
:10C450000DB407FE6DC085E08093E901459A2EB5C5 |
:10C460008091750399278130910589F0823091057B |
:10C470001CF4892B21F03EC00297B9F03BC03093E9 |
:10C480005B09209376032138A9F581E008C02535A2 |
:10C4900049F480917603820F8093760382E0809343 |
:10C4A000750328C03093750325C080915B09E82F80 |
:10C4B000FF27E358F64F20838F5F80935B099091AD |
:10C4C00076038032A0F0291769F480E2ADE7B9E085 |
:10C4D000EDE5F9E00D9001928A95E1F781E0809316 |
:10C4E0005C0902C030935C091092750303C0920F7F |
:10C4F00090937603209137092232A0F445980000EA |
:10C50000000000000000E0913009F0913109E20FD5 |
:10C51000F11D80818EBD809159099081890F809392 |
:10C52000590903C081E0809327092F5F20933709C1 |
:10C530000895EF92FF920F931F9380917A069927A7 |
:10C54000880F991F880F991F7C010027F7FC009521 |
:10C55000102F8091EC029091ED02A091EE02B0912B |
:10C56000EF02BC01CD01A80197010E94777A3093B8 |
:10C570003C0920933B098091E4029091E502A0914F |
:10C58000E602B091E702BC01CD01A80197010E942B |
:10C59000777A30933E0920933D0920911D0930910F |
:10C5A0001E0940911F0950912009DA01C90173E069 |
:10C5B000880F991FAA1FBB1F7A95D1F7820F931F6F |
:10C5C000A41FB51F820F931FA41FB51F2091410107 |
:10C5D000309142014091430150914401BC01CD0191 |
:10C5E0000E94777A30934409209343098091FE0298 |
:10C5F0009091FF022091110230911202821B930B45 |
:10C6000090934A0980934909E091F402F091F50270 |
:10C610008091E8089091E908BF010E94427ACB011D |
:10C620009B01220F331F220F331F280F391F280FA2 |
:10C63000391F37FF02C02D5F3F4F35952795359540 |
:10C6400027953093400920933F09809119099091D3 |
:10C650001A09BF010E94427A9B01220F331F220F49 |
:10C66000331F260F371F260F371F37FF02C02D5FDE |
:10C670003F4F35952795359527953093420920935F |
:10C6800041091092F5021092F4021092E9081092FA |
:10C69000E80810921A091092190980913A0999270D |
:10C6A000AA27BB27FC013A97E830F10508F044C2FD |
:10C6B000E35AFF4F0C94C97A80916E0280934D0922 |
:10C6C00080916D0280934E0980916C0280934F0996 |
:10C6D00080916B028093500980916A028093510986 |
:10C6E0008091690280935209809168028093530976 |
:10C6F0008091670280935409809159028093550973 |
:10C7000080915902837F8093590280910101809327 |
:10C7100056098091230190912401809357098091BB |
:10C72000580280935809429907C280915802877F26 |
:10C730008093580201C28091A2099091A30990931D |
:10C740004E0980934D098091770380934F09809122 |
:10C75000A809809350098091AF060E94AF3C809356 |
:10C760005109809140018093520920917703822FD3 |
:10C770009927FC0114E0EE0FFF1F1A95E1F7E81B63 |
:10C78000F90BE758F84F8685809353098081809391 |
:10C790005409868180935509838180935609878146 |
:10C7A000809357098581809358092F5F20937703E1 |
:10C7B000E22FFF27EE0FFF1FEE0FFF1FE951F94F8A |
:10C7C000858518160CF4B8C1222309F4B5C1822F4F |
:10C7D000992701966DE070E00E94427AAC01282F03 |
:10C7E000E82FFF27EE0FFF1FEE0FFF1FE951F94F54 |
:10C7F0008585181614F0442351F7409377039CC1A4 |
:10C800008091020180934D098091B00680934E097A |
:10C810008091B10680934F098091B20680935009B0 |
:10C820008091B306809351098091B7068093520995 |
:10C830008091B806809353098091B906809354097A |
:10C840008091BC06809355098091BA068093560961 |
:10C850008091BB06809357098091BD066BC1809182 |
:10C86000AE0680934D0910924E098091D0068093B8 |
:10C870004F098091C5068093500980914F028093A3 |
:10C88000510980919C038093520980919A0380936F |
:10C890005309809199038093540910929C0310923C |
:10C8A0009A03109299038091AA029091AB029093FF |
:10C8B0005609809355098091D40680935709809139 |
:10C8C000D50638C1F89480916106E82FFF27EE0F56 |
:10C8D000FF1FE25DF74F0190F081E02DE038F10598 |
:10C8E0001CF0EFE7F0E006C02FEFE138F20714F498 |
:10C8F000E1E8FFEFE0934D0980916206E82FFF2702 |
:10C90000EE0FFF1FE25DF74F0190F081E02DE03860 |
:10C91000F1051CF0EFE7F0E006C07FEFE138F70724 |
:10C9200014F4E1E8FFEFE0934E0980916006E82FF0 |
:10C93000FF27EE0FFF1FE25DF74F0190F081E02D22 |
:10C94000E038F1051CF0EFE7F0E006C08FEFE138CA |
:10C95000F80714F4E1E8FFEFE0934F0980915F06D8 |
:10C96000E82FFF27EE0FFF1FE25DF74F0190F081E8 |
:10C97000E02DE038F1051CF0EFE7F0E006C02FEF06 |
:10C98000E138F20714F4E1E8FFEF7894E0935009FE |
:10C99000809193028093510980919402809352096F |
:10C9A0008091950280935309809196028093540957 |
:10C9B000809197028093550980919802809356093F |
:10C9C000809199028093570980919A02B3C0809117 |
:10C9D000EE03853018F01092EE0385E080934D0948 |
:10C9E0008091BE0680934E0980918C0290918D02B9 |
:10C9F000A0918E02B0918F02BC01CD0125E030E004 |
:10CA000040E050E00E94777A3093500920934F091C |
:10CA10008091880290918902A0918A02B0918B0244 |
:10CA2000BC01CD0125E030E040E050E00E94777A83 |
:10CA300030935209209351098091B4068093530991 |
:10CA40008091B506809354098091B606809355096C |
:10CA500080919202809356098091780380935709C0 |
:10CA60008091C7059091C80597FD03969595879588 |
:10CA7000959587955FC082E080934D0986E080930D |
:10CA80004E0985E080934F0985E480935009809199 |
:10CA90000301809351098091D303809352099091AF |
:10CAA000D403909353098F778093D303907190931D |
:10CAB000D4038091D1068093540980910B0980930F |
:10CAC00055098091EF08809356098091C1068093A3 |
:10CAD00057098091D9062EC08091A6099091A70987 |
:10CAE00090934E0980934D0980916E0180934F0978 |
:10CAF00080916D01809350098091F10580935109D7 |
:10CB00008091B201809352098091BF0680935309AE |
:10CB10008091CF08809354098091B7019091B8011A |
:10CB200090935609809355098091950680935709F3 |
:10CB30008091D6038093580980915C09882309F479 |
:10CB400050C160915D098091A201681719F08AEFC8 |
:10CB50008093A0016093A20181E080938E014091B7 |
:10CB60005E0950915F09CA0181509E4F8F5F9340CB |
:10CB7000B0F42091600930916109C90181509E4F44 |
:10CB80008F5F934060F480916B0685FF08C05093DF |
:10CB900065034093640330936303209362038091A1 |
:10CBA00064099091650921E08936920724F49093F5 |
:10CBB000900180938F0120916E0930916F098091CF |
:10CBC000EA019091EB018217930740F48091BD0137 |
:10CBD000882321F43093EB012093EA01862F9927D3 |
:10CBE0008836910509F453C08936910524F48736B7 |
:10CBF000910551F0FEC08936910509F47DC08B3650 |
:10CC0000910509F4C9C0F5C08091700980939D0910 |
:10CC10008091710980939F098091720980939E0988 |
:10CC20008091730980938D01809174098093A1098B |
:10CC3000809175098093A101809176098093740396 |
:10CC4000809177098093610380916602882351F077 |
:10CC5000809178099091790997FD04C09093AB0277 |
:10CC60008093AA0220916C0330916D0380917A0920 |
:10CC700090917B09280F391F37FF02C02F5F3F4F6C |
:10CC80003595279530936D0320936C03B2C0809146 |
:10CC900070098093320980917109809333098091E2 |
:10CCA00072098093340980917309809335098091CA |
:10CCB0007409809336098091B70590917509892B85 |
:10CCC0008093B7059091B8059370809176098C7028 |
:10CCD000982B9093B8058091770980937203809187 |
:10CCE000780980939201809179098093A0098091BD |
:10CCF0007A0980936E037DC0809170098093280922 |
:10CD000080917109809329098091720980932A0981 |
:10CD10008091730980932B09809174099091750912 |
:10CD200090932D0980932C09809176099091770931 |
:10CD300090932F0980932E0980917809992787FD78 |
:10CD40009095909369088093680880917909809301 |
:10CD5000810280917A0990917B099C01442737FDDB |
:10CD60004095542FDA01C90163E0880F991FAA1F6B |
:10CD7000BB1F6A95D1F7820F931FA41FB51F820FA7 |
:10CD8000931FA41FB51F8093820290938302A093E8 |
:10CD90008402B09385022DC0809170098093710345 |
:10CDA00080917109809370038091720980936F0361 |
:10CDB0008091740980939F038091750980939E03ED |
:10CDC0008091780980939D038091790980939B03DA |
:10CDD00080917A0990917B099093150980931409A9 |
:10CDE00008C01092650310926403109263031092BE |
:10CDF00062031F910F91FF90EF9008958091270992 |
:10CE0000882319F480E090E00895459888E399E03C |
:10CE1000909331098093300990917303E92FFF2794 |
:10CE2000ED56FE4F9F5F90937303808180933A0984 |
:10CE30009D3010F010927303109227090E9499629E |
:10CE400081E08093370980913809809359098EBD1C |
:10CE500081E090E0089587B18C6087B9429843984B |
:10CE600010927A0380E88093A40110927903809352 |
:10CE7000A3010895809168089091690881589F4F97 |
:10CE800039F08091680890916908815880938403F3 |
:10CE900080917F03815080937F038F3F09F052C1BF |
:10CEA0008091A806809380038091AA0680938103D5 |
:10CEB00089E080937F038091590299278073907055 |
:10CEC000892B21F48091D40380FF1DC08091AC0692 |
:10CED000882351F080918203882319F484E08093A1 |
:10CEE0007A0381E0809382038091AD06882379F0F4 |
:10CEF00080918303882319F484E08093790381E08F |
:10CF00008093830304C01092820310928303809164 |
:10CF10008203882309F082C08091D606282F332708 |
:10CF200024FF07C080919102882319F425FD8FC04A |
:10CF300090C09091A906983F48F08091EA088D3DF5 |
:10CF400028F08091800388236CF00AC0983F78F025 |
:10CF50008091EA08853059F48091800387FF02C0F0 |
:10CF6000429A01C0429881E08093A40154C080910C |
:10CF70007A03815080937A038F3F09F06BC08091D0 |
:10CF8000D90685FF2FC090918403892F86958093C1 |
:10CF90007A03992361F4909378038091800387FF4B |
:10CFA00002C0429A01C042981092A40153C081E08D |
:10CFB000809378038091A40190918003882349F4A1 |
:10CFC0008093840380E48093A40199230CF43FC0F0 |
:10CFD00040C0982311F0429A01C0429886958093F0 |
:10CFE000A40138C08091EA08869580937A038091E5 |
:10CFF000A401813021F41092840380E401C086955D |
:10D000008093A4018091A40190918003892311F061 |
:10D01000429A01C04298109278031CC080917A0312 |
:10D02000815080937A038F3FA9F489E080937A033B |
:10D030008091A401813011F480E801C0869580932D |
:10D04000A4018091A4019091AC06892311F0429A29 |
:10D0500001C0429880918303882309F043C09091D6 |
:10D06000D60697FF07C080919102882319F496FD98 |
:10D0700052C053C09091AB06983F48F0809112097E |
:10D080008D3D28F08091810388236CF00AC0983F81 |
:10D0900078F080911209853059F48091810387FFDF |
:10D0A00002C0439A01C0439881E08093A30136C037 |
:10D0B000809179038150809379038F3F79F5809136 |
:10D0C00012098695809379038091A301813011F430 |
:10D0D00080E401C086958093A3018091A301909183 |
:10D0E000810317C0809179038150809379038F3F2A |
:10D0F000A9F489E0809379038091A301813011F430 |
:10D1000080E801C086958093A3018091A30190914E |
:10D11000AD06892311F0439A01C04398429B05C094 |
:10D1200080915802886080935802439B06C080918A |
:10D1300058028061809358020895809158028F7E32 |
:10D140008093580208954FB724E130E0F89480911D |
:10D15000C9008F778093C9008091C9008F7B80932D |
:10D16000C9008091C9008F7D8093C900832F9927C2 |
:10D170008093CD002093CC008091C8008260809382 |
:10D18000C80080E18093C9008091CA008F778093A6 |
:10D19000CA008091CA008F7B8093CA008091CA0028 |
:10D1A0008F7D8093CA008091CA008F7E8093CA00D1 |
:10D1B0008091CA00877F8093CA008091C9008B7FCD |
:10D1C0008093C9008091CA0084608093CA008091D6 |
:10D1D000CA0082608093CA008091C80087FF03C0A4 |
:10D1E0008091CE00F9CF8091C90080688093C900FA |
:10D1F0004FBF0895EF92FF920F931F93CF93DF934A |
:10D20000482F00E010E08091A501813061F4109278 |
:10D21000A50184E48093850310928703109286030E |
:10D220001092880339C180918503882319F421E085 |
:10D2300030E001C0980190918603992371F4232B6B |
:10D2400011F081E010C084E48093850390938703FC |
:10D25000909386039093880308C1913069F4232B3F |
:10D2600009F0F9C082E080938603809187038F5F85 |
:10D270008093870383E0F7C09230D1F4232B09F029 |
:10D28000EAC083E0809385034093880390918703ED |
:10D29000923039F41092890347FF03C081E08093F4 |
:10D2A000890383E0809386039F5F90938703DDC0AB |
:10D2B000933009F0D0C0232B09F0CDC090938503A3 |
:10D2C00082E080938603809187038F5F809387033A |
:10D2D00020918803822F9927782F6627842F9927FA |
:10D2E000682B792B80918506813049F47370CB01CE |
:10D2F0008050924063E070E00E94427A17C0823012 |
:10D3000061F47770CB018050944066E070E00E9439 |
:10D31000427A2695269526950BC073706856714003 |
:10D32000CB0177FD0196BC017595679526952695ED |
:10D33000022F11270F7010700F5F1F4F0D30110556 |
:10D3400008F082C07801E00EF11EF701E25DF74FB0 |
:10D35000808191819B01281B390BC90137FF03C0D4 |
:10D36000909581959F4F069704F5E091C806EE23AE |
:10D3700051F0FF27EE0FFF1FE25DF74F8081918193 |
:10D380008436910594F480919202883C30F4809127 |
:10D390009202865F8093920208C088EC809392028A |
:10D3A00080916F008F7D80936F00F701E25DF74FF2 |
:10D3B000808191819C01220F331F280F391F260F76 |
:10D3C000371F37FF02C02D5F3F4FE901D595C79545 |
:10D3D000D595C795CB0101968C179D0714F421971D |
:10D3E00006C061507040C617D7070CF42196809193 |
:10D3F0009202843BD0F0F701E25DF74F808191818A |
:10D40000FE01E81BF90BCF0163E070E00E94427A55 |
:10D41000CB01880F991F860F971F24E738E0E20E93 |
:10D42000F31EF7019183808307C024E738E0E20E02 |
:10D43000F31EF70111821082000F111F025D174FBA |
:10D44000F801D183C08311C00231110570F081E071 |
:10D450008093A5010AC081E08093A5011092870303 |
:10D460001092890384E4809385038091870380313F |
:10D4700098F080918903882331F48091A501882355 |
:10D4800011F480933F011092870310928903109248 |
:10D49000860384E480938503E6E0CDB7DEB70C9481 |
:10D4A000BA7ACF93FC0197FF05C0CFEFF095E195D5 |
:10D4B000FF4F01C0C1E028E631E0CF01B9010E9471 |
:10D4C000427AFC018B35910554F08B5590408A359A |
:10D4D000910538F484EB90E08E1B9F0BFC0141E03A |
:10D4E0000DC0CF01855B90408A35910518F4E45B4F |
:10D4F000F04003C02E1B3F0BF9014FEFEE0FFF1F53 |
:10D50000E658F84F259134918C2F992787FD9095F7 |
:10D51000289FB001299F700D389F700D1124842F12 |
:10D52000992787FD9095689FA001699F500D789F6E |
:10D53000500D1124CA01CF9108952AE530E0281B2F |
:10D54000390BC9010E94516A0895CF93DF9380E09F |
:10D550000E94157180912301909124016AE070E08E |
:10D560000E94427A9F938F9380912301909124018E |
:10D570006AE070E00E94427A7F936F9386E698E0BB |
:10D580009F938F93C8E0D1E7DF93CF93E091BA03E5 |
:10D59000F091BB0309952DB73EB7285F3F4F2DBFD4 |
:10D5A0008091A001882361F186E00E94157180912D |
:10D5B000920199279F938F9380912C0990912D0927 |
:10D5C0006AE070E00E942E7A7F936F938FED90E077 |
:10D5D0009F938F9380911409909115099F938F9336 |
:10D5E0008FE698E09F938F93DF93CF93E091BA03F8 |
:10D5F000F091BB0309958DB79EB70C968DBF12C0F5 |
:10D6000086E00E9415718DE798E09F938F93DF93DA |
:10D61000CF93E091BA03F091BB0309950F900F905F |
:10D620000F900F90809172038823F9F086E00E949A |
:10D6300015718091720399279F938F9384E898E0E6 |
:10D640009F938F93DF93CF93E091BA03F091BB0345 |
:10D6500009952DB73EB72A5F3F4F2DBF80919102AC |
:10D66000882319F083E58093B30180E10E9415714E |
:10D670008091B5019091B6016CE370E00E942E7A22 |
:10D680009F938F938091B5019091B6016CE370E008 |
:10D690000E942E7A7F936F938091A6099091A7099B |
:10D6A0009F938F9380E998E09F938F93C8E0D1E791 |
:10D6B000DF93CF93E091BA03F091BB03099580917A |
:10D6C0000B092DB73EB7265F3F4F2DBF80FF29C006 |
:10D6D0008AE10E9415718091400199279F938F9351 |
:10D6E00080918C0290918D02A0918E02B0918F0258 |
:10D6F000BC01CD0124E630E040E050E00E94777AA2 |
:10D700003F932F938DE998E09F938F93DF93CF936F |
:10D71000E091BA03F091BB0309958DB79EB70896C7 |
:10D720008DBF8091B201882391F08AE10E9415712A |
:10D7300084EA98E09F938F93DF93CF93E091BA03AD |
:10D74000F091BB0309950F900F900F900F90DF9110 |
:10D75000CF910895CF93DF9380E00E94157180915F |
:10D76000AD0799279F938F9380919E0799279F9349 |
:10D770008F9380918F0799279F938F938091800734 |
:10D7800099279F938F9386EA98E09F938F93C8E0A1 |
:10D79000D1E7DF93CF93E091BA03F091BB030995F2 |
:10D7A00080E10E9415712DB73EB7245F3F4F2DBF1A |
:10D7B0008091E90799279F938F938091DA079927A2 |
:10D7C0009F938F938091CB0799279F938F938091FD |
:10D7D000BC0799279F938F9386EB98E09F938F9335 |
:10D7E000DF93CF93E091BA03F091BB030995809149 |
:10D7F0005D062DB73EB7245F3F4F2DBF853098F4AF |
:10D8000080E10E94157186EC98E09F938F93DF93DF |
:10D81000CF93E091BA03F091BB0309950F900F905D |
:10D820000F900F9018C08730B0F488E10E941571F6 |
:10D830008FED90E09F938F9387ED98E09F938F9368 |
:10D84000DF93CF93E091BA03F091BB0309958DB7B5 |
:10D850009EB706968DBFDF91CF9108950F931F93CA |
:10D8600080E00E9415712AE030E08091A209909139 |
:10D87000A309B9010E942E7A9F938F938091A209E8 |
:10D880009091A309B9010E942E7A7F936F938091A2 |
:10D89000230190912401B9010E94427A9F938F93B2 |
:10D8A0008091230190912401B9010E94427A7F93D3 |
:10D8B0006F9380EE98E09F938F9308E011E71F939A |
:10D8C0000F93E091BA03F091BB03099580E10E94A8 |
:10D8D00015718DB79EB70C968DBF8091A60990915A |
:10D8E000A7099F938F938091A4099091A5099F9375 |
:10D8F0008F9382EF98E09F938F931F930F93E09104 |
:10D90000BA03F091BB0309958DB79EB708968DBFFA |
:10D910001F910F910895EF92FF920F931F9380E054 |
:10D920000E9415718FEDE82EF12CFF92EF928091FD |
:10D930008F01909190019F938F938091710399270C |
:10D940009F938F938EEF98E09F938F9308E011E75A |
:10D950001F930F93E091BA03F091BB03099580E107 |
:10D960000E9415718DB79EB70A968DBF80916F0387 |
:10D9700099279F938F93FF92EF928091700399273D |
:10D980009F938F9381E199E09F938F931F930F93C0 |
:10D99000E091BA03F091BB0309958DB79EB70A9643 |
:10D9A0008DBF1F910F91FF90EF9008950F931F93DC |
:10D9B00080E00E94157184E299E09F938F9308E0C4 |
:10D9C00011E71F930F93E091BA03F091BB03099500 |
:10D9D00080E10E9415710F900F900F900F9083E3DC |
:10D9E00099E09F938F931F930F93E091BA03F09167 |
:10D9F000BB0309950F900F900F900F901F910F91FF |
:10DA000008950F931F9380E00E94157181E499E0BF |
:10DA10009F938F9308E011E71F930F93E091BA0350 |
:10DA2000F091BB03099580E10E9415710F900F9052 |
:10DA30000F900F9080E599E09F938F931F930F9322 |
:10DA4000E091BA03F091BB0309950F900F900F90EE |
:10DA50000F901F910F9108951F93CF93DF93182F6D |
:10DA60008091A909C8E0D1E7882391F40E9415713B |
:10DA70008EE599E09F938F93DF93CF93E091BA0364 |
:10DA8000F091BB0309950F900F900F900F9016C067 |
:10DA900080E00E94157189EA99E09F938F938CE64C |
:10DAA00099E09F938F93DF93CF93E091BA03F09126 |
:10DAB000BB0309958DB79EB706968DBF80919B03DA |
:10DAC000C8E0D1E7882399F480E10E94157183E7CB |
:10DAD00099E09F938F93DF93CF93E091BA03F091F6 |
:10DAE000BB0309950F900F900F900F9089C080E1B4 |
:10DAF0000E9415718091A60199279F938F938EE7BD |
:10DB000099E09F938F93DF93CF93E091BA03F091C5 |
:10DB1000BB0309958DB79EB706968DBF80919E0376 |
:10DB20008823E9F088E10E94157180919E0399276E |
:10DB30009F938F9380919F0399279F938F9387E85B |
:10DB400099E09F938F93DF93CF93E091BA03F09185 |
:10DB5000BB0309958DB79EB708968DBF12C088E1AB |
:10DB60000E9415718FE899E09F938F93DF93CF9375 |
:10DB7000E091BA03F091BB0309950F900F900F90BD |
:10DB80000F9080918A03882331F08EE10E941571F5 |
:10DB900085E999E005C08EE10E94157188E999E058 |
:10DBA0009F938F93DF93CF93E091BA03F091BB03E0 |
:10DBB00009950F900F900F900F901F3251F4909194 |
:10DBC000A60180919B039817D8F49F5F9093A601BC |
:10DBD00009C01F3459F48091A601823088F0815029 |
:10DBE0008093A60181E080938A030AC01F3141F42B |
:10DBF0008091A601882321F080939C0310928A03D0 |
:10DC0000DF91CF911F9108951F93CF93DF93182F2A |
:10DC10008091A909C8E0D1E7882391F40E94157189 |
:10DC20008BE999E09F938F93DF93CF93E091BA03B1 |
:10DC3000F091BB0309950F900F900F900F9016C0B5 |
:10DC400080E00E94157189EA99E09F938F9389EA99 |
:10DC500099E09F938F93DF93CF93E091BA03F09174 |
:10DC6000BB0309958DB79EB706968DBF80919B0328 |
:10DC7000882361F480E10E94157180EB99E09F9305 |
:10DC80008F9388E091E79F938F930FC080912A092B |
:10DC9000C8E0D1E7833099F080E10E9415718BEBE9 |
:10DCA00099E09F938F93DF93CF93E091BA03F09124 |
:10DCB000BB0309950F900F900F900F908AC080E1E1 |
:10DCC0000E9415718091A70199279F938F9386ECED |
:10DCD00099E09F938F93DF93CF93E091BA03F091F4 |
:10DCE000BB0309958DB79EB706968DBF80919E03A5 |
:10DCF0008823E9F088E10E94157180919E0399279D |
:10DD00009F938F9380919F0399279F938F9380ED8B |
:10DD100099E09F938F93DF93CF93E091BA03F091B3 |
:10DD2000BB0309958DB79EB708968DBF12C088E1D9 |
:10DD30000E94157188ED99E09F938F93DF93CF93A5 |
:10DD4000E091BA03F091BB0309950F900F900F90EB |
:10DD50000F9080918B03882331F08EE10E94157122 |
:10DD60008EED99E005C08EE10E94157181EE99E07B |
:10DD70009F938F93DF93CF93E091BA03F091BB030E |
:10DD800009950F900F900F900F901F3251F49091C2 |
:10DD9000A70180919B039817E0F49F5F9093A701E0 |
:10DDA00009C01F3459F48091A701823090F081504E |
:10DDB0008093A70181E080938B030BC01F3149F44E |
:10DDC0008091A701882329F0806880939C0310929A |
:10DDD0008B03DF91CF911F9108950F931F93CF93E2 |
:10DDE000DF938091A001C8E0D1E7882309F47DC0CA |
:10DDF00080E00E9415718091290999279F938F9344 |
:10DE000080912B0999279F938F9384EE99E09F939C |
:10DE10008F938E01DF93CF93E091BA03F091BB0310 |
:10DE200009958DB79EB708968DBF80912A098330DA |
:10DE300031F48CE00E94157183EF99E005C08CE00D |
:10DE40000E94157188EF99E09F938F93DF93CF9392 |
:10DE5000E091BA03F091BB0309950F900F900F90DA |
:10DE60000F908091280981FF12C08CE00E941571EB |
:10DE70008DEF99E09F938F931F930F93E091BA03D7 |
:10DE8000F091BB0309950F900F900F900F9080E1D8 |
:10DE90000E9415718091920199279F938F938FED26 |
:10DEA00090E09F938F9380912E0990912F099F93DB |
:10DEB0008F9380912C0990912D096AE070E00E9467 |
:10DEC0002E7A7F936F9382E09AE09F938F9388E0FE |
:10DED00091E79F938F93E091BA03F091BB0309956B |
:10DEE0008DB79EB70C968DBF12C082E00E9415714F |
:10DEF00085E19AE09F938F93DF93CF93E091BA03EC |
:10DF0000F091BB0309950F900F900F900F90DF9148 |
:10DF1000CF911F910F910895CF93C82F20918C031B |
:10DF200020938D0399278F329105E1F0803391057D |
:10DF30001CF44F9779F027C08F349105D9F08F38B2 |
:10DF4000910509F586E0289FF0011124E05DF74F67 |
:10DF5000849117C086E0289FF0011124EF5CF74FF1 |
:10DF600084910FC086E0289FF0011124EE5CF74FEA |
:10DF7000849107C086E0289FF0011124ED5CF74FE3 |
:10DF8000849180938C0390918C0380918D039813DE |
:10DF9000C0E08091A801282F33278F5F8093A801CC |
:10DFA00020FD02C0CF3089F0C0938E030E941B7108 |
:10DFB00090918C0386E0989FF0011124EC5CF74F60 |
:10DFC000259134918C2FF901099580E090E0CF9153 |
:10DFD00008951092A3091092A2091092A709109215 |
:10DFE000A6091092A5091092A4091092A80982E32B |
:10DFF00090E00E9468169093900380938F03089599 |
:10E000009927FC0124E0EE0FFF1F2A95E1F7E81B9A |
:10E01000F90BE758F84F95819F3F19F480E090E0A5 |
:10E020000895993C18F4892F99270895808182FFDB |
:10E0300007C08AE0989FC001112488509740089536 |
:10E04000892F99270895A0E0B0E0E9E2F0E70C9469 |
:10E050009B7A80918F03909190030E947116882380 |
:10E0600009F4CFC080918F0390919003C296909352 |
:10E07000900380938F03C0E0D0E07E01BB247FEF4C |
:10E08000C72E8091A8098E3F21F481E08093B201D0 |
:10E0900004C08F3F11F4B092B201DD2409E717E00C |
:10E0A000F801838187FF17C0B3948581893C30F0E4 |
:10E0B0008D2D0E940070C80FD91F02C0C80FD11D3E |
:10E0C000F8018181E80EF11C8681C81610F0C82E77 |
:10E0D00002C01092B201D394015F1F4FFBE0FD1507 |
:10E0E000F8F6C092A809EF2841F5209195033091E8 |
:10E0F00096034091970350919803BB27A52F942F27 |
:10E10000832F9093940380939303AA27BB27281B04 |
:10E11000390B4A0B5B0BCE01AA27BB27280F391FEF |
:10E120004A1F5B1F209395033093960340939703F8 |
:10E1300050939803C5E0D0E013C080919303909171 |
:10E1400094038C179D0718F4C81BD90B02C0C0E0BC |
:10E15000D0E08B2D9927880F991FC80FD91F2596BE |
:10E16000D093A309C093A209CF3FD10578F4809141 |
:10E170002301909124018C9F90018D9F300D9C9FD5 |
:10E18000300D1124C90164E670E013C0CE019695EC |
:10E190008795969587952091230130912401289F9A |
:10E1A000A001299F500D389F500D1124CA0169E12B |
:10E1B00070E00E942E7A7093A5096093A409809163 |
:10E1C0009103909192038C0F9D1F909392038093E3 |
:10E1D000910352E0813D9507A0F02091A60930916E |
:10E1E000A7092F5F3F4F805D9240E2E0813D9E078F |
:10E1F000C0F790939203809391033093A7092093E3 |
:10E20000A609E9E0CDB7DEB70C94B77A0895089572 |
:10E210009091A303933240F4E92FFF27ED54F64F7A |
:10E2200080839F5F9093A3030895833218F48D5FDA |
:10E230008093A303089590E2E6EBF9E08FE19193D8 |
:10E24000815087FFFCCF0895CF93CFB723E031E013 |
:10E25000F8948091C9008F778093C9008091C9009C |
:10E260008F7B8093C9008091C9008F7D8093C90006 |
:10E27000832F99278093CD002093CC008091C800F4 |
:10E2800082608093C80088E18093C9008091CA00B1 |
:10E290008F778093CA008091CA008F7B8093CA00D9 |
:10E2A0008091CA0080628093CA008091CA00806118 |
:10E2B0008093CA008091CA0088608093CA008091D0 |
:10E2C000C90084608093C9008091CA0084608093F3 |
:10E2D000CA008091CA0082608093CA008091C80001 |
:10E2E00087FF03C08091CE00F9CF8091C90080687C |
:10E2F0008093C9008091C90080648093C9000E9406 |
:10E300001B71CFBFCF910895282F99278F709070E0 |
:10E31000892B31F420958091A203822B8093A20354 |
:10E3200008958091AF01882309F44BC08091590270 |
:10E3300085FD04C08091B301882381F082E9809338 |
:10E34000B30983E28093B4098091B301882309F46F |
:10E3500085E58093B5091092B30102C08093B3099B |
:10E360008091B0018F3071F48091A2030E948C6F74 |
:10E37000882341F081E98093B3098093B40981E354 |
:10E380008093B5091092AF018091C80085FFFCCF42 |
:10E390008091C9008F7E8093C9008091C9008E7FD3 |
:10E3A0008093C9008091B309882311F48EEF01C0D6 |
:10E3B0008EE78093CE008091A2038093B0011092EB |
:10E3C000A20308951F920F920FB60F9211248F93FC |
:10E3D0009F93EF93FF939091AF01992309F040C071 |
:10E3E0008091A403882361F48091B309882311F4F8 |
:10E3F00083E003C0813999F481E08093A4030FC0C6 |
:10E40000833099F48091B309882349F09093B3093C |
:10E410008091C9008E7F8093C9008EEF1EC08091CD |
:10E42000C90081608093C9000EC0833261F480917D |
:10E43000C9008E7F8093C9008FEF8093CE0081E06A |
:10E440008093AF0118C08091A403E82FFF27ED54FB |
:10E45000F64F8F5F8093A40380818093CE000BC022 |
:10E460001092A4031092A5031092A6038091C900F4 |
:10E4700080618093C900FF91EF919F918F910F90E0 |
:10E480000FBE0F901F901895EF92FF920F931F935E |
:10E49000CF93DF937C018B01EA01452B39F0F80122 |
:10E4A00081918F01F70109952197C9F7E6E0CDB772 |
:10E4B000DEB70C94BA7AEF92FF920F931F93CF932B |
:10E4C000DF937C018B01EA01452B41F0F8010F5FDE |
:10E4D0001F4F8491F70109952197C1F7E6E0CDB769 |
:10E4E000DEB70C94BA7A0F931F93CF938C01C62F8B |
:10E4F000161634F480E2F8010995C1501C16D4F3C5 |
:10E50000CF911F910F9108950F931F93CF938C017B |
:10E51000C62F161634F480E3F8010995C1501C1675 |
:10E52000D4F3CF911F910F910895A5E3B0E0EBE9EB |
:10E53000F2E70C94927A2E96EEADFFAD2E978824DA |
:10E54000992454018091A103882321F42C961FAEB5 |
:10E550001EAE2C97AEE44A2E512C4C0E5D1E6F0160 |
:10E56000B60105C0153239F00894C11CD11CF60162 |
:10E5700014911123B9F7A601461B570B31F02C96C5 |
:10E580008EAD9FAD2C970E945B72112309F46AC275 |
:10E590000894C11CD11CFF24FDA6FCA67FEFE72E2A |
:10E5A000F9A6F6010894C11CD11C1491153721F06D |
:10E5B000812F80628837B1F4F0FE0AC0F20124E0B6 |
:10E5C00030E0420E531E80809180A280B3800AC04A |
:10E5D000F20142E050E0440E551E808191814C01D1 |
:10E5E000AA24BB24103221F489A58823D1F61DC0AA |
:10E5F000133219F458E0F52AD4CF1A3211F01D3233 |
:10E6000091F41A3259F4F20182E090E0480E591E5A |
:10E61000E081ECA7EE232CF6E195ECA790E1F92A36 |
:10E62000AFEDFA22BECF1B3211F419A7BACF1E32BA |
:10E63000C1F5F6010894C11CD11C14911A3279F469 |
:10E64000F20122E030E0420E531E408151813FEF43 |
:10E650004F3F530714F44FEF5FEFE42EA2CF40E09B |
:10E6600050E0812F80538A30A0F4CA0163E0880F04 |
:10E67000991F6A95E1F7840F951F480F591F410FA5 |
:10E68000511D40535040F6010894C11CD11C1491F7 |
:10E69000E8CF8FEF4F3F580714F44FEF5FEFE42EB2 |
:10E6A00085CF103329F4F4FC7CCF90E2F92A79CF9E |
:10E6B000812F81538930D8F440E050E0CA0133E023 |
:10E6C000880F991F3A95E1F7840F951F480F591F3E |
:10E6D000410F511D40535040F6010894C11CD11CFC |
:10E6E0001491812F80538A3048F34CA75FCF18369E |
:10E6F00019F4A4E0FA2A55CF1C3619F4B1E0FB2A2C |
:10E7000050CF133661F43E010894611C711CF20174 |
:10E7100022E030E0420E531E808189833CC11434D4 |
:10E7200021F0143611F0193651F5143411F431E09A |
:10E73000F32AF0FE0AC0F20144E050E0440E551EF8 |
:10E7400080809180A280B3800CC0F20182E090E0D2 |
:10E75000480E591E808191814C01AA2497FCA094F7 |
:10E76000BA2CB7FE0AC0B094A09490948094811CF7 |
:10E77000911CA11CB11C8DE289A70AE06FC01F3457 |
:10E7800011F01F3631F41F3411F491E0F92A08E03A |
:10E7900064C0103779F4F201A2E0B0E04A0E5B1ECB |
:10E7A000808191814C01AA24BB2400E1B0E4FB2AC2 |
:10E7B00018E753C01337C1F5F20122E030E0420EF2 |
:10E7C000531E608071806114710489F43E010894C5 |
:10E7D000611C711C88E289838EE6F301818385E7E1 |
:10E7E0008B838CE68C838D8389E28E831F82E7FC8A |
:10E7F00013C08E2D992787FD9095AC0160E070E0E5 |
:10E80000C3010E945F78009729F0382E3618E31470 |
:10E810000CF0C3C03E2CC1C0F30101900020E9F709 |
:10E8200031973E2E3618B9C0153511F0153731F431 |
:10E83000153511F4F1E0FF2A0AE00FC0183519F080 |
:10E84000183709F0A0C000E1F3FE07C0811491045D |
:10E85000A104B10411F020E4F22A19A6EDA6E7FC08 |
:10E8600002C03FEDF32229E2622E712C6C0E7D1E58 |
:10E8700081149104A104B10421F44DA5442309F4A9 |
:10E880007BC0802F9927AA27BB278EA79FA7A8AB5D |
:10E89000B9AB202E332490E0891690E0990691E0E0 |
:10E8A000A90690E0B90648F0C501B4012EA53FA520 |
:10E8B00048A959A90E94557A17C0AFEF8A1691044A |
:10E8C000A104B10449F040F0C401B1010E942E7AC4 |
:10E8D0009B014427552708C0882D602F0E94227A6B |
:10E8E000282F3327442755272AAB3BAB4CAB5DABD6 |
:10E8F0000A3059F48AA9880F880F880F9AA9990FAE |
:10E90000890F382D381B832F10C0003139F48AA9A4 |
:10E910008295807F482D481B842F07C08AA9880FC5 |
:10E92000880F880F582D581B852F90E02EA53FA5E6 |
:10E9300048A959A982169306A406B50608F091E0E5 |
:10E940008AA89BA8ACA8BDA88A3010F4805D04C03A |
:10E95000895A183509F48F7DD3018E933D0199238F |
:10E9600009F099CF083041F4F3FE06C0803321F05E |
:10E9700080E3FD0182933F01CE010196382E3618C7 |
:10E98000F8E23F0E0BC0112309F46CC03E0108945D |
:10E99000611C711C198391E0392E19A6032D2DA439 |
:10E9A000231827FC222489A5882311F00F5F02C0B9 |
:10E9B000F6FC0E5F020DEF2CFF24C70180739070F0 |
:10E9C000892B49F48CA5801B682F2C968EAD9FADAA |
:10E9D0002C970E94737289A5882331F041E050E0A2 |
:10E9E000BE01675D7F4F0AC0E6FE0EC080E38AA7C6 |
:10E9F0001BA742E050E0BE01665D7F4F2C968EADB6 |
:10EA00009FAD2C970E944472C701807390708097CD |
:10EA100049F48CA5801B682F2C968EAD9FAD2C974A |
:10EA20000E948472622D2C968EAD9FAD2C970E9411 |
:10EA30008472832D992787FD9095AC01B3012C96A4 |
:10EA40008EAD9FAD2C970E944472E4FE89CD2CA51B |
:10EA5000201B2CA7622F2C968EAD9FAD2C970E9469 |
:10EA600073727ECDE2E1CB5C0C94AE7A2FB740E0BE |
:10EA7000F894E0E0F0E081E2809357009491E2E0C6 |
:10EA8000F0E0809357003491E4E0F0E08093570089 |
:10EA900084912FBF9E3199F4363941F4893011F4B5 |
:10EAA00041E00DC08A3059F442E009C0373939F4E9 |
:10EAB000863011F443E003C0853009F444E0842F2C |
:10EAC000992708959FB7F8948091C900877F809314 |
:10EAD000C9008091C9008F7E8093C9008091C900D0 |
:10EAE0008F778093C9008091C9008F7B8093C90084 |
:10EAF0008091C9008F7D8093C9009FBF08951F93A7 |
:10EB0000CF93DF93182F8091A103882309F4A0C02D |
:10EB10008091AE01181709F49BC08091A00388234F |
:10EB200021F40E9436758093A00382ED91E09093CA |
:10EB30003E0180933D0181EC9AE09F938F93C1E960 |
:10EB4000D2E1DF93CF93E091BA03F091BB03099533 |
:10EB50000F900F900F900F90812F9927843091057F |
:10EB6000F1F0853091051CF4892B51F00CC08630F2 |
:10EB70009105D9F086309105ACF0089741F12AC093 |
:10EB80008DEB9AE002C084EB9AE09F938F93DF9322 |
:10EB9000CF93E091BA03F091BB03099527C08FEAA8 |
:10EBA0009AE0F3CF87EA9AE0F0CF8FE99AE09F935B |
:10EBB0008F93DF93CF93E091BA03F091BB03099554 |
:10EBC00088ED91E090933E0180933D010FC08AE96A |
:10EBD0009AE0DBCF8EEC9AE09F938F93DF93CF93F5 |
:10EBE000E091BA03F091BB03099510E00F900F90EC |
:10EBF0000F900F908091A003843011F0823099F42F |
:10EC00000E946275812F8150833018F40E94A3689E |
:10EC10001DC0143019F40E94247118C01830B1F4CA |
:10EC20000E94067113C0112389F084EE9AE09F932D |
:10EC30008F9381E992E19F938F93E091BA03F091D2 |
:10EC4000BB0309950F900F900F900F901093AE019A |
:10EC5000DF91CF911F9108950F931F93082F81E0AB |
:10EC60008093A1034091AD01EAE4FAE020E030E0B6 |
:10EC70005FE4849199272F5F3F4F829FB001839F6C |
:10EC8000700D929F700D112446275150319657FFF9 |
:10EC9000F0CF4093AD01E2E2FAE020E030E057E24D |
:10ECA000849199272F5F3F4F829FB001839F700D02 |
:10ECB000929F700D112446275150319657FFF0CF87 |
:10ECC0004093AD018091A003882321F40E94367502 |
:10ECD0008093A00385E992E79093BB038093BA03E6 |
:10ECE0008091AD01833459F088E190E029E20FB6BC |
:10ECF000F894A895809360000FBE209360000630C2 |
:10ED000091F08FEF9AE09F938F9381E992E19F9327 |
:10ED10008F93E091BA03F091BB0309950F900F9088 |
:10ED20000F900F90EECF0E94F10586E690E09F9342 |
:10ED30008F9386E090E09F938F9382E090E09F9383 |
:10ED40008F93809103016AE00E94227A892F99278C |
:10ED50009F938F93809103010E94227A99279F931A |
:10ED60008F938CE19BE09F938F9301E912E11F93B6 |
:10ED70000F93E091BA03F091BB0309958AE49AE0FE |
:10ED80009F938F931F930F93E091BA03F091BB036E |
:10ED9000099582E29AE09F938F931F930F93E091DE |
:10EDA000BA03F091BB0309950E94F10583EC8093AF |
:10EDB000810080916F00806280936F008DB79EB755 |
:10EDC00046968DBF1F910F9108958091C6068D3391 |
:10EDD00038F08091280987FD03C08CE38093C60634 |
:10EDE00080917406882331F08055853618F08FE7BE |
:10EDF0008093740608958091A103882309F482C04A |
:10EE00008091B70381508093B703882309F069C0CC |
:10EE100089E18093B7038091C6068E3338F08091E4 |
:10EE2000280987FD03C08DE38093C6068091920276 |
:10EE30008238A0F580915A0290915B02805D9740E4 |
:10EE400020F08091A809843620F41092B903109222 |
:10EE5000B8032091B8033091B90321153105B1F100 |
:10EE6000C90101979093B9038093B803419798F132 |
:10EE70008091280984FF2FC080915802846080937C |
:10EE800058028091360987FF26C080919F0388230E |
:10EE900011F13093B9032093B8031DC08091920201 |
:10EEA000853BC8F09091C60684E1989FC00111246B |
:10EEB00040962091B8033091B9032817390730F4F0 |
:10EEC0002F5F3F4F3093B9032093B80380915802CE |
:10EED0008B7F809358028091AD01833411F01092A2 |
:10EEE000A1038091B101882321F081508093B10169 |
:10EEF00008958BE48093B1018091AE01843011F4C8 |
:10EF00000E94917108951F920F920FB60F921124D3 |
:10EF10002F933F934F935F936F937F938F939F9321 |
:10EF2000AF93BF93EF93FF932091CE008091BF01E9 |
:10EF30008823B1F02093C6008091BF01823029F56B |
:10EF40002F3F19F58FEF94E3ACE0B0E0C297A10931 |
:10EF5000B109B7FFFBCF8091FD038093CE0015C0B0 |
:10EF60009091AE01892F8150833020F4822F0E942E |
:10EF7000FA680BC0943021F4822F0E94847105C07E |
:10EF8000983019F4822F0E940771FF91EF91BF9181 |
:10EF9000AF919F918F917F916F915F914F913F9131 |
:10EFA0002F910F900FBE0F901F90189500242227CD |
:10EFB0003327442751E0BB27EE27FF27A0E1660F48 |
:10EFC000771F881F991F001C221F331F441F660FC5 |
:10EFD000771F881F991F001C221F331F441F2AF40C |
:10EFE000050E2B1F3E1F4F1F04C0051A2B0B3E0B97 |
:10EFF0004F0B550FBB1FEE1F587F556047FD5250FA |
:10F00000AA95E9F6E695B7955795E695B79557957C |
:10F01000852F9B2F08952227332741E0552768E04D |
:10F02000880F991F221F331F880F991F221F331F1C |
:10F030001AF4240F351F02C0241B350B440F551F33 |
:10F04000487F456037FD42506A9551F75695479580 |
:10F0500056954795842F0895AA2797FF04C0809559 |
:10F0600090958A1F9A1F77FF04C0609570956A1F5C |
:10F070007A1F669F9001779FA001679F300D411D09 |
:10F080005A1F300D411D5A1F889FF001999F2E0F66 |
:10F090003F1F401D511D899F300D411D5A1F300DCE |
:10F0A000411D5A1FCA01B901112480CFFB01DC01A7 |
:10F0B00002C005900D9241505040D8F70895FC01D0 |
:10F0C0004150504030F001900616D1F73197CF01F2 |
:10F0D0000895882799270895A0E0B0E0E2E7F8E7CF |
:10F0E0000C949A7A6C017B01EA01590121978FEF08 |
:10F0F000CF3FD80789F086010894C11CD11CC701F5 |
:10F100000894E11CF11CF5010995F8018083219711 |
:10F11000FFEFCF3FDF0779F7EAE0CDB7DEB70C941A |
:10F12000B67ACF92DF92EF92FF920F931F937C01FA |
:10F130006B01FB010995082FC7010196F60109959E |
:10F14000182FC8011F910F91FF90EF90DF90CF9083 |
:10F150000895A0E0B0E0EFEAF8E70C949C7A8C0107 |
:10F160007B01EA01690121978FEFCF3FD80771F04A |
:10F17000F70121917F01C8010F5F1F4F622FF60138 |
:10F1800009952197FFEFCF3FDF0791F7E8E0CDB773 |
:10F19000DEB70C94B87ACF92DF92EF92FF920F9382 |
:10F1A0001F936C018B017A01FA010995812F992730 |
:10F1B000682FC6010196F70109951F910F91FF90E5 |
:10F1C000EF90DF90CF9008955058BB27AA270ED01C |
:10F1D000E0C0D1D030F0D6D020F031F49F3F11F410 |
:10F1E0001EF4C6C00EF4E095E7FBBCC0E92FE2D0E8 |
:10F1F00080F3BA17620773078407950718F071F454 |
:10F200009EF5FAC00EF4E0950B2EBA2FA02D0B013F |
:10F21000B90190010C01CA01A0011124FF27591B5B |
:10F2200099F0593F50F4503E68F11A16F040A22F61 |
:10F23000232F342F4427585FF3CF469537952795D2 |
:10F24000A795F0405395C9F77EF41F16BA0B620BD1 |
:10F25000730B840BBAF09150A1F0FF0FBB1F661F18 |
:10F26000771F881FC2F70EC0BA0F621F731F841F5B |
:10F2700048F4879577956795B795F7959E3F08F081 |
:10F28000B3CF9395880F08F09927EE0F9795879540 |
:10F29000089598D088F09F5790F0B92F9927B751CB |
:10F2A000A0F0D1F0660F771F881F991F1AF0BA954A |
:10F2B000C9F712C0B13081F09FD0B1E008959CC071 |
:10F2C000672F782F8827B85F39F0B93FCCF3869540 |
:10F2D00077956795B395D9F73EF49095809570959D |
:10F2E00061957F4F8F4F9F4F0895E89409C097FB1A |
:10F2F0003EF490958095709561957F4F8F4F9F4F0D |
:10F300009923A9F0F92F96E9BB279395F695879550 |
:10F3100077956795B795F111F8CFFAF4BB0F11F413 |
:10F3200060FF1BC06F5F7F4F8F4F9F4F16C08823BA |
:10F3300011F096E911C0772321F09EE8872F762FF0 |
:10F3400005C0662371F096E8862F70E060E02AF031 |
:10F350009A95660F771F881FDAF7880F969587951D |
:10F3600097F9089597F99F6780E870E060E0089545 |
:10F370009FEF80EC089500240A94161617061806CD |
:10F380000906089500240A941216130614060506A9 |
:10F390000895092E0394000C11F4882352F0BB0F3A |
:10F3A00040F4BF2B11F460FF04C06F5F7F4F8F4F9D |
:10F3B0009F4F089557FD9058440F551F59F05F3FD8 |
:10F3C00071F04795880F97FB991F61F09F3F79F087 |
:10F3D00087950895121613061406551FF2CF469509 |
:10F3E000F1DF08C0161617061806991FF1CF86958B |
:10F3F0007105610508940895E894BB27662777276F |
:10F40000CB0197F90895629FD001739FF001829F0D |
:10F41000E00DF11D649FE00DF11D929FF00D839FA3 |
:10F42000F00D749FF00D659FF00D9927729FB00D40 |
:10F43000E11DF91F639FB00DE11DF91FBD01CF0153 |
:10F4400011240895991B79E004C0991F961708F0BC |
:10F45000961B881F7A95C9F780950895AA1BBB1B38 |
:10F4600051E107C0AA1FBB1FA617B70710F0A61BC4 |
:10F47000B70B881F991F5A95A9F780959095BC01E5 |
:10F48000CD01089597FB092E07260AD077FD04D0F9 |
:10F49000E5DF06D000201AF4709561957F4F08953E |
:10F4A000F6F7909581959F4F0895A1E21A2EAA1B19 |
:10F4B000BB1BFD010DC0AA1FBB1FEE1FFF1FA21724 |
:10F4C000B307E407F50720F0A21BB30BE40BF50B21 |
:10F4D000661F771F881F991F1A9469F760957095AA |
:10F4E000809590959B01AC01BD01CF01089597FBDC |
:10F4F000092E05260ED057FD04D0D7DF0AD0001CF8 |
:10F5000038F450954095309521953F4F4F4F5F4FC0 |
:10F510000895F6F790958095709561957F4F8F4F80 |
:10F520009F4F08952F923F924F925F926F927F92DA |
:10F530008F929F92AF92BF92CF92DF92EF92FF9203 |
:10F540000F931F93CF93DF93CDB7DEB7CA1BDB0BAF |
:10F550000FB6F894DEBF0FBECDBF09942A88398854 |
:10F5600048885F846E847D848C849B84AA84B9845B |
:10F57000C884DF80EE80FD800C811B81AA81B98167 |
:10F58000CE0FD11D0FB6F894DEBF0FBECDBFED017B |
:10F590000895EE0FFF1F0590F491E02D0994FFCF21 |
:10F5A00004035E0A010164FF010020FFFFC01FC0C9 |
:10F5B0001F0101F40101737373FF03007D0000C498 |
:10F5C00009C4099600134167696C6500517561644F |
:10F5D000726F0000000000000064000C09D20101FD |
:10F5E000200B050000ECFF000204060708080807CE |
:10F5F00006040200FEFCFAF9F8F8F8F9FAFCFE003D |
:10F600000204060708086440415A4655326464649F |
:10F610000A02969696960840403A1030380132FF1A |
:10F62000037F0090D0030090D0030032002064FFDD |
:10F63000FF64200B0A0D0B0E100B0A0C0F0B1110A0 |
:10F64000FA2068010101010101F7FFFCFF70FF01D1 |
:02F650000F6445 |
:00000001FF |
/tags/V2.06f/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.06f/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.06f/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.06f/Settings.h |
---|
--- V2.06f/Spektrum.c (nonexistent) |
+++ V2.06f/Spektrum.c (revision 2473) |
@@ -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.06f/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.06f/analog.c |
---|
0,0 → 1,393 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + 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; |
long HoehenWertF = 0; |
long HoehenWert_Mess = 0; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
long HoehenWertF_Mess = 0; |
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_Mess = (ACC_AltitudeFusion(0) + SA_FILTER/2)/SA_FILTER; // cm |
} |
else HoehenWertF_Mess = 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_Mess = 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_Mess = StartLuftdruck - Luftdruck; |
SummenHoehe -= SummenHoehe/SM_FILTER; |
SummenHoehe += HoehenWert_Mess; |
tmp = (HoehenWert_Mess - 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.06f/analog.h |
---|
0,0 → 1,60 |
#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; |
extern long HoehenWertF; |
extern long HoehenWert_Mess; |
extern long HoehenWertF_Mess; |
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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/fc.c |
---|
0,0 → 1,2292 |
/*####################################################################################### |
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(); |
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; |
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; |
//++++++++++++++++++++++++++++++++++++++++++++++++ |
HoehenWert = HoehenWert_Mess; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
HoehenWertF = HoehenWertF_Mess; |
#else |
HoehenWertF = HoehenWert; |
#endif |
//++++++++++++++++++++++++++++++++++++++++++++++++ |
// 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; |
HoehenWert = 0; |
HoehenWert_Mess = 0; |
GasIsZeroCnt = 600; |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
HoehenWertF_Mess = 0; |
#endif |
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 || (HeightDeviation < -300)) |
{ |
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(HoehenWertF, (HoehenWert-1024), (HoehenWert+1024)); // max. 10m Unterschied |
LIMIT_MIN_MAX(SollHoehe, (HoehenWertF-1024), (HoehenWertF+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 |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
ACC_AltitudeFusion(1); // init the ACC and Altitude fusion |
#endif |
SollHoehe = HoehenWertF - 2000; |
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 |
int min; |
if(GasIsZeroCnt > 400 || (FC_StatusFlags2 & FC_STATUS2_WAIT_FOR_TAKEOFF)) min = EE_Parameter.Gas_Min; else min = EE_Parameter.Hoehe_MinGas; |
LIMIT_MIN_MAX(FilterHCGas, min * 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.06f/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.06f/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.06f/flight.pnps |
---|
0,0 → 1,0 |
<pd><ViewState><e p="Flight-Ctrl" x="true"></e></ViewState></pd> |
/tags/V2.06f/gps.h |
---|
0,0 → 1,3 |
extern signed int GPS_Nick; |
extern signed int GPS_Roll; |
extern unsigned char GPS_Aid_StickMultiplikator; |
/tags/V2.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/main.c |
---|
0,0 → 1,537 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + 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 Firmware!"); |
} |
#ifndef REDUNDANT_FC_SLAVE |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + Check connected BL-Ctrls |
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// Check connected BL-Ctrls |
BLFlags |= BLFLAG_READ_VERSION; |
motor_read = 0; // read the first I2C-Data |
for(i=0; i < 500; i++) |
{ |
SendMotorData(); |
timer = SetDelay(5); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
} |
printf("\n\rFound BL-Ctrl: "); |
// timer = SetDelay(1000); |
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) |
{ |
unsigned char vers; |
printf("%d",(i+1)%10); |
FoundMotors++; |
vers = Motor[i].VersionMajor * 100 + Motor[i].VersionMinor; // creates 104 from 1.04 |
if(vers && VersionInfo.BL_Firmware > vers) VersionInfo.BL_Firmware = vers; |
// 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"); |
// printf(":V%03d\n\r",vers); |
} |
} |
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 |
} |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(VersionInfo.BL_Firmware != 255) |
{ |
printf("\n\rBL-Firmware %d.%02d",VersionInfo.BL_Firmware/100,VersionInfo.BL_Firmware%100); |
if(VersionInfo.BL_Firmware >= 100 && VersionInfo.BL_Firmware <= 102) printf("<-- warning old Version!"); |
} |
#endif |
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\n\r--> REDUNDANT SLAVE <---\n\r"); |
#endif |
#ifdef REDUNDANT_FC_MASTER |
printf("\n\r\n\r--> REDUNDANT MASTER <---\n\r"); |
#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; |
ReadBlSize = 3; // don't read the version any more |
#ifdef REDUNDANT_FC_SLAVE |
timer = SetDelay(2500); |
while(!CheckDelay(timer)); |
printf("\n\rStart\n\r"); |
#endif |
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.06f/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.06f/makefile |
---|
0,0 → 1,496 |
#-------------------------------------------------------------------- |
# MCU name |
MCU = atmega1284p |
#MCU = atmega644p |
F_CPU = 20000000 |
#------------------------------------------------------------------- |
VERSION_MAJOR = 2 |
VERSION_MINOR = 06 |
VERSION_PATCH = 4 |
VERSION_SERIAL_MAJOR = 11 # Serial Protocol to KopterTool -> do not change! |
VERSION_SERIAL_MINOR = 0 # Serial Protocol |
NC_SPI_COMPATIBLE = 69 # 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.06f/menu.c |
---|
0,0 → 1,285 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + 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 = 19; |
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; |
case 19: |
LCD_printfxy(0,0,"BL Versions" ); |
for(i=0;i<3;i++) |
{ |
LCD_printfxy(0,i+1,"%1d.%02d %1d.%02d %1d.%02d %1d.%02d",Motor[i*4].VersionMajor,Motor[i*4].VersionMinor,Motor[i*4+1].VersionMajor,Motor[i*4+1].VersionMinor,Motor[i*4+2].VersionMajor,Motor[i*4+2].VersionMinor,Motor[i*4+3].VersionMajor,Motor[i*4+3].VersionMinor); |
if(4 + i * 4 >= RequiredMotors) break; |
} |
break; |
#endif |
default: |
if(MenuePunkt == MaxMenue) MaxMenue--; |
MenuePunkt = 0; |
break; |
} |
RemoteKeys = 0; |
} |
/tags/V2.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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.06f/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] = EE_Parameter.CamOrientation; |
ToNaviCtrl.Param.Byte[11] = VersionInfo.BL_Firmware; |
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.06f/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.06f/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.06f/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.06f/twimaster.c |
---|
0,0 → 1,487 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + 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, ReadBlSize = 9; |
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; |
Motor[i].RPM = 0; |
Motor[i].reserved1 = 0; |
Motor[i].Voltage = 0; |
Motor[i].SlaveI2cError = 0; |
Motor[i].VersionMajor = 0; |
Motor[i].VersionMinor = 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 = ReadBlSize; // read Current, MaxPwm & Temp (is 3 or 9) |
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, packets; |
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 |
packets = Max_I2C_Packets; |
Max_I2C_Packets = 12; |
I2CTimeout = 100; |
timer = SetDelay(100); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
// prepare the bitmask |
if(!motor) BLConfig_WriteMask = 0x0FFF; // 0 means all -> all motors at once with the same configuration |
else BLConfig_WriteMask = 0x0001<<(motor-1); //only one specific motor |
motor_write = 0; |
motor_read = 0; |
// needs at least MAX_MOTORS loops of 2 ms (12*2ms = 24ms) |
timer = SetDelay(1000); |
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 |
Max_I2C_Packets = packets; |
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(1000); |
while(!(BLFlags & BLFLAG_TX_COMPLETE) && !CheckDelay(timer)); //wait for complete transfer |
// prepare the bitmask |
BLConfig_ReadMask = 0x0001<<(motor-1); |
motor_write = 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.06f/twimaster.h |
---|
0,0 → 1,126 |
#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, ReadBlSize; |
+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) |
+ uint8_t Temperature; // old BL-Ctrl will return a 255 here, the new version the temp. in °C |
+ uint8_t RPM; // Raw value for RPM |
+ uint8_t reserved1; // Voltage (BL3) or mAh (BL2) |
+ uint8_t Voltage; // in 0.1V (BL3 is limited to 255, BL2 is only low-byte) |
+ uint8_t SlaveI2cError; // BL2 & BL3 |
+ uint8_t VersionMajor; // BL2 & BL3 |
+ uint8_t VersionMinor; // BL2 & BL3 |
+ 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.06f/uart.c |
---|
0,0 → 1,874 |
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
// + 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 |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(RxDataLen > 0 && pRxData[0] == 2) GetVersionAnforderung = 2; |
else |
#endif |
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.BL_Firmware = 255; |
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) |
{ |
#if (defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)) |
if(GetVersionAnforderung == 2) // poll version of NC |
{ |
struct str_VersionInfo nc; |
nc.SWMajor = NC_Version.Major; |
nc.SWMinor = NC_Version.Minor; |
nc.SWPatch = NC_Version.Patch; |
nc.HWMajor = NC_Version.Hardware; |
nc.HardwareError[0] = 0xff; |
nc.HardwareError[1] = 0xff; |
nc.ProtoMajor = VersionInfo.ProtoMajor; |
nc.BL_Firmware = VersionInfo.BL_Firmware; |
nc.Flags = VersionInfo.Flags; |
nc.reserved1 = 0; |
SendOutData('V', FC_ADDRESS, 1, (unsigned char *) &nc, sizeof(nc)); |
} |
else |
#endif |
{ |
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, request; |
unsigned char SendRedundantMotor[MAX_MOTORS], i; |
if(!request) { who = (who+1) % RequiredMotors; request = 1;} // nur in jedem 2. Zykus abfragen, weil die Antwort zu lang ist |
else request = 0; |
for(i=0; i<RequiredMotors; i++) |
{ |
if(request) SendRedundantMotor[0] = who+1; |
else SendRedundantMotor[0] = 0; |
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.06f/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 BL_Firmware; |
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.06f/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.06f/user_receiver.h |
---|
0,0 → 1,4 |
// for own implementations |
void User_Receiver_Init(void); |
void User_RX_Parser(unsigned char); |
/tags/V2.06f/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.06f/version.txt |
---|
0,0 → 1,734 |
------- |
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 |
2.06b (05.05.2014) |
- Change for redundant slave: Now the Status of all 8 BLs can be read |
2.06c (10.05.2014) |
- send EE_Parameter.CamOrientation to NC |
- Bugfix: if the CamOrientation was not zero, the direction in load/store Singelpoints were not correct |
2.06d (16.06.2014) |
- Starting with activated Altitudecontrol: Keep setpoint -2m until Gas-Stick rises up |
- Bugfix: Redundant slave: wait at start until BLc are configured |
2.06e (24.06.2014) |
- Bugfix: BL-Config of motors 9-12 was deactivated |
- reading the SW-Version of the BLs |
- Bugfix: Motor 1 sometimes reported "software not compatible" in BL-Settings |
- Transmit all version numbers to KopterTool |
2.06f (21.7.2014) |
- Secure function: Avoid that the Altitude setpoint can be much higher than the actual altitude |
- Use MinGas setting before while "Waiting for takeoff" instead of "AltitudeMinGas". |
/tags/V2.06f |
---|
Property changes: |
Added: tsvn:logminsize |
+8 |
\ No newline at end of property |